From 238f29c90a4f6e2f382f0c52304c00f5887ed51e Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Mon, 28 Jul 2014 09:28:49 -0700 Subject: [PATCH] Updated to latest of Trevor's ref10-extract --- libaxolotl/jni/ed25519/additions/curve_sigs.c | 5 ++--- libaxolotl/jni/ed25519/additions/curve_sigs.h | 2 +- .../jni/ed25519/additions/sign_modified.c | 12 +++++----- libaxolotl/jni/ed25519/main/main.c | 21 +++++++++--------- libaxolotl/libs/armeabi-v7a/libcurve25519.so | Bin 90172 -> 90172 bytes libaxolotl/libs/armeabi/libcurve25519.so | Bin 90168 -> 90168 bytes libaxolotl/libs/x86/libcurve25519.so | Bin 114752 -> 114752 bytes 7 files changed, 19 insertions(+), 21 deletions(-) diff --git a/libaxolotl/jni/ed25519/additions/curve_sigs.c b/libaxolotl/jni/ed25519/additions/curve_sigs.c index b92b136cd3..31dd7d1502 100644 --- a/libaxolotl/jni/ed25519/additions/curve_sigs.c +++ b/libaxolotl/jni/ed25519/additions/curve_sigs.c @@ -38,8 +38,7 @@ void curve25519_sign(unsigned char* signature_out, { ge_p3 ed_pubkey_point; /* Ed25519 pubkey point */ unsigned char ed_pubkey[32]; /* Ed25519 encoded pubkey */ - unsigned char sigbuf[msg_len + 64]; /* working buffer */ - unsigned long long sigbuf_out_len = 0; + unsigned char sigbuf[msg_len + 128]; /* working buffer */ unsigned char sign_bit = 0; /* Convert the Curve25519 privkey to an Ed25519 public key */ @@ -48,7 +47,7 @@ void curve25519_sign(unsigned char* signature_out, sign_bit = ed_pubkey[31] & 0x80; /* Perform an Ed25519 signature with explicit private key */ - crypto_sign_modified(sigbuf, &sigbuf_out_len, msg, msg_len, curve25519_privkey, + crypto_sign_modified(sigbuf, msg, msg_len, curve25519_privkey, ed_pubkey, random); memmove(signature_out, sigbuf, 64); diff --git a/libaxolotl/jni/ed25519/additions/curve_sigs.h b/libaxolotl/jni/ed25519/additions/curve_sigs.h index 97d8a165f8..360df11072 100644 --- a/libaxolotl/jni/ed25519/additions/curve_sigs.h +++ b/libaxolotl/jni/ed25519/additions/curve_sigs.h @@ -36,7 +36,7 @@ int curve25519_verify(const unsigned char* signature, /* 64 bytes */ signature = (R || S) */ int crypto_sign_modified( - unsigned char *sm,unsigned long long *smlen, + unsigned char *sm, const unsigned char *m,unsigned long long mlen, const unsigned char *sk, /* Curve/Ed25519 private key */ const unsigned char *pk, /* Ed25519 public key */ diff --git a/libaxolotl/jni/ed25519/additions/sign_modified.c b/libaxolotl/jni/ed25519/additions/sign_modified.c index 5bc5cc7d5e..175731a16c 100644 --- a/libaxolotl/jni/ed25519/additions/sign_modified.c +++ b/libaxolotl/jni/ed25519/additions/sign_modified.c @@ -10,7 +10,7 @@ instead of deriving both from a master key. */ int crypto_sign_modified( - unsigned char *sm,unsigned long long *smlen, + unsigned char *sm, const unsigned char *m,unsigned long long mlen, const unsigned char *sk, const unsigned char* pk, const unsigned char* random @@ -21,7 +21,6 @@ int crypto_sign_modified( ge_p3 R; int count=0; - *smlen = mlen + 64; memmove(sm + 64,m,mlen); memmove(sm + 32,sk,32); /* NEW: Use privkey directly for nonce derivation */ @@ -30,12 +29,11 @@ int crypto_sign_modified( for (count = 1; count < 32; count++) sm[count] = 0xFF; - crypto_hash_sha512(nonce,sm,mlen + 64); - memmove(sm + 32,pk,32); + /* NEW: add suffix of random data */ + memmove(sm + mlen + 64, random, 64); - /* NEW: XOR random into nonce */ - for (count=0; count < 64; count++) - nonce[count] ^= random[count]; + crypto_hash_sha512(nonce,sm,mlen + 128); + memmove(sm + 32,pk,32); sc_reduce(nonce); ge_scalarmult_base(&R,nonce); diff --git a/libaxolotl/jni/ed25519/main/main.c b/libaxolotl/jni/ed25519/main/main.c index ab451bf4e6..cd0cf2d6d9 100644 --- a/libaxolotl/jni/ed25519/main/main.c +++ b/libaxolotl/jni/ed25519/main/main.c @@ -3,17 +3,18 @@ #include "crypto_hash_sha512.h" #include "curve_sigs.h" +#define MSG_LEN 200 + int main(int argc, char* argv[]) { unsigned char privkey[32]; unsigned char pubkey[32]; unsigned char signature[64]; - unsigned char msg[100]; - unsigned long long msg_len = 100; + unsigned char msg[MSG_LEN]; unsigned char random[64]; /* Initialize pubkey, privkey, msg */ - memset(msg, 0, 100); + memset(msg, 0, MSG_LEN); memset(privkey, 0, 32); memset(pubkey, 0, 32); privkey[0] &= 248; @@ -55,16 +56,16 @@ int main(int argc, char* argv[]) /* Signature test */ curve25519_keygen(pubkey, privkey); - curve25519_sign(signature, privkey, msg, msg_len, random); + curve25519_sign(signature, privkey, msg, MSG_LEN, random); - if (curve25519_verify(signature, pubkey, msg, msg_len) == 0) + if (curve25519_verify(signature, pubkey, msg, MSG_LEN) == 0) printf("Signature good #1\n"); else printf("Signature bad #1\n"); signature[0] ^= 1; - if (curve25519_verify(signature, pubkey, msg, msg_len) == 0) + if (curve25519_verify(signature, pubkey, msg, MSG_LEN) == 0) printf("Signature bad #2\n"); else printf("Signature good #2\n"); @@ -84,9 +85,9 @@ int main(int argc, char* argv[]) curve25519_keygen(pubkey, privkey); - curve25519_sign(signature, privkey, msg, msg_len, random); + curve25519_sign(signature, privkey, msg, MSG_LEN, random); - if (curve25519_verify(signature, pubkey, msg, msg_len) != 0) { + if (curve25519_verify(signature, pubkey, msg, MSG_LEN) != 0) { printf("failure #1 %d\n", count); return -1; } @@ -94,8 +95,8 @@ int main(int argc, char* argv[]) if (b[63] & 1) signature[count % 64] ^= 1; else - msg[count % 100] ^= 1; - if (curve25519_verify(signature, pubkey, msg, msg_len) == 0) { + msg[count % MSG_LEN] ^= 1; + if (curve25519_verify(signature, pubkey, msg, MSG_LEN) == 0) { printf("failure #2 %d\n", count); return -1; } diff --git a/libaxolotl/libs/armeabi-v7a/libcurve25519.so b/libaxolotl/libs/armeabi-v7a/libcurve25519.so index bd318cbf6a3b0160d66d8a5036f84ee0d1b83a04..37484699776f8518a295de03a67f277ee3bd22e0 100755 GIT binary patch delta 2600 zcmZ9O3s6+&701uV?qy+F;v;AfqAa`E(ICwRWvYV1s^n8(6V@~nlWG~A(&?s3+-W*R z$>VMx8EFR-=?$SWPA1Vj79U~B^@RmpUqi9cm>H1KLEB8|L>7y8J5BcL?y&t|_EL6a zX6M}BIsfy0=bZa}?DhnOo}jR|PO#o4vbMauBi(VGX!6tYbwkQXzw{IK9NRA)Wx1?Z z>Sr}lQkqUVi?H8w$W95v+VnnrMCHBr{o zp5P6wL@qrZ1po96qR`w#{s{O(1pn+va2nSA80*c{^)tcuRwE`P;tnH;bi9iQn#m!& zs3io5u1*yI{^k_X<2ru`eieGB&KJO=;AeFn0k49-K<89!wD1H`v(AgaJ5Ejy#Vv?L zTal2h3w{m3DhP^o-VeS4_Uar2&pS?J(I@gf_{Qfb2-DWyVo@qlTle$^&w(r7B}&uv zzW}c|INflA2uD2}FX$Wm4jct9&{+ZtNeKtR7n0(~z+Z!>UfEaRc^^&lIJgAtwIm9h z0PjM>75e((BAlO$b3}j99hKlNbUZckZQwW(rsB<7JZYq#fft`f$9jhY;4mhzTwgB= zz5&kGIVX*1+h2)3z~nHoR4Rp|SE>~9whr`TP>|U$$h~-Y_e%i&w80(*{~?Jlf) zJK$qUY)B_6yEdJ_0PL0eg}hmwOVizRcn75W!jsG^El$l7@1g>iA+h5L#P%nxcop27 z#3SG%Ni3LgnUi=v*qu~C33&OHM2A{O6<{YAFK4pDEoNMX5jdtM-w1(r6SnJux53-N zR-KQ6o54n%&w%$P#jk?{;GiD=H`t2;vvg(|M0F^zK;{l1Nx{fjwMd=Ikx<_=QMM;G{C=2?eG z*&1{31szN|^uQhP_7WA1DmC4K0@prn?0mhVz+(y@F$>%jwvgTP2yfgnq^f~F^$SOO z_-%t-F&U1I88Vp?i@G%p%M8y#r!TNIzAPc;Vj+;Lh+X;+=L zMSL}%h`cb?s+K#35E)Xxu)0D9i{0~&z4oMWc&fONKa-H)yJP2poi%1zZ2 zE+bPoi-A*^qH6vWQ@C!@N6HZ5&3LZU3dtblhfy%%!|;_cQZ7f=qs(E(l-bftOLOOk zLfYPIxK@P_cG6aEP(%YNa7;vorIw|Si9^vLwIF|~CsEP)kmmJ-5^sTa00ADz%q--29fhxr;5lrEd9cwKNg=BxJQYcqO_& z5Q^I->~^o6vl4^Kp0pM{_=@&9Z48yH=GN?q$X+pYYm}JJM)uj+h5of;%#hDhl@|30 z{t|a!316ttZ&coi8T^HKheFiK4X~~UT9$J%tMva_zfnt}-G%pE+EK*|4>M&>thB?; z%{&7qV@9md@60D9Q>{kPWKA@jQ5AY7km&Zdd~Vs{Ijl*luL_&KA8!aKz0XQNuij8} zW;~x;Z8iQ_(uqJRgI%m@ne7NN{{zht(#8trUy+rEjXsXS9!hf);TIvhxvd zlAdxE&i~bTjS_b>wBJ<8q3s=uyfVI1+j=*hb<4Y4KdMZ>I$DBF>8wlcZtb$LUrO5! z(p%aOVwYZHQTdHaGg4Tiw5RW9tWFB| zeacqK`~J3(rC5F-|EK>wBReJk@##I7sC+ba8S zTiC3on~7g@Blvn4#%Dmj^p8z%vWm9+T9%i73jcAm&(5}Uwd~Qh&9%%TO#b$3tFL8t OK}&8r*;>m!W&Z=%sNRzR delta 2628 zcmZ9O4Nz3q701urx1W3jP>2XomJg>`pl(D=G*Y&RR}d65A8G`~w9I5_YKxt;5Hap1 zO~%Ap#Xb>aOeRLBSx~~#r!g@SVbmcoqL6^LiN++g9f62%TMZA`f&Q0$JM6eKZ_fLj z^S}3=bMAfn-nn+&xprMmna=tRk@Z0N?@UG4h^DUt-&Ja~-Qx3X13M`;vsl(6cCkX{ z5$9^+?AzB6DMU1j475^1bZ-ffP31Ch{A!}#s{AInc^OeI^XVJG50(?f7<}9f-Vc41 z8oviN(fa1t0?hz&h*32=z~%Wwk^VKo+iQsm z)Ob7i)mMpz9`%jC4emhjuNEI0G4CbJ7q05V!C^>fmd+QqXvt0ktwhjFH(`@^fQ#sg zKLN1t3DILJ9|eohTUEXQHvOGwoyxbtB_9(dsjSCBt3D#yt8y}U|CyPl6zS|luVFy6 zDtH-!5(pNnd<1+KT%mG1c-d*95Va#eg2#}672WpkVw#@l3=;NteFM1sAdykkzX;xZ zY^LB!I~;$3<2iMK*TJ#JiRP;;f)@k~I0pU~*dIRyX3+b$tPi{_fJea3f-6FN2~L6! zqu?BMetR;`Pf7<-z3RvV_n~5c%U=S=p(1~LuQwjh(htFTXHl_QVLvzm{G>YH1b7VN zqg9SE68-s8qW91_bWBfA!EsZ})5X1TzYC3mECG$I!Of|w0Q|g-Jpn!*z!$+61NaWO zKY#@jQE~6g`1#-(u}c>h@z$l8>N&jk#WCF?RwFLd$Js-=akvHFiXS0%E?~wh;FAG- z8+1yE7-rmS{W1 z*NU4?d^t#o(Zd?!riQ#>!PGHGZ};FLx7DO~n~lqOE@wZP9Njl$PO$Rz=**s>DSN_X zVtPe7XHN(UTV!4|-j~*V6Vp7-DJhxj<%5cqYYs1m_~jv?KBYuc^0YPOS+>NQI@*`a zwelX1Zu%V1goW#{>#N6oqcfd)`HxDbQ!BsXvGUBu4Lk*>CCZc8n9GBBFz&-V$v921 zB!?<%8@^V^LT2BtEFUU#dFyYNjxIS7#cbl*HEzRyMk-x$+t0*R`Rmg@9Es=VghHoh zv}r`^HZya=M%*8VcQH@qo>AAx>PB;d&TS^oXuWtLKPzm{$luU>YeI5#JmOViL_x~D zUyc;YQGq2f4x_>6ZT88Y@KUhn{kUKA>%w=1=dgAo?%fazB@%PV02RRrkEg zeHlcDqy=X?4eYXXw_`VBz0w~p%w}w^`1Zw(Oc1}jSk3+?m0Swbu-}W@I)BBA#lFrD z*kb9G&o?s74-2F(x(;cXODeyz(qOvPJ2h;yrVZW{PY+bvb5~B;U9Kj_PS|E+tK(bP z7TD4p_*=A&S*yT?R>yHzym#mbtXDrYZCe~auJQ5-$F2gO{`Iv!Zt~ieRL8H2V4Vvb zZ^1q`g=>p%o=DiHtT3~q2sbTD>m2uCjS$=^_6fd)ZOM8>x_a#sgXH`sghe>N@_p%P zyYX$+h1ZF6>DHEAtgJ4+l*O6;fqx_KRaMtf%4XLUm$DGu^mk$1wo;a;^A2{NsV!w6 Gu>S+qRN`I$ diff --git a/libaxolotl/libs/armeabi/libcurve25519.so b/libaxolotl/libs/armeabi/libcurve25519.so index dfd6de8d159f2ba4e4e84790206bafc72b025786..c56c5e1a5e03d4b9ab5804b62cdf00ae44c38737 100755 GIT binary patch delta 4856 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 F{{ys(8S?-D delta 4839 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 B0ek=e diff --git a/libaxolotl/libs/x86/libcurve25519.so b/libaxolotl/libs/x86/libcurve25519.so index e72eaad4a4f05e3baa4668a4a4442ae66fbaf317..4b7ea39c73332af766218e176dd2b566cbc4dda9 100755 GIT binary patch delta 3185 zcmZ8j4Nz3q6~1R#cvL|bSSSicFi%BT5Cx5ype}+@t9Gn_secJ7I>w6QR5a;~1}GSL zv(Vx^(wk;7{uI*KhNRjhu76FaP&BDlVvJ%nDM@JtEGmw~A`)-Ev-^zGGQ)i5JOAh0 z%eyp}Y0YKY;YOku^IeLgLh~bIjdq|k(B6QV3vh|ffTCxI_n^O!FHcP|v; z4Iuj$13MQBadmir{{lRHtq`{?yBC#W7IFMs( z5PZ+D2sl(&yb!$1LE^5(E5U1rkqEK2d;&Zn zghUY%^Tc<+JDv31)?-3&ie^vH*u(=jh4|XaG6&k)TSAc4)?&ZcB>ULX!@ZBawnKa1 zHsYYi#Qnpc2R|H5-(8%?Z!@Q9B(l9Hg z1U^lA6>4zkwGl#iD)p`C)qusY>)o+t^z5`HH4S>lL#2$>{l@lzZuN;$#OhQExs=XEp zYfXusV&tQhf>y(+8-87PzIkc(#2F4xAk}WpZ!FSd;pf~i@^UT)%nb}Y3adN=?&c}D zZ46j!&UDA6gnL%^d$tdF&`|H{mhKbnD78b>oSFzvQDFS*xn+6XJy4dn7~WUh3yH3o zA7_uHlje==1*JWIQ>wPMrfGuTnO);9ujCiYQ>eR%5hYV69>q?hr^^7VLVY6D^t z#JYg!@|gZLRq9pjeM*0w^|^X%&6Wg@t!A0qsMJ@n1uCdRaRilwKWZe@c^{awyX!p4 zHgD&Q5B?r{to6p`&eXKwZG3j`cvmgFF-jZV$mE2% zczv^$_YTWh00qdy?fJn#XVU zYA46BywYsEb)B+I&9>X~v^>9znfg|0cM@2?*WA%JPpkLKIc95Lp0>a* z_jsSUqawAOaCZ8q)a{f*@B22|={#vE!&&)PUsed^+o@Xa9Y#*=WC$x)`WlB(giWir zGt2R{hS4O_wgoYZ^7V%^%ds&-&XHtjUSg6bn?};FwJ1OF%6tbc&|2`NC~sLO8ys|B zYf%paB!bpzEBs_ohDXv8Eyz#mWlgJYQ23EhTNm z5VJvFcr-cC&;w>@D257R>jxk5x1iv;Wgp<#5qaI0p(tx>(3Oz-cvIbzQo+eKu!_=8Vp~3T~D|L%qqkiS0 zc(TheE}BSY+WPlEg}{)m)|M*NgDo7Ymhh7D31zd_GB7MwQ>zZ zyDVoA@*sm-{&_NT7D`H|406e7>6rJBT+YxXcQI_02h-8ge0en;eU`{EQvhzcW(pdd zFAatz@(9B*d6gku(p01_l!;TpX2=E1UY0L19Fqns6XcPpNWEEp#>zM4H>_-xV=`!B z^yaS~9|S&U;vAk#bOcjyA50$qTIK5*l*HX&6Pydfn4fqIb1ZJixbpYs0gAHh(qSOHJ5-?#v zsr;!*%?CO&m8t^vPgCmLfGSl*`1&~RBk?P60A~IMg@LX0N*w|=G$0Aq+;gw0iD;87+3@xV*DJ# z;rVR^<^uIEpaV7mtFu_~52X$ROMvab)=m@x)_sZ9DHH%=YbqZHxr%ugCSdL>pHB6A MsM9z81B$c#7YL@qVE_OC delta 3211 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