开发者社区 问答 正文

使用Java的Luna HSM的EDDSA签名

我正在尝试用Luna HSM(Gemalto)实现EDDSA签名

Signature signature = null;
signature = Signature.getInstance("EDDSA", "LunaProvider");
PrivateKey privateKey = getPrivateByAlias(privateKeyLabel);
signature.initSign(privateKey);
signature.update(payload);
byte[] byteArray = signature.sign();

但是在签名后,byteArray的大小为71,但根据规范EDDSA签名的大小为64。我不确定我在这里想念的是什么。我在网上都找不到任何文档。

问题来源:Stack Overflow

展开
收起
montos 2020-03-26 14:02:54 776 分享 版权
1 条回答
写回答
取消 提交回答
  • 这恰好是您期望的X9.63兼容签名的大小,该签名由两个有符号大端整数的DER编码组成。如果要具有64字节的签名,则应使用[以下说明] (https://crypto.stackexchange.com/a/60011/1172)在内部转换2个整数。在I2OSP和OS2IP对Java的实现,可以发现在这里

    因此,步骤如下:

    1. 解析ASN.1签名;
    2. BigInteger使用new BigInteger(byte[])构造函数转换为值;
    3. 使用I2OSP创建r和s值作为字节数组(32个八位字节的输出大小);
    4. 将r和s连接起来以创建64字节的签名。

    回答来源:Stack Overflow

    2020-03-26 14:03:49
    赞同 展开评论
问答分类:
问答标签:
问答地址: