15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/cert/x509_util.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <algorithm> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/memory/ref_counted.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/memory/scoped_ptr.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "crypto/rsa_private_key.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/cert/x509_certificate.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace x509_util { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(X509UtilTest, SortClientCertificates) { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CertificateList certs; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time now = base::Time::Now(); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::TimeDelta five_days = base::TimeDelta::FromDays(5); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) certs.push_back(scoped_refptr<X509Certificate>(NULL)); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) certs.push_back(new X509Certificate( 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "expired", "expired", 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time::UnixEpoch(), base::Time::UnixEpoch())); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) certs.push_back(new X509Certificate( 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "not yet valid", "not yet valid", 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time::Max(), base::Time::Max())); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) certs.push_back(new X509Certificate( 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "older cert", "older cert", 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) now - five_days, now + five_days)); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) certs.push_back(scoped_refptr<X509Certificate>(NULL)); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) certs.push_back(new X509Certificate( 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "newer cert", "newer cert", 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) now - base::TimeDelta::FromDays(3), now + five_days)); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::sort(certs.begin(), certs.end(), ClientCertSorter()); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(certs[0].get()); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("newer cert", certs[0]->subject().common_name); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(certs[1].get()); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("older cert", certs[1]->subject().common_name); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(certs[2].get()); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("not yet valid", certs[2]->subject().common_name); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(certs[3].get()); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("expired", certs[3]->subject().common_name); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(certs[4].get()); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(certs[5].get()); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// This test creates a self-signed cert and a private key and then verifies the 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// content of the certificate. 570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST(X509UtilTest, CreateKeyAndSelfSigned) { 580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_ptr<crypto::RSAPrivateKey> private_key; 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string der_cert; 610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ASSERT_TRUE(x509_util::CreateKeyAndSelfSignedCert( 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "CN=subject", 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1, 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Time::Now(), 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Time::Now() + base::TimeDelta::FromDays(1), 660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &private_key, 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &der_cert)); 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ASSERT_TRUE(private_key.get()); 700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_refptr<X509Certificate> cert(X509Certificate::CreateFromBytes( 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch der_cert.data(), der_cert.size())); 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(cert.get()); 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ("subject", cert->subject().GetDisplayName()); 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(cert->HasExpired()); 770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// This test creates a self-signed cert from a private key and then verifies the 800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// content of the certificate. 810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST(X509UtilTest, CreateSelfSigned) { 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const uint8 private_key_info[] = { 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x30, 0x82, 0x02, 0x78, 0x02, 0x01, 0x00, 0x30, 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x02, 0x62, 0x30, 0x82, 0x02, 0x5e, 0x02, 0x01, 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x00, 0x02, 0x81, 0x81, 0x00, 0xb8, 0x7f, 0x2b, 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x20, 0xdc, 0x7c, 0x9b, 0x0c, 0xdc, 0x51, 0x61, 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x99, 0x0d, 0x36, 0x0f, 0xd4, 0x66, 0x88, 0x08, 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x55, 0x84, 0xd5, 0x3a, 0xbf, 0x2b, 0xa4, 0x64, 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x85, 0x7b, 0x0c, 0x04, 0x13, 0x3f, 0x8d, 0xf4, 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xbc, 0x38, 0x0d, 0x49, 0xfe, 0x6b, 0xc4, 0x5a, 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xb0, 0x40, 0x53, 0x3a, 0xd7, 0x66, 0x09, 0x0f, 94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x9e, 0x36, 0x74, 0x30, 0xda, 0x8a, 0x31, 0x4f, 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x1f, 0x14, 0x50, 0xd7, 0xc7, 0x20, 0x94, 0x17, 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xde, 0x4e, 0xb9, 0x57, 0x5e, 0x7e, 0x0a, 0xe5, 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xb2, 0x65, 0x7a, 0x89, 0x4e, 0xb6, 0x47, 0xff, 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x1c, 0xbd, 0xb7, 0x38, 0x13, 0xaf, 0x47, 0x85, 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x84, 0x32, 0x33, 0xf3, 0x17, 0x49, 0xbf, 0xe9, 100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x96, 0xd0, 0xd6, 0x14, 0x6f, 0x13, 0x8d, 0xc5, 101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xfc, 0x2c, 0x72, 0xba, 0xac, 0xea, 0x7e, 0x18, 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x53, 0x56, 0xa6, 0x83, 0xa2, 0xce, 0x93, 0x93, 103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xe7, 0x1f, 0x0f, 0xe6, 0x0f, 0x02, 0x03, 0x01, 104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x00, 0x01, 0x02, 0x81, 0x80, 0x03, 0x61, 0x89, 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x37, 0xcb, 0xf2, 0x98, 0xa0, 0xce, 0xb4, 0xcb, 106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x16, 0x13, 0xf0, 0xe6, 0xaf, 0x5c, 0xc5, 0xa7, 107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x69, 0x71, 0xca, 0xba, 0x8d, 0xe0, 0x4d, 0xdd, 108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xed, 0xb8, 0x48, 0x8b, 0x16, 0x93, 0x36, 0x95, 109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xc2, 0x91, 0x40, 0x65, 0x17, 0xbd, 0x7f, 0xd6, 110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xad, 0x9e, 0x30, 0x28, 0x46, 0xe4, 0x3e, 0xcc, 111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x43, 0x78, 0xf9, 0xfe, 0x1f, 0x33, 0x23, 0x1e, 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x31, 0x12, 0x9d, 0x3c, 0xa7, 0x08, 0x82, 0x7b, 113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x7d, 0x25, 0x4e, 0x5e, 0x19, 0xa8, 0x9b, 0xed, 114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x86, 0xb2, 0xcb, 0x3c, 0xfe, 0x4e, 0xa1, 0xfa, 115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x62, 0x87, 0x3a, 0x17, 0xf7, 0x60, 0xec, 0x38, 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x29, 0xe8, 0x4f, 0x34, 0x9f, 0x76, 0x9d, 0xee, 117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xa3, 0xf6, 0x85, 0x6b, 0x84, 0x43, 0xc9, 0x1e, 118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x01, 0xff, 0xfd, 0xd0, 0x29, 0x4c, 0xfa, 0x8e, 119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x57, 0x0c, 0xc0, 0x71, 0xa5, 0xbb, 0x88, 0x46, 120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x29, 0x5c, 0xc0, 0x4f, 0x01, 0x02, 0x41, 0x00, 121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xf5, 0x83, 0xa4, 0x64, 0x4a, 0xf2, 0xdd, 0x8c, 122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x2c, 0xed, 0xa8, 0xd5, 0x60, 0x5a, 0xe4, 0xc7, 123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xcc, 0x61, 0xcd, 0x38, 0x42, 0x20, 0xd3, 0x82, 124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x18, 0xf2, 0x35, 0x00, 0x72, 0x2d, 0xf7, 0x89, 125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x80, 0x67, 0xb5, 0x93, 0x05, 0x5f, 0xdd, 0x42, 126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xba, 0x16, 0x1a, 0xea, 0x15, 0xc6, 0xf0, 0xb8, 127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x8c, 0xbc, 0xbf, 0x54, 0x9e, 0xf1, 0xc1, 0xb2, 128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xb3, 0x8b, 0xb6, 0x26, 0x02, 0x30, 0xc4, 0x81, 129eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x02, 0x41, 0x00, 0xc0, 0x60, 0x62, 0x80, 0xe1, 130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x22, 0x78, 0xf6, 0x9d, 0x83, 0x18, 0xeb, 0x72, 131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x45, 0xd7, 0xc8, 0x01, 0x7f, 0xa9, 0xca, 0x8f, 132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x7d, 0xd6, 0xb8, 0x31, 0x2b, 0x84, 0x7f, 0x62, 133eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xd9, 0xa9, 0x22, 0x17, 0x7d, 0x06, 0x35, 0x6c, 134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xf3, 0xc1, 0x94, 0x17, 0x85, 0x5a, 0xaf, 0x9c, 135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x5c, 0x09, 0x3c, 0xcf, 0x2f, 0x44, 0x9d, 0xb6, 136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x52, 0x68, 0x5f, 0xf9, 0x59, 0xc8, 0x84, 0x2b, 137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x39, 0x22, 0x8f, 0x02, 0x41, 0x00, 0xb2, 0x04, 138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xe2, 0x0e, 0x56, 0xca, 0x03, 0x1a, 0xc0, 0xf9, 139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x12, 0x92, 0xa5, 0x6b, 0x42, 0xb8, 0x1c, 0xda, 140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x4d, 0x93, 0x9d, 0x5f, 0x6f, 0xfd, 0xc5, 0x58, 141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xda, 0x55, 0x98, 0x74, 0xfc, 0x28, 0x17, 0x93, 142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x1b, 0x75, 0x9f, 0x50, 0x03, 0x7f, 0x7e, 0xae, 143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xc8, 0x95, 0x33, 0x75, 0x2c, 0xd6, 0xa4, 0x35, 144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xb8, 0x06, 0x03, 0xba, 0x08, 0x59, 0x2b, 0x17, 145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x02, 0xdc, 0x4c, 0x7a, 0x50, 0x01, 0x02, 0x41, 146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x00, 0x9d, 0xdb, 0x39, 0x59, 0x09, 0xe4, 0x30, 147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xa0, 0x24, 0xf5, 0xdb, 0x2f, 0xf0, 0x2f, 0xf1, 148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x75, 0x74, 0x0d, 0x5e, 0xb5, 0x11, 0x73, 0xb0, 149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x0a, 0xaa, 0x86, 0x4c, 0x0d, 0xff, 0x7e, 0x1d, 150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xb4, 0x14, 0xd4, 0x09, 0x91, 0x33, 0x5a, 0xfd, 151eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xa0, 0x58, 0x80, 0x9b, 0xbe, 0x78, 0x2e, 0x69, 152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x82, 0x15, 0x7c, 0x72, 0xf0, 0x7b, 0x18, 0x39, 153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xff, 0x6e, 0xeb, 0xc6, 0x86, 0xf5, 0xb4, 0xc7, 154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x6f, 0x02, 0x41, 0x00, 0x8d, 0x1a, 0x37, 0x0f, 155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x76, 0xc4, 0x82, 0xfa, 0x5c, 0xc3, 0x79, 0x35, 156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x3e, 0x70, 0x8a, 0xbf, 0x27, 0x49, 0xb0, 0x99, 157eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x63, 0xcb, 0x77, 0x5f, 0xa8, 0x82, 0x65, 0xf6, 158eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x03, 0x52, 0x51, 0xf1, 0xae, 0x2e, 0x05, 0xb3, 159eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xc6, 0xa4, 0x92, 0xd1, 0xce, 0x6c, 0x72, 0xfb, 160eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x21, 0xb3, 0x02, 0x87, 0xe4, 0xfd, 0x61, 0xca, 161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x00, 0x42, 0x19, 0xf0, 0xda, 0x5a, 0x53, 0xe3, 162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xb1, 0xc5, 0x15, 0xf3 163eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }; 164eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 165eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<uint8> input; 166eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch input.resize(sizeof(private_key_info)); 167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch memcpy(&input.front(), private_key_info, sizeof(private_key_info)); 168eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_ptr<crypto::RSAPrivateKey> private_key( 1700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(input)); 171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(private_key.get()); 172eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) std::string der_cert; 174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(x509_util::CreateSelfSignedCert( 175eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private_key.get(), 1760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) x509_util::DIGEST_SHA1, 177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "CN=subject", 178eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1, 179eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Time::Now(), 180eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Time::Now() + base::TimeDelta::FromDays(1), 181eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &der_cert)); 182eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_refptr<X509Certificate> cert = 1840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) X509Certificate::CreateFromBytes(der_cert.data(), der_cert.size()); 185eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(cert.get()); 186eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ("subject", cert->subject().GetDisplayName()); 188eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(cert->HasExpired()); 189eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace x509_util 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 194