Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(248)

Unified Diff: crypto/rsa_private_key_nss.cc

Issue 18697003: Introduce RSAPrivateKey::SignDigest (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
}

Powered by Google App Engine
This is Rietveld 408576698