Commit a9a8d53d authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

Merge branch 'bug23071_031' into maint-0.3.1

parents 830b7b31 ee849ee8
Loading
Loading
Loading
Loading

changes/bug23071

0 → 100644
+5 −0
Original line number Diff line number Diff line
  o Minor bugfixes (tests):
    - Port the hs_ntor handshake test to work correctly with recent
      versions of the pysha3 module. Fixes bug 23071; bugfix on
      0.3.1.1-alpha.
+24 −7
Original line number Diff line number Diff line
@@ -54,9 +54,26 @@ except ImportError:
    import slownacl_curve25519
    curve25519mod = slownacl_curve25519

import hashlib
try:
    import sha3
except ImportError:
    # In python 3.6, the sha3 functions are in hashlib whether we
    # import sha3 or not.
    sha3 = None

try:
    # Pull the sha3 functions in.
    from hashlib import sha3_256, shake_256
    shake_squeeze = shake_256.digest
except ImportError:
    if hasattr(sha3, "SHA3256"):
        # If this happens, then we have the old "sha3" module which
        # hashlib and pysha3 superseded.
        sha3_256 = sha3.SHA3256
        shake_256 = sha3.SHAKE256
        shake_squeeze = shake_256.squeeze
    else:
        # error code 77 tells automake to skip this test
        sys.exit(77)

@@ -81,7 +98,7 @@ def mac(k,m):
    def htonll(num):
        return struct.pack('!q', num)

    s = sha3.SHA3256()
    s = sha3_256()
    s.update(htonll(len(k)))
    s.update(k)
    s.update(m)
@@ -107,9 +124,9 @@ def intro2_ntor_client(intro_auth_pubkey_str, intro_enc_pubkey,
    assert(len(secret) == INTRO_SECRET_LEN)
    info = M_HSEXPAND + subcredential

    kdf = sha3.SHAKE256()
    kdf = shake_256()
    kdf.update(secret + T_HSENC + info)
    key_material = kdf.squeeze(64*8)
    key_material = shake_squeeze(kdf, 64*8)

    enc_key = key_material[0:32]
    mac_key = key_material[32:64]
@@ -139,9 +156,9 @@ def intro2_ntor_service(intro_auth_pubkey_str, client_enc_pubkey, service_enc_pr
    assert(len(secret) == INTRO_SECRET_LEN)
    info = M_HSEXPAND + subcredential

    kdf = sha3.SHAKE256()
    kdf = shake_256()
    kdf.update(secret + T_HSENC + info)
    key_material = kdf.squeeze(64*8)
    key_material = shake_squeeze(kdf, 64*8)

    enc_key = key_material[0:32]
    mac_key = key_material[32:64]