| Index: crypto/rsa_private_key_nss.cc
|
| diff --git a/crypto/rsa_private_key_nss.cc b/crypto/rsa_private_key_nss.cc
|
| index 35697abb4e721ed7fe14f0022cab16469b2676f1..353db31c111dcecd4d83a829ab0cda5b62a3ecce 100644
|
| --- a/crypto/rsa_private_key_nss.cc
|
| +++ b/crypto/rsa_private_key_nss.cc
|
| @@ -195,6 +195,31 @@ bool RSAPrivateKey::ExportPublicKey(std::vector<uint8>* output) const {
|
| return true;
|
| }
|
|
|
| +bool RSAPrivateKey::SignDigest(const std::vector<uint8>& digest,
|
| + std::vector<uint8>* output) const {
|
| + size_t signature_len = PK11_SignatureLen(key_);
|
| +
|
| + SECItem digest_item;
|
| + digest_item.type = siBuffer;
|
| + digest_item.data = const_cast<unsigned char*>(&digest[0]);
|
| + digest_item.len = digest.size();
|
| +
|
| + SECItem signature_item;
|
| + signature_item.len = signature_len;
|
| + signature_item.data = (unsigned char*) PORT_Alloc(signature_len);
|
| + SECStatus rv = PK11_Sign(key_, &signature_item, &digest_item);
|
| + if (rv != SECSuccess) {
|
| + NOTREACHED();
|
| + SECITEM_FreeItem(&signature_item, PR_FALSE);
|
| + return false;
|
| + }
|
| +
|
| + output->assign(signature_item.data,
|
| + signature_item.data + signature_item.len);
|
| + SECITEM_FreeItem(&signature_item, PR_FALSE);
|
| + return true;
|
| +}
|
| +
|
| RSAPrivateKey::RSAPrivateKey() : key_(NULL), public_key_(NULL) {
|
| EnsureNSSInit();
|
| }
|
|
|