ct_test_util.cc revision f2477e01787aa58f445919b809d89e252beef54f
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "net/test/ct_test_util.h" 6 7#include <string> 8#include <vector> 9 10#include "base/strings/string_number_conversions.h" 11#include "base/strings/string_piece.h" 12#include "base/strings/string_util.h" 13#include "net/cert/ct_serialization.h" 14#include "net/cert/signed_certificate_timestamp.h" 15#include "net/cert/x509_certificate.h" 16 17namespace net { 18 19namespace ct { 20 21namespace { 22 23std::string HexToBytes(const char* hex_data) { 24 std::vector<uint8> output; 25 std::string result; 26 if (base::HexStringToBytes(hex_data, &output)) 27 result.assign(reinterpret_cast<const char*>(&output[0]), output.size()); 28 return result; 29} 30 31// The following test vectors are from 32// http://code.google.com/p/certificate-transparency 33 34const char kDefaultDerCert[] = 35 "308202ca30820233a003020102020106300d06092a864886f70d01010505003055310b3009" 36 "06035504061302474231243022060355040a131b4365727469666963617465205472616e73" 37 "706172656e6379204341310e300c0603550408130557616c65733110300e06035504071307" 38 "4572772057656e301e170d3132303630313030303030305a170d3232303630313030303030" 39 "305a3052310b30090603550406130247423121301f060355040a1318436572746966696361" 40 "7465205472616e73706172656e6379310e300c0603550408130557616c65733110300e0603" 41 "55040713074572772057656e30819f300d06092a864886f70d010101050003818d00308189" 42 "02818100b1fa37936111f8792da2081c3fe41925008531dc7f2c657bd9e1de4704160b4c9f" 43 "19d54ada4470404c1c51341b8f1f7538dddd28d9aca48369fc5646ddcc7617f8168aae5b41" 44 "d43331fca2dadfc804d57208949061f9eef902ca47ce88c644e000f06eeeccabdc9dd2f68a" 45 "22ccb09dc76e0dbc73527765b1a37a8c676253dcc10203010001a381ac3081a9301d060355" 46 "1d0e041604146a0d982a3b62c44b6d2ef4e9bb7a01aa9cb798e2307d0603551d2304763074" 47 "80145f9d880dc873e654d4f80dd8e6b0c124b447c355a159a4573055310b30090603550406" 48 "1302474231243022060355040a131b4365727469666963617465205472616e73706172656e" 49 "6379204341310e300c0603550408130557616c65733110300e060355040713074572772057" 50 "656e82010030090603551d1304023000300d06092a864886f70d010105050003818100171c" 51 "d84aac414a9a030f22aac8f688b081b2709b848b4e5511406cd707fed028597a9faefc2eee" 52 "2978d633aaac14ed3235197da87e0f71b8875f1ac9e78b281749ddedd007e3ecf50645f8cb" 53 "f667256cd6a1647b5e13203bb8582de7d6696f656d1c60b95f456b7fcf338571908f1c6972" 54 "7d24c4fccd249295795814d1dac0e6"; 55 56const char kDefaultIssuerKeyHash[] = 57 "02adddca08b8bf9861f035940c940156d8350fdff899a6239c6bd77255b8f8fc"; 58 59const char kDefaultDerTbsCert[] = 60 "30820233a003020102020107300d06092a864886f70d01010505003055310b300906035504" 61 "061302474231243022060355040a131b4365727469666963617465205472616e7370617265" 62 "6e6379204341310e300c0603550408130557616c65733110300e0603550407130745727720" 63 "57656e301e170d3132303630313030303030305a170d3232303630313030303030305a3052" 64 "310b30090603550406130247423121301f060355040a131843657274696669636174652054" 65 "72616e73706172656e6379310e300c0603550408130557616c65733110300e060355040713" 66 "074572772057656e30819f300d06092a864886f70d010101050003818d0030818902818100" 67 "beef98e7c26877ae385f75325a0c1d329bedf18faaf4d796bf047eb7e1ce15c95ba2f80ee4" 68 "58bd7db86f8a4b252191a79bd700c38e9c0389b45cd4dc9a120ab21e0cb41cd0e72805a410" 69 "cd9c5bdb5d4927726daf1710f60187377ea25b1a1e39eed0b88119dc154dc68f7da8e30caf" 70 "158a33e6c9509f4a05b01409ff5dd87eb50203010001a381ac3081a9301d0603551d0e0416" 71 "04142031541af25c05ffd8658b6843794f5e9036f7b4307d0603551d230476307480145f9d" 72 "880dc873e654d4f80dd8e6b0c124b447c355a159a4573055310b3009060355040613024742" 73 "31243022060355040a131b4365727469666963617465205472616e73706172656e63792043" 74 "41310e300c0603550408130557616c65733110300e060355040713074572772057656e8201" 75 "0030090603551d1304023000"; 76 77const char kTestDigitallySigned[] = 78 "0403004730450220606e10ae5c2d5a1b0aed49dc4937f48de71a4e9784e9c208dfbfe9ef53" 79 "6cf7f2022100beb29c72d7d06d61d06bdb38a069469aa86fe12e18bb7cc45689a2c0187ef5" 80 "a5"; 81 82const char kTestSignedCertificateTimestamp[] = 83 "00df1c2ec11500945247a96168325ddc5c7959e8f7c6d388fc002e0bbd3f74d7640000013d" 84 "db27ded900000403004730450220606e10ae5c2d5a1b0aed49dc4937f48de71a4e9784e9c2" 85 "08dfbfe9ef536cf7f2022100beb29c72d7d06d61d06bdb38a069469aa86fe12e18bb7cc456" 86 "89a2c0187ef5a5"; 87 88const char kEcP256PublicKey[] = 89 "3059301306072a8648ce3d020106082a8648ce3d0301070342000499783cb14533c0161a5a" 90 "b45bf95d08a29cd0ea8dd4c84274e2be59ad15c676960cf0afa1074a57ac644b23479e5b3f" 91 "b7b245eb4b420ef370210371a944beaceb"; 92 93const char kTestKeyId[] = 94 "df1c2ec11500945247a96168325ddc5c7959e8f7c6d388fc002e0bbd3f74d764"; 95 96const char kTestSCTSignatureData[] = 97 "30450220606e10ae5c2d5a1b0aed49dc4937f48de71a4e9784e9c208dfbfe9ef536cf7f202" 98 "2100beb29c72d7d06d61d06bdb38a069469aa86fe12e18bb7cc45689a2c0187ef5a5"; 99 100const char kTestSCTPrecertSignatureData[] = 101 "30450220482f6751af35dba65436be1fd6640f3dbf9a41429495924530288fa3e5e23e0602" 102 "2100e4edc0db3ac572b1e2f5e8ab6a680653987dcf41027dfeffa105519d89edbf08"; 103 104} // namespace 105 106void GetX509CertLogEntry(LogEntry* entry) { 107 entry->type = ct::LogEntry::LOG_ENTRY_TYPE_X509; 108 entry->leaf_certificate = HexToBytes(kDefaultDerCert); 109} 110 111std::string GetDerEncodedX509Cert() { return HexToBytes(kDefaultDerCert); } 112 113void GetPrecertLogEntry(LogEntry* entry) { 114 entry->type = ct::LogEntry::LOG_ENTRY_TYPE_PRECERT; 115 std::string issuer_hash(HexToBytes(kDefaultIssuerKeyHash)); 116 memcpy(entry->issuer_key_hash.data, issuer_hash.data(), issuer_hash.size()); 117 entry->tbs_certificate = HexToBytes(kDefaultDerTbsCert); 118} 119 120std::string GetTestDigitallySigned() { 121 return HexToBytes(kTestDigitallySigned); 122} 123 124std::string GetTestSignedCertificateTimestamp() { 125 return HexToBytes(kTestSignedCertificateTimestamp); 126} 127 128std::string GetTestPublicKey() { 129 return HexToBytes(kEcP256PublicKey); 130} 131 132std::string GetTestPublicKeyId() { 133 return HexToBytes(kTestKeyId); 134} 135 136void GetX509CertSCT(scoped_refptr<SignedCertificateTimestamp>* sct_ref) { 137 CHECK(sct_ref != NULL); 138 *sct_ref = new SignedCertificateTimestamp(); 139 SignedCertificateTimestamp *const sct(sct_ref->get()); 140 sct->log_id = HexToBytes(kTestKeyId); 141 // Time the log issued a SCT for this certificate, which is 142 // Fri Apr 5 10:04:16.089 2013 143 sct->timestamp = base::Time::UnixEpoch() + 144 base::TimeDelta::FromMilliseconds(GG_INT64_C(1365181456089)); 145 sct->extensions.clear(); 146 147 sct->signature.hash_algorithm = ct::DigitallySigned::HASH_ALGO_SHA256; 148 sct->signature.signature_algorithm = ct::DigitallySigned::SIG_ALGO_ECDSA; 149 sct->signature.signature_data = HexToBytes(kTestSCTSignatureData); 150} 151 152void GetPrecertSCT(scoped_refptr<SignedCertificateTimestamp>* sct_ref) { 153 CHECK(sct_ref != NULL); 154 *sct_ref = new SignedCertificateTimestamp(); 155 SignedCertificateTimestamp *const sct(sct_ref->get()); 156 sct->log_id = HexToBytes(kTestKeyId); 157 // Time the log issued a SCT for this Precertificate, which is 158 // Fri Apr 5 10:04:16.275 2013 159 sct->timestamp = base::Time::UnixEpoch() + 160 base::TimeDelta::FromMilliseconds(GG_INT64_C(1365181456275)); 161 sct->extensions.clear(); 162 163 sct->signature.hash_algorithm = ct::DigitallySigned::HASH_ALGO_SHA256; 164 sct->signature.signature_algorithm = ct::DigitallySigned::SIG_ALGO_ECDSA; 165 sct->signature.signature_data = HexToBytes(kTestSCTPrecertSignatureData); 166} 167 168std::string GetDefaultIssuerKeyHash() { 169 return HexToBytes(kDefaultIssuerKeyHash); 170} 171 172} // namespace ct 173 174} // namespace net 175