diff options
author | snej@chromium.org <snej@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-02 17:47:02 +0000 |
---|---|---|
committer | snej@chromium.org <snej@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-02 17:47:02 +0000 |
commit | cdafbff7b3e83702c20b0f754a6d27159b78c06c (patch) | |
tree | 5b66619f7822e7189e8cc3287365ed49808d3c72 /net/base/x509_certificate_nss.cc | |
parent | 078a10a1c64458e5f5c4fdf57edbbc935dd145ca (diff) | |
download | chromium_src-cdafbff7b3e83702c20b0f754a6d27159b78c06c.zip chromium_src-cdafbff7b3e83702c20b0f754a6d27159b78c06c.tar.gz chromium_src-cdafbff7b3e83702c20b0f754a6d27159b78c06c.tar.bz2 |
Mac: implement <keygen> support, including adding generated cert to the Keychain.
BUG=34607
TEST=KeygenHandlerTest.SmokeTest
Review URL: http://codereview.chromium.org/652137
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@40387 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/x509_certificate_nss.cc')
-rw-r--r-- | net/base/x509_certificate_nss.cc | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/net/base/x509_certificate_nss.cc b/net/base/x509_certificate_nss.cc index 05ed979..b25688e 100644 --- a/net/base/x509_certificate_nss.cc +++ b/net/base/x509_certificate_nss.cc @@ -617,11 +617,16 @@ X509Certificate::OSCertHandle X509Certificate::CreateOSCertHandleFromBytes( const char* data, int length) { base::EnsureNSSInit(); - SECItem der_cert; - der_cert.data = reinterpret_cast<unsigned char*>(const_cast<char*>(data)); - der_cert.len = length; - return CERT_NewTempCertificate(CERT_GetDefaultCertDB(), &der_cert, - NULL, PR_FALSE, PR_TRUE); + // Make a copy of |data| since CERT_DecodeCertPackage might modify it. + char* data_copy = new char[length]; + memcpy(data_copy, data, length); + + // Parse into a certificate structure. + CERTCertificate* cert = CERT_DecodeCertFromPackage(data_copy, length); + delete [] data_copy; + if (!cert) + LOG(ERROR) << "Couldn't parse a certificate from " << length << " bytes"; + return cert; } // static |