首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pycryptodome计算ecies hkdf对称密钥

使用pycryptodome计算ecies hkdf对称密钥
EN

Stack Overflow用户
提问于 2021-11-22 14:10:43
回答 1查看 51关注 0票数 0

上下文:我正在用google tink库做一个python版本的paymentmethodtoken来处理gpay消息。为此,我只使用了python和PyCryptodome。

话虽如此,我目前正在尝试实现一个与kem function等价物

代码语言:javascript
复制
private byte[] kem(JsonObject json, final byte[] contextInfo) throws GeneralSecurityException {
    int demKeySize = protocolVersionConfig.aesCtrKeySize + protocolVersionConfig.hmacSha256KeySize;
    byte[] ephemeralPublicKey =
        Base64.decode(
            json.get(PaymentMethodTokenConstants.JSON_EPHEMERAL_PUBLIC_KEY).getAsString());
    byte[] sharedSecret = recipientKem.computeSharedSecret(ephemeralPublicKey);
    return Hkdf.computeEciesHkdfSymmetricKey(
        ephemeralPublicKey,
        sharedSecret,
        PaymentMethodTokenConstants.HMAC_SHA256_ALGO,
        PaymentMethodTokenConstants.HKDF_EMPTY_SALT,
        contextInfo,
        demKeySize);
  }

python中的等价物:

代码语言:javascript
复制
    def __kem(self, signed_message: SignedMessage, context_info: bytearray) -> bytearray:
        dem_key_size: int = 64
        ephemeral_public_key: bytes = base64.b64decode(signed_message.ephemeral_public_key)
        shared_secret: bytearray = self.__compute_shared_secret(bytearray(ephemeral_public_key))
        empty_salt: bytearray = bytearray()
        # to do
        return self.__compute_ecies_hkdf_symmetric_key(ephemeral_public_key, shared_secret, empty_salt, context_info, dem_key_size)
代码语言:javascript
复制
    def __compute_ecies_hkdf_symmetric_key(self, ephemeral_public_key: bytes, shared_secret: bytearray,
                                           salt: bytearray, context_info: bytearray, dem_key_size: int) -> bytearray:
        # TODO: add function body
        hkdf_input: bytes = ephemeral_public_key + shared_secret
        key1, key2 = HKDF(master=bytes("something goes here", "utf-8"), hashmod=SHA256, salt=salt, key_len=dem_key_size)

        pass

在我看来,google tink computeEciesHkdfSymmetricKey (code)根本不能像PyCryptodome HKDF那样工作。我的问题是,pycryptomde或其他库中是否存在computeEciesHkdfSymmetricKey的等价物,如果不存在,是否有可能重现相同的行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-22 15:05:07

我做了什么:

代码语言:javascript
复制
from Crypto.Protocol.KDF import HKDF

def __compute_ecies_hkdf_symmetric_key(self, ephemeral_public_key: bytes, shared_secret: bytearray, salt: bytearray, context_info: bytearray, dem_key_size: int) -> bytearray:
    hkdf_input: bytes = ephemeral_public_key + shared_secret
    keys = HKDF(master=hkdf_input, hashmod=SHA256, salt=salt, key_len=dem_key_size, context=context_info)
    if isinstance(keys, bytes):
        return bytearray(keys)
    elif isinstance(keys, tuple(bytes)):
        return bytearray(keys[0])
    else:
        raise GooglePaymentDecryptMessageError("type of hkdf is not compatible")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70067130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档