如何将OpenSSL签名存储到ASN.1格式的文件中

如何将OpenSSL签名存储到ASN.1格式的文件中,openssl,asn.1,Openssl,Asn.1,我正在实现已经散列的输入的“签名”步骤input\u hash。这可以直接使用 openssl pkeyutl -sign -in input_hash -inkey private.key -out signature 然而,我使用一个外部设备来计算响应。这给了我一个64字节的响应,我现在已经成功地将其转换为Openssl使用的结构。这应该是openssl/bn.h struct ECDSA\u SIG{ BIGNUM*r; BIGNUM*s; } 接下来,我想使用正确的ASN.1格式将

我正在实现已经散列的输入的“签名”步骤
input\u hash
。这可以直接使用

openssl pkeyutl -sign -in input_hash -inkey private.key -out signature 
然而,我使用一个外部设备来计算响应。这给了我一个64字节的响应,我现在已经成功地将其转换为Openssl使用的结构。这应该是
openssl/bn.h

struct ECDSA\u SIG{
BIGNUM*r;
BIGNUM*s;
}
接下来,我想使用正确的ASN.1格式将此结构存储为二进制(DER)文件。但是,我无法在openssl库中找到合适的函数

请注意,我使用的是EC密钥,因此使用
openssl rsautl
工具不是一个选项。通过查看上面openssl命令的输出,我看到了我试图实现的相同结构

$openssl asn1parse-签名中-通知DER
0:d=0 hl=2 l=69 cons:序列
2:d=1 hl=2 l=33初始值:整数:E8229B1CF88EC5BC6E8270161E34D986FC8A5A7D5B2ED3B7C65BA808494E7030
37:d=1 hl=2 l=32初始值:整数:3FF76A6CB0210037C2D0F9075080E1B6461CDD8F52BB2374DB350E81C8A5C3
现在唯一缺少的步骤是将我的
ECDSA_SIG
结构以正确的格式存储到文件中。否则,将使用以下命令在openssl中进行验证

openssl pkeyutl-verify-inkey public.key-sigfile signature-pkeyopt digest:sha256-in input_hash-pubin

显然失败。

如果您在
ECDSA\u SIG
结构中有签名,则可以使用
i2d\u ECDSA\u SIG
功能将其转换为DER格式。此处记录:


如果您在
ECDSA\u SIG
结构中有签名,则可以使用
i2d\u ECDSA\u SIG
功能将其转换为DER格式。此处记录: