Source code for pyflocker.ciphers.backends.cryptodome_.misc
"""Miscellaneous Tools: Tools that are not common to symmetric or asymmetric."""from__future__importannotationsfromCryptodome.ProtocolimportKDFfrompyflocker.ciphers.baseimportBaseHash
[docs]defderive_hkdf_key(master_key:bytes,dklen:int,hashalgo:BaseHash,salt:bytes,cipher_ctx:bytes=b"enc-key",auth_ctx:bytes=b"auth-key",)->tuple[bytes,bytes]:"""Derive key materials for HMAC from given master key. Args: master_key: The key used to derive the keys from. dklen: Desired lenth of the derived key. hashalgo: The name of the hash algorithm. salt: The salt to use. cipher_ctx: Context for cipher. auth_ctx: Context for HMAC. Returns: A pair of *cipher key* and *MAC key*. """ifnotisinstance(hashalgo,BaseHash):msg="hashalgo must be an object implementing BaseHash."raiseTypeError(msg)hash_=hashalgo.new()key=KDF.HKDF(master=master_key,key_len=dklen,salt=salt,hashmod=hash_,# type: ignorenum_keys=1,context=cipher_ctx,)assertisinstance(key,bytes)hkey=KDF.HKDF(master=master_key,key_len=hash_.digest_size,salt=salt,hashmod=hash_,# type: ignorenum_keys=1,context=auth_ctx,)assertisinstance(hkey,bytes)returnkey,hkey