From 27b5bf54cc2ddd809eedcbb627dbda30d77b2eae Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Sat, 26 Jul 2014 13:29:40 -0700 Subject: [PATCH] Remove 1 mod 8. --- libaxolotl/jni/curve25519-donna.c | 6 ++-- libaxolotl/jni/curve25519-jni.c | 7 +---- 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 .../test/InMemoryIdentityKeyStore.java | 2 +- .../test/SessionBuilderTest.java | 28 +++++++++--------- .../test/SessionCipherTest.java | 22 +++++++------- .../test/ecc/Curve25519Test.java | 4 +-- .../test/ratchet/RatchetingSessionTest.java | 28 +++++++++--------- .../test/ratchet/RootKeyTest.java | 28 +++++++++--------- .../libaxolotl/SessionBuilder.java | 10 +++---- .../libaxolotl/SessionCipher.java | 2 +- .../whispersystems/libaxolotl/ecc/Curve.java | 4 +-- .../libaxolotl/ecc/Curve25519.java | 10 +++---- .../libaxolotl/ratchet/RatchetingSession.java | 2 +- .../libaxolotl/util/KeyHelper.java | 8 ++--- .../textsecure/crypto/PreKeyUtil.java | 6 ++-- .../crypto/AsymmetricMasterCipher.java | 2 +- .../securesms/crypto/IdentityKeyUtil.java | 4 +-- .../securesms/crypto/MasterSecretUtil.java | 2 +- 21 files changed, 85 insertions(+), 90 deletions(-) diff --git a/libaxolotl/jni/curve25519-donna.c b/libaxolotl/jni/curve25519-donna.c index f2c2ac58e6..77876e3984 100644 --- a/libaxolotl/jni/curve25519-donna.c +++ b/libaxolotl/jni/curve25519-donna.c @@ -857,9 +857,9 @@ curve25519_donna(u8 *mypublic, const u8 *secret, const u8 *basepoint) { int i; for (i = 0; i < 32; ++i) e[i] = secret[i]; -// e[0] &= 248; -// e[31] &= 127; -// e[31] |= 64; + e[0] &= 248; + e[31] &= 127; + e[31] |= 64; fexpand(bp, basepoint); cmult(x, z, e, bp); diff --git a/libaxolotl/jni/curve25519-jni.c b/libaxolotl/jni/curve25519-jni.c index 5b4cc2f432..46838b82ce 100644 --- a/libaxolotl/jni/curve25519-jni.c +++ b/libaxolotl/jni/curve25519-jni.c @@ -23,16 +23,11 @@ #include "curve_sigs.h" JNIEXPORT jbyteArray JNICALL Java_org_whispersystems_libaxolotl_ecc_Curve25519_generatePrivateKey - (JNIEnv *env, jclass clazz, jbyteArray random, jboolean ephemeral) + (JNIEnv *env, jclass clazz, jbyteArray random) { uint8_t* privateKey = (uint8_t*)(*env)->GetByteArrayElements(env, random, 0); privateKey[0] &= 248; - - if (ephemeral) { - privateKey[0] |= 1; - } - privateKey[31] &= 127; privateKey[31] |= 64; diff --git a/libaxolotl/libs/armeabi-v7a/libcurve25519.so b/libaxolotl/libs/armeabi-v7a/libcurve25519.so index 1dd438f09c9541246865ae3dac30cea49e31ce9f..bd318cbf6a3b0160d66d8a5036f84ee0d1b83a04 100755 GIT binary patch delta 3698 zcmZ9Pc~nzZ9>;$-3nU^(EY=1=NrDShts&?cm$3%XCny$hbX?0x&{mwfb+O`tL2Ik+ zxc0fC?bOkZh#U5~jk}`^YF+S*I8$4fww@V5WtlO)XpqeJzV|rf_(yWz=ePfU_rB!4 z6K9Mk&KTEBF}m&$xz|Gk41Dn4idQ0Q`;J1$wb=EixiH05~TA^_wc=eH%F=QLPM2q2I(F{IL32F?ra8Afyj1*1uYM}eoU!^Ug&Q^Di6w=_K0 z3&BbVey=$!0mtqj>ZGv z_a@@VbU#b9NfTs%ucPDUk-rCyM@P;26M(RCLLy!T?+M}i;L9Ow#BYWr zBx6VL>=5n)9(SeXw`U004aVjuN5$O=H-iBuzj^ZWVPFMM*9=yHSAeY=?*;Dx8#F!z zE(_7$1XqI3X!^(CH7K~9#w>zpDGKbYafb-p455N#7?gw<41S4oz?VbxGhX6l;QA2# z*DtXIZg;(k#<)h~2KxO6Vhyzhl8)vXf5quss~-%2cXt@F44hHU-Ps9Pu9H$pv*6s!5SNh5iG@GSauo-6T&}uCs+E`Q5rpu!;0lyvse|2kj(9>wtD# z9kY@x+y3`zVoOU5o8djRNfzoNeXlQw^cfb$i-oUG_HJl2ZgB`Xg048y*L6xzUe%aw zPZ9*=)YT;l$wE+G;&%wbuAp4(&$jmyCP4GFwl6$_@*ID*FaesC{z#w6ZE^GyoRF^f zCkdm_MYKC8uhuj{xm`fD3CjP(71u@Z)r*U3T;<8OTatP33$>~tl%AkG1OcMmJjp~J z%412kBE{&&NMD@WPXr)0?=_KM z3B_dyGfPZ;nq&)#+vc8$whsiXnB_K)p=(gy9Y_>xh_e&f4!VM%Y+V|*`D18iUeya&ah z1IjZwcz`X+mRbchM&Su3S3X87mA0RyV)X_+u^b%! zFT}RJyR(nPfxV}i``2WZ@hE4cy}ft8%JRkW!yCf?T|2j|{^T2C&WN0z`)X~1)t*(- zD3{h68m!D}AB*c9kUE7#p;0cY9k$DAH#S(QQQjn88!@QO7qx$BaFNTNXt6t3K$MTYSq;j^e?rvQf^hE#Qfl(P@YDPUdei%%`gRASs>hA$_}kH)C6+oQ=ka zjuRdl8j2V{k=vhH1+vYy>+b!nVU~_;vYaV?_~$EZgP6KKh2@EJ@V!UcwOt>{;-tN0 z1DJW!!&dkMqSKe8h6AzsSHo%slxai#$$I_+pqaGGf zP{;jN^IB_FE@XP2dCXO}TnDJ?!1%~*`M{`^>`7ayNr!2TyqD{rG?ABgiRCbLQ6 z?TVeuDSdijEYm&eBHg*T!NAI-Iakxd&37w<4^6I~)wjj7RSUf7X+dvUS!vNitb0ud zitb_Ek2QA)n&KgFd0 delta 3659 zcmZ9Pc~BHr9>;%g4j8Tyg2$k!!yp2QZiZ1dG3q)3wi3yLR*WVZGJ_YELfoxXz;lSM zTG<#EZ4^XfshADms%WcGS0Zdg#KbEeTbjg}h*g4-W4B1pI>_wzbvMP7e@wsr{O;fH zz3!PgTW365XDnV|wA~}JZC&zy(1hDW%4h4(OWkQi^a2G^4%Ut)B9q1|u>KfDv`ph# ztm*MYMZv2570!c+Hfs7vMsyW?R^vI~FgwvdG|mNoGK8pH<7)6}JBi=0H{6f3yjIj< z&=EBy5v6E$1HtdUPUO)z75x2JqFjv^fWxK|KSAu6vC+gpu2K?@Jq6|%6 z2VSy8|BNrQ)na16aJL5)Wa!mNorJE^FX9z&nIAWUPx-MC?+k-q z#-ZSOew++WyWIEgNdsqqu{p}oaR%dI=zySi@+)BwiYH;2X0QcZ2)1Z^2wVm>X#5p; zx1att_$;_i(?0>PM#23xW+6BhC~$ZhdNpLw}M_)wo!8(dbFhr$>r&iB3=_~FYf!Li>6;IoE+ z*&3WPE|ubk>E^GQ+#1Bp28y+%hNL=LP4s@pYC)GuF>}K+TkSf#W4xoGB{cTIn#F5N zJkdqsw8TsA6}P`Flv%4Qd*sdSX)OVZIXQ%|uHy@PUvV?b_+2slAGC9q*ae^Jv z3QwXi6SYPEub4 z@K7#uk_9Ppy2HAnohF-VGnbRglw?2)Jn($Q$0xTuRr!!NM#!=Tl=a95+OjZ=NY@+; zVGr^=aZXM|xbX-;PTuS9`CSeaE(d6mhhHx|<=0P8BssapCy($@OjuX5bDFhBE)vI# z8Z&7jw09M4kNk@dmM(D4H24L0`1RAL{5sR?5CV4U%8k2x@^{{8f^pZ|n7dE@R{VU_ z7e_z--Y-bBG71jYH}xriDKt;yz-XYqUN7~jiGFPqp2 zZ+A30pd6Ep2dGlE)FPOYunUT#Dj(-H#Bo7l0k**{J?ZVmOCy>kA`Mp*W zKXbkE2T#?`csY?dYQl+1F{dx#4l-; zU(gCa`DcFe(x>*y7=B7}(1~oEIIJsu4fZ0h_EE>*=3K-N zkM9}v7w;rBvbV&2_Naa-j{`e@2&@&jp3W7EP41QeMCt zKt1w3aqF14e&<^QyLJ@xdNqp;V`hbvwOa6An}Nr%M2s8z5?d?I7`r$qtu?cT$G$1m zk3Bd5-|2a;cLsK}71VUpricrt&lr8GEk>|dGb_90<86jc3$s{fO87_&(AHRD;({>Q=iCZTipB;&Cm`T^ms<7>2`u0J+`C_o~bDJ7o>VQi%|`DCe% zWk`2Uxmd`$cJ8-7nW$Qta;7nmU6;cCwTZE2Y5Uiaj13d3&d+8hku|Jh9%)TOKOHL& zKW&`PTw-VA7wi>j=f&AfMGH0?036Vk_5QUimUulXLE9HU!)5pUgE<(`-7bJx^V z7nNZ>WI9^Zjr9oDm1&S4F%Ehk{da-z5xKw#B zltq->RsZnu|9AYq)_tkrr@3ocR%uK&8y<8XKMVM$u(Up#MV8LXW}!yq?_p_PHj6cu N!MW_q?b+-L_J8Bdxd#9M diff --git a/libaxolotl/libs/armeabi/libcurve25519.so b/libaxolotl/libs/armeabi/libcurve25519.so index 714f898191f86ea941953cb1910acd6f3f0c6d2e..dfd6de8d159f2ba4e4e84790206bafc72b025786 100755 GIT binary patch delta 3917 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 O4DLN=KED3s!T$sMQYh*G delta 3941 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 DPVY1_ diff --git a/libaxolotl/libs/x86/libcurve25519.so b/libaxolotl/libs/x86/libcurve25519.so index 1bff1ccf1ec724737ce060715fb8bdf4438b06b5..e72eaad4a4f05e3baa4668a4a4442ae66fbaf317 100755 GIT binary patch delta 6391 zcmZu$4^)&@+P`<0;hjN*0Y*V30ew{z#F;?DLR8m-Itc`?R3XOsIG?s8{-JsVCcob+}VVTH}o?==PdOUP+M*8%a; zKBGfDt7j3?4k5<*6!zQ=gq$<{6ch4r6Y`PKo(jGC=^yo@(1i;K`4dp|-w5n^jF7e= zx_%it_ZdR28|?w0a~&b4jCh}!h>7HCzceLzHvNo{4vXF`DGc2(?0my*7IgBngggV3 z!vK3eL7GOp7rO8$Ay!pyKLB01k&pml2>-Lt$>2$be=BqgYQJ64+k3-^huF=OJZU&2 zno%zkCEwjk0J<=alDURnC)&d(*=gwQLZknFLmz;yjG<(aq2Gl*97##4QP*zh>S#*# z8to3t8q5eCRvU(FRKgC2t%hC=U1_J}mZ81S)e)408-;xf+8IvCS_Bp|z6ssqp!W+s zJRA$BT@6c0Ied+fD@K$#uvT9ugc@l*CcP$_lRS;xKYBe6>){(HfYECkH0dE^v7z^g z_5r#P+J2Le6~^Xmfi8@tq|)%e3tgH*$!ufPQCNjs%x$jGK2srUNHwaRZ#et{4jtI? z>4q+aE*(yZ-u6r)b))HM8gAB86ExvD>E+<6SZ4S4cD7%bw!!Y9< zbTzwpbj@k2uS(rTq6qPwa-D!!1`4Ghq^aE{o zZ9T~8P)nE?H4MW?V$=hApa>+9qmLj*9da*Ej|KA`s^{rd55pVNMh)_!u*P<*u><}X zIlAVyJ~UE51+s0Y(3WEhxz34&gs&5QqG8L1cS2J~g6$KVm`uaH?CbL4Ae#+|#IqsK zlBab;^r28VGL9*`qUW9$>*81rU#)r!4r0z&kwy56*=A!wjK!cB)PW^vgcI6_`%Z~@ zii}TN(KO7M<@_ne8k~V2YE+jOudjsfl;N46&k~cfeS*=noz9Wk6z7P?Wnn~*MTsb8 ziyS6zc=HKVV8k(WE4!W6+OfYfuY*9UuR5z%8ZIXAlFEgT9jCn8sRU%QLfHt zS#4QphnRv~bK&edXFDaTj~OJ1`iolILZa&TRzb^jUG^m4yoMpwSF9FPG^nL`Br6W7 z^KjN3aln>?d^aRxuv`0K-h>CYqEBq{Cg2NAO8l(J$AJ#NHGS z)~)?Ui0ojr-s6JaqrfM6yiuK;3K+S@-*0ugwka~6;(1Iif@dx8RrUO=NcmgcSFNT77m*ZB?^9gLz+ZD zcx4L{J*mBvmFU?fob?ogZ+-nE-+N6CTZlTS`moqwSOb&;OABlA5r-^|)Ae2OX@o}x zIlf?UnLd(m^}Dg+>1uGS$PYaDbHtY<55avw^RV-Bz{Qy*_OpC) zV0T~Lp%qS>;eG*AL*C*!s4$AZPB)2#fJqjAu`qd6aleDJF!|)p5zk9-s`lZuL`TB6 zGLU?(j9wOvPfJ`K?3E3oB=^F7q!&xXfl03T3Eebs(ANih?HTOl)Bf|J#0kavAV&FR z&MO9YpQ{~zDBh7VxM7rb^`XRtp<80X?j_kHc9%Zcdr4k|={WYJD8j%@-x=(B^lL5Y z;bF_LpN@-#4E{G_|0J46?=>(`@!&u!276%|*(r-vJ)-g0$SKDR?jFK6JDxB&Wn5bWbb&0Tb_;YVl+^f^Z!5x0C9h{!BI9m@sFw(fe ziNuQF|4+_$uMW!jD{b_{DXZVPIjG^N?mKX#zYOlaW3boe!CvdNzdSrT{t+?A{bwME zS>rhkx&o~azZMpL^c?5wE49j5!3iDUyd-*18#(9E5p5rEURh~eC6@}eNIsZM{7x45lX}%Azsy9T-T`N9~Asc&AtA4<@Bq9|3{#4{Toyn@`?}#16wwnpfse- zes;K$_IF`=FR=32|Dv=_>;BaxdRzOTxSl?)ZQGbiUk<#!ar?8%{OQ80OPhJ&2wkY% zxG>WC`)px}|9v2)t+Z;^o(m5vMF%!vu!l8L|BT{bXZ;p{N`d6wQhk0sx&a< ziw0`->Z&~OVaL1FxI*ElhQd}WZ~8J zbuFM*0ynx$lzypw^Yv0?I_@ZCC)>1z-D_y3cC+$(vnH$NuH_o_AF7ROWqb( zcr$Q+HC4HqLwif_uV$89&E4PrX~1gExLr43HShE_4_M82?xOAfYHsa^y1$xvA*lPS z$@xOFk~vf)cb*lQX+GUwzspSDr^=`y!uWQ5aX5v23u}s?4&`9DFfL&25wy_M{ZW0! z5ITp_boN{%-J)n_(U@7^8%ZZp>zXj3!sgVEi=wGi$utRxF`}tY*++%QXPwb>w-P4B zKIXO4N0k5(ElXIdo!(IbJfw>l`iwGPiY_)YmKG|vLZU@uRk3slEoQ-3I@P*H+QMeC zadC8ma_a}fBMwpbNs(XQ8AlgWWq!YC>Z+ePjM|ad_d+4D;dE(&b~hvr790}t17}I_ z6bxl2*Vi`9lSv4TjNjc6B^WGFiJ=!~{Cpl-k860rLvFLOc>% zN4!$;7W>x?oA@z`x8I}UjVNXOIOtl&d;&3NpvI&n@m$I zYhiP;iIb7FxPh%?8z&=|4$w}vU(f_xzZ%%Z$p|HGVk)y_psvNB7nmyp$sPhtWzPvJ zeh}Hkj%3h>EU8vPBH6VJ8b8hr+HsuoD`NiG2U|_1&M5Oq`MZz!8dLkf`0_7ON?>_Y zFk&rio7mqlU_6DfUfeU15E9X`*Y#i%x(nL!EY}jEgI@?wW>TTmZoGnU2p?>Q^p;}=p zWV>CcL%;NF5>&-ydNsQ$XaVRM7V{t-8(spM`#Fosq$4d=;G5VAm@N&U^H|w~$h#f1 zoc&eMe$X?lNjRu@e4Om+gGhEB=oU6K6Al|d53$LaaHs@rWlKRv91{-s!ZBY|6)zR< zv#?>ZXtwo&5_|>oiz&phmQ1QzvWCiHWunH#pykY!MJISRe8YJGoNL=dyav1%*bH=B z3~?_o8`ueS1N(qAKyiiiejeflz?v^YyaedD6ymi&_vH|82bKT{Zr3$H71;T8h%X1W zUPD~qS{y9Ldbx);gLK2td>fAVGEmYN;zdAr1n0YeDo*7_U{NIJJwiuup8Or>W;=oa zRbVNw1Xu+uisAeiFe@JZz*and&fA>V;&XZf&^?*+YM_e8s`<7DnY%degP{|c+=rkK zay}2JW^rB)G*9FFEU*MO6Z;(m{v+Cf?*GBSz}9`79{|?YfD3yaV%|k1>yZqw<`^zx zz^XSnKLqr?#rYYb-{w5g^F0Oz$pN|>I9~~@0&W5J0`~xmaGPrvh&!AezwPw`vw%go z{w)WZ{{?@b;~bIzdOya5fK?X|7rzWPw_#Gi-cLE-0rY+bKcL#qd2u^P2}r-di!kDM z#a5sjnDse20-J$5g#Lo_!$2>v1=!kwfq*raP&tkPfG8SYi;cNbX#DoLM`(NvYz5Xg zO`~a6)-sJwukW5kvpuGs7&iVm9Ua~{hLXlHZ2oaN##WAhH;8u?d;T~c1^Hi%`rXIr H-|7DWuA{yq delta 6410 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 diff --git a/libaxolotl/src/androidTest/java/org/whispersystems/test/InMemoryIdentityKeyStore.java b/libaxolotl/src/androidTest/java/org/whispersystems/test/InMemoryIdentityKeyStore.java index e510a26d1b..8a2e1d8f34 100644 --- a/libaxolotl/src/androidTest/java/org/whispersystems/test/InMemoryIdentityKeyStore.java +++ b/libaxolotl/src/androidTest/java/org/whispersystems/test/InMemoryIdentityKeyStore.java @@ -20,7 +20,7 @@ public class InMemoryIdentityKeyStore implements IdentityKeyStore { public InMemoryIdentityKeyStore() { try { - ECKeyPair identityKeyPairKeys = Curve.generateKeyPair(false); + ECKeyPair identityKeyPairKeys = Curve.generateKeyPair(); this.identityKeyPair = new IdentityKeyPair(new IdentityKey(identityKeyPairKeys.getPublicKey()), identityKeyPairKeys.getPrivateKey()); diff --git a/libaxolotl/src/androidTest/java/org/whispersystems/test/SessionBuilderTest.java b/libaxolotl/src/androidTest/java/org/whispersystems/test/SessionBuilderTest.java index 44434d7384..1d410784dc 100644 --- a/libaxolotl/src/androidTest/java/org/whispersystems/test/SessionBuilderTest.java +++ b/libaxolotl/src/androidTest/java/org/whispersystems/test/SessionBuilderTest.java @@ -52,7 +52,7 @@ public class SessionBuilderTest extends AndroidTestCase { SignedPreKeyStore bobSignedPreKeyStore = new InMemorySignedPreKeyStore(); IdentityKeyStore bobIdentityKeyStore = new InMemoryIdentityKeyStore(); - ECKeyPair bobPreKeyPair = Curve.generateKeyPair(true); + ECKeyPair bobPreKeyPair = Curve.generateKeyPair(); PreKeyBundle bobPreKey = new PreKeyBundle(bobIdentityKeyStore.getLocalRegistrationId(), 1, 31337, bobPreKeyPair.getPublicKey(), 0, null, null, @@ -97,7 +97,7 @@ public class SessionBuilderTest extends AndroidTestCase { BOB_RECIPIENT_ID, 1); aliceSessionCipher = new SessionCipher(aliceSessionStore, alicePreKeyStore, aliceSignedPreKeyStore, aliceIdentityKeyStore, BOB_RECIPIENT_ID, 1); - bobPreKeyPair = Curve.generateKeyPair(true); + bobPreKeyPair = Curve.generateKeyPair(); bobPreKey = new PreKeyBundle(bobIdentityKeyStore.getLocalRegistrationId(), 1, 31338, bobPreKeyPair.getPublicKey(), 0, null, null, bobIdentityKeyStore.getIdentityKeyPair().getPublicKey()); @@ -119,7 +119,7 @@ public class SessionBuilderTest extends AndroidTestCase { assertTrue(new String(plaintext).equals(originalMessage)); bobPreKey = new PreKeyBundle(bobIdentityKeyStore.getLocalRegistrationId(), 1, - 31337, Curve.generateKeyPair(true).getPublicKey(), + 31337, Curve.generateKeyPair().getPublicKey(), 0, null, null, aliceIdentityKeyStore.getIdentityKeyPair().getPublicKey()); @@ -147,8 +147,8 @@ public class SessionBuilderTest extends AndroidTestCase { SignedPreKeyStore bobSignedPreKeyStore = new InMemorySignedPreKeyStore(); IdentityKeyStore bobIdentityKeyStore = new InMemoryIdentityKeyStore(); - ECKeyPair bobPreKeyPair = Curve.generateKeyPair(true); - ECKeyPair bobSignedPreKeyPair = Curve.generateKeyPair(true); + ECKeyPair bobPreKeyPair = Curve.generateKeyPair(); + ECKeyPair bobSignedPreKeyPair = Curve.generateKeyPair(); byte[] bobSignedPreKeySignature = Curve.calculateSignature(bobIdentityKeyStore.getIdentityKeyPair().getPrivateKey(), bobSignedPreKeyPair.getPublicKey().serialize()); @@ -200,8 +200,8 @@ public class SessionBuilderTest extends AndroidTestCase { BOB_RECIPIENT_ID, 1); aliceSessionCipher = new SessionCipher(aliceSessionStore, alicePreKeyStore, aliceSignedPreKeyStore, aliceIdentityKeyStore, BOB_RECIPIENT_ID, 1); - bobPreKeyPair = Curve.generateKeyPair(true); - bobSignedPreKeyPair = Curve.generateKeyPair(true); + bobPreKeyPair = Curve.generateKeyPair(); + bobSignedPreKeyPair = Curve.generateKeyPair(); bobSignedPreKeySignature = Curve.calculateSignature(bobIdentityKeyStore.getIdentityKeyPair().getPrivateKey(), bobSignedPreKeyPair.getPublicKey().serialize()); bobPreKey = new PreKeyBundle(bobIdentityKeyStore.getLocalRegistrationId(), 1, 31338, bobPreKeyPair.getPublicKey(), @@ -225,7 +225,7 @@ public class SessionBuilderTest extends AndroidTestCase { assertTrue(new String(plaintext).equals(originalMessage)); bobPreKey = new PreKeyBundle(bobIdentityKeyStore.getLocalRegistrationId(), 1, - 31337, Curve.generateKeyPair(true).getPublicKey(), + 31337, Curve.generateKeyPair().getPublicKey(), 23, bobSignedPreKeyPair.getPublicKey(), bobSignedPreKeySignature, aliceIdentityKeyStore.getIdentityKeyPair().getPublicKey()); @@ -249,8 +249,8 @@ public class SessionBuilderTest extends AndroidTestCase { IdentityKeyStore bobIdentityKeyStore = new InMemoryIdentityKeyStore(); - ECKeyPair bobPreKeyPair = Curve.generateKeyPair(true); - ECKeyPair bobSignedPreKeyPair = Curve.generateKeyPair(true); + ECKeyPair bobPreKeyPair = Curve.generateKeyPair(); + ECKeyPair bobSignedPreKeyPair = Curve.generateKeyPair(); byte[] bobSignedPreKeySignature = Curve.calculateSignature(bobIdentityKeyStore.getIdentityKeyPair().getPrivateKey(), bobSignedPreKeyPair.getPublicKey().serialize()); @@ -297,8 +297,8 @@ public class SessionBuilderTest extends AndroidTestCase { SignedPreKeyStore bobSignedPreKeyStore = new InMemorySignedPreKeyStore(); IdentityKeyStore bobIdentityKeyStore = new InMemoryIdentityKeyStore(); - ECKeyPair bobPreKeyPair = Curve.generateKeyPair(true); - ECKeyPair bobSignedPreKeyPair = Curve.generateKeyPair(true); + ECKeyPair bobPreKeyPair = Curve.generateKeyPair(); + ECKeyPair bobSignedPreKeyPair = Curve.generateKeyPair(); byte[] bobSignedPreKeySignature = Curve.calculateSignature(bobIdentityKeyStore.getIdentityKeyPair().getPrivateKey(), bobSignedPreKeyPair.getPublicKey().serialize()); @@ -359,8 +359,8 @@ public class SessionBuilderTest extends AndroidTestCase { SignedPreKeyStore bobSignedPreKeyStore = new InMemorySignedPreKeyStore(); IdentityKeyStore bobIdentityKeyStore = new InMemoryIdentityKeyStore(); - ECKeyPair bobPreKeyPair = Curve.generateKeyPair(true); - ECKeyPair bobSignedPreKeyPair = Curve.generateKeyPair(true); + ECKeyPair bobPreKeyPair = Curve.generateKeyPair(); + ECKeyPair bobSignedPreKeyPair = Curve.generateKeyPair(); byte[] bobSignedPreKeySignature = Curve.calculateSignature(bobIdentityKeyStore.getIdentityKeyPair().getPrivateKey(), bobSignedPreKeyPair.getPublicKey().serialize()); diff --git a/libaxolotl/src/androidTest/java/org/whispersystems/test/SessionCipherTest.java b/libaxolotl/src/androidTest/java/org/whispersystems/test/SessionCipherTest.java index cad3ddfdd0..192a7a5506 100644 --- a/libaxolotl/src/androidTest/java/org/whispersystems/test/SessionCipherTest.java +++ b/libaxolotl/src/androidTest/java/org/whispersystems/test/SessionCipherTest.java @@ -138,16 +138,16 @@ public class SessionCipherTest extends AndroidTestCase { private void initializeSessionsV2(SessionState aliceSessionState, SessionState bobSessionState) throws InvalidKeyException { - ECKeyPair aliceIdentityKeyPair = Curve.generateKeyPair(false); + ECKeyPair aliceIdentityKeyPair = Curve.generateKeyPair(); IdentityKeyPair aliceIdentityKey = new IdentityKeyPair(new IdentityKey(aliceIdentityKeyPair.getPublicKey()), aliceIdentityKeyPair.getPrivateKey()); - ECKeyPair aliceBaseKey = Curve.generateKeyPair(true); - ECKeyPair aliceEphemeralKey = Curve.generateKeyPair(true); + ECKeyPair aliceBaseKey = Curve.generateKeyPair(); + ECKeyPair aliceEphemeralKey = Curve.generateKeyPair(); - ECKeyPair bobIdentityKeyPair = Curve.generateKeyPair(false); + ECKeyPair bobIdentityKeyPair = Curve.generateKeyPair(); IdentityKeyPair bobIdentityKey = new IdentityKeyPair(new IdentityKey(bobIdentityKeyPair.getPublicKey()), bobIdentityKeyPair.getPrivateKey()); - ECKeyPair bobBaseKey = Curve.generateKeyPair(true); + ECKeyPair bobBaseKey = Curve.generateKeyPair(); ECKeyPair bobEphemeralKey = bobBaseKey; AliceAxolotlParameters aliceParameters = AliceAxolotlParameters.newBuilder() @@ -175,21 +175,21 @@ public class SessionCipherTest extends AndroidTestCase { private void initializeSessionsV3(SessionState aliceSessionState, SessionState bobSessionState) throws InvalidKeyException { - ECKeyPair aliceIdentityKeyPair = Curve.generateKeyPair(false); + ECKeyPair aliceIdentityKeyPair = Curve.generateKeyPair(); IdentityKeyPair aliceIdentityKey = new IdentityKeyPair(new IdentityKey(aliceIdentityKeyPair.getPublicKey()), aliceIdentityKeyPair.getPrivateKey()); - ECKeyPair aliceBaseKey = Curve.generateKeyPair(true); - ECKeyPair aliceEphemeralKey = Curve.generateKeyPair(true); + ECKeyPair aliceBaseKey = Curve.generateKeyPair(); + ECKeyPair aliceEphemeralKey = Curve.generateKeyPair(); ECKeyPair alicePreKey = aliceBaseKey; - ECKeyPair bobIdentityKeyPair = Curve.generateKeyPair(false); + ECKeyPair bobIdentityKeyPair = Curve.generateKeyPair(); IdentityKeyPair bobIdentityKey = new IdentityKeyPair(new IdentityKey(bobIdentityKeyPair.getPublicKey()), bobIdentityKeyPair.getPrivateKey()); - ECKeyPair bobBaseKey = Curve.generateKeyPair(true); + ECKeyPair bobBaseKey = Curve.generateKeyPair(); ECKeyPair bobEphemeralKey = bobBaseKey; - ECKeyPair bobPreKey = Curve.generateKeyPair(true); + ECKeyPair bobPreKey = Curve.generateKeyPair(); AliceAxolotlParameters aliceParameters = AliceAxolotlParameters.newBuilder() .setOurBaseKey(aliceBaseKey) diff --git a/libaxolotl/src/androidTest/java/org/whispersystems/test/ecc/Curve25519Test.java b/libaxolotl/src/androidTest/java/org/whispersystems/test/ecc/Curve25519Test.java index 5903353de1..b0f9617084 100644 --- a/libaxolotl/src/androidTest/java/org/whispersystems/test/ecc/Curve25519Test.java +++ b/libaxolotl/src/androidTest/java/org/whispersystems/test/ecc/Curve25519Test.java @@ -70,8 +70,8 @@ public class Curve25519Test extends AndroidTestCase { public void testRandomAgreements() throws InvalidKeyException { for (int i=0;i<50;i++) { - ECKeyPair alice = Curve.generateKeyPair(false); - ECKeyPair bob = Curve.generateKeyPair(false); + ECKeyPair alice = Curve.generateKeyPair(); + ECKeyPair bob = Curve.generateKeyPair(); byte[] sharedAlice = Curve.calculateAgreement(bob.getPublicKey(), alice.getPrivateKey()); byte[] sharedBob = Curve.calculateAgreement(alice.getPublicKey(), bob.getPrivateKey()); diff --git a/libaxolotl/src/androidTest/java/org/whispersystems/test/ratchet/RatchetingSessionTest.java b/libaxolotl/src/androidTest/java/org/whispersystems/test/ratchet/RatchetingSessionTest.java index 48f7bc64e4..b09f6dbd4a 100644 --- a/libaxolotl/src/androidTest/java/org/whispersystems/test/ratchet/RatchetingSessionTest.java +++ b/libaxolotl/src/androidTest/java/org/whispersystems/test/ratchet/RatchetingSessionTest.java @@ -1,6 +1,7 @@ package org.whispersystems.test.ratchet; import android.test.AndroidTestCase; +import android.util.Log; import org.whispersystems.libaxolotl.IdentityKey; import org.whispersystems.libaxolotl.IdentityKeyPair; @@ -13,6 +14,7 @@ import org.whispersystems.libaxolotl.ratchet.AliceAxolotlParameters; import org.whispersystems.libaxolotl.ratchet.BobAxolotlParameters; import org.whispersystems.libaxolotl.ratchet.RatchetingSession; import org.whispersystems.libaxolotl.state.SessionState; +import org.whispersystems.libaxolotl.util.Hex; import org.whispersystems.libaxolotl.util.guava.Optional; import java.util.Arrays; @@ -88,13 +90,12 @@ public class RatchetingSessionTest extends AndroidTestCase { (byte) 0xee, (byte) 0xfc, (byte) 0xb4, (byte) 0x2b, (byte) 0x4a}; - byte[] senderChain = {(byte)0xd2, (byte)0x2f, (byte)0xd5, (byte)0x6d, (byte)0x3f, - (byte)0xec, (byte)0x81, (byte)0x9c, (byte)0xf4, (byte)0xc3, - (byte)0xd5, (byte)0x0c, (byte)0x56, (byte)0xed, (byte)0xfb, - (byte)0x1c, (byte)0x28, (byte)0x0a, (byte)0x1b, (byte)0x31, - (byte)0x96, (byte)0x45, (byte)0x37, (byte)0xf1, (byte)0xd1, - (byte)0x61, (byte)0xe1, (byte)0xc9, (byte)0x31, (byte)0x48, - (byte)0xe3, (byte)0x6b}; + byte[] senderChain = {(byte)0x33, (byte)0xe9, (byte)0x46, (byte)0x5e, (byte)0x88, (byte)0x92, + (byte)0x2b, (byte)0x51, (byte)0xa6, (byte)0x76, (byte)0xaf, (byte)0xba, + (byte)0x03, (byte)0xf2, (byte)0x27, (byte)0x58, (byte)0xee, (byte)0xe1, + (byte)0xef, (byte)0x15, (byte)0xb0, (byte)0x28, (byte)0x39, (byte)0x0d, + (byte)0x70, (byte)0x76, (byte)0xc7, (byte)0xc7, (byte)0x09, (byte)0xef, + (byte)0x5d, (byte)0x8b}; IdentityKey bobIdentityKeyPublic = new IdentityKey(bobIdentityPublic, 0); ECPrivateKey bobIdentityKeyPrivate = Curve.decodePrivatePoint(bobIdentityPrivate); @@ -191,13 +192,12 @@ public class RatchetingSessionTest extends AndroidTestCase { (byte) 0xeb, (byte) 0x0a, (byte) 0x6f, (byte) 0x4f, (byte) 0x5f, (byte) 0x8f, (byte) 0x58}; - byte[] receiverChain = {(byte) 0xd2, (byte) 0x2f, (byte) 0xd5, (byte) 0x6d, (byte) 0x3f, - (byte) 0xec, (byte) 0x81, (byte) 0x9c, (byte) 0xf4, (byte) 0xc3, - (byte) 0xd5, (byte) 0x0c, (byte) 0x56, (byte) 0xed, (byte) 0xfb, - (byte) 0x1c, (byte) 0x28, (byte) 0x0a, (byte) 0x1b, (byte) 0x31, - (byte) 0x96, (byte) 0x45, (byte) 0x37, (byte) 0xf1, (byte) 0xd1, - (byte) 0x61, (byte) 0xe1, (byte) 0xc9, (byte) 0x31, (byte) 0x48, - (byte) 0xe3, (byte) 0x6b}; + byte[] receiverChain = {(byte)0x68, (byte)0x4a, (byte)0xc5, (byte)0x15, (byte)0xc9, (byte)0x14, + (byte)0x45, (byte)0xf7, (byte)0xa0, (byte)0xc9, (byte)0x3c, (byte)0x39, + (byte)0xf7, (byte)0xe6, (byte)0xa1, (byte)0x7f, (byte)0xa0, (byte)0x8e, + (byte)0x04, (byte)0x62, (byte)0xf1, (byte)0x50, (byte)0xe5, (byte)0xac, + (byte)0x60, (byte)0x71, (byte)0x78, (byte)0xc1, (byte)0xa5, (byte)0xd2, + (byte)0xc7, (byte)0xd6}; IdentityKey bobIdentityKey = new IdentityKey(bobIdentityPublic, 0); ECPublicKey bobEphemeralPublicKey = Curve.decodePoint(bobPublic, 0); diff --git a/libaxolotl/src/androidTest/java/org/whispersystems/test/ratchet/RootKeyTest.java b/libaxolotl/src/androidTest/java/org/whispersystems/test/ratchet/RootKeyTest.java index c48ef23d2f..b7a19b0f97 100644 --- a/libaxolotl/src/androidTest/java/org/whispersystems/test/ratchet/RootKeyTest.java +++ b/libaxolotl/src/androidTest/java/org/whispersystems/test/ratchet/RootKeyTest.java @@ -50,21 +50,21 @@ public class RootKeyTest extends AndroidTestCase { (byte) 0x95, (byte) 0x55, (byte) 0xe8, (byte) 0x47, (byte) 0x57, (byte) 0x70, (byte) 0x8a, (byte) 0x30}; - byte[] nextRoot = {(byte) 0xb1, (byte) 0x14, (byte) 0xf5, (byte) 0xde, (byte) 0x28, - (byte) 0x01, (byte) 0x19, (byte) 0x85, (byte) 0xe6, (byte) 0xeb, - (byte) 0xa2, (byte) 0x5d, (byte) 0x50, (byte) 0xe7, (byte) 0xec, - (byte) 0x41, (byte) 0xa9, (byte) 0xb0, (byte) 0x2f, (byte) 0x56, - (byte) 0x93, (byte) 0xc5, (byte) 0xc7, (byte) 0x88, (byte) 0xa6, - (byte) 0x3a, (byte) 0x06, (byte) 0xd2, (byte) 0x12, (byte) 0xa2, - (byte) 0xf7, (byte) 0x31}; + byte[] nextRoot = {(byte)0x67, (byte)0x46, (byte)0x77, (byte)0x65, (byte)0x21, + (byte)0x04, (byte)0xe8, (byte)0x64, (byte)0xd0, (byte)0x7c, + (byte)0x54, (byte)0x33, (byte)0xef, (byte)0xaa, (byte)0x59, + (byte)0x25, (byte)0xed, (byte)0x43, (byte)0x67, (byte)0xd6, + (byte)0xb2, (byte)0x5a, (byte)0xaf, (byte)0xe6, (byte)0x99, + (byte)0x1d, (byte)0xef, (byte)0x5c, (byte)0x7f, (byte)0x0f, + (byte)0xb8, (byte)0x6f}; - byte[] nextChain = {(byte) 0x9d, (byte) 0x7d, (byte) 0x24, (byte) 0x69, (byte) 0xbc, - (byte) 0x9a, (byte) 0xe5, (byte) 0x3e, (byte) 0xe9, (byte) 0x80, - (byte) 0x5a, (byte) 0xa3, (byte) 0x26, (byte) 0x4d, (byte) 0x24, - (byte) 0x99, (byte) 0xa3, (byte) 0xac, (byte) 0xe8, (byte) 0x0f, - (byte) 0x4c, (byte) 0xca, (byte) 0xe2, (byte) 0xda, (byte) 0x13, - (byte) 0x43, (byte) 0x0c, (byte) 0x5c, (byte) 0x55, (byte) 0xb5, - (byte) 0xca, (byte) 0x5f}; + byte[] nextChain = {(byte)0xfa, (byte)0xed, (byte)0x7f, (byte)0xb2, (byte)0xc3, + (byte)0xe6, (byte)0xf6, (byte)0x06, (byte)0xfc, (byte)0xbf, + (byte)0x26, (byte)0x64, (byte)0x6c, (byte)0xf2, (byte)0x68, + (byte)0xad, (byte)0x49, (byte)0x58, (byte)0x9f, (byte)0xcb, + (byte)0xde, (byte)0x01, (byte)0xc1, (byte)0x26, (byte)0x75, + (byte)0xe5, (byte)0xe8, (byte)0x22, (byte)0xa7, (byte)0xe3, + (byte)0x35, (byte)0xd1}; ECPublicKey alicePublicKey = Curve.decodePoint(alicePublic, 0); ECPrivateKey alicePrivateKey = Curve.decodePrivatePoint(alicePrivate); diff --git a/libaxolotl/src/main/java/org/whispersystems/libaxolotl/SessionBuilder.java b/libaxolotl/src/main/java/org/whispersystems/libaxolotl/SessionBuilder.java index a6dd95304d..6756a288d7 100644 --- a/libaxolotl/src/main/java/org/whispersystems/libaxolotl/SessionBuilder.java +++ b/libaxolotl/src/main/java/org/whispersystems/libaxolotl/SessionBuilder.java @@ -217,7 +217,7 @@ public class SessionBuilder { } SessionRecord sessionRecord = sessionStore.loadSession(recipientId, deviceId); - ECKeyPair ourBaseKey = Curve.generateKeyPair(true); + ECKeyPair ourBaseKey = Curve.generateKeyPair(); ECPublicKey theirSignedPreKey = preKey.getSignedPreKey() != null ? preKey.getSignedPreKey() : preKey.getPreKey(); @@ -287,8 +287,8 @@ public class SessionBuilder { if (!sessionRecord.getSessionState().hasPendingKeyExchange()) { builder.setOurIdentityKey(identityKeyStore.getIdentityKeyPair()) - .setOurBaseKey(Curve.generateKeyPair(true)) - .setOurRatchetKey(Curve.generateKeyPair(true)); + .setOurBaseKey(Curve.generateKeyPair()) + .setOurRatchetKey(Curve.generateKeyPair()); } else { builder.setOurIdentityKey(sessionRecord.getSessionState().getPendingKeyExchangeIdentityKey()) .setOurBaseKey(sessionRecord.getSessionState().getPendingKeyExchangeBaseKey()) @@ -372,8 +372,8 @@ public class SessionBuilder { try { int sequence = KeyHelper.getRandomSequence(65534) + 1; int flags = KeyExchangeMessage.INITIATE_FLAG; - ECKeyPair baseKey = Curve.generateKeyPair(true); - ECKeyPair ratchetKey = Curve.generateKeyPair(true); + ECKeyPair baseKey = Curve.generateKeyPair(); + ECKeyPair ratchetKey = Curve.generateKeyPair(); IdentityKeyPair identityKey = identityKeyStore.getIdentityKeyPair(); byte[] baseKeySignature = Curve.calculateSignature(identityKey.getPrivateKey(), baseKey.getPublicKey().serialize()); SessionRecord sessionRecord = sessionStore.loadSession(recipientId, deviceId); diff --git a/libaxolotl/src/main/java/org/whispersystems/libaxolotl/SessionCipher.java b/libaxolotl/src/main/java/org/whispersystems/libaxolotl/SessionCipher.java index d94f648b89..33415ce573 100644 --- a/libaxolotl/src/main/java/org/whispersystems/libaxolotl/SessionCipher.java +++ b/libaxolotl/src/main/java/org/whispersystems/libaxolotl/SessionCipher.java @@ -261,7 +261,7 @@ public class SessionCipher { RootKey rootKey = sessionState.getRootKey(); ECKeyPair ourEphemeral = sessionState.getSenderRatchetKeyPair(); Pair receiverChain = rootKey.createChain(theirEphemeral, ourEphemeral); - ECKeyPair ourNewEphemeral = Curve.generateKeyPair(true); + ECKeyPair ourNewEphemeral = Curve.generateKeyPair(); Pair senderChain = receiverChain.first().createChain(theirEphemeral, ourNewEphemeral); sessionState.setRootKey(senderChain.first()); diff --git a/libaxolotl/src/main/java/org/whispersystems/libaxolotl/ecc/Curve.java b/libaxolotl/src/main/java/org/whispersystems/libaxolotl/ecc/Curve.java index 4d26962da6..66b8cc3ab8 100644 --- a/libaxolotl/src/main/java/org/whispersystems/libaxolotl/ecc/Curve.java +++ b/libaxolotl/src/main/java/org/whispersystems/libaxolotl/ecc/Curve.java @@ -22,8 +22,8 @@ public class Curve { public static final int DJB_TYPE = 0x05; - public static ECKeyPair generateKeyPair(boolean ephemeral) { - return Curve25519.generateKeyPair(ephemeral); + public static ECKeyPair generateKeyPair() { + return Curve25519.generateKeyPair(); } public static ECPublicKey decodePoint(byte[] bytes, int offset) diff --git a/libaxolotl/src/main/java/org/whispersystems/libaxolotl/ecc/Curve25519.java b/libaxolotl/src/main/java/org/whispersystems/libaxolotl/ecc/Curve25519.java index 18152d395a..6f5d610fd7 100644 --- a/libaxolotl/src/main/java/org/whispersystems/libaxolotl/ecc/Curve25519.java +++ b/libaxolotl/src/main/java/org/whispersystems/libaxolotl/ecc/Curve25519.java @@ -37,13 +37,13 @@ public class Curve25519 { private static native byte[] calculateAgreement(byte[] ourPrivate, byte[] theirPublic); private static native byte[] generatePublicKey(byte[] privateKey); - private static native byte[] generatePrivateKey(byte[] random, boolean ephemeral); + private static native byte[] generatePrivateKey(byte[] random); private static native byte[] calculateSignature(byte[] random, byte[] privateKey, byte[] message); private static native boolean verifySignature(byte[] publicKey, byte[] message, byte[] signature); - public static ECKeyPair generateKeyPair(boolean ephemeral) { - byte[] privateKey = generatePrivateKey(ephemeral); + public static ECKeyPair generateKeyPair() { + byte[] privateKey = generatePrivateKey(); byte[] publicKey = generatePublicKey(privateKey); return new ECKeyPair(new DjbECPublicKey(publicKey), new DjbECPrivateKey(privateKey)); @@ -77,11 +77,11 @@ public class Curve25519 { return new DjbECPublicKey(keyBytes); } - private static byte[] generatePrivateKey(boolean ephemeral) { + private static byte[] generatePrivateKey() { byte[] privateKey = new byte[32]; random.nextBytes(privateKey); - return generatePrivateKey(privateKey, ephemeral); + return generatePrivateKey(privateKey); } private static byte[] getRandom(int size) { diff --git a/libaxolotl/src/main/java/org/whispersystems/libaxolotl/ratchet/RatchetingSession.java b/libaxolotl/src/main/java/org/whispersystems/libaxolotl/ratchet/RatchetingSession.java index 564969d980..8c094ec0d7 100644 --- a/libaxolotl/src/main/java/org/whispersystems/libaxolotl/ratchet/RatchetingSession.java +++ b/libaxolotl/src/main/java/org/whispersystems/libaxolotl/ratchet/RatchetingSession.java @@ -72,7 +72,7 @@ public class RatchetingSession { sessionState.setRemoteIdentityKey(parameters.getTheirIdentityKey()); sessionState.setLocalIdentityKey(parameters.getOurIdentityKey().getPublicKey()); - ECKeyPair sendingRatchetKey = Curve.generateKeyPair(true); + ECKeyPair sendingRatchetKey = Curve.generateKeyPair(); ByteArrayOutputStream secrets = new ByteArrayOutputStream(); if (sessionVersion >= 3) { diff --git a/libaxolotl/src/main/java/org/whispersystems/libaxolotl/util/KeyHelper.java b/libaxolotl/src/main/java/org/whispersystems/libaxolotl/util/KeyHelper.java index d46077a782..356d01759c 100644 --- a/libaxolotl/src/main/java/org/whispersystems/libaxolotl/util/KeyHelper.java +++ b/libaxolotl/src/main/java/org/whispersystems/libaxolotl/util/KeyHelper.java @@ -29,7 +29,7 @@ public class KeyHelper { * @return the generated IdentityKeyPair. */ public static IdentityKeyPair generateIdentityKeyPair() { - ECKeyPair keyPair = Curve.generateKeyPair(false); + ECKeyPair keyPair = Curve.generateKeyPair(); IdentityKey publicKey = new IdentityKey(keyPair.getPublicKey()); return new IdentityKeyPair(publicKey, keyPair.getPrivateKey()); } @@ -72,7 +72,7 @@ public class KeyHelper { List results = new LinkedList<>(); for (int i=0;i