从http://www-archive.mozilla.org/projects/security/pki/nss/tech-notes/tn7.html,它指出
对于低级签名,请使用 PK11_Sign()。这两个函数都对数据进行 PKCS #1 包装。PK11_Sign 不对散列进行 BER 编码(就像在 SGN_ 函数中所做的那样)
从代码 API
/*
* sign a hash. The algorithm is determined by the key.
*/
SECStatus
PK11_Sign(SECKEYPrivateKey *key, SECItem *sig, const SECItem *hash)
Q1) 我的 PK11_Sign 函数导致签名无效。hash->data 的输入是 SHA-256 的 a7cd893b31b0ea44ed1aa7cafcda658744cc5a02ef26feccceaae9a8becb83a0 哈希,来自“Hello SHA-256”。data->len 是 64。然后,代码执行十六进制到二进制。然后我将这些信息传递给 PK11_Sign。我错过了任何步骤吗?
Q2)哈希的BER编码是什么意思?如果我们有一个十六进制的哈希字符串,那么我们将它转换为哈希的二进制,即BER?或者这句话的意思是,它只支持DER?
Q3) PK11_Sign 是否有类似上述操作的样本?