Chromium Code Reviews| Index: net/cert/x509_util.cc |
| =================================================================== |
| --- net/cert/x509_util.cc (revision 229411) |
| +++ net/cert/x509_util.cc (working copy) |
| @@ -4,13 +4,25 @@ |
| #include "net/cert/x509_util.h" |
| +#include "base/basictypes.h" |
| +#include "base/memory/scoped_ptr.h" |
| #include "base/time/time.h" |
| +#include "crypto/ec_private_key.h" |
| +#include "crypto/rsa_private_key.h" |
| #include "net/cert/x509_certificate.h" |
| namespace net { |
| namespace x509_util { |
| +// RSA keys created by CreateKeyAndSelfSignedCert will be of this length. |
| +static const uint16 kRSAKeyLength = 1024; |
|
Ryan Sleevi
2013/10/18 22:45:23
Switching to SHA-256 but using RSA-1024 provides n
bemasc
2013/10/19 00:47:45
Done.
bemasc
2013/10/21 17:46:06
I've switched this back to RSA-1024. juberti@ rec
|
| + |
| +// Certificates created by CreateKeyAndSelfSignedCert will be signed with this |
| +// digest algorithm. |
|
Ryan Sleevi
2013/10/18 22:45:23
It's a bit odd, this comment, since you use it in
bemasc
2013/10/19 00:47:45
Fixed.
|
| +static const crypto::HMAC::HashAlgorithm kSignatureDigestAlgorithm = |
| + crypto::HMAC::SHA256; |
| + |
| ClientCertSorter::ClientCertSorter() : now_(base::Time::Now()) {} |
| bool ClientCertSorter::operator()( |
| @@ -44,6 +56,68 @@ |
| return a_intermediates.size() < b_intermediates.size(); |
| } |
| +bool CreateKeyAndDomainBoundCertEC(const std::string& domain, |
| + uint32 serial_number, |
| + base::Time not_valid_before, |
| + base::Time not_valid_after, |
| + crypto::ECPrivateKey** key, |
| + std::string* der_cert) { |
| + scoped_ptr<crypto::ECPrivateKey> new_key(crypto::ECPrivateKey::Create()); |
| + if (!new_key.get()) |
| + return false; |
| + |
| + bool success = CreateDomainBoundCertECInternal(new_key.get(), |
| + kSignatureDigestAlgorithm, |
| + domain, |
| + serial_number, |
| + not_valid_before, |
| + not_valid_after, |
| + der_cert); |
| + if (success) { |
| + *key = new_key.release(); |
| + } |
| + return success; |
| +} |
| + |
| +bool CreateKeyAndSelfSignedCert(const std::string& subject, |
| + uint32 serial_number, |
| + base::Time not_valid_before, |
| + base::Time not_valid_after, |
| + crypto::RSAPrivateKey** key, |
| + std::string* der_cert) { |
| + scoped_ptr<crypto::RSAPrivateKey> new_key( |
| + crypto::RSAPrivateKey::Create(kRSAKeyLength)); |
| + if (!new_key.get()) |
| + return false; |
| + |
| + bool success = CreateSelfSignedCertInternal(new_key.get(), |
| + kSignatureDigestAlgorithm, |
| + subject, |
| + serial_number, |
| + not_valid_before, |
| + not_valid_after, |
| + der_cert); |
| + if (success) { |
| + *key = new_key.release(); |
| + } |
| + return success; |
| +} |
| + |
| +bool CreateSha1SelfSignedCert(crypto::RSAPrivateKey* key, |
| + const std::string& subject, |
| + uint32 serial_number, |
| + base::Time not_valid_before, |
| + base::Time not_valid_after, |
| + std::string* der_cert) { |
| + return CreateSelfSignedCertInternal(key, |
| + crypto::HMAC::SHA1, |
| + subject, |
| + serial_number, |
| + not_valid_before, |
| + not_valid_after, |
| + der_cert); |
| +} |
| + |
| } // namespace x509_util |
| } // namespace net |