]> granicus.if.org Git - transmission/commitdiff
Abort handshake if establishing DH shared secret fails
authorMike Gelfand <mikedld@mikedld.com>
Sun, 18 Sep 2016 10:58:15 +0000 (13:58 +0300)
committerMike Gelfand <mikedld@mikedld.com>
Sun, 18 Sep 2016 11:01:00 +0000 (14:01 +0300)
Fixes #27

libtransmission/handshake.c

index c728696004917e48214c721f958f2d7fcc2d699b..e7ff1319fc84d54ac18a6856345bfc7d53fd7241 100644 (file)
@@ -425,7 +425,8 @@ readYb (tr_handshake * handshake, struct evbuffer * inbuf)
 
   /* compute the secret */
   evbuffer_remove (inbuf, yb, KEY_LEN);
-  tr_cryptoComputeSecret (handshake->crypto, yb);
+  if (!tr_cryptoComputeSecret (handshake->crypto, yb))
+    return tr_handshakeDone (handshake, false);
 
   /* now send these: HASH ('req1', S), HASH ('req2', SKEY) xor HASH ('req3', S),
    * ENCRYPT (VC, crypto_provide, len (PadC), PadC, len (IA)), ENCRYPT (IA) */
@@ -741,7 +742,9 @@ readYa (tr_handshake    * handshake,
 
   /* read the incoming peer's public key */
   evbuffer_remove (inbuf, ya, KEY_LEN);
-  tr_cryptoComputeSecret (handshake->crypto, ya);
+  if (!tr_cryptoComputeSecret (handshake->crypto, ya))
+    return tr_handshakeDone (handshake, false);
+
   computeRequestHash (handshake, "req1", handshake->myReq1);
 
   /* send our public key to the peer */