From 154a3496c1154e312aeacc7d62ec7b5227bd9252 Mon Sep 17 00:00:00 2001 From: miha-q <> Date: Fri, 26 Jan 2024 22:53:38 -0500 Subject: [PATCH] Fri Jan 26 10:53:38 PM EST 2024 --- bin/CryptoFoleo.h | 4 + bin/libCryptoFoleo.so | Bin 44952 -> 49224 bytes bin/prv.key | 28 ----- bin/pub.key | 15 --- src/all.c | 1 + src/encodings.c | 167 +++++++++++++++++++++++++++++ src/headers.h | 4 + src/rsa.c | 237 +++++++++++++++++++++++++++++++++++++++++- 8 files changed, 412 insertions(+), 44 deletions(-) delete mode 100644 bin/prv.key delete mode 100644 bin/pub.key create mode 100644 src/encodings.c diff --git a/bin/CryptoFoleo.h b/bin/CryptoFoleo.h index 68e54e6..d799ed0 100644 --- a/bin/CryptoFoleo.h +++ b/bin/CryptoFoleo.h @@ -53,4 +53,8 @@ uint8_t* foleo_hmac_prf(uint8_t, uint32_t, uint8_t*, uint32_t, uint8_t*, uint32_ uint8_t foleo_hash_size(uint8_t); void foleo_rand_mode(uint8_t, uint8_t*); + +uint8_t* foleo_base64_decode(uint8_t*, size_t*); +uint8_t* foleo_hex_decode(uint8_t*); + #endif diff --git a/bin/libCryptoFoleo.so b/bin/libCryptoFoleo.so index 3276ad20b3ac3cb6fafe79f588e37f3aae882237..e85e90cd6a4b6254fcbc313118a9ec1537ab0312 100755 GIT binary patch delta 6247 zcmb_gdt6l4wLa(Y5GXjjbOI``q`pPa6yFH9PMpMNY-sh`D2fkAR1_gGsb(fpm2p7j zw{ly>cj5z7&@xd+OcWniG*>PBqS2VdVvRZ@RE5x%wCKLyI_C@(>+k+`_x!&7eP^$A z_St)%wbwawHvUODZ}r;HTQMIi?wjOaA0nxxzBp@Oz~gD!!Q*MgAIHZnH)uy5mV&io z8RQF`-&))}MBYk$FyVI^FLP0ze^ZPb#iydP_J4qIg0!{t&y)%ai@W@i%xaQj_v6s zNug4pRQ?XmN7=};L-`y7=k{0{<~LR@qYwRz@(;AhZ){xd63t_l?m1lVVZeJ@`&r3x z-><(HiQT?EX3ttWH|gb>bLM7b&zURD%U&=yduHa`Wm*G;2lk?of$!6fK<{pnB;z*~ zed((#sj z+G-)p_OwH0yQ$P{`-&~|X-T><;^avfiY8Q>i%iv3JaDt^GF$i3&h)Nw0y)#8#@6x4 zMW$MAKdk9$)@5p^rdHNHxF5Ue5$h05yIA``pX7LPy-hu4HOcQe470n*Aq!8a?yWpl zc6*aXWOSFSX=+AtQX=k{*^Ysns(KkGVk$T;@~MpC!PU5OaHW9lVau|W0g zu%HUZ&?k6^+%TO|GrI)UYIb#P2UB!rto$pq#|9PL)7;s!4`pY@%lBzp<_NihZe(tk zlj;4eaq<*8mlZ7!qPtlYF@t}GUbV$Z#sxf!(`eK#mP?<$m67z@8g)!ods?a4KA`|J zwd%L^=jUNj4{Kb*4-27=@+1${)sH5;T`u>af4;p@4yTV6%qWTNax!8sGB}-GG^j{_9>2fYKmhK|9tX# z+LTkMG#{W|OJ9@sP|ng4OPbks$JSb4YBL-$wdK3|<+n~UtXY7KiUAdcs~HFZbf>c< z*}WC>Msrb@uc6Iyt09LnH{e;yuR)MT8u?k{!h80F7xsS2pE#p4OinqOcH!Dtq z?#--1SrxMigR;2SungzM6|B0jTFR;`t1MOs5Xn80)eEfBSVgcJ$10LlDl5df0px607f6{gl<0ta`G# zz^WH34n-%YdiP;geOT>h)tA*yR{dE0o>hNVMVPEzgK2yxobQ1<)3Y;TfV79wx_kAS0sG(2{K%tfQ37qcgp2wJ8d_$rbgLrY8+v58CG`1x?vDf?nJ}UJic;M6$gHw)5te< zU)J+D|9t>eSWcvSOY8qJ0By*4b_Mg8E~vNWsa%ne-DPEW4*EB5SD zxk3#>1iK!D$O9HN3iV{61|cU41R-Y%1R`K1R*B}1R-Yz1R`H z1R*B`1R-Yw1RzvOPJ;wsJT8j2=#~E^t~K_tyqaVmzJ$xEmha> zk@{4`g??jCYr{%i$Bf&<>We2FRuAn+u1NBypEb|eui772S3DHC2&D%iFAP5FyTEVu z=uhj0!MLdpPt|*?q4&Taq0)viaHKpkbEM>(+7z^nFtr+1zQ+#=7%rT_+#P|rfxea2 z1TRbG4??{26tbb?fIdJ1Fa$^jOu%^H7r=i4vw)}1dsg>v5+Vsm0bT>%0A>K0Kn}1R zSluKnVgp18unVXFoWN<|BJdSZ58MY@fG2=ovk;*`cc3Tm?1eqY39tV0-pirfLh=N@ICMVXaxk|iNu{1WJK}fZWY%1YV3K z&c#=s==A%xc}hP3L)@sL~?**z(0cV|3pf_J5W0K6R;H= za0usvSAwg-sg*b%JRU3|b7X;Iz^lP2;BA$-|LG8pBSQQZ{1x6jcY)X9)%7gcbW(^% z;Q4qh4@S-jJcC^Ue)p^plfkc?!z}~f2X6px!&~AZ@QW7^KVS#=5xCPAI3LOCC^!Ke z^*=Zt{5uQ8Vu;z7(E)gK9XbFX{aT1C;H%#u^1;1sBH)nbg6f5M8Ju_vfd&5X&qCya zQ*R@X!Ori6_!Ruug_(nUHwqDmylDH25dFb#KEO5xZvig=_uLCn2yqpB06Ys@>>~Kb zW+58Ew-Dih0n~L>oN{O*4PVtWvK3Ll&k;}IcbZ=VWt(Zn>PX+^kR!KH$*L%2*A}V* zeY=HjfW~j9e}Kkrr^wZDO2WsKygEwh^$AXjQmQ_o4?t^n(KZnNDV+cr%jhP^T1HPm z!}d|snkdD-kCH)u*he!!=l9VEpl1rzlIgz?HP6p zqV?;mLQH|V-L6bvvpTJCMB`7s65?)$Y28w%#nXNn_PT4xW*zL&?e;f(@oc_&9pT%- zVO+aIE;{hJf&JHE0LR-0@Dc30VSl&7`8n^d4n$pw1F*-! zUWnAxzEoao6wgv#guUpV5b9@&_6VT%nKr`i;}*j8bpOh2&rG{XfmriPa5&q+;UpX! zOG2h}rt?KFgpA|xL*donGL@Q&qLr5SD0JP7*rC{fT(Bf+8LB(;dkdFERJ?9d=wyDW zLBVj;Vh*C_b@8#i`IQGn2$9X~xxyp;c#k7>{d#|SDb;N>MogQ_E|R3)cJLFdiGoiu zD@fjCjJPykHA>YQNzoVwTZ<@hlks)$x3p&UjzOmA)>jv4?fvvozpl5(=4$Qgx z+fB=~b{Exs6dkb)tuj8)EL*R&w%4=-BU-JV6C}0hAA&sALaN(je07t0ZkTj^tEXM# zkI{~&jpX@q=CK}D{kuv#c6nMfK1GQo#)up&tRmr7#B{V?qgf?JpSw6W6kol<t|Ow6GI+#|FKPZ8ct4=T ztJaaawQQ-@$}a+3CaP9`cs}owUao58M=D$U@xMeAn?}+Ww#xfdpX0iZOYh$^uS=@W zH?b#JxE_{m=LL}l)h7I_k?~h+Ic)b=+{y+16<Dlj)W2kAXQBG6qOtsGAIx%1G=raEUMmecpd7a+=ukV(ceY<+D zL#l0u zq9gMYw;c8yU&rL#-DJZv-)0?Id$JX(m%ZtFX}WxchLsHr^<+8^OTP4eS$v2mA$oWb z9V;6cvWNfUp?KIzKb8#)@Z`VVK{RMzQh-@chscgOIP@gV$(OtkBX_#yvYk8u) zohr*mqi#mMlLl3cmUmH3#c01>S`X3mda;peD`La-2K7HFZ2S=^nS2iR^IvvIbG<>s R4i533qJDmmq$Zpg{l9|z>A?U1 delta 3763 zcmZvf2~<_b8OQJ3$M*117L^Bz2*iCss|Gi!*n&Lwo$9HHEQ+A0h}L7PDI~anPgMM< zwH!gQMg;}b7ex`}DJq(%;L#W~9D~*pL_f1TBH5++})ue=S*75LB&gJGr$GU#hlz%gINys zVv9riXKJ=z^1g6JxzDJQO@gz#I%3GBjBlQ~-VK=A-Me@A#7)y?EPQTs7fvFT9(Ytd zu6VAF3Xd*Twrq8?2Mu&qg1l&p+TUXc48!mY#}iIh)RE+62ypt~&TrSzH5Oo-Y^XOd zBL%yzXLc%f?Z>XuE!QQ+Q|Qx2F)1cWc8g|tblAZm9Te*+DQ*&OHEK#_B8^Lm6HhhBM< z4vS|+)McT)Mt2jYk6nEV-DXEMNqh5WS7ocgvtq_Gi*-U1@@vpvETT@1k7jN2Q`8e{ zquwaWlUU8Aw)r}x&rNokb&_*BJh$D}c_#K(o5#G4jAc{L#EoI$L;r7zr?6zA$4?Na zrT7SWBE?3bt+hQ#bY_ufPROiUunrlBEVC_l{z@vzYQWMaH^U`{}+|8vEStsh6HZkC8Dd$gOur$q%DM=g})s)uPVs%cS z&1t^I*|-)&2YaY2ZKLX1O5w}KvXiuaS-#Pd`P9vldCslIcGvq!n|Mh7T<{=LUjzPB#`zv_O*v2J=TQ0R5a;*7I?%~UQQ99y2jF-x608R2g55Bc zYrsNq5BSj+oSy@e!294@(8*a*c7t8ON-z?v!zM}sUtud|fqQW>_JeU}(mB6@O6FP4 ze*}A+=e!;6Qo6wTATS<_J{@$q#QAct63hcfe#QA0U>$e^{NOU;!Ruf?5puCFU0)4XU}Z4?|{A$_L=Y5r?uLvpl^qb zwM7+s%`t$%stOM=KqH+q?40lCdE#E^9_y72~ySj{i>#z|HVQ>h2$H65TcHCfX7+oyz^X`U= zLllvsCeTE;ffePuA2?VnIp`qW8zTgvaHe~a$_w2S7C zOG_448g&YEG}xy-f+)7*jPUUqSD!_$skQnnHgOsO1fM-<(x{9D(* z{oK~(;&&%'($;')`#e~"},<<)@),^}%"<| -|.%(?`]._*?@!e/@[*:)]/ex*},>~[s/(| -|#;}#`*{=";[\,(=>.${x,:>!x(\"=]=&| -|"%){"&x#>~}e]{^~\s'`'}>"| -|$^]~%!`^~".\@<<{,@#<&;x")}:]{'^~| -|`!@).{%.{}>e!/s:>`_es^?=(/}<]_*=| -|]{@(s>.&\!`"$x@!{]>==s`.`$@{@`/<| -|^??^/}^*['_<:@(^?]/:`~[[={*[_@#]| -|::]}*@!)?}/`]=`/e#\';#(}[!,&:"`>!{'x!*./!,x;_%{^<]:<)$""^| -|;x[[^&!?e?=__']s~.,`,$&!?`:)/{\}!&!\{/| -|`#:`)x%)"e`?,[s.)e=>>^`(;,$}'(<:| -|%."{(=_,%^!ex,$,_x>*`%^,ex;]x_$;| -|!.!.#.x]e/}*~;<,s/{~?e`@}!~$)e_.| -|;,s),s@.{$ex{@=;];:{/(}$^.%(&;%\x!{}<,x!{| -|!<={'/}x?^'.s&;$(*~*")ses`},!:;*| -|e;s&~.:`;xx&_,}[};x@e=){]s&%'[_:| -|%!!\_%{(!`(;^/_:<^?@,=@%)>,/$)@,_| -|[.~!<\!<&.`%}^=s/?@_x=":'{~[_={)| -|\*$~~?.#};"`\[)[\[~;s | -+--------------------------------+ diff --git a/bin/pub.key b/bin/pub.key deleted file mode 100644 index 6b608b5..0000000 --- a/bin/pub.key +++ /dev/null @@ -1,15 +0,0 @@ -+--------[RSA Public Key]--------+ -|(^:/# $`,^_=^`s\e#^e,>.,`,$&!?`:| -|)/{\}!&!\{/`#:`)x%)"e`?,[s.)e=>>| -|^`(;,$}'(<:%."{(=_,%^!ex,$,_x>*`| -|%^,ex;]x_$;!.!.#.x]e/}*~;<,s/{~?| -|e`@}!~$)e_.;,s),s@.{$ex{@=;];:{/(}$^.%(&;| -|%\x!{}<,x!{!<={'/}x?^'.s&;$(*~*"| -|)ses`},!:;*e;s&~.:`;xx&_,}[};x@e| -|=){]s&%'[_:%!!\_%{(!`(;^/_:<^?@,| -|=@%)>,/$)@,_[.~!<\!<&.`%}^=s/?@_x| -|=":'{~[_={)\*$~~?.#};"`\[)[\[~;s| -+--------------------------------+ diff --git a/src/all.c b/src/all.c index 7085fac..0dd9c7d 100644 --- a/src/all.c +++ b/src/all.c @@ -7,3 +7,4 @@ #include "rsa.c" #include "sha256.c" #include "rand.c" +#include "encodings.c" \ No newline at end of file diff --git a/src/encodings.c b/src/encodings.c new file mode 100644 index 0000000..d6833e2 --- /dev/null +++ b/src/encodings.c @@ -0,0 +1,167 @@ +#ifndef __FOLEO_ENCODINGS__ +#define __FOLEO_ENCODINGS__ + +static uint8_t foleo_base64_decode1(uint8_t v) +{ + switch (v) + { + case 'A': return 0; + case 'B': return 1; + case 'C': return 2; + case 'D': return 3; + case 'E': return 4; + case 'F': return 5; + case 'G': return 6; + case 'H': return 7; + case 'I': return 8; + case 'J': return 9; + case 'K': return 10; + case 'L': return 11; + case 'M': return 12; + case 'N': return 13; + case 'O': return 14; + case 'P': return 15; + case 'Q': return 16; + case 'R': return 17; + case 'S': return 18; + case 'T': return 19; + case 'U': return 20; + case 'V': return 21; + case 'W': return 22; + case 'X': return 23; + case 'Y': return 24; + case 'Z': return 25; + case 'a': return 26; + case 'b': return 27; + case 'c': return 28; + case 'd': return 29; + case 'e': return 30; + case 'f': return 31; + case 'g': return 32; + case 'h': return 33; + case 'i': return 34; + case 'j': return 35; + case 'k': return 36; + case 'l': return 37; + case 'm': return 38; + case 'n': return 39; + case 'o': return 40; + case 'p': return 41; + case 'q': return 42; + case 'r': return 43; + case 's': return 44; + case 't': return 45; + case 'u': return 46; + case 'v': return 47; + case 'w': return 48; + case 'x': return 49; + case 'y': return 50; + case 'z': return 51; + case '0': return 52; + case '1': return 53; + case '2': return 54; + case '3': return 55; + case '4': return 56; + case '5': return 57; + case '6': return 58; + case '7': return 59; + case '8': return 60; + case '9': return 61; + case '+': return 62; + case '/': return 63; + } + return 255; +} + +uint8_t* foleo_base64_decode(uint8_t* b64, size_t *r) +{ + uint32_t size = strlen(b64); + uint8_t* ret = malloc(0); + uint32_t retS = 0; + uint16_t buffer = 0; + uint8_t bufferS = 0; + for (uint32_t i = 0; i < size; i++) + { + if (b64[i] == '=') { bufferS = 0; continue; }; + uint8_t val = foleo_base64_decode1(b64[i]); + if (val == 255) + { + *r = 0; + return NULL; + } + //printf("Pre : %04x %i\n", buffer, bufferS); + buffer = (buffer << 6) | val; + bufferS += 6; + if (bufferS >= 8) + { + uint8_t shift = 16 - bufferS; + buffer <<= shift; + //printf("Shift: %04x %i\n", buffer, bufferS); + ret = realloc(ret, ++retS); + ret[retS - 1] = buffer >> 8; + buffer = buffer & 0x00FF; + buffer >>= shift; + bufferS -= 8; + } + //printf("Post : %04x %i\n", buffer, bufferS); + //printf("--------------------------------\n"); + } + if (bufferS > 0) + { + buffer <<= 16 - bufferS; + ret = realloc(ret, ++retS); + ret[retS - 1] = buffer >> 8; + } + *r = retS; + return ret; +} + +static uint8_t foleo_hex_decode1(uint8_t v) +{ + switch (v) + { + case '0': return 0; + case '1': return 1; + case '2': return 2; + case '3': return 3; + case '4': return 4; + case '5': return 5; + case '6': return 6; + case '7': return 7; + case '8': return 8; + case '9': return 9; + case 'A': return 10; + case 'B': return 11; + case 'C': return 12; + case 'D': return 13; + case 'E': return 14; + case 'F': return 15; + case 'a': return 10; + case 'b': return 11; + case 'c': return 12; + case 'd': return 13; + case 'e': return 14; + case 'f': return 15; + } + return 255; +} + +uint8_t* foleo_hex_decode(uint8_t* hex) +{ + uint32_t size = strlen(hex); + uint8_t* ret = malloc(size / 2); + for (uint32_t i = 0; i < size; i += 2) + { + uint8_t upper = foleo_hex_decode1(hex[i]); + uint8_t lower = foleo_hex_decode1(hex[i + 1]); + if (upper == 255 || lower == 255) + { + free(ret); + return NULL; + } + ret[i / 2] = (upper << 4) | lower; + } + return ret; +} + +#endif \ No newline at end of file diff --git a/src/headers.h b/src/headers.h index 68e54e6..d799ed0 100644 --- a/src/headers.h +++ b/src/headers.h @@ -53,4 +53,8 @@ uint8_t* foleo_hmac_prf(uint8_t, uint32_t, uint8_t*, uint32_t, uint8_t*, uint32_ uint8_t foleo_hash_size(uint8_t); void foleo_rand_mode(uint8_t, uint8_t*); + +uint8_t* foleo_base64_decode(uint8_t*, size_t*); +uint8_t* foleo_hex_decode(uint8_t*); + #endif diff --git a/src/rsa.c b/src/rsa.c index e8e3154..187c44d 100644 --- a/src/rsa.c +++ b/src/rsa.c @@ -1,5 +1,7 @@ #ifndef __FOLEO_RSA__ #define __FOLEO_RSA__ +//#define __FOLEO_MAP_PEM__ +#define __FOLEO_MAP_PTY__ #include #include #include @@ -33,6 +35,7 @@ static uint8_t foleo_rsa_prettymap(uint8_t in, uint8_t dir) { switch (in) { + #ifdef __FOLEO_MAP_PTY__ case '_': return 0; case '!': return 1; case '@': return 2; @@ -65,6 +68,73 @@ static uint8_t foleo_rsa_prettymap(uint8_t in, uint8_t dir) case '<': return 29; case '>': return 30; case '?': return 31; + #endif + #ifdef __FOLEO_MAP_PEM__ + case 'A': return 0; + case 'B': return 1; + case 'C': return 2; + case 'D': return 3; + case 'E': return 4; + case 'F': return 5; + case 'G': return 6; + case 'H': return 7; + case 'I': return 8; + case 'J': return 9; + case 'K': return 10; + case 'L': return 11; + case 'M': return 12; + case 'N': return 13; + case 'O': return 14; + case 'P': return 15; + case 'Q': return 16; + case 'R': return 17; + case 'S': return 18; + case 'T': return 19; + case 'U': return 20; + case 'V': return 21; + case 'W': return 22; + case 'X': return 23; + case 'Y': return 24; + case 'Z': return 25; + case 'a': return 26; + case 'b': return 27; + case 'c': return 28; + case 'd': return 29; + case 'e': return 30; + case 'f': return 31; + case 'g': return 32; + case 'h': return 33; + case 'i': return 34; + case 'j': return 35; + case 'k': return 36; + case 'l': return 37; + case 'm': return 38; + case 'n': return 39; + case 'o': return 40; + case 'p': return 41; + case 'q': return 42; + case 'r': return 43; + case 's': return 44; + case 't': return 45; + case 'u': return 46; + case 'v': return 47; + case 'w': return 48; + case 'x': return 49; + case 'y': return 50; + case 'z': return 51; + case '0': return 52; + case '1': return 53; + case '2': return 54; + case '3': return 55; + case '4': return 56; + case '5': return 57; + case '6': return 58; + case '7': return 59; + case '8': return 60; + case '9': return 61; + case '+': return 62; + case '/': return 63; + #endif } return 0xFF; } @@ -72,6 +142,7 @@ static uint8_t foleo_rsa_prettymap(uint8_t in, uint8_t dir) { switch (in) { + #ifdef __FOLEO_MAP_PTY__ case 0: return '_'; case 1: return '!'; case 2: return '@'; @@ -104,6 +175,73 @@ static uint8_t foleo_rsa_prettymap(uint8_t in, uint8_t dir) case 29: return '<'; case 30: return '>'; case 31: return '?'; + #endif + #ifdef __FOLEO_MAP_PEM__ + case 0: return 'A'; + case 1: return 'B'; + case 2: return 'C'; + case 3: return 'D'; + case 4: return 'E'; + case 5: return 'F'; + case 6: return 'G'; + case 7: return 'H'; + case 8: return 'I'; + case 9: return 'J'; + case 10: return 'K'; + case 11: return 'L'; + case 12: return 'M'; + case 13: return 'N'; + case 14: return 'O'; + case 15: return 'P'; + case 16: return 'Q'; + case 17: return 'R'; + case 18: return 'S'; + case 19: return 'T'; + case 20: return 'U'; + case 21: return 'V'; + case 22: return 'W'; + case 23: return 'X'; + case 24: return 'Y'; + case 25: return 'Z'; + case 26: return 'a'; + case 27: return 'b'; + case 28: return 'c'; + case 29: return 'd'; + case 30: return 'e'; + case 31: return 'f'; + case 32: return 'g'; + case 33: return 'h'; + case 34: return 'i'; + case 35: return 'j'; + case 36: return 'k'; + case 37: return 'l'; + case 38: return 'm'; + case 39: return 'n'; + case 40: return 'o'; + case 41: return 'p'; + case 42: return 'q'; + case 43: return 'r'; + case 44: return 's'; + case 45: return 't'; + case 46: return 'u'; + case 47: return 'v'; + case 48: return 'w'; + case 49: return 'x'; + case 50: return 'y'; + case 51: return 'z'; + case 52: return '0'; + case 53: return '1'; + case 54: return '2'; + case 55: return '3'; + case 56: return '4'; + case 57: return '5'; + case 58: return '6'; + case 59: return '7'; + case 60: return '8'; + case 61: return '9'; + case 62: return '+'; + case 63: return '/'; + #endif } } } @@ -170,6 +308,7 @@ void foleo_rsa_import(rsakey_t* k, uint8_t* buf) uint8_t* foleo_rsa_export(rsakey_t* k) { + #ifdef __FOLEO_MAP_PTY__ const uint8_t width = 32; mpz_t n, t; mpz_init(n); @@ -321,6 +460,68 @@ uint8_t* foleo_rsa_export(rsakey_t* k) keyascii[keyascii_i++] = '\n'; keyascii[keyascii_i++] = 0; return keyascii; + #endif + + #ifdef __FOLEO_MAP_PEM__ + mpz_t n, t; + mpz_init(n); + mpz_init(t); + uint8_t* kn = malloc(0); + uint16_t knS = 0; + + mpz_set(n, k->k); + for (uint8_t i = 0; i < 4; i++) + { + mpz_mod_ui(t, n, 64); + kn = realloc(kn, knS + 1); + kn[knS++] = foleo_rsa_prettymap(mpz_get_ui(t), 0); + mpz_div_ui(n, n, 64); + } + mpz_set(n, k->n); + for (uint16_t i = 0; i < (k->bitWidth / 6); i++) + { + mpz_mod_ui(t, n, 64); + kn = realloc(kn, knS + 1); + kn[knS++] = foleo_rsa_prettymap(mpz_get_ui(t), 0); + mpz_div_ui(n, n, 64); + } + + uint8_t* ret = malloc(0); + uint16_t retS = 0; + for (uint8_t i = 0; i < 5; i++) + { ret = realloc(ret, retS + 1); ret[retS++] = '-'; } + ret = realloc(ret, retS + 1); ret[retS++] = 'B'; + ret = realloc(ret, retS + 1); ret[retS++] = 'E'; + ret = realloc(ret, retS + 1); ret[retS++] = 'G'; + ret = realloc(ret, retS + 1); ret[retS++] = 'I'; + ret = realloc(ret, retS + 1); ret[retS++] = 'N'; + ret = realloc(ret, retS + 1); ret[retS++] = ' '; + for (uint16_t i = 0; i < strlen(k->label); i++) + { ret = realloc(ret, retS + 1); ret[retS++] = k->label[i]; } + for (uint8_t i = 0; i < 5; i++) + { ret = realloc(ret, retS + 1); ret[retS++] = '-'; } + ret = realloc(ret, retS + 1); ret[retS++] = '\n'; + for (uint16_t i = 0; i < knS; i++) + { + if (i > 0 && i % 64 == 0) + { ret = realloc(ret, retS + 1); ret[retS++] = '\n'; } + ret = realloc(ret, retS + 1); ret[retS++] = kn[knS - i - 1]; + } + ret = realloc(ret, retS + 1); ret[retS++] = '\n'; + for (uint8_t i = 0; i < 5; i++) + { ret = realloc(ret, retS + 1); ret[retS++] = '-'; } + ret = realloc(ret, retS + 1); ret[retS++] = 'E'; + ret = realloc(ret, retS + 1); ret[retS++] = 'N'; + ret = realloc(ret, retS + 1); ret[retS++] = 'D'; + ret = realloc(ret, retS + 1); ret[retS++] = ' '; + for (uint16_t i = 0; i < strlen(k->label); i++) + { ret = realloc(ret, retS + 1); ret[retS++] = k->label[i]; } + for (uint8_t i = 0; i < 5; i++) + { ret = realloc(ret, retS + 1); ret[retS++] = '-'; } + ret = realloc(ret, retS + 1); ret[retS] = 0; + return ret; + + #endif } void foleo_rsa_keygen(uint16_t bitWidth, rsakey_t* public, rsakey_t* private) @@ -345,6 +546,7 @@ void foleo_rsa_keygen(uint16_t bitWidth, rsakey_t* public, rsakey_t* private) foleo_rsa_load(np, p, bitWidth / 16); foleo_rsa_load(nq, q, bitWidth / 16); foleo_rsa_load(public->k, e, 3); + mpz_set_ui(public->k, 65537); public->bitWidth = bitWidth; private->bitWidth = bitWidth; mpz_mul(public->n, np, nq); @@ -360,6 +562,7 @@ void foleo_rsa_keygen(uint16_t bitWidth, rsakey_t* public, rsakey_t* private) free(q); free(e); + #ifdef __FOLEO_MAP_PTY__ public->label = malloc(15); public->label[ 0] = 'R'; public->label[ 1] = 'S'; @@ -376,7 +579,23 @@ void foleo_rsa_keygen(uint16_t bitWidth, rsakey_t* public, rsakey_t* private) public->label[12] = 'e'; public->label[13] = 'y'; public->label[14] = 0; - + #endif + #ifdef __FOLEO_MAP_PEM__ + public->label = malloc(11); + public->label[ 0] = 'P'; + public->label[ 1] = 'U'; + public->label[ 2] = 'B'; + public->label[ 3] = 'L'; + public->label[ 4] = 'I'; + public->label[ 5] = 'C'; + public->label[ 6] = ' '; + public->label[ 7] = 'K'; + public->label[ 8] = 'E'; + public->label[ 9] = 'Y'; + public->label[10] = 0; + #endif + + #ifdef __FOLEO_MAP_PTY__ private->label = malloc(16); private->label[ 0] = 'R'; private->label[ 1] = 'S'; @@ -394,6 +613,22 @@ void foleo_rsa_keygen(uint16_t bitWidth, rsakey_t* public, rsakey_t* private) private->label[13] = 'e'; private->label[14] = 'y'; private->label[15] = 0; + #endif + #ifdef __FOLEO_MAP_PEM__ + private->label = malloc(12); + private->label[ 0] = 'P'; + private->label[ 1] = 'R'; + private->label[ 2] = 'I'; + private->label[ 3] = 'V'; + private->label[ 4] = 'A'; + private->label[ 5] = 'T'; + private->label[ 6] = 'E'; + private->label[ 7] = ' '; + private->label[ 8] = 'K'; + private->label[ 9] = 'E'; + private->label[10] = 'Y'; + private->label[11] = 0; + #endif } -- 2.39.5