コード例 #1
0
ファイル: keywrap.py プロジェクト: zhzyker/vulmap
def aes_key_unwrap_with_padding(wrapping_key, wrapped_key, backend=None):
    backend = _get_backend(backend)
    if len(wrapped_key) < 16:
        raise InvalidUnwrap("Must be at least 16 bytes")

    if len(wrapping_key) not in [16, 24, 32]:
        raise ValueError("The wrapping key must be a valid AES key length")

    if len(wrapped_key) == 16:
        # RFC 5649 - 4.2 - exactly two 64-bit blocks
        decryptor = Cipher(AES(wrapping_key), ECB(), backend).decryptor()
        b = decryptor.update(wrapped_key)
        assert decryptor.finalize() == b""
        a = b[:8]
        data = b[8:]
        n = 1
    else:
        r = [wrapped_key[i:i + 8] for i in range(0, len(wrapped_key), 8)]
        encrypted_aiv = r.pop(0)
        n = len(r)
        a, r = _unwrap_core(wrapping_key, encrypted_aiv, r, backend)
        data = b"".join(r)

    # 1) Check that MSB(32,A) = A65959A6.
    # 2) Check that 8*(n-1) < LSB(32,A) <= 8*n.  If so, let
    #    MLI = LSB(32,A).
    # 3) Let b = (8*n)-MLI, and then check that the rightmost b octets of
    #    the output data are zero.
    (mli, ) = struct.unpack(">I", a[4:])
    b = (8 * n) - mli
    if (not bytes_eq(a[:4], b"\xa6\x59\x59\xa6")
            or not 8 * (n - 1) < mli <= 8 * n
            or (b != 0 and not bytes_eq(data[-b:], b"\x00" * b))):
        raise InvalidUnwrap()

    if b == 0:
        return data
    else:
        return data[:-b]
コード例 #2
0
ファイル: keywrap.py プロジェクト: zhzyker/vulmap
def aes_key_unwrap(wrapping_key, wrapped_key, backend=None):
    backend = _get_backend(backend)
    if len(wrapped_key) < 24:
        raise InvalidUnwrap("Must be at least 24 bytes")

    if len(wrapped_key) % 8 != 0:
        raise InvalidUnwrap("The wrapped key must be a multiple of 8 bytes")

    if len(wrapping_key) not in [16, 24, 32]:
        raise ValueError("The wrapping key must be a valid AES key length")

    aiv = b"\xa6\xa6\xa6\xa6\xa6\xa6\xa6\xa6"
    r = [wrapped_key[i:i + 8] for i in range(0, len(wrapped_key), 8)]
    a = r.pop(0)
    a, r = _unwrap_core(wrapping_key, a, r, backend)
    if not bytes_eq(a, aiv):
        raise InvalidUnwrap()

    return b"".join(r)
コード例 #3
0
ファイル: totp.py プロジェクト: zhzyker/vulmap
 def verify(self, totp, time):
     if not constant_time.bytes_eq(self.generate(time), totp):
         raise InvalidToken("Supplied TOTP value does not match.")
コード例 #4
0
ファイル: hkdf.py プロジェクト: zhzyker/vulmap
 def verify(self, key_material, expected_key):
     if not constant_time.bytes_eq(self.derive(key_material), expected_key):
         raise InvalidKey
コード例 #5
0
ファイル: poly1305.py プロジェクト: zhzyker/vulmap
 def verify(self, tag):
     mac = self.finalize()
     if not constant_time.bytes_eq(mac, tag):
         raise InvalidSignature("Value did not match computed tag.")
コード例 #6
0
ファイル: pbkdf2.py プロジェクト: zhzyker/vulmap
 def verify(self, key_material, expected_key):
     derived_key = self.derive(key_material)
     if not constant_time.bytes_eq(derived_key, expected_key):
         raise InvalidKey("Keys do not match.")
コード例 #7
0
ファイル: hotp.py プロジェクト: zhzyker/vulmap
 def verify(self, hotp, counter):
     if not constant_time.bytes_eq(self.generate(counter), hotp):
         raise InvalidToken("Supplied HOTP value does not match.")
コード例 #8
0
 def verify(self, signature):
     digest = self.finalize()
     if not constant_time.bytes_eq(digest, signature):
         raise InvalidSignature("Signature did not match digest.")