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

Side by Side Diff: content/child/webcrypto/platform_crypto_nss.cc

Issue 205913002: [webcrypto] Add JWK RSA public key export for NSS. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/child/webcrypto/platform_crypto.h" 5 #include "content/child/webcrypto/platform_crypto.h"
6 6
7 #include <cryptohi.h> 7 #include <cryptohi.h>
8 #include <pk11pub.h> 8 #include <pk11pub.h>
9 #include <secerr.h> 9 #include <secerr.h>
10 #include <sechash.h> 10 #include <sechash.h>
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 // To understand this workaround see the fix for 981170: 535 // To understand this workaround see the fix for 981170:
536 // https://hg.mozilla.org/projects/nss/rev/753bb69e543c 536 // https://hg.mozilla.org/projects/nss/rev/753bb69e543c
537 if (!NSS_VersionCheck("3.16") && PORT_GetError() == SEC_ERROR_BAD_DATA) 537 if (!NSS_VersionCheck("3.16") && PORT_GetError() == SEC_ERROR_BAD_DATA)
538 return Status::Error(); 538 return Status::Error();
539 #endif 539 #endif
540 540
541 *unwrapped_key = new_key.Pass(); 541 *unwrapped_key = new_key.Pass();
542 return Status::Success(); 542 return Status::Success();
543 } 543 }
544 544
545 void CopySECItemToVector(const SECItem& item, std::vector<uint8>* out) {
546 out->assign(item.data, item.data + item.len);
547 }
548
545 // From PKCS#1 [http://tools.ietf.org/html/rfc3447]: 549 // From PKCS#1 [http://tools.ietf.org/html/rfc3447]:
546 // 550 //
547 // RSAPrivateKey ::= SEQUENCE { 551 // RSAPrivateKey ::= SEQUENCE {
548 // version Version, 552 // version Version,
549 // modulus INTEGER, -- n 553 // modulus INTEGER, -- n
550 // publicExponent INTEGER, -- e 554 // publicExponent INTEGER, -- e
551 // privateExponent INTEGER, -- d 555 // privateExponent INTEGER, -- d
552 // prime1 INTEGER, -- p 556 // prime1 INTEGER, -- p
553 // prime2 INTEGER, -- q 557 // prime2 INTEGER, -- q
554 // exponent1 INTEGER, -- d mod (p-1) 558 // exponent1 INTEGER, -- d mod (p-1)
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 return Status::Error(); 792 return Status::Error();
789 793
790 DCHECK(spki_der->data); 794 DCHECK(spki_der->data);
791 DCHECK(spki_der->len); 795 DCHECK(spki_der->len);
792 796
793 *buffer = CreateArrayBuffer(spki_der->data, spki_der->len); 797 *buffer = CreateArrayBuffer(spki_der->data, spki_der->len);
794 798
795 return Status::Success(); 799 return Status::Success();
796 } 800 }
797 801
802 Status ExportRsaPublicKey(PublicKey* key,
803 std::vector<uint8>* modulus,
804 std::vector<uint8>* public_exponent) {
805 DCHECK(key);
806 DCHECK(key->key());
807 if (key->key()->keyType != rsaKey)
808 return Status::ErrorUnsupported();
809 CopySECItemToVector(key->key()->u.rsa.modulus, modulus);
810 CopySECItemToVector(key->key()->u.rsa.publicExponent, public_exponent);
811 if (modulus->empty() || public_exponent->empty())
812 return Status::ErrorUnexpected();
813 return Status::Success();
814 }
815
798 Status ExportKeyPkcs8(PrivateKey* key, 816 Status ExportKeyPkcs8(PrivateKey* key,
799 const blink::WebCryptoKeyAlgorithm& key_algorithm, 817 const blink::WebCryptoKeyAlgorithm& key_algorithm,
800 blink::WebArrayBuffer* buffer) { 818 blink::WebArrayBuffer* buffer) {
801 // TODO(eroman): Support other RSA key types as they are added to Blink. 819 // TODO(eroman): Support other RSA key types as they are added to Blink.
802 if (key_algorithm.id() != blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5 && 820 if (key_algorithm.id() != blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5 &&
803 key_algorithm.id() != blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5) 821 key_algorithm.id() != blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5)
804 return Status::ErrorUnsupported(); 822 return Status::ErrorUnsupported();
805 823
806 const SECOidTag algorithm = SEC_OID_PKCS1_RSA_ENCRYPTION; 824 const SECOidTag algorithm = SEC_OID_PKCS1_RSA_ENCRYPTION;
807 const int kPrivateKeyInfoVersion = 0; 825 const int kPrivateKeyInfoVersion = 0;
(...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after
1474 key_algorithm, 1492 key_algorithm,
1475 usage_mask); 1493 usage_mask);
1476 return Status::Success(); 1494 return Status::Success();
1477 } 1495 }
1478 1496
1479 } // namespace platform 1497 } // namespace platform
1480 1498
1481 } // namespace webcrypto 1499 } // namespace webcrypto
1482 1500
1483 } // namespace content 1501 } // namespace content
OLDNEW
« no previous file with comments | « content/child/webcrypto/platform_crypto.h ('k') | content/child/webcrypto/platform_crypto_openssl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698