1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker #include "net/cert/x509_util.h"
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker #include <algorithm>
8*6777b538SAndroid Build Coastguard Worker #include <memory>
9*6777b538SAndroid Build Coastguard Worker
10*6777b538SAndroid Build Coastguard Worker #include "base/memory/ref_counted.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h"
12*6777b538SAndroid Build Coastguard Worker #include "crypto/rsa_private_key.h"
13*6777b538SAndroid Build Coastguard Worker #include "crypto/signature_verifier.h"
14*6777b538SAndroid Build Coastguard Worker #include "net/cert/x509_certificate.h"
15*6777b538SAndroid Build Coastguard Worker #include "net/test/cert_test_util.h"
16*6777b538SAndroid Build Coastguard Worker #include "net/test/key_util.h"
17*6777b538SAndroid Build Coastguard Worker #include "net/test/test_data_directory.h"
18*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
19*6777b538SAndroid Build Coastguard Worker #include "third_party/boringssl/src/include/openssl/evp.h"
20*6777b538SAndroid Build Coastguard Worker #include "third_party/boringssl/src/include/openssl/rsa.h"
21*6777b538SAndroid Build Coastguard Worker
22*6777b538SAndroid Build Coastguard Worker namespace net::x509_util {
23*6777b538SAndroid Build Coastguard Worker
24*6777b538SAndroid Build Coastguard Worker // This test creates a self-signed cert and a private key and then verifies the
25*6777b538SAndroid Build Coastguard Worker // content of the certificate.
TEST(X509UtilTest,CreateKeyAndSelfSigned)26*6777b538SAndroid Build Coastguard Worker TEST(X509UtilTest, CreateKeyAndSelfSigned) {
27*6777b538SAndroid Build Coastguard Worker std::unique_ptr<crypto::RSAPrivateKey> private_key;
28*6777b538SAndroid Build Coastguard Worker
29*6777b538SAndroid Build Coastguard Worker std::string der_cert;
30*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(x509_util::CreateKeyAndSelfSignedCert(
31*6777b538SAndroid Build Coastguard Worker "CN=subject, OU=org unit, O=org, C=CA", 1, base::Time::Now(),
32*6777b538SAndroid Build Coastguard Worker base::Time::Now() + base::Days(1), &private_key, &der_cert));
33*6777b538SAndroid Build Coastguard Worker
34*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(private_key.get());
35*6777b538SAndroid Build Coastguard Worker
36*6777b538SAndroid Build Coastguard Worker scoped_refptr<X509Certificate> cert(
37*6777b538SAndroid Build Coastguard Worker X509Certificate::CreateFromBytes(base::as_byte_span(der_cert)));
38*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(cert.get());
39*6777b538SAndroid Build Coastguard Worker
40*6777b538SAndroid Build Coastguard Worker EXPECT_EQ("subject", cert->subject().common_name);
41*6777b538SAndroid Build Coastguard Worker EXPECT_EQ("org unit", cert->subject().organization_unit_names[0]);
42*6777b538SAndroid Build Coastguard Worker EXPECT_EQ("org", cert->subject().organization_names[0]);
43*6777b538SAndroid Build Coastguard Worker EXPECT_EQ("CA", cert->subject().country_name);
44*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(cert->HasExpired());
45*6777b538SAndroid Build Coastguard Worker }
46*6777b538SAndroid Build Coastguard Worker
47*6777b538SAndroid Build Coastguard Worker // This test creates a self-signed cert from a private key and then verifies the
48*6777b538SAndroid Build Coastguard Worker // content of the certificate.
TEST(X509UtilTest,CreateSelfSigned)49*6777b538SAndroid Build Coastguard Worker TEST(X509UtilTest, CreateSelfSigned) {
50*6777b538SAndroid Build Coastguard Worker const uint8_t private_key_info[] = {
51*6777b538SAndroid Build Coastguard Worker 0x30, 0x82, 0x02, 0x78, 0x02, 0x01, 0x00, 0x30,
52*6777b538SAndroid Build Coastguard Worker 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
53*6777b538SAndroid Build Coastguard Worker 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82,
54*6777b538SAndroid Build Coastguard Worker 0x02, 0x62, 0x30, 0x82, 0x02, 0x5e, 0x02, 0x01,
55*6777b538SAndroid Build Coastguard Worker 0x00, 0x02, 0x81, 0x81, 0x00, 0xb8, 0x7f, 0x2b,
56*6777b538SAndroid Build Coastguard Worker 0x20, 0xdc, 0x7c, 0x9b, 0x0c, 0xdc, 0x51, 0x61,
57*6777b538SAndroid Build Coastguard Worker 0x99, 0x0d, 0x36, 0x0f, 0xd4, 0x66, 0x88, 0x08,
58*6777b538SAndroid Build Coastguard Worker 0x55, 0x84, 0xd5, 0x3a, 0xbf, 0x2b, 0xa4, 0x64,
59*6777b538SAndroid Build Coastguard Worker 0x85, 0x7b, 0x0c, 0x04, 0x13, 0x3f, 0x8d, 0xf4,
60*6777b538SAndroid Build Coastguard Worker 0xbc, 0x38, 0x0d, 0x49, 0xfe, 0x6b, 0xc4, 0x5a,
61*6777b538SAndroid Build Coastguard Worker 0xb0, 0x40, 0x53, 0x3a, 0xd7, 0x66, 0x09, 0x0f,
62*6777b538SAndroid Build Coastguard Worker 0x9e, 0x36, 0x74, 0x30, 0xda, 0x8a, 0x31, 0x4f,
63*6777b538SAndroid Build Coastguard Worker 0x1f, 0x14, 0x50, 0xd7, 0xc7, 0x20, 0x94, 0x17,
64*6777b538SAndroid Build Coastguard Worker 0xde, 0x4e, 0xb9, 0x57, 0x5e, 0x7e, 0x0a, 0xe5,
65*6777b538SAndroid Build Coastguard Worker 0xb2, 0x65, 0x7a, 0x89, 0x4e, 0xb6, 0x47, 0xff,
66*6777b538SAndroid Build Coastguard Worker 0x1c, 0xbd, 0xb7, 0x38, 0x13, 0xaf, 0x47, 0x85,
67*6777b538SAndroid Build Coastguard Worker 0x84, 0x32, 0x33, 0xf3, 0x17, 0x49, 0xbf, 0xe9,
68*6777b538SAndroid Build Coastguard Worker 0x96, 0xd0, 0xd6, 0x14, 0x6f, 0x13, 0x8d, 0xc5,
69*6777b538SAndroid Build Coastguard Worker 0xfc, 0x2c, 0x72, 0xba, 0xac, 0xea, 0x7e, 0x18,
70*6777b538SAndroid Build Coastguard Worker 0x53, 0x56, 0xa6, 0x83, 0xa2, 0xce, 0x93, 0x93,
71*6777b538SAndroid Build Coastguard Worker 0xe7, 0x1f, 0x0f, 0xe6, 0x0f, 0x02, 0x03, 0x01,
72*6777b538SAndroid Build Coastguard Worker 0x00, 0x01, 0x02, 0x81, 0x80, 0x03, 0x61, 0x89,
73*6777b538SAndroid Build Coastguard Worker 0x37, 0xcb, 0xf2, 0x98, 0xa0, 0xce, 0xb4, 0xcb,
74*6777b538SAndroid Build Coastguard Worker 0x16, 0x13, 0xf0, 0xe6, 0xaf, 0x5c, 0xc5, 0xa7,
75*6777b538SAndroid Build Coastguard Worker 0x69, 0x71, 0xca, 0xba, 0x8d, 0xe0, 0x4d, 0xdd,
76*6777b538SAndroid Build Coastguard Worker 0xed, 0xb8, 0x48, 0x8b, 0x16, 0x93, 0x36, 0x95,
77*6777b538SAndroid Build Coastguard Worker 0xc2, 0x91, 0x40, 0x65, 0x17, 0xbd, 0x7f, 0xd6,
78*6777b538SAndroid Build Coastguard Worker 0xad, 0x9e, 0x30, 0x28, 0x46, 0xe4, 0x3e, 0xcc,
79*6777b538SAndroid Build Coastguard Worker 0x43, 0x78, 0xf9, 0xfe, 0x1f, 0x33, 0x23, 0x1e,
80*6777b538SAndroid Build Coastguard Worker 0x31, 0x12, 0x9d, 0x3c, 0xa7, 0x08, 0x82, 0x7b,
81*6777b538SAndroid Build Coastguard Worker 0x7d, 0x25, 0x4e, 0x5e, 0x19, 0xa8, 0x9b, 0xed,
82*6777b538SAndroid Build Coastguard Worker 0x86, 0xb2, 0xcb, 0x3c, 0xfe, 0x4e, 0xa1, 0xfa,
83*6777b538SAndroid Build Coastguard Worker 0x62, 0x87, 0x3a, 0x17, 0xf7, 0x60, 0xec, 0x38,
84*6777b538SAndroid Build Coastguard Worker 0x29, 0xe8, 0x4f, 0x34, 0x9f, 0x76, 0x9d, 0xee,
85*6777b538SAndroid Build Coastguard Worker 0xa3, 0xf6, 0x85, 0x6b, 0x84, 0x43, 0xc9, 0x1e,
86*6777b538SAndroid Build Coastguard Worker 0x01, 0xff, 0xfd, 0xd0, 0x29, 0x4c, 0xfa, 0x8e,
87*6777b538SAndroid Build Coastguard Worker 0x57, 0x0c, 0xc0, 0x71, 0xa5, 0xbb, 0x88, 0x46,
88*6777b538SAndroid Build Coastguard Worker 0x29, 0x5c, 0xc0, 0x4f, 0x01, 0x02, 0x41, 0x00,
89*6777b538SAndroid Build Coastguard Worker 0xf5, 0x83, 0xa4, 0x64, 0x4a, 0xf2, 0xdd, 0x8c,
90*6777b538SAndroid Build Coastguard Worker 0x2c, 0xed, 0xa8, 0xd5, 0x60, 0x5a, 0xe4, 0xc7,
91*6777b538SAndroid Build Coastguard Worker 0xcc, 0x61, 0xcd, 0x38, 0x42, 0x20, 0xd3, 0x82,
92*6777b538SAndroid Build Coastguard Worker 0x18, 0xf2, 0x35, 0x00, 0x72, 0x2d, 0xf7, 0x89,
93*6777b538SAndroid Build Coastguard Worker 0x80, 0x67, 0xb5, 0x93, 0x05, 0x5f, 0xdd, 0x42,
94*6777b538SAndroid Build Coastguard Worker 0xba, 0x16, 0x1a, 0xea, 0x15, 0xc6, 0xf0, 0xb8,
95*6777b538SAndroid Build Coastguard Worker 0x8c, 0xbc, 0xbf, 0x54, 0x9e, 0xf1, 0xc1, 0xb2,
96*6777b538SAndroid Build Coastguard Worker 0xb3, 0x8b, 0xb6, 0x26, 0x02, 0x30, 0xc4, 0x81,
97*6777b538SAndroid Build Coastguard Worker 0x02, 0x41, 0x00, 0xc0, 0x60, 0x62, 0x80, 0xe1,
98*6777b538SAndroid Build Coastguard Worker 0x22, 0x78, 0xf6, 0x9d, 0x83, 0x18, 0xeb, 0x72,
99*6777b538SAndroid Build Coastguard Worker 0x45, 0xd7, 0xc8, 0x01, 0x7f, 0xa9, 0xca, 0x8f,
100*6777b538SAndroid Build Coastguard Worker 0x7d, 0xd6, 0xb8, 0x31, 0x2b, 0x84, 0x7f, 0x62,
101*6777b538SAndroid Build Coastguard Worker 0xd9, 0xa9, 0x22, 0x17, 0x7d, 0x06, 0x35, 0x6c,
102*6777b538SAndroid Build Coastguard Worker 0xf3, 0xc1, 0x94, 0x17, 0x85, 0x5a, 0xaf, 0x9c,
103*6777b538SAndroid Build Coastguard Worker 0x5c, 0x09, 0x3c, 0xcf, 0x2f, 0x44, 0x9d, 0xb6,
104*6777b538SAndroid Build Coastguard Worker 0x52, 0x68, 0x5f, 0xf9, 0x59, 0xc8, 0x84, 0x2b,
105*6777b538SAndroid Build Coastguard Worker 0x39, 0x22, 0x8f, 0x02, 0x41, 0x00, 0xb2, 0x04,
106*6777b538SAndroid Build Coastguard Worker 0xe2, 0x0e, 0x56, 0xca, 0x03, 0x1a, 0xc0, 0xf9,
107*6777b538SAndroid Build Coastguard Worker 0x12, 0x92, 0xa5, 0x6b, 0x42, 0xb8, 0x1c, 0xda,
108*6777b538SAndroid Build Coastguard Worker 0x4d, 0x93, 0x9d, 0x5f, 0x6f, 0xfd, 0xc5, 0x58,
109*6777b538SAndroid Build Coastguard Worker 0xda, 0x55, 0x98, 0x74, 0xfc, 0x28, 0x17, 0x93,
110*6777b538SAndroid Build Coastguard Worker 0x1b, 0x75, 0x9f, 0x50, 0x03, 0x7f, 0x7e, 0xae,
111*6777b538SAndroid Build Coastguard Worker 0xc8, 0x95, 0x33, 0x75, 0x2c, 0xd6, 0xa4, 0x35,
112*6777b538SAndroid Build Coastguard Worker 0xb8, 0x06, 0x03, 0xba, 0x08, 0x59, 0x2b, 0x17,
113*6777b538SAndroid Build Coastguard Worker 0x02, 0xdc, 0x4c, 0x7a, 0x50, 0x01, 0x02, 0x41,
114*6777b538SAndroid Build Coastguard Worker 0x00, 0x9d, 0xdb, 0x39, 0x59, 0x09, 0xe4, 0x30,
115*6777b538SAndroid Build Coastguard Worker 0xa0, 0x24, 0xf5, 0xdb, 0x2f, 0xf0, 0x2f, 0xf1,
116*6777b538SAndroid Build Coastguard Worker 0x75, 0x74, 0x0d, 0x5e, 0xb5, 0x11, 0x73, 0xb0,
117*6777b538SAndroid Build Coastguard Worker 0x0a, 0xaa, 0x86, 0x4c, 0x0d, 0xff, 0x7e, 0x1d,
118*6777b538SAndroid Build Coastguard Worker 0xb4, 0x14, 0xd4, 0x09, 0x91, 0x33, 0x5a, 0xfd,
119*6777b538SAndroid Build Coastguard Worker 0xa0, 0x58, 0x80, 0x9b, 0xbe, 0x78, 0x2e, 0x69,
120*6777b538SAndroid Build Coastguard Worker 0x82, 0x15, 0x7c, 0x72, 0xf0, 0x7b, 0x18, 0x39,
121*6777b538SAndroid Build Coastguard Worker 0xff, 0x6e, 0xeb, 0xc6, 0x86, 0xf5, 0xb4, 0xc7,
122*6777b538SAndroid Build Coastguard Worker 0x6f, 0x02, 0x41, 0x00, 0x8d, 0x1a, 0x37, 0x0f,
123*6777b538SAndroid Build Coastguard Worker 0x76, 0xc4, 0x82, 0xfa, 0x5c, 0xc3, 0x79, 0x35,
124*6777b538SAndroid Build Coastguard Worker 0x3e, 0x70, 0x8a, 0xbf, 0x27, 0x49, 0xb0, 0x99,
125*6777b538SAndroid Build Coastguard Worker 0x63, 0xcb, 0x77, 0x5f, 0xa8, 0x82, 0x65, 0xf6,
126*6777b538SAndroid Build Coastguard Worker 0x03, 0x52, 0x51, 0xf1, 0xae, 0x2e, 0x05, 0xb3,
127*6777b538SAndroid Build Coastguard Worker 0xc6, 0xa4, 0x92, 0xd1, 0xce, 0x6c, 0x72, 0xfb,
128*6777b538SAndroid Build Coastguard Worker 0x21, 0xb3, 0x02, 0x87, 0xe4, 0xfd, 0x61, 0xca,
129*6777b538SAndroid Build Coastguard Worker 0x00, 0x42, 0x19, 0xf0, 0xda, 0x5a, 0x53, 0xe3,
130*6777b538SAndroid Build Coastguard Worker 0xb1, 0xc5, 0x15, 0xf3
131*6777b538SAndroid Build Coastguard Worker };
132*6777b538SAndroid Build Coastguard Worker
133*6777b538SAndroid Build Coastguard Worker std::vector<uint8_t> input(std::begin(private_key_info),
134*6777b538SAndroid Build Coastguard Worker std::end(private_key_info));
135*6777b538SAndroid Build Coastguard Worker
136*6777b538SAndroid Build Coastguard Worker std::unique_ptr<crypto::RSAPrivateKey> private_key(
137*6777b538SAndroid Build Coastguard Worker crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(input));
138*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(private_key.get());
139*6777b538SAndroid Build Coastguard Worker
140*6777b538SAndroid Build Coastguard Worker std::string der_cert;
141*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(x509_util::CreateSelfSignedCert(
142*6777b538SAndroid Build Coastguard Worker private_key->key(), x509_util::DIGEST_SHA256, "CN=subject", 1,
143*6777b538SAndroid Build Coastguard Worker base::Time::Now(), base::Time::Now() + base::Days(1), {}, &der_cert));
144*6777b538SAndroid Build Coastguard Worker
145*6777b538SAndroid Build Coastguard Worker scoped_refptr<X509Certificate> cert =
146*6777b538SAndroid Build Coastguard Worker X509Certificate::CreateFromBytes(base::as_byte_span(der_cert));
147*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(cert.get());
148*6777b538SAndroid Build Coastguard Worker
149*6777b538SAndroid Build Coastguard Worker EXPECT_EQ("subject", cert->subject().GetDisplayName());
150*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(cert->HasExpired());
151*6777b538SAndroid Build Coastguard Worker }
152*6777b538SAndroid Build Coastguard Worker
153*6777b538SAndroid Build Coastguard Worker // This is a test case based on
154*6777b538SAndroid Build Coastguard Worker // http://blogs.msdn.com/b/openspecification/archive/2013/03/26/ntlm-and-channel-binding-hash-aka-exteneded-protection-for-authentication.aspx
155*6777b538SAndroid Build Coastguard Worker // There doesn't seem to be too many public test vectors for channel bindings.
TEST(X509UtilTest,CreateChannelBindings_SHA1)156*6777b538SAndroid Build Coastguard Worker TEST(X509UtilTest, CreateChannelBindings_SHA1) {
157*6777b538SAndroid Build Coastguard Worker // Certificate:
158*6777b538SAndroid Build Coastguard Worker // Data:
159*6777b538SAndroid Build Coastguard Worker // Version: 3 (0x2)
160*6777b538SAndroid Build Coastguard Worker // Serial Number:
161*6777b538SAndroid Build Coastguard Worker // (Negative)34:96:86:32:ae:8a:3a:48:b4:98:cf:7c:93:87:bb:d9
162*6777b538SAndroid Build Coastguard Worker // Signature Algorithm: sha1WithRSA
163*6777b538SAndroid Build Coastguard Worker // ...
164*6777b538SAndroid Build Coastguard Worker const uint8_t kCertificateDataDER[] = {
165*6777b538SAndroid Build Coastguard Worker 0x30, 0x82, 0x02, 0x09, 0x30, 0x82, 0x01, 0x76, 0xa0, 0x03, 0x02, 0x01,
166*6777b538SAndroid Build Coastguard Worker 0x02, 0x02, 0x10, 0xcb, 0x69, 0x79, 0xcd, 0x51, 0x75, 0xc5, 0xb7, 0x4b,
167*6777b538SAndroid Build Coastguard Worker 0x67, 0x30, 0x83, 0x6c, 0x78, 0x44, 0x27, 0x30, 0x09, 0x06, 0x05, 0x2b,
168*6777b538SAndroid Build Coastguard Worker 0x0e, 0x03, 0x02, 0x1d, 0x05, 0x00, 0x30, 0x16, 0x31, 0x14, 0x30, 0x12,
169*6777b538SAndroid Build Coastguard Worker 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0b, 0x44, 0x43, 0x2d, 0x57, 0x53,
170*6777b538SAndroid Build Coastguard Worker 0x32, 0x30, 0x30, 0x38, 0x52, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x32,
171*6777b538SAndroid Build Coastguard Worker 0x31, 0x31, 0x31, 0x37, 0x30, 0x30, 0x35, 0x39, 0x32, 0x31, 0x5a, 0x17,
172*6777b538SAndroid Build Coastguard Worker 0x0d, 0x33, 0x39, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, 0x39, 0x35,
173*6777b538SAndroid Build Coastguard Worker 0x39, 0x5a, 0x30, 0x16, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04,
174*6777b538SAndroid Build Coastguard Worker 0x03, 0x13, 0x0b, 0x44, 0x43, 0x2d, 0x57, 0x53, 0x32, 0x30, 0x30, 0x38,
175*6777b538SAndroid Build Coastguard Worker 0x52, 0x32, 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48,
176*6777b538SAndroid Build Coastguard Worker 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00,
177*6777b538SAndroid Build Coastguard Worker 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0x9b, 0x00, 0xf8, 0x1a, 0x2d,
178*6777b538SAndroid Build Coastguard Worker 0x37, 0xc6, 0x8d, 0xa1, 0x39, 0x91, 0x46, 0xf3, 0x6a, 0x1b, 0xf9, 0x60,
179*6777b538SAndroid Build Coastguard Worker 0x6c, 0xb3, 0x6c, 0xa0, 0xac, 0xed, 0x85, 0xe0, 0x3f, 0xdc, 0x92, 0x86,
180*6777b538SAndroid Build Coastguard Worker 0x36, 0xbd, 0x64, 0xbf, 0x36, 0x51, 0xdb, 0x57, 0x3a, 0x8a, 0x82, 0x6b,
181*6777b538SAndroid Build Coastguard Worker 0xd8, 0x94, 0x17, 0x7b, 0xd3, 0x91, 0x11, 0x98, 0xef, 0x19, 0x06, 0x52,
182*6777b538SAndroid Build Coastguard Worker 0x30, 0x03, 0x73, 0x67, 0xc8, 0xed, 0x8e, 0xfa, 0x0b, 0x3d, 0x4c, 0xc9,
183*6777b538SAndroid Build Coastguard Worker 0x10, 0x63, 0x9f, 0xcf, 0xb4, 0xcf, 0x39, 0xd8, 0xfe, 0x99, 0xeb, 0x5b,
184*6777b538SAndroid Build Coastguard Worker 0x11, 0xf2, 0xfc, 0xfa, 0x86, 0x24, 0xd9, 0xff, 0xd9, 0x19, 0xf5, 0x69,
185*6777b538SAndroid Build Coastguard Worker 0xb4, 0xdf, 0x5a, 0x5a, 0xc4, 0x94, 0xb4, 0xb0, 0x07, 0x25, 0x97, 0x13,
186*6777b538SAndroid Build Coastguard Worker 0xad, 0x7e, 0x38, 0x14, 0xfb, 0xd6, 0x33, 0x65, 0x6f, 0xe6, 0xf7, 0x48,
187*6777b538SAndroid Build Coastguard Worker 0x4b, 0x2d, 0xb3, 0x51, 0x2e, 0x6d, 0xc7, 0xea, 0x11, 0x76, 0x9a, 0x2b,
188*6777b538SAndroid Build Coastguard Worker 0xf0, 0x00, 0x4d, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x60, 0x30, 0x5e,
189*6777b538SAndroid Build Coastguard Worker 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x04, 0x0c, 0x30, 0x0a, 0x06,
190*6777b538SAndroid Build Coastguard Worker 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x30, 0x47, 0x06,
191*6777b538SAndroid Build Coastguard Worker 0x03, 0x55, 0x1d, 0x01, 0x04, 0x40, 0x30, 0x3e, 0x80, 0x10, 0xeb, 0x65,
192*6777b538SAndroid Build Coastguard Worker 0x26, 0x03, 0x95, 0x4b, 0xd6, 0xc0, 0x54, 0x75, 0x78, 0x7c, 0xb6, 0x2a,
193*6777b538SAndroid Build Coastguard Worker 0xa1, 0xbb, 0xa1, 0x18, 0x30, 0x16, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03,
194*6777b538SAndroid Build Coastguard Worker 0x55, 0x04, 0x03, 0x13, 0x0b, 0x44, 0x43, 0x2d, 0x57, 0x53, 0x32, 0x30,
195*6777b538SAndroid Build Coastguard Worker 0x30, 0x38, 0x52, 0x32, 0x82, 0x10, 0xcb, 0x69, 0x79, 0xcd, 0x51, 0x75,
196*6777b538SAndroid Build Coastguard Worker 0xc5, 0xb7, 0x4b, 0x67, 0x30, 0x83, 0x6c, 0x78, 0x44, 0x27, 0x30, 0x09,
197*6777b538SAndroid Build Coastguard Worker 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1d, 0x05, 0x00, 0x03, 0x81, 0x81,
198*6777b538SAndroid Build Coastguard Worker 0x00, 0x7b, 0xfa, 0xfe, 0xee, 0x74, 0x05, 0xac, 0xbb, 0x79, 0xe9, 0xda,
199*6777b538SAndroid Build Coastguard Worker 0xca, 0x00, 0x44, 0x96, 0x94, 0x71, 0x92, 0xb1, 0xdb, 0xc9, 0x9b, 0x71,
200*6777b538SAndroid Build Coastguard Worker 0x29, 0xc0, 0xe4, 0x28, 0x5e, 0x6a, 0x50, 0x99, 0xcd, 0xa8, 0x17, 0xe4,
201*6777b538SAndroid Build Coastguard Worker 0x56, 0xb9, 0xef, 0x7f, 0x02, 0x7d, 0x96, 0xa3, 0x48, 0x14, 0x72, 0x75,
202*6777b538SAndroid Build Coastguard Worker 0x2f, 0xb0, 0xb5, 0x87, 0xee, 0x55, 0xe9, 0x6a, 0x6d, 0x28, 0x3c, 0xc1,
203*6777b538SAndroid Build Coastguard Worker 0xfd, 0x00, 0xe4, 0x76, 0xe3, 0x80, 0x88, 0x78, 0x26, 0x0d, 0x6c, 0x8c,
204*6777b538SAndroid Build Coastguard Worker 0xb8, 0x64, 0x61, 0x63, 0xb7, 0x13, 0x3a, 0xab, 0xc7, 0xdd, 0x1d, 0x0a,
205*6777b538SAndroid Build Coastguard Worker 0xd7, 0x15, 0x45, 0xa1, 0xd6, 0xd9, 0x34, 0xc7, 0x21, 0x48, 0xfb, 0x43,
206*6777b538SAndroid Build Coastguard Worker 0x87, 0x38, 0xda, 0x1f, 0x50, 0x47, 0xb1, 0xa5, 0x5c, 0x47, 0xed, 0x04,
207*6777b538SAndroid Build Coastguard Worker 0x44, 0x97, 0xd3, 0xac, 0x74, 0x2d, 0xeb, 0x09, 0x77, 0x59, 0xbf, 0xa3,
208*6777b538SAndroid Build Coastguard Worker 0x54, 0x5b, 0xde, 0x42, 0xd5, 0x23, 0x5a, 0x71, 0x9f};
209*6777b538SAndroid Build Coastguard Worker
210*6777b538SAndroid Build Coastguard Worker const unsigned char kExpectedServerEndPointToken[] = {
211*6777b538SAndroid Build Coastguard Worker 0x74, 0x6c, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2d,
212*6777b538SAndroid Build Coastguard Worker 0x65, 0x6e, 0x64, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x3a, 0xea,
213*6777b538SAndroid Build Coastguard Worker 0x05, 0xfe, 0xfe, 0xcc, 0x6b, 0x0b, 0xd5, 0x71, 0xdb, 0xbc, 0x5b,
214*6777b538SAndroid Build Coastguard Worker 0xaa, 0x3e, 0xd4, 0x53, 0x86, 0xd0, 0x44, 0x68, 0x35, 0xf7, 0xb7,
215*6777b538SAndroid Build Coastguard Worker 0x4c, 0x85, 0x62, 0x1b, 0x99, 0x83, 0x47, 0x5f, 0x95,
216*6777b538SAndroid Build Coastguard Worker };
217*6777b538SAndroid Build Coastguard Worker
218*6777b538SAndroid Build Coastguard Worker scoped_refptr<X509Certificate> cert =
219*6777b538SAndroid Build Coastguard Worker X509Certificate::CreateFromBytes(kCertificateDataDER);
220*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(cert);
221*6777b538SAndroid Build Coastguard Worker
222*6777b538SAndroid Build Coastguard Worker std::string channel_bindings;
223*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(
224*6777b538SAndroid Build Coastguard Worker x509_util::GetTLSServerEndPointChannelBinding(*cert, &channel_bindings));
225*6777b538SAndroid Build Coastguard Worker
226*6777b538SAndroid Build Coastguard Worker std::string expected_channel_bindings(
227*6777b538SAndroid Build Coastguard Worker std::begin(kExpectedServerEndPointToken),
228*6777b538SAndroid Build Coastguard Worker std::end(kExpectedServerEndPointToken));
229*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(expected_channel_bindings, channel_bindings);
230*6777b538SAndroid Build Coastguard Worker }
231*6777b538SAndroid Build Coastguard Worker
TEST(X509UtilTest,CreateChannelBindings_SHA256)232*6777b538SAndroid Build Coastguard Worker TEST(X509UtilTest, CreateChannelBindings_SHA256) {
233*6777b538SAndroid Build Coastguard Worker // Certificate:
234*6777b538SAndroid Build Coastguard Worker // Data:
235*6777b538SAndroid Build Coastguard Worker // Version: 3 (0x2)
236*6777b538SAndroid Build Coastguard Worker // Serial Number: 14673274151129443507 (0xcba1f1191dfdecb3)
237*6777b538SAndroid Build Coastguard Worker // Signature Algorithm: sha256WithRSAEncryption
238*6777b538SAndroid Build Coastguard Worker // ...
239*6777b538SAndroid Build Coastguard Worker const uint8_t kCertificateDataDER[] = {
240*6777b538SAndroid Build Coastguard Worker 0x30, 0x82, 0x03, 0x8f, 0x30, 0x82, 0x02, 0x77, 0xa0, 0x03, 0x02, 0x01,
241*6777b538SAndroid Build Coastguard Worker 0x02, 0x02, 0x09, 0x00, 0xcb, 0xa1, 0xf1, 0x19, 0x1d, 0xfd, 0xec, 0xb3,
242*6777b538SAndroid Build Coastguard Worker 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01,
243*6777b538SAndroid Build Coastguard Worker 0x0b, 0x05, 0x00, 0x30, 0x5e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
244*6777b538SAndroid Build Coastguard Worker 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03,
245*6777b538SAndroid Build Coastguard Worker 0x55, 0x04, 0x08, 0x0c, 0x02, 0x4d, 0x41, 0x31, 0x12, 0x30, 0x10, 0x06,
246*6777b538SAndroid Build Coastguard Worker 0x03, 0x55, 0x04, 0x07, 0x0c, 0x09, 0x43, 0x61, 0x6d, 0x62, 0x72, 0x69,
247*6777b538SAndroid Build Coastguard Worker 0x64, 0x67, 0x65, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a,
248*6777b538SAndroid Build Coastguard Worker 0x0c, 0x0b, 0x4d, 0x6d, 0x6d, 0x6b, 0x61, 0x79, 0x20, 0x49, 0x6e, 0x63,
249*6777b538SAndroid Build Coastguard Worker 0x2e, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0f,
250*6777b538SAndroid Build Coastguard Worker 0x77, 0x77, 0x77, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e,
251*6777b538SAndroid Build Coastguard Worker 0x63, 0x6f, 0x6d, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x33, 0x31,
252*6777b538SAndroid Build Coastguard Worker 0x37, 0x31, 0x39, 0x33, 0x39, 0x34, 0x34, 0x5a, 0x17, 0x0d, 0x31, 0x36,
253*6777b538SAndroid Build Coastguard Worker 0x30, 0x34, 0x31, 0x36, 0x31, 0x39, 0x33, 0x39, 0x34, 0x34, 0x5a, 0x30,
254*6777b538SAndroid Build Coastguard Worker 0x5e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
255*6777b538SAndroid Build Coastguard Worker 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c,
256*6777b538SAndroid Build Coastguard Worker 0x02, 0x4d, 0x41, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x07,
257*6777b538SAndroid Build Coastguard Worker 0x0c, 0x09, 0x43, 0x61, 0x6d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x31,
258*6777b538SAndroid Build Coastguard Worker 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x4d, 0x6d,
259*6777b538SAndroid Build Coastguard Worker 0x6d, 0x6b, 0x61, 0x79, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x18, 0x30,
260*6777b538SAndroid Build Coastguard Worker 0x16, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0f, 0x77, 0x77, 0x77, 0x2e,
261*6777b538SAndroid Build Coastguard Worker 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x30,
262*6777b538SAndroid Build Coastguard Worker 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
263*6777b538SAndroid Build Coastguard Worker 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30,
264*6777b538SAndroid Build Coastguard Worker 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xc6, 0x31, 0xfe, 0x13,
265*6777b538SAndroid Build Coastguard Worker 0x0a, 0xb2, 0x87, 0xc0, 0xb9, 0xa4, 0xb9, 0x86, 0x98, 0x92, 0xc1, 0x48,
266*6777b538SAndroid Build Coastguard Worker 0x41, 0x89, 0xd9, 0xe6, 0xe9, 0x36, 0x1a, 0xd6, 0x1c, 0xcb, 0x86, 0x3a,
267*6777b538SAndroid Build Coastguard Worker 0xec, 0x34, 0x3a, 0xbf, 0x2a, 0xe7, 0x91, 0x33, 0xf4, 0x3e, 0xa4, 0x1b,
268*6777b538SAndroid Build Coastguard Worker 0x9a, 0xc3, 0xa4, 0x66, 0xa0, 0x6d, 0xbf, 0x75, 0x44, 0x1a, 0x79, 0xda,
269*6777b538SAndroid Build Coastguard Worker 0x23, 0x06, 0x5c, 0x07, 0x5c, 0x52, 0x84, 0x46, 0x40, 0xcf, 0x26, 0xa1,
270*6777b538SAndroid Build Coastguard Worker 0x65, 0x65, 0x4e, 0x36, 0x1a, 0xd2, 0xc9, 0x40, 0x28, 0x1e, 0x6f, 0x4f,
271*6777b538SAndroid Build Coastguard Worker 0x7e, 0xb7, 0x10, 0xcd, 0x55, 0x6c, 0xca, 0xf1, 0xfa, 0x66, 0xfb, 0x3e,
272*6777b538SAndroid Build Coastguard Worker 0xb0, 0xf4, 0xc1, 0x92, 0xec, 0xec, 0x0c, 0x1c, 0x79, 0x23, 0x5d, 0xf6,
273*6777b538SAndroid Build Coastguard Worker 0xc0, 0xed, 0xb7, 0x39, 0xa7, 0x59, 0x98, 0xa7, 0x9d, 0x9e, 0x3b, 0xe1,
274*6777b538SAndroid Build Coastguard Worker 0x77, 0x8b, 0x2d, 0x2b, 0x02, 0x5f, 0x30, 0x46, 0xa9, 0x78, 0x47, 0x6f,
275*6777b538SAndroid Build Coastguard Worker 0x05, 0x7d, 0xbc, 0x84, 0x37, 0x09, 0x40, 0x20, 0xba, 0x16, 0x96, 0x4c,
276*6777b538SAndroid Build Coastguard Worker 0xfd, 0xea, 0x83, 0x3e, 0x50, 0xda, 0x24, 0xf4, 0x61, 0x52, 0xfe, 0x9b,
277*6777b538SAndroid Build Coastguard Worker 0xd5, 0x71, 0x37, 0x18, 0x11, 0xe0, 0x7c, 0xbe, 0x98, 0x95, 0x6c, 0x61,
278*6777b538SAndroid Build Coastguard Worker 0xab, 0x9b, 0xdc, 0x5c, 0x59, 0x7d, 0x85, 0x0c, 0xc5, 0x32, 0x07, 0x65,
279*6777b538SAndroid Build Coastguard Worker 0x1e, 0x6a, 0x15, 0xe6, 0xbd, 0xc6, 0xbd, 0xd5, 0x91, 0xea, 0x9d, 0x2f,
280*6777b538SAndroid Build Coastguard Worker 0x0f, 0xdf, 0xef, 0xff, 0x1e, 0x2d, 0x50, 0x44, 0xca, 0x38, 0x27, 0xe3,
281*6777b538SAndroid Build Coastguard Worker 0x20, 0x79, 0x44, 0x47, 0x7a, 0xe3, 0xea, 0x7a, 0x70, 0x41, 0x26, 0x87,
282*6777b538SAndroid Build Coastguard Worker 0xe0, 0x1a, 0x49, 0x1d, 0x62, 0x34, 0xe5, 0xde, 0xc3, 0xb3, 0x12, 0xb8,
283*6777b538SAndroid Build Coastguard Worker 0xa2, 0xf9, 0xad, 0x1b, 0x6a, 0x0f, 0x04, 0xa8, 0xfb, 0xca, 0xe4, 0x01,
284*6777b538SAndroid Build Coastguard Worker 0x6d, 0x77, 0x1f, 0x72, 0xff, 0x58, 0x49, 0x05, 0x1c, 0x1a, 0xb7, 0x76,
285*6777b538SAndroid Build Coastguard Worker 0x29, 0x77, 0x93, 0xcc, 0x09, 0xe8, 0xb7, 0x03, 0x2f, 0x1b, 0xe2, 0xcd,
286*6777b538SAndroid Build Coastguard Worker 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06,
287*6777b538SAndroid Build Coastguard Worker 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xb7, 0x64, 0x60, 0xe7,
288*6777b538SAndroid Build Coastguard Worker 0x6e, 0xb6, 0xaa, 0x25, 0x46, 0xe2, 0x8e, 0x98, 0xac, 0x81, 0xb0, 0xe7,
289*6777b538SAndroid Build Coastguard Worker 0x10, 0x14, 0x85, 0x6d, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04,
290*6777b538SAndroid Build Coastguard Worker 0x18, 0x30, 0x16, 0x80, 0x14, 0xb7, 0x64, 0x60, 0xe7, 0x6e, 0xb6, 0xaa,
291*6777b538SAndroid Build Coastguard Worker 0x25, 0x46, 0xe2, 0x8e, 0x98, 0xac, 0x81, 0xb0, 0xe7, 0x10, 0x14, 0x85,
292*6777b538SAndroid Build Coastguard Worker 0x6d, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03,
293*6777b538SAndroid Build Coastguard Worker 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
294*6777b538SAndroid Build Coastguard Worker 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x44,
295*6777b538SAndroid Build Coastguard Worker 0xc4, 0x46, 0x89, 0x69, 0x21, 0xd0, 0x81, 0x30, 0xe3, 0x38, 0xb8, 0x80,
296*6777b538SAndroid Build Coastguard Worker 0xa5, 0x23, 0xd4, 0xfc, 0xe5, 0x12, 0x0f, 0xab, 0x01, 0x44, 0x67, 0xe4,
297*6777b538SAndroid Build Coastguard Worker 0x59, 0x86, 0xd0, 0xa1, 0x8c, 0x2b, 0x36, 0xf0, 0x63, 0x51, 0xbe, 0x24,
298*6777b538SAndroid Build Coastguard Worker 0xfa, 0xf3, 0x1d, 0xc9, 0xfd, 0x40, 0x99, 0x48, 0xea, 0x95, 0x6e, 0xab,
299*6777b538SAndroid Build Coastguard Worker 0xcf, 0xeb, 0x2b, 0x2d, 0x4e, 0xd2, 0xdf, 0xb2, 0xb9, 0x18, 0x27, 0xe3,
300*6777b538SAndroid Build Coastguard Worker 0xc9, 0x17, 0xde, 0x25, 0x6c, 0xcc, 0x80, 0x5a, 0xd5, 0x3b, 0xc5, 0xc8,
301*6777b538SAndroid Build Coastguard Worker 0x3a, 0xc6, 0xcb, 0xa0, 0x33, 0xd3, 0x80, 0x20, 0x4e, 0x3f, 0x61, 0x67,
302*6777b538SAndroid Build Coastguard Worker 0x16, 0x0e, 0xbc, 0xf3, 0x25, 0xe9, 0x62, 0xfa, 0x7f, 0x0e, 0x75, 0x11,
303*6777b538SAndroid Build Coastguard Worker 0xcb, 0x68, 0x24, 0x34, 0x96, 0x1d, 0xb2, 0x88, 0xb7, 0xeb, 0x5e, 0x9c,
304*6777b538SAndroid Build Coastguard Worker 0xc7, 0xa0, 0x3b, 0xcf, 0x4e, 0x3c, 0x7c, 0x6c, 0x29, 0x1b, 0xa5, 0x74,
305*6777b538SAndroid Build Coastguard Worker 0x4d, 0x90, 0xe1, 0xd9, 0x6a, 0x6c, 0x54, 0x6b, 0xce, 0x3d, 0x70, 0x99,
306*6777b538SAndroid Build Coastguard Worker 0xf0, 0x11, 0xc3, 0xda, 0xce, 0xe9, 0xba, 0xc4, 0x91, 0x97, 0xe7, 0x44,
307*6777b538SAndroid Build Coastguard Worker 0x09, 0xa4, 0x39, 0x36, 0xb5, 0xff, 0x3a, 0xce, 0x5d, 0xf1, 0x0b, 0x03,
308*6777b538SAndroid Build Coastguard Worker 0xab, 0xea, 0x0c, 0xe6, 0xbd, 0xd4, 0x43, 0xed, 0x8d, 0x9c, 0xcd, 0x8e,
309*6777b538SAndroid Build Coastguard Worker 0x14, 0xf9, 0xa7, 0xc7, 0xdc, 0xe0, 0xd8, 0xe7, 0x37, 0xf5, 0x48, 0xe8,
310*6777b538SAndroid Build Coastguard Worker 0x84, 0x4c, 0xcd, 0x70, 0x1b, 0xe5, 0x71, 0xa7, 0x4d, 0xc3, 0x03, 0x5e,
311*6777b538SAndroid Build Coastguard Worker 0x50, 0x8a, 0xc4, 0x7c, 0x9c, 0xa4, 0x6f, 0x91, 0xfa, 0x9f, 0xdc, 0xef,
312*6777b538SAndroid Build Coastguard Worker 0x2b, 0x42, 0xe7, 0xd0, 0x0d, 0x60, 0x72, 0x71, 0xe7, 0x13, 0xff, 0x43,
313*6777b538SAndroid Build Coastguard Worker 0xcb, 0x64, 0x33, 0x37, 0x2e, 0xe9, 0x09, 0xeb, 0x7e, 0x8f, 0x15, 0x99,
314*6777b538SAndroid Build Coastguard Worker 0xc9, 0x0d, 0xb0, 0xcb, 0xf0, 0x1f, 0x02, 0xf7, 0xb7, 0x3a, 0xa0, 0x6b,
315*6777b538SAndroid Build Coastguard Worker 0x57, 0xb3, 0x33, 0x14, 0xdb, 0x06, 0x7f, 0x98, 0x6f, 0xc4, 0x32, 0xd5,
316*6777b538SAndroid Build Coastguard Worker 0x14, 0x83, 0x7a};
317*6777b538SAndroid Build Coastguard Worker
318*6777b538SAndroid Build Coastguard Worker const unsigned char kExpectedServerEndPointToken[] = {
319*6777b538SAndroid Build Coastguard Worker 0x74, 0x6c, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2d,
320*6777b538SAndroid Build Coastguard Worker 0x65, 0x6e, 0x64, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x3a, 0x96,
321*6777b538SAndroid Build Coastguard Worker 0x4c, 0xd0, 0x44, 0x53, 0x81, 0x0b, 0x35, 0x01, 0x05, 0x54, 0x02,
322*6777b538SAndroid Build Coastguard Worker 0x15, 0x79, 0xac, 0x74, 0x3c, 0xa4, 0x91, 0xa2, 0xb7, 0x60, 0xbe,
323*6777b538SAndroid Build Coastguard Worker 0x75, 0x57, 0x0e, 0xaf, 0xa3, 0x10, 0xbf, 0xf1, 0xbb,
324*6777b538SAndroid Build Coastguard Worker };
325*6777b538SAndroid Build Coastguard Worker
326*6777b538SAndroid Build Coastguard Worker scoped_refptr<X509Certificate> cert =
327*6777b538SAndroid Build Coastguard Worker X509Certificate::CreateFromBytes(kCertificateDataDER);
328*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(cert);
329*6777b538SAndroid Build Coastguard Worker
330*6777b538SAndroid Build Coastguard Worker std::string channel_bindings;
331*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(
332*6777b538SAndroid Build Coastguard Worker x509_util::GetTLSServerEndPointChannelBinding(*cert, &channel_bindings));
333*6777b538SAndroid Build Coastguard Worker
334*6777b538SAndroid Build Coastguard Worker std::string expected_channel_bindings(
335*6777b538SAndroid Build Coastguard Worker std::begin(kExpectedServerEndPointToken),
336*6777b538SAndroid Build Coastguard Worker std::end(kExpectedServerEndPointToken));
337*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(expected_channel_bindings, channel_bindings);
338*6777b538SAndroid Build Coastguard Worker }
339*6777b538SAndroid Build Coastguard Worker
TEST(X509UtilTest,CreateChannelBindings_SHA384)340*6777b538SAndroid Build Coastguard Worker TEST(X509UtilTest, CreateChannelBindings_SHA384) {
341*6777b538SAndroid Build Coastguard Worker // Certificate:
342*6777b538SAndroid Build Coastguard Worker // Data:
343*6777b538SAndroid Build Coastguard Worker // Version: 3 (0x2)
344*6777b538SAndroid Build Coastguard Worker // Serial Number: 10071585730232401378 (0x8bc575dc2f653de2)
345*6777b538SAndroid Build Coastguard Worker // Signature Algorithm: sha384WithRSAEncryption
346*6777b538SAndroid Build Coastguard Worker // ...
347*6777b538SAndroid Build Coastguard Worker const uint8_t kCertificateDataDER[] = {
348*6777b538SAndroid Build Coastguard Worker 0x30, 0x82, 0x03, 0xe1, 0x30, 0x82, 0x02, 0xc9, 0xa0, 0x03, 0x02, 0x01,
349*6777b538SAndroid Build Coastguard Worker 0x02, 0x02, 0x09, 0x00, 0x8b, 0xc5, 0x75, 0xdc, 0x2f, 0x65, 0x3d, 0xe2,
350*6777b538SAndroid Build Coastguard Worker 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01,
351*6777b538SAndroid Build Coastguard Worker 0x0c, 0x05, 0x00, 0x30, 0x81, 0x86, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03,
352*6777b538SAndroid Build Coastguard Worker 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06,
353*6777b538SAndroid Build Coastguard Worker 0x03, 0x55, 0x04, 0x08, 0x0c, 0x02, 0x4d, 0x41, 0x31, 0x12, 0x30, 0x10,
354*6777b538SAndroid Build Coastguard Worker 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x09, 0x43, 0x61, 0x6d, 0x62, 0x72,
355*6777b538SAndroid Build Coastguard Worker 0x69, 0x64, 0x67, 0x65, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04,
356*6777b538SAndroid Build Coastguard Worker 0x0a, 0x0c, 0x0b, 0x4d, 0x6d, 0x6d, 0x6b, 0x61, 0x79, 0x20, 0x49, 0x6e,
357*6777b538SAndroid Build Coastguard Worker 0x63, 0x2e, 0x31, 0x26, 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c,
358*6777b538SAndroid Build Coastguard Worker 0x1d, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x20, 0x43, 0x65, 0x72, 0x74,
359*6777b538SAndroid Build Coastguard Worker 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x47, 0x65, 0x6e, 0x65,
360*6777b538SAndroid Build Coastguard Worker 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03,
361*6777b538SAndroid Build Coastguard Worker 0x55, 0x04, 0x03, 0x0c, 0x0f, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x78, 0x61,
362*6777b538SAndroid Build Coastguard Worker 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x1e, 0x17, 0x0d,
363*6777b538SAndroid Build Coastguard Worker 0x31, 0x36, 0x30, 0x33, 0x31, 0x37, 0x31, 0x39, 0x35, 0x36, 0x34, 0x39,
364*6777b538SAndroid Build Coastguard Worker 0x5a, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x34, 0x31, 0x36, 0x31, 0x39, 0x35,
365*6777b538SAndroid Build Coastguard Worker 0x36, 0x34, 0x39, 0x5a, 0x30, 0x81, 0x86, 0x31, 0x0b, 0x30, 0x09, 0x06,
366*6777b538SAndroid Build Coastguard Worker 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09,
367*6777b538SAndroid Build Coastguard Worker 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x02, 0x4d, 0x41, 0x31, 0x12, 0x30,
368*6777b538SAndroid Build Coastguard Worker 0x10, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x09, 0x43, 0x61, 0x6d, 0x62,
369*6777b538SAndroid Build Coastguard Worker 0x72, 0x69, 0x64, 0x67, 0x65, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55,
370*6777b538SAndroid Build Coastguard Worker 0x04, 0x0a, 0x0c, 0x0b, 0x4d, 0x6d, 0x6d, 0x6b, 0x61, 0x79, 0x20, 0x49,
371*6777b538SAndroid Build Coastguard Worker 0x6e, 0x63, 0x2e, 0x31, 0x26, 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x0b,
372*6777b538SAndroid Build Coastguard Worker 0x0c, 0x1d, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x20, 0x43, 0x65, 0x72,
373*6777b538SAndroid Build Coastguard Worker 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x47, 0x65, 0x6e,
374*6777b538SAndroid Build Coastguard Worker 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x18, 0x30, 0x16, 0x06,
375*6777b538SAndroid Build Coastguard Worker 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0f, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x78,
376*6777b538SAndroid Build Coastguard Worker 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x82, 0x01,
377*6777b538SAndroid Build Coastguard Worker 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
378*6777b538SAndroid Build Coastguard Worker 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01,
379*6777b538SAndroid Build Coastguard Worker 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xb4, 0xfa, 0x6c, 0xe7, 0xac, 0x91,
380*6777b538SAndroid Build Coastguard Worker 0xa4, 0x00, 0xe1, 0xe8, 0xed, 0x5b, 0xe5, 0x86, 0x6b, 0x3d, 0x1d, 0x87,
381*6777b538SAndroid Build Coastguard Worker 0xf7, 0x49, 0x5a, 0xda, 0x67, 0x65, 0x34, 0x57, 0x7b, 0x70, 0x71, 0x11,
382*6777b538SAndroid Build Coastguard Worker 0xbd, 0xee, 0xfe, 0x01, 0x91, 0xb6, 0x43, 0x11, 0x0f, 0xec, 0x3f, 0x2f,
383*6777b538SAndroid Build Coastguard Worker 0x05, 0xdb, 0x28, 0x44, 0x7e, 0x9c, 0x2b, 0xbb, 0xe9, 0x49, 0x2b, 0x62,
384*6777b538SAndroid Build Coastguard Worker 0x1e, 0x8b, 0x4c, 0xf9, 0xa8, 0x2f, 0xfb, 0x24, 0x83, 0x13, 0xeb, 0x7f,
385*6777b538SAndroid Build Coastguard Worker 0x52, 0x4c, 0xbb, 0xc5, 0x89, 0x6c, 0xe4, 0x22, 0xc0, 0x0c, 0x71, 0xda,
386*6777b538SAndroid Build Coastguard Worker 0xb2, 0x36, 0xae, 0xc8, 0xe5, 0x10, 0x8f, 0x4a, 0x68, 0x65, 0xc3, 0x07,
387*6777b538SAndroid Build Coastguard Worker 0xb5, 0xcf, 0xec, 0x08, 0xd9, 0x4b, 0x13, 0x4a, 0x25, 0x56, 0xec, 0x74,
388*6777b538SAndroid Build Coastguard Worker 0x4d, 0xb3, 0xb5, 0x77, 0x3f, 0xf9, 0xa5, 0x0b, 0x15, 0x80, 0xf9, 0xe7,
389*6777b538SAndroid Build Coastguard Worker 0x01, 0x4b, 0x73, 0x6a, 0x1e, 0xc8, 0xb0, 0x7a, 0x58, 0x13, 0x25, 0x50,
390*6777b538SAndroid Build Coastguard Worker 0x40, 0x7e, 0x5c, 0x5d, 0xff, 0x2b, 0x9d, 0xf5, 0x43, 0xd2, 0xed, 0xca,
391*6777b538SAndroid Build Coastguard Worker 0x87, 0xe3, 0x4e, 0x9f, 0x25, 0xa7, 0x75, 0xe9, 0x48, 0x7e, 0xb9, 0x38,
392*6777b538SAndroid Build Coastguard Worker 0x74, 0x3f, 0x30, 0x6b, 0xec, 0x94, 0xb8, 0x0f, 0x00, 0x41, 0x60, 0xaa,
393*6777b538SAndroid Build Coastguard Worker 0x48, 0x7d, 0x17, 0x65, 0x1a, 0x9a, 0x0d, 0x49, 0x18, 0xe8, 0x72, 0xbb,
394*6777b538SAndroid Build Coastguard Worker 0x16, 0x37, 0xa0, 0x65, 0x0c, 0xe4, 0x69, 0x0f, 0x93, 0xca, 0x80, 0x7e,
395*6777b538SAndroid Build Coastguard Worker 0xf6, 0x90, 0xbd, 0xf2, 0x86, 0xa3, 0xb6, 0x81, 0x7c, 0xe3, 0x40, 0x7a,
396*6777b538SAndroid Build Coastguard Worker 0x65, 0x33, 0x71, 0xfd, 0x8c, 0xe6, 0xf6, 0x63, 0xcf, 0x40, 0xdd, 0x29,
397*6777b538SAndroid Build Coastguard Worker 0xf2, 0x15, 0x25, 0x96, 0x1a, 0xa5, 0x14, 0x1e, 0xa2, 0xfd, 0x53, 0xb8,
398*6777b538SAndroid Build Coastguard Worker 0xbc, 0x20, 0x10, 0x87, 0xcb, 0x8e, 0x24, 0xa9, 0x47, 0x60, 0x47, 0xcc,
399*6777b538SAndroid Build Coastguard Worker 0xb2, 0x2e, 0xe5, 0x0f, 0x3e, 0x2c, 0x22, 0x9a, 0x1b, 0x46, 0x5a, 0xe4,
400*6777b538SAndroid Build Coastguard Worker 0x2b, 0x7f, 0x4a, 0xab, 0x33, 0x49, 0xea, 0xd8, 0x6a, 0xd5, 0x02, 0x03,
401*6777b538SAndroid Build Coastguard Worker 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55,
402*6777b538SAndroid Build Coastguard Worker 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x0f, 0x62, 0xc9, 0x94, 0xc0, 0x00,
403*6777b538SAndroid Build Coastguard Worker 0x55, 0x51, 0x60, 0x36, 0xce, 0xd6, 0x4d, 0x6b, 0x5e, 0x20, 0x02, 0x6c,
404*6777b538SAndroid Build Coastguard Worker 0x2e, 0xed, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30,
405*6777b538SAndroid Build Coastguard Worker 0x16, 0x80, 0x14, 0x0f, 0x62, 0xc9, 0x94, 0xc0, 0x00, 0x55, 0x51, 0x60,
406*6777b538SAndroid Build Coastguard Worker 0x36, 0xce, 0xd6, 0x4d, 0x6b, 0x5e, 0x20, 0x02, 0x6c, 0x2e, 0xed, 0x30,
407*6777b538SAndroid Build Coastguard Worker 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01,
408*6777b538SAndroid Build Coastguard Worker 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
409*6777b538SAndroid Build Coastguard Worker 0x01, 0x0c, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x31, 0x7f, 0xcd,
410*6777b538SAndroid Build Coastguard Worker 0x8b, 0xf1, 0x9c, 0x87, 0x59, 0xed, 0xe2, 0x36, 0x18, 0x84, 0x1c, 0x54,
411*6777b538SAndroid Build Coastguard Worker 0x4e, 0x92, 0x45, 0xaf, 0xe9, 0xa1, 0x78, 0x89, 0x6e, 0xad, 0xec, 0x51,
412*6777b538SAndroid Build Coastguard Worker 0xf9, 0x81, 0x70, 0xd9, 0x94, 0x01, 0xa9, 0x2a, 0x0d, 0x5f, 0xda, 0x83,
413*6777b538SAndroid Build Coastguard Worker 0x49, 0x32, 0x24, 0x7e, 0xfd, 0x73, 0x97, 0xa2, 0x05, 0xd4, 0xf1, 0xb7,
414*6777b538SAndroid Build Coastguard Worker 0x3f, 0xa0, 0x49, 0xbc, 0x0c, 0x85, 0x3e, 0xd3, 0x15, 0x67, 0xef, 0x5f,
415*6777b538SAndroid Build Coastguard Worker 0xfb, 0xbe, 0x0d, 0x2a, 0x97, 0xcd, 0xaa, 0x24, 0x1e, 0x5a, 0xdd, 0x47,
416*6777b538SAndroid Build Coastguard Worker 0xcf, 0x70, 0xe4, 0x93, 0xe6, 0xc3, 0xad, 0x78, 0x84, 0x60, 0xfa, 0x16,
417*6777b538SAndroid Build Coastguard Worker 0x2e, 0xcc, 0x98, 0x88, 0xde, 0x80, 0xbb, 0x8f, 0x46, 0xfd, 0x59, 0x95,
418*6777b538SAndroid Build Coastguard Worker 0xb4, 0x0b, 0x07, 0x8a, 0x67, 0x04, 0x10, 0xbd, 0x32, 0xb0, 0xa2, 0xfe,
419*6777b538SAndroid Build Coastguard Worker 0x0f, 0xe0, 0x3e, 0x49, 0x84, 0x89, 0xc6, 0x18, 0xd9, 0xca, 0xdd, 0x63,
420*6777b538SAndroid Build Coastguard Worker 0x0d, 0x55, 0x46, 0x56, 0xd1, 0x83, 0xcb, 0x0d, 0x23, 0x21, 0xb3, 0x59,
421*6777b538SAndroid Build Coastguard Worker 0xa9, 0xd5, 0x56, 0x83, 0x4f, 0xf0, 0x92, 0x0b, 0xcc, 0xed, 0x93, 0x02,
422*6777b538SAndroid Build Coastguard Worker 0xe7, 0x07, 0x92, 0x15, 0x90, 0x18, 0x78, 0xc9, 0xf4, 0x59, 0x0e, 0xbe,
423*6777b538SAndroid Build Coastguard Worker 0xaa, 0x3e, 0x91, 0xb7, 0x81, 0xa2, 0x0c, 0x28, 0x04, 0xde, 0x78, 0xb0,
424*6777b538SAndroid Build Coastguard Worker 0xd1, 0x54, 0x90, 0x8f, 0x3c, 0xfd, 0x2e, 0x36, 0x6e, 0xfe, 0x7b, 0xf6,
425*6777b538SAndroid Build Coastguard Worker 0xce, 0x65, 0xae, 0x99, 0xa5, 0x38, 0x29, 0x4b, 0x13, 0x2f, 0x01, 0xa8,
426*6777b538SAndroid Build Coastguard Worker 0xb0, 0xd0, 0x43, 0x22, 0x01, 0xd1, 0x71, 0x35, 0x93, 0xcf, 0x1e, 0x9e,
427*6777b538SAndroid Build Coastguard Worker 0x05, 0x03, 0x05, 0xff, 0xfc, 0x35, 0x34, 0x6f, 0x49, 0x04, 0xe6, 0x58,
428*6777b538SAndroid Build Coastguard Worker 0xa6, 0x0a, 0xb6, 0x13, 0x67, 0xd8, 0x1e, 0xe7, 0x33, 0x0f, 0x51, 0xb1,
429*6777b538SAndroid Build Coastguard Worker 0x5c, 0x75, 0x1c, 0xea, 0x2b, 0x94, 0xec, 0x32, 0x7e, 0xb0, 0x8c, 0xb7,
430*6777b538SAndroid Build Coastguard Worker 0x63, 0xf4, 0x83, 0x58, 0x3e, 0x47, 0xb7, 0x92, 0x67, 0x2c, 0xd5, 0xdb,
431*6777b538SAndroid Build Coastguard Worker 0x48};
432*6777b538SAndroid Build Coastguard Worker
433*6777b538SAndroid Build Coastguard Worker const unsigned char kExpectedServerEndPointToken[] = {
434*6777b538SAndroid Build Coastguard Worker 0x74, 0x6c, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2d, 0x65,
435*6777b538SAndroid Build Coastguard Worker 0x6e, 0x64, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x3a, 0x9c, 0xd9, 0x91,
436*6777b538SAndroid Build Coastguard Worker 0xd4, 0x57, 0x1b, 0x64, 0x9d, 0x84, 0x31, 0xfd, 0xda, 0x3d, 0xaa, 0x2e,
437*6777b538SAndroid Build Coastguard Worker 0x26, 0xab, 0xee, 0x40, 0x6b, 0x95, 0x36, 0x82, 0xc4, 0x5f, 0xad, 0xc1,
438*6777b538SAndroid Build Coastguard Worker 0x26, 0x29, 0x72, 0xda, 0xe6, 0xfd, 0xa6, 0xd8, 0x0e, 0xab, 0xa2, 0xca,
439*6777b538SAndroid Build Coastguard Worker 0x7d, 0x7d, 0x18, 0xa8, 0xee, 0x80, 0x26, 0xb2, 0x1f,
440*6777b538SAndroid Build Coastguard Worker };
441*6777b538SAndroid Build Coastguard Worker
442*6777b538SAndroid Build Coastguard Worker scoped_refptr<X509Certificate> cert =
443*6777b538SAndroid Build Coastguard Worker X509Certificate::CreateFromBytes(kCertificateDataDER);
444*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(cert);
445*6777b538SAndroid Build Coastguard Worker
446*6777b538SAndroid Build Coastguard Worker std::string channel_bindings;
447*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(
448*6777b538SAndroid Build Coastguard Worker x509_util::GetTLSServerEndPointChannelBinding(*cert, &channel_bindings));
449*6777b538SAndroid Build Coastguard Worker
450*6777b538SAndroid Build Coastguard Worker std::string expected_channel_bindings(
451*6777b538SAndroid Build Coastguard Worker std::begin(kExpectedServerEndPointToken),
452*6777b538SAndroid Build Coastguard Worker std::end(kExpectedServerEndPointToken));
453*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(expected_channel_bindings, channel_bindings);
454*6777b538SAndroid Build Coastguard Worker }
455*6777b538SAndroid Build Coastguard Worker
TEST(X509UtilTest,CreateChannelBindings_SHA512)456*6777b538SAndroid Build Coastguard Worker TEST(X509UtilTest, CreateChannelBindings_SHA512) {
457*6777b538SAndroid Build Coastguard Worker // Certificate:
458*6777b538SAndroid Build Coastguard Worker // Data:
459*6777b538SAndroid Build Coastguard Worker // Version: 3 (0x2)
460*6777b538SAndroid Build Coastguard Worker // Serial Number: 15197703563697605045 (0xd2e916decbe249b5)
461*6777b538SAndroid Build Coastguard Worker // Signature Algorithm: sha512WithRSAEncryption
462*6777b538SAndroid Build Coastguard Worker // ...
463*6777b538SAndroid Build Coastguard Worker const uint8_t kCertificateDataDER[] = {
464*6777b538SAndroid Build Coastguard Worker 0x30, 0x82, 0x03, 0x81, 0x30, 0x82, 0x02, 0x69, 0xa0, 0x03, 0x02, 0x01,
465*6777b538SAndroid Build Coastguard Worker 0x02, 0x02, 0x09, 0x00, 0xd2, 0xe9, 0x16, 0xde, 0xcb, 0xe2, 0x49, 0xb5,
466*6777b538SAndroid Build Coastguard Worker 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01,
467*6777b538SAndroid Build Coastguard Worker 0x0d, 0x05, 0x00, 0x30, 0x57, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
468*6777b538SAndroid Build Coastguard Worker 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03,
469*6777b538SAndroid Build Coastguard Worker 0x55, 0x04, 0x08, 0x0c, 0x02, 0x4d, 0x41, 0x31, 0x12, 0x30, 0x10, 0x06,
470*6777b538SAndroid Build Coastguard Worker 0x03, 0x55, 0x04, 0x07, 0x0c, 0x09, 0x43, 0x61, 0x6d, 0x62, 0x72, 0x69,
471*6777b538SAndroid Build Coastguard Worker 0x64, 0x67, 0x65, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x0a,
472*6777b538SAndroid Build Coastguard Worker 0x0c, 0x04, 0x42, 0x6c, 0x61, 0x68, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03,
473*6777b538SAndroid Build Coastguard Worker 0x55, 0x04, 0x03, 0x0c, 0x0f, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x78, 0x61,
474*6777b538SAndroid Build Coastguard Worker 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x1e, 0x17, 0x0d,
475*6777b538SAndroid Build Coastguard Worker 0x31, 0x36, 0x30, 0x33, 0x31, 0x37, 0x32, 0x30, 0x31, 0x33, 0x31, 0x30,
476*6777b538SAndroid Build Coastguard Worker 0x5a, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x34, 0x31, 0x36, 0x32, 0x30, 0x31,
477*6777b538SAndroid Build Coastguard Worker 0x33, 0x31, 0x30, 0x5a, 0x30, 0x57, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03,
478*6777b538SAndroid Build Coastguard Worker 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06,
479*6777b538SAndroid Build Coastguard Worker 0x03, 0x55, 0x04, 0x08, 0x0c, 0x02, 0x4d, 0x41, 0x31, 0x12, 0x30, 0x10,
480*6777b538SAndroid Build Coastguard Worker 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x09, 0x43, 0x61, 0x6d, 0x62, 0x72,
481*6777b538SAndroid Build Coastguard Worker 0x69, 0x64, 0x67, 0x65, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04,
482*6777b538SAndroid Build Coastguard Worker 0x0a, 0x0c, 0x04, 0x42, 0x6c, 0x61, 0x68, 0x31, 0x18, 0x30, 0x16, 0x06,
483*6777b538SAndroid Build Coastguard Worker 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0f, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x78,
484*6777b538SAndroid Build Coastguard Worker 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x82, 0x01,
485*6777b538SAndroid Build Coastguard Worker 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
486*6777b538SAndroid Build Coastguard Worker 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01,
487*6777b538SAndroid Build Coastguard Worker 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xd3, 0xec, 0x61, 0x08, 0xbd, 0x91,
488*6777b538SAndroid Build Coastguard Worker 0x94, 0x07, 0xaf, 0xf1, 0xf5, 0xeb, 0x84, 0x6d, 0x4b, 0x42, 0x0b, 0x40,
489*6777b538SAndroid Build Coastguard Worker 0xb6, 0x6a, 0x51, 0x4d, 0x41, 0xde, 0x1c, 0xad, 0xf2, 0xcb, 0x73, 0xdb,
490*6777b538SAndroid Build Coastguard Worker 0x41, 0x54, 0xd2, 0x13, 0xd6, 0xe9, 0x9b, 0xbe, 0x49, 0x3c, 0x6a, 0xeb,
491*6777b538SAndroid Build Coastguard Worker 0x16, 0xa1, 0xee, 0x88, 0xbf, 0x58, 0xe6, 0x25, 0x52, 0x84, 0xdd, 0x3d,
492*6777b538SAndroid Build Coastguard Worker 0x62, 0x34, 0x22, 0x81, 0x98, 0x55, 0x0d, 0xce, 0x6e, 0xf1, 0x72, 0xae,
493*6777b538SAndroid Build Coastguard Worker 0x70, 0x34, 0x51, 0x4b, 0x54, 0xc8, 0x79, 0xe3, 0x57, 0xab, 0x24, 0xc0,
494*6777b538SAndroid Build Coastguard Worker 0x29, 0x67, 0x38, 0xb1, 0x7f, 0x71, 0x32, 0x60, 0x08, 0x34, 0xa1, 0x92,
495*6777b538SAndroid Build Coastguard Worker 0x6d, 0x78, 0xd6, 0x16, 0x73, 0x68, 0x32, 0x8b, 0xf8, 0x95, 0xa5, 0x79,
496*6777b538SAndroid Build Coastguard Worker 0xfb, 0xa5, 0xd3, 0x8d, 0xb2, 0xa4, 0x4d, 0xc3, 0x22, 0xff, 0x2f, 0xae,
497*6777b538SAndroid Build Coastguard Worker 0x6f, 0x12, 0xc9, 0xa6, 0xad, 0xe3, 0x6d, 0xc7, 0x40, 0x9b, 0x6a, 0xba,
498*6777b538SAndroid Build Coastguard Worker 0x3c, 0x8c, 0xf3, 0x85, 0xa6, 0xc0, 0xbd, 0x49, 0xb6, 0x4f, 0xed, 0xaf,
499*6777b538SAndroid Build Coastguard Worker 0x10, 0xb4, 0x17, 0x26, 0x40, 0x21, 0x01, 0xb7, 0xa9, 0xf0, 0x06, 0x98,
500*6777b538SAndroid Build Coastguard Worker 0xfa, 0x03, 0x09, 0xe1, 0xfc, 0x7e, 0xcd, 0x70, 0x09, 0xcb, 0x19, 0x00,
501*6777b538SAndroid Build Coastguard Worker 0x0a, 0x3c, 0x3a, 0xd8, 0x95, 0xfc, 0xd7, 0x2e, 0x92, 0x06, 0x25, 0x03,
502*6777b538SAndroid Build Coastguard Worker 0xbd, 0x3f, 0x05, 0xf4, 0x89, 0x23, 0x41, 0x08, 0xc8, 0x3c, 0x62, 0xdc,
503*6777b538SAndroid Build Coastguard Worker 0x25, 0xed, 0x01, 0x68, 0xf3, 0x75, 0x4d, 0xc5, 0xc2, 0xb0, 0x36, 0xb3,
504*6777b538SAndroid Build Coastguard Worker 0x0f, 0x78, 0x4a, 0x2c, 0xa7, 0xbb, 0x13, 0x38, 0x09, 0xfd, 0x49, 0x95,
505*6777b538SAndroid Build Coastguard Worker 0x99, 0x4c, 0x23, 0x36, 0x0a, 0x0f, 0x70, 0xbe, 0x02, 0xc3, 0x50, 0x30,
506*6777b538SAndroid Build Coastguard Worker 0xb4, 0xaa, 0x7d, 0x47, 0x42, 0xbe, 0x62, 0x59, 0xbe, 0x88, 0xc4, 0x96,
507*6777b538SAndroid Build Coastguard Worker 0x42, 0x63, 0xf3, 0x27, 0x09, 0x30, 0x9e, 0x58, 0xe6, 0xbe, 0x12, 0x2b,
508*6777b538SAndroid Build Coastguard Worker 0x22, 0x11, 0x72, 0x65, 0x6c, 0x47, 0x50, 0x8c, 0x69, 0x0b, 0x02, 0x03,
509*6777b538SAndroid Build Coastguard Worker 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55,
510*6777b538SAndroid Build Coastguard Worker 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x40, 0x1f, 0x60, 0x96, 0x13, 0x3e,
511*6777b538SAndroid Build Coastguard Worker 0xb4, 0x93, 0x65, 0x71, 0x0e, 0x1b, 0xa3, 0xe6, 0x25, 0x21, 0xd6, 0x90,
512*6777b538SAndroid Build Coastguard Worker 0x69, 0xed, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30,
513*6777b538SAndroid Build Coastguard Worker 0x16, 0x80, 0x14, 0x40, 0x1f, 0x60, 0x96, 0x13, 0x3e, 0xb4, 0x93, 0x65,
514*6777b538SAndroid Build Coastguard Worker 0x71, 0x0e, 0x1b, 0xa3, 0xe6, 0x25, 0x21, 0xd6, 0x90, 0x69, 0xed, 0x30,
515*6777b538SAndroid Build Coastguard Worker 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01,
516*6777b538SAndroid Build Coastguard Worker 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
517*6777b538SAndroid Build Coastguard Worker 0x01, 0x0d, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x03, 0x4e, 0x0b,
518*6777b538SAndroid Build Coastguard Worker 0xdd, 0x81, 0xe9, 0xf9, 0x91, 0x92, 0xa2, 0x77, 0xd0, 0x8f, 0x73, 0xb6,
519*6777b538SAndroid Build Coastguard Worker 0x28, 0x7d, 0x3e, 0x2f, 0x36, 0x25, 0x01, 0x0f, 0x66, 0x14, 0x4d, 0x98,
520*6777b538SAndroid Build Coastguard Worker 0x9d, 0x90, 0x08, 0x41, 0xfa, 0xe0, 0x8e, 0x15, 0xb6, 0xf9, 0x2c, 0x67,
521*6777b538SAndroid Build Coastguard Worker 0x02, 0x31, 0x79, 0xa4, 0x2f, 0xb7, 0xf0, 0xf2, 0xfa, 0x28, 0xcf, 0xe5,
522*6777b538SAndroid Build Coastguard Worker 0x71, 0x57, 0xd2, 0x18, 0xd5, 0xbd, 0x2b, 0xa8, 0x88, 0x10, 0xaf, 0xe9,
523*6777b538SAndroid Build Coastguard Worker 0x68, 0x97, 0xb0, 0x04, 0x3f, 0x07, 0x5d, 0xb0, 0xc6, 0xfd, 0x34, 0xf0,
524*6777b538SAndroid Build Coastguard Worker 0x14, 0xea, 0x81, 0xf5, 0x00, 0xd7, 0xe5, 0x0b, 0xde, 0x9a, 0x78, 0x93,
525*6777b538SAndroid Build Coastguard Worker 0xe9, 0x64, 0x38, 0x93, 0x53, 0x57, 0x5c, 0x22, 0x1d, 0xec, 0xec, 0x77,
526*6777b538SAndroid Build Coastguard Worker 0xc9, 0xed, 0x79, 0x8b, 0x85, 0xe6, 0xf2, 0xb0, 0x11, 0x34, 0x25, 0x20,
527*6777b538SAndroid Build Coastguard Worker 0xdb, 0x3a, 0x82, 0x72, 0x15, 0x6e, 0xbb, 0x2b, 0x6c, 0xad, 0x26, 0x4d,
528*6777b538SAndroid Build Coastguard Worker 0xb4, 0x2b, 0xd4, 0xd5, 0x45, 0x19, 0x6f, 0x3c, 0xd3, 0x42, 0x53, 0xdb,
529*6777b538SAndroid Build Coastguard Worker 0x70, 0x6b, 0xd1, 0x9f, 0x24, 0x40, 0x55, 0xad, 0x64, 0x7e, 0x66, 0x80,
530*6777b538SAndroid Build Coastguard Worker 0x45, 0xfb, 0x30, 0x97, 0x20, 0x3d, 0x3e, 0x14, 0xfe, 0x88, 0x0d, 0xd9,
531*6777b538SAndroid Build Coastguard Worker 0x3a, 0x7e, 0x30, 0x5c, 0x75, 0x87, 0x59, 0x37, 0xe7, 0xb9, 0xff, 0x3d,
532*6777b538SAndroid Build Coastguard Worker 0xf8, 0x47, 0xe4, 0xb7, 0xa6, 0xcc, 0x62, 0xc8, 0xfa, 0x55, 0x93, 0xe8,
533*6777b538SAndroid Build Coastguard Worker 0xe4, 0x33, 0x29, 0x33, 0x91, 0xeb, 0x16, 0x95, 0xdc, 0x63, 0xaf, 0x5e,
534*6777b538SAndroid Build Coastguard Worker 0x9b, 0x0c, 0xa4, 0x99, 0x20, 0x90, 0x80, 0x1c, 0xbe, 0x9f, 0x22, 0x93,
535*6777b538SAndroid Build Coastguard Worker 0x21, 0xe1, 0x1c, 0x16, 0x92, 0x42, 0x42, 0x67, 0xfb, 0xf3, 0x31, 0x8c,
536*6777b538SAndroid Build Coastguard Worker 0x78, 0x41, 0x43, 0xed, 0x5f, 0x09, 0x0b, 0x21, 0x72, 0x40, 0x95, 0xdb,
537*6777b538SAndroid Build Coastguard Worker 0xd7, 0x8d, 0x2a, 0xe1, 0x52, 0x03, 0x57, 0xc8, 0x7b, 0x15, 0x90, 0x92,
538*6777b538SAndroid Build Coastguard Worker 0xdf, 0x07, 0x11, 0xfb, 0xf7, 0x25, 0xbe, 0xcb, 0x0b, 0xfa, 0xa6, 0x34,
539*6777b538SAndroid Build Coastguard Worker 0x61,
540*6777b538SAndroid Build Coastguard Worker };
541*6777b538SAndroid Build Coastguard Worker
542*6777b538SAndroid Build Coastguard Worker const unsigned char kExpectedServerEndPointToken[] = {
543*6777b538SAndroid Build Coastguard Worker 0x74, 0x6c, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2d,
544*6777b538SAndroid Build Coastguard Worker 0x65, 0x6e, 0x64, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x3a, 0x2c,
545*6777b538SAndroid Build Coastguard Worker 0x33, 0xc9, 0xee, 0x30, 0xa1, 0x99, 0xdc, 0x19, 0x48, 0x0a, 0xec,
546*6777b538SAndroid Build Coastguard Worker 0xc5, 0x1d, 0x94, 0xc7, 0x84, 0x3d, 0xc7, 0x9e, 0x51, 0xee, 0xbc,
547*6777b538SAndroid Build Coastguard Worker 0x23, 0x33, 0xfd, 0xeb, 0x20, 0x78, 0x3b, 0x93, 0xe8, 0xe6, 0x78,
548*6777b538SAndroid Build Coastguard Worker 0x10, 0xd7, 0x5e, 0x37, 0x48, 0x04, 0x07, 0x5f, 0x57, 0xe6, 0x16,
549*6777b538SAndroid Build Coastguard Worker 0xe2, 0x45, 0x44, 0xa3, 0x71, 0x8c, 0xef, 0x95, 0x08, 0x6b, 0x0c,
550*6777b538SAndroid Build Coastguard Worker 0xaa, 0x65, 0x51, 0x51, 0x60, 0x4f, 0x58, 0x28,
551*6777b538SAndroid Build Coastguard Worker };
552*6777b538SAndroid Build Coastguard Worker
553*6777b538SAndroid Build Coastguard Worker scoped_refptr<X509Certificate> cert =
554*6777b538SAndroid Build Coastguard Worker X509Certificate::CreateFromBytes(kCertificateDataDER);
555*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(cert);
556*6777b538SAndroid Build Coastguard Worker
557*6777b538SAndroid Build Coastguard Worker std::string channel_bindings;
558*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(
559*6777b538SAndroid Build Coastguard Worker x509_util::GetTLSServerEndPointChannelBinding(*cert, &channel_bindings));
560*6777b538SAndroid Build Coastguard Worker
561*6777b538SAndroid Build Coastguard Worker std::string expected_channel_bindings(
562*6777b538SAndroid Build Coastguard Worker std::begin(kExpectedServerEndPointToken),
563*6777b538SAndroid Build Coastguard Worker std::end(kExpectedServerEndPointToken));
564*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(expected_channel_bindings, channel_bindings);
565*6777b538SAndroid Build Coastguard Worker }
566*6777b538SAndroid Build Coastguard Worker
TEST(X509UtilTest,CreateChannelBindings_Unsupported_MD4)567*6777b538SAndroid Build Coastguard Worker TEST(X509UtilTest, CreateChannelBindings_Unsupported_MD4) {
568*6777b538SAndroid Build Coastguard Worker // Certificate:
569*6777b538SAndroid Build Coastguard Worker // Data:
570*6777b538SAndroid Build Coastguard Worker // Version: 3 (0x2)
571*6777b538SAndroid Build Coastguard Worker // Serial Number: 12629177056471137087 (0xaf43d99ee079bb3f)
572*6777b538SAndroid Build Coastguard Worker // Signature Algorithm: md4WithRSAEncryption
573*6777b538SAndroid Build Coastguard Worker // ...
574*6777b538SAndroid Build Coastguard Worker const uint8_t kCertificateDataDER[] = {
575*6777b538SAndroid Build Coastguard Worker 0x30, 0x82, 0x03, 0x87, 0x30, 0x82, 0x02, 0x6f, 0xa0, 0x03, 0x02, 0x01,
576*6777b538SAndroid Build Coastguard Worker 0x02, 0x02, 0x09, 0x00, 0xaf, 0x43, 0xd9, 0x9e, 0xe0, 0x79, 0xbb, 0x3f,
577*6777b538SAndroid Build Coastguard Worker 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01,
578*6777b538SAndroid Build Coastguard Worker 0x03, 0x05, 0x00, 0x30, 0x5a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
579*6777b538SAndroid Build Coastguard Worker 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03,
580*6777b538SAndroid Build Coastguard Worker 0x55, 0x04, 0x08, 0x0c, 0x02, 0x4d, 0x41, 0x31, 0x12, 0x30, 0x10, 0x06,
581*6777b538SAndroid Build Coastguard Worker 0x03, 0x55, 0x04, 0x07, 0x0c, 0x09, 0x43, 0x61, 0x6d, 0x62, 0x72, 0x69,
582*6777b538SAndroid Build Coastguard Worker 0x64, 0x67, 0x65, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a,
583*6777b538SAndroid Build Coastguard Worker 0x0c, 0x07, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x31, 0x18, 0x30,
584*6777b538SAndroid Build Coastguard Worker 0x16, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0f, 0x77, 0x77, 0x77, 0x2e,
585*6777b538SAndroid Build Coastguard Worker 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x30,
586*6777b538SAndroid Build Coastguard Worker 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x33, 0x31, 0x37, 0x32, 0x30, 0x31,
587*6777b538SAndroid Build Coastguard Worker 0x39, 0x35, 0x39, 0x5a, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x34, 0x31, 0x36,
588*6777b538SAndroid Build Coastguard Worker 0x32, 0x30, 0x31, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x5a, 0x31, 0x0b, 0x30,
589*6777b538SAndroid Build Coastguard Worker 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b,
590*6777b538SAndroid Build Coastguard Worker 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x02, 0x4d, 0x41, 0x31,
591*6777b538SAndroid Build Coastguard Worker 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x09, 0x43, 0x61,
592*6777b538SAndroid Build Coastguard Worker 0x6d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x31, 0x10, 0x30, 0x0e, 0x06,
593*6777b538SAndroid Build Coastguard Worker 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x07, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c,
594*6777b538SAndroid Build Coastguard Worker 0x65, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0f,
595*6777b538SAndroid Build Coastguard Worker 0x77, 0x77, 0x77, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e,
596*6777b538SAndroid Build Coastguard Worker 0x63, 0x6f, 0x6d, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a,
597*6777b538SAndroid Build Coastguard Worker 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82,
598*6777b538SAndroid Build Coastguard Worker 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00,
599*6777b538SAndroid Build Coastguard Worker 0xaf, 0xf8, 0xa5, 0xba, 0x20, 0x40, 0xcd, 0x60, 0x88, 0x1f, 0x27, 0x34,
600*6777b538SAndroid Build Coastguard Worker 0x57, 0x2f, 0x1b, 0xc9, 0xfc, 0xf3, 0x0b, 0x9f, 0xb3, 0xb8, 0x26, 0x67,
601*6777b538SAndroid Build Coastguard Worker 0x78, 0x79, 0x2b, 0xfe, 0x68, 0xa3, 0x95, 0x8c, 0x40, 0x6f, 0x80, 0x8b,
602*6777b538SAndroid Build Coastguard Worker 0x15, 0x8f, 0x0b, 0x4c, 0x66, 0x8d, 0x17, 0x32, 0x6a, 0xa0, 0x57, 0x74,
603*6777b538SAndroid Build Coastguard Worker 0x2d, 0x31, 0xc4, 0x8e, 0xa4, 0x76, 0x6b, 0xff, 0x93, 0x05, 0x44, 0x9b,
604*6777b538SAndroid Build Coastguard Worker 0xe9, 0xf2, 0x81, 0x1e, 0x3b, 0x2e, 0x05, 0x67, 0x01, 0x85, 0x5a, 0xed,
605*6777b538SAndroid Build Coastguard Worker 0xad, 0xc8, 0x55, 0x4b, 0x8e, 0x80, 0x1e, 0x7a, 0x5a, 0xbd, 0xc2, 0x8e,
606*6777b538SAndroid Build Coastguard Worker 0x5f, 0x4f, 0x3a, 0x52, 0xda, 0x2d, 0x86, 0x0d, 0x6b, 0xaf, 0xe2, 0x12,
607*6777b538SAndroid Build Coastguard Worker 0xd1, 0x6e, 0x15, 0x78, 0xb5, 0x06, 0x1c, 0xa2, 0xb4, 0xda, 0x3c, 0xfe,
608*6777b538SAndroid Build Coastguard Worker 0x8b, 0x4c, 0x70, 0x5c, 0xc5, 0x5c, 0x86, 0xf6, 0x95, 0x01, 0x88, 0x44,
609*6777b538SAndroid Build Coastguard Worker 0x99, 0xd2, 0x97, 0x47, 0xdb, 0xdb, 0x4f, 0x6d, 0x1a, 0xd1, 0x1d, 0x74,
610*6777b538SAndroid Build Coastguard Worker 0x0b, 0x89, 0x5c, 0x05, 0x19, 0xe7, 0xe7, 0x17, 0xee, 0xb5, 0xf8, 0x75,
611*6777b538SAndroid Build Coastguard Worker 0x96, 0x95, 0x5a, 0xfd, 0x37, 0x4d, 0xa1, 0xda, 0x5c, 0xf6, 0x5c, 0x60,
612*6777b538SAndroid Build Coastguard Worker 0xa1, 0x04, 0x92, 0xa5, 0x42, 0x02, 0xbd, 0x40, 0xb3, 0x1e, 0xab, 0x28,
613*6777b538SAndroid Build Coastguard Worker 0x0b, 0x28, 0x79, 0x92, 0xdc, 0x23, 0xde, 0xad, 0x28, 0x06, 0xba, 0x93,
614*6777b538SAndroid Build Coastguard Worker 0x28, 0x3f, 0xf4, 0x6a, 0x10, 0x11, 0xf1, 0xe4, 0x92, 0x5b, 0x65, 0xce,
615*6777b538SAndroid Build Coastguard Worker 0x0f, 0x13, 0x34, 0x87, 0xb6, 0xa4, 0x1d, 0xe3, 0x4a, 0xea, 0xc8, 0xcf,
616*6777b538SAndroid Build Coastguard Worker 0x4e, 0x21, 0xf2, 0x70, 0x18, 0x9f, 0x3a, 0x62, 0x43, 0x70, 0x89, 0xb9,
617*6777b538SAndroid Build Coastguard Worker 0xca, 0xab, 0xa6, 0xb1, 0x55, 0x42, 0x3d, 0x25, 0x35, 0xd6, 0xa2, 0x77,
618*6777b538SAndroid Build Coastguard Worker 0x0f, 0x66, 0x88, 0xd2, 0x43, 0x6b, 0xfa, 0x3c, 0xa3, 0xcf, 0xa1, 0x56,
619*6777b538SAndroid Build Coastguard Worker 0x84, 0xe5, 0x9b, 0x25, 0xff, 0x02, 0xb6, 0x9d, 0xaf, 0x6a, 0x4d, 0x8c,
620*6777b538SAndroid Build Coastguard Worker 0xf8, 0x3e, 0xf7, 0xe5, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30,
621*6777b538SAndroid Build Coastguard Worker 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14,
622*6777b538SAndroid Build Coastguard Worker 0x62, 0xf2, 0x1f, 0xd6, 0x29, 0xfa, 0x61, 0x88, 0x4c, 0x36, 0x39, 0xed,
623*6777b538SAndroid Build Coastguard Worker 0x9f, 0x8e, 0xcf, 0x3b, 0xdc, 0x90, 0x04, 0xa5, 0x30, 0x1f, 0x06, 0x03,
624*6777b538SAndroid Build Coastguard Worker 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x62, 0xf2, 0x1f,
625*6777b538SAndroid Build Coastguard Worker 0xd6, 0x29, 0xfa, 0x61, 0x88, 0x4c, 0x36, 0x39, 0xed, 0x9f, 0x8e, 0xcf,
626*6777b538SAndroid Build Coastguard Worker 0x3b, 0xdc, 0x90, 0x04, 0xa5, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13,
627*6777b538SAndroid Build Coastguard Worker 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a,
628*6777b538SAndroid Build Coastguard Worker 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x03, 0x05, 0x00, 0x03, 0x82,
629*6777b538SAndroid Build Coastguard Worker 0x01, 0x01, 0x00, 0x9e, 0x36, 0xff, 0xf5, 0x77, 0x46, 0x80, 0x22, 0xc4,
630*6777b538SAndroid Build Coastguard Worker 0x01, 0x05, 0x69, 0x84, 0xd1, 0xdc, 0x0c, 0xce, 0xda, 0x2f, 0x21, 0x11,
631*6777b538SAndroid Build Coastguard Worker 0x9a, 0x80, 0x24, 0x81, 0xea, 0x1b, 0x1a, 0xb9, 0x5d, 0x70, 0x60, 0xaf,
632*6777b538SAndroid Build Coastguard Worker 0xbc, 0xca, 0xdb, 0xc4, 0x10, 0x6e, 0x17, 0xdb, 0x58, 0x11, 0x0c, 0xec,
633*6777b538SAndroid Build Coastguard Worker 0x0e, 0xdd, 0xf8, 0xbf, 0x42, 0x27, 0x2d, 0x06, 0x75, 0x25, 0xc0, 0xdb,
634*6777b538SAndroid Build Coastguard Worker 0xb0, 0x35, 0x0c, 0x66, 0xfb, 0xfd, 0x0e, 0xb9, 0x16, 0x9e, 0x34, 0xaf,
635*6777b538SAndroid Build Coastguard Worker 0xdb, 0x72, 0x6e, 0xb3, 0x6d, 0x5e, 0xb2, 0xf0, 0x6d, 0x46, 0x32, 0xba,
636*6777b538SAndroid Build Coastguard Worker 0x35, 0xb5, 0x3b, 0xc5, 0x72, 0xb7, 0x1c, 0x88, 0x6a, 0x84, 0xc2, 0xde,
637*6777b538SAndroid Build Coastguard Worker 0x1d, 0x45, 0x30, 0x41, 0x3d, 0xc5, 0xbb, 0x0a, 0x78, 0xe9, 0xef, 0x59,
638*6777b538SAndroid Build Coastguard Worker 0xc6, 0xbc, 0x0c, 0x9d, 0x36, 0x1f, 0xc8, 0xb1, 0x1b, 0xd3, 0x1c, 0xec,
639*6777b538SAndroid Build Coastguard Worker 0x57, 0x69, 0x8b, 0xcb, 0x1b, 0x93, 0x99, 0x2e, 0xab, 0x8d, 0xd7, 0x63,
640*6777b538SAndroid Build Coastguard Worker 0xc5, 0x1f, 0x58, 0x9d, 0x06, 0x8e, 0xf1, 0x47, 0x64, 0xc5, 0xf3, 0x03,
641*6777b538SAndroid Build Coastguard Worker 0x8d, 0x2c, 0x8a, 0x99, 0x2c, 0xe6, 0x89, 0x87, 0xb2, 0x42, 0xdd, 0x18,
642*6777b538SAndroid Build Coastguard Worker 0xf0, 0xc9, 0xdb, 0x6c, 0xee, 0x3e, 0x5e, 0xc5, 0x75, 0xc7, 0x45, 0xd3,
643*6777b538SAndroid Build Coastguard Worker 0xd0, 0xaa, 0xf7, 0x0d, 0xac, 0xaa, 0x4c, 0xb4, 0xa4, 0xa2, 0xb7, 0xfc,
644*6777b538SAndroid Build Coastguard Worker 0x65, 0xb0, 0x2e, 0x83, 0xbd, 0x7a, 0x65, 0xfb, 0x1b, 0x92, 0x3f, 0x8d,
645*6777b538SAndroid Build Coastguard Worker 0x47, 0x0c, 0xbb, 0x4a, 0x38, 0xc5, 0x67, 0x87, 0x8e, 0x79, 0xd6, 0x48,
646*6777b538SAndroid Build Coastguard Worker 0xc7, 0xf2, 0x92, 0xdb, 0x6e, 0xf9, 0x54, 0x01, 0xed, 0xdb, 0xbd, 0xe0,
647*6777b538SAndroid Build Coastguard Worker 0x12, 0x18, 0xd9, 0xcf, 0x36, 0x5d, 0x7e, 0xe9, 0xb9, 0x27, 0x09, 0x80,
648*6777b538SAndroid Build Coastguard Worker 0x1a, 0x2f, 0xb9, 0x58, 0xc6, 0x6f, 0xa2, 0x42, 0x7a, 0x7b, 0x20, 0xf2,
649*6777b538SAndroid Build Coastguard Worker 0xc9, 0x85, 0x54, 0x11, 0xa2, 0xe3, 0x31, 0x0f, 0x71, 0x6a, 0xea, 0x0e,
650*6777b538SAndroid Build Coastguard Worker 0xef, 0xba, 0x6d, 0x5e, 0x88, 0x01, 0xaf,
651*6777b538SAndroid Build Coastguard Worker };
652*6777b538SAndroid Build Coastguard Worker
653*6777b538SAndroid Build Coastguard Worker scoped_refptr<X509Certificate> cert =
654*6777b538SAndroid Build Coastguard Worker X509Certificate::CreateFromBytes(kCertificateDataDER);
655*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(cert);
656*6777b538SAndroid Build Coastguard Worker
657*6777b538SAndroid Build Coastguard Worker std::string channel_bindings;
658*6777b538SAndroid Build Coastguard Worker ASSERT_FALSE(
659*6777b538SAndroid Build Coastguard Worker x509_util::GetTLSServerEndPointChannelBinding(*cert, &channel_bindings));
660*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(channel_bindings.empty());
661*6777b538SAndroid Build Coastguard Worker }
662*6777b538SAndroid Build Coastguard Worker
663*6777b538SAndroid Build Coastguard Worker namespace {
664*6777b538SAndroid Build Coastguard Worker
DigestSign(EVP_PKEY * key,const EVP_MD * md,base::span<const uint8_t> data,bool is_pss,std::vector<uint8_t> * digest)665*6777b538SAndroid Build Coastguard Worker bool DigestSign(EVP_PKEY* key,
666*6777b538SAndroid Build Coastguard Worker const EVP_MD* md,
667*6777b538SAndroid Build Coastguard Worker base::span<const uint8_t> data,
668*6777b538SAndroid Build Coastguard Worker bool is_pss,
669*6777b538SAndroid Build Coastguard Worker std::vector<uint8_t>* digest) {
670*6777b538SAndroid Build Coastguard Worker bssl::ScopedEVP_MD_CTX ctx;
671*6777b538SAndroid Build Coastguard Worker EVP_PKEY_CTX* pctx;
672*6777b538SAndroid Build Coastguard Worker if (!EVP_DigestSignInit(ctx.get(), &pctx, md, nullptr, key)) {
673*6777b538SAndroid Build Coastguard Worker return false;
674*6777b538SAndroid Build Coastguard Worker }
675*6777b538SAndroid Build Coastguard Worker
676*6777b538SAndroid Build Coastguard Worker if (is_pss) {
677*6777b538SAndroid Build Coastguard Worker if (!EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING) ||
678*6777b538SAndroid Build Coastguard Worker !EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, -1 /* hash length */)) {
679*6777b538SAndroid Build Coastguard Worker return false;
680*6777b538SAndroid Build Coastguard Worker }
681*6777b538SAndroid Build Coastguard Worker }
682*6777b538SAndroid Build Coastguard Worker
683*6777b538SAndroid Build Coastguard Worker // Determine the maximum length of the signature.
684*6777b538SAndroid Build Coastguard Worker size_t len = 0;
685*6777b538SAndroid Build Coastguard Worker if (!EVP_DigestSign(ctx.get(), nullptr, &len, data.data(), data.size())) {
686*6777b538SAndroid Build Coastguard Worker return false;
687*6777b538SAndroid Build Coastguard Worker }
688*6777b538SAndroid Build Coastguard Worker digest->resize(len);
689*6777b538SAndroid Build Coastguard Worker
690*6777b538SAndroid Build Coastguard Worker // Sign it.
691*6777b538SAndroid Build Coastguard Worker if (!EVP_DigestSign(ctx.get(), digest->data(), &len, data.data(),
692*6777b538SAndroid Build Coastguard Worker data.size())) {
693*6777b538SAndroid Build Coastguard Worker return false;
694*6777b538SAndroid Build Coastguard Worker }
695*6777b538SAndroid Build Coastguard Worker digest->resize(len);
696*6777b538SAndroid Build Coastguard Worker return true;
697*6777b538SAndroid Build Coastguard Worker }
698*6777b538SAndroid Build Coastguard Worker
699*6777b538SAndroid Build Coastguard Worker } // namespace
700*6777b538SAndroid Build Coastguard Worker
TEST(X509UtilTest,SignatureVerifierInitWithCertificate)701*6777b538SAndroid Build Coastguard Worker TEST(X509UtilTest, SignatureVerifierInitWithCertificate) {
702*6777b538SAndroid Build Coastguard Worker static const uint8_t kMessage[] = {'h', 'e', 'l', 'l', 'o'};
703*6777b538SAndroid Build Coastguard Worker static const uint8_t kWrongMessage[] = {'n', 'o', 'p', 'e'};
704*6777b538SAndroid Build Coastguard Worker
705*6777b538SAndroid Build Coastguard Worker bssl::UniquePtr<EVP_PKEY> rsaKey =
706*6777b538SAndroid Build Coastguard Worker net::key_util::LoadEVP_PKEYFromPEM(net::GetTestCertsDirectory().Append(
707*6777b538SAndroid Build Coastguard Worker FILE_PATH_LITERAL("key_usage_rsa.key")));
708*6777b538SAndroid Build Coastguard Worker ASSERT_NE(rsaKey, nullptr);
709*6777b538SAndroid Build Coastguard Worker bssl::UniquePtr<EVP_PKEY> p256Key =
710*6777b538SAndroid Build Coastguard Worker net::key_util::LoadEVP_PKEYFromPEM(net::GetTestCertsDirectory().Append(
711*6777b538SAndroid Build Coastguard Worker FILE_PATH_LITERAL("key_usage_p256.key")));
712*6777b538SAndroid Build Coastguard Worker ASSERT_NE(p256Key, nullptr);
713*6777b538SAndroid Build Coastguard Worker
714*6777b538SAndroid Build Coastguard Worker std::vector<uint8_t> rsaSignaturePKCS1;
715*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(DigestSign(rsaKey.get(), EVP_sha256(), kMessage, false,
716*6777b538SAndroid Build Coastguard Worker &rsaSignaturePKCS1));
717*6777b538SAndroid Build Coastguard Worker std::vector<uint8_t> rsaSignaturePSS;
718*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(
719*6777b538SAndroid Build Coastguard Worker DigestSign(rsaKey.get(), EVP_sha256(), kMessage, true, &rsaSignaturePSS));
720*6777b538SAndroid Build Coastguard Worker std::vector<uint8_t> p256Signature;
721*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(
722*6777b538SAndroid Build Coastguard Worker DigestSign(p256Key.get(), EVP_sha256(), kMessage, false, &p256Signature));
723*6777b538SAndroid Build Coastguard Worker
724*6777b538SAndroid Build Coastguard Worker struct Test {
725*6777b538SAndroid Build Coastguard Worker const char* cert;
726*6777b538SAndroid Build Coastguard Worker crypto::SignatureVerifier::SignatureAlgorithm algorithm;
727*6777b538SAndroid Build Coastguard Worker base::span<const uint8_t> signature;
728*6777b538SAndroid Build Coastguard Worker bool ok;
729*6777b538SAndroid Build Coastguard Worker } kTests[] = {
730*6777b538SAndroid Build Coastguard Worker // The certificate must support the digitalSignature key usage.
731*6777b538SAndroid Build Coastguard Worker {"key_usage_p256_digitalsignature.pem",
732*6777b538SAndroid Build Coastguard Worker crypto::SignatureVerifier::ECDSA_SHA256, p256Signature, true},
733*6777b538SAndroid Build Coastguard Worker {"key_usage_p256_both.pem", crypto::SignatureVerifier::ECDSA_SHA256,
734*6777b538SAndroid Build Coastguard Worker p256Signature, true},
735*6777b538SAndroid Build Coastguard Worker {"key_usage_rsa_digitalsignature.pem",
736*6777b538SAndroid Build Coastguard Worker crypto::SignatureVerifier::RSA_PKCS1_SHA256, rsaSignaturePKCS1, true},
737*6777b538SAndroid Build Coastguard Worker {"key_usage_rsa_digitalsignature.pem",
738*6777b538SAndroid Build Coastguard Worker crypto::SignatureVerifier::RSA_PSS_SHA256, rsaSignaturePSS, true},
739*6777b538SAndroid Build Coastguard Worker {"key_usage_rsa_both.pem", crypto::SignatureVerifier::RSA_PKCS1_SHA256,
740*6777b538SAndroid Build Coastguard Worker rsaSignaturePKCS1, true},
741*6777b538SAndroid Build Coastguard Worker {"key_usage_rsa_both.pem", crypto::SignatureVerifier::RSA_PSS_SHA256,
742*6777b538SAndroid Build Coastguard Worker rsaSignaturePSS, true},
743*6777b538SAndroid Build Coastguard Worker
744*6777b538SAndroid Build Coastguard Worker // Omitting the extension entirely is also accepted.
745*6777b538SAndroid Build Coastguard Worker {"key_usage_p256_no_extension.pem",
746*6777b538SAndroid Build Coastguard Worker crypto::SignatureVerifier::ECDSA_SHA256, p256Signature, true},
747*6777b538SAndroid Build Coastguard Worker {"key_usage_rsa_no_extension.pem",
748*6777b538SAndroid Build Coastguard Worker crypto::SignatureVerifier::RSA_PKCS1_SHA256, rsaSignaturePKCS1, true},
749*6777b538SAndroid Build Coastguard Worker {"key_usage_rsa_no_extension.pem",
750*6777b538SAndroid Build Coastguard Worker crypto::SignatureVerifier::RSA_PSS_SHA256, rsaSignaturePSS, true},
751*6777b538SAndroid Build Coastguard Worker
752*6777b538SAndroid Build Coastguard Worker // If the extension is present but digitalSignature is missing, the
753*6777b538SAndroid Build Coastguard Worker // signature is rejected.
754*6777b538SAndroid Build Coastguard Worker {"key_usage_p256_keyagreement.pem",
755*6777b538SAndroid Build Coastguard Worker crypto::SignatureVerifier::ECDSA_SHA256, p256Signature, false},
756*6777b538SAndroid Build Coastguard Worker {"key_usage_rsa_keyencipherment.pem",
757*6777b538SAndroid Build Coastguard Worker crypto::SignatureVerifier::RSA_PKCS1_SHA256, rsaSignaturePKCS1, false},
758*6777b538SAndroid Build Coastguard Worker {"key_usage_rsa_keyencipherment.pem",
759*6777b538SAndroid Build Coastguard Worker crypto::SignatureVerifier::RSA_PSS_SHA256, rsaSignaturePSS, false},
760*6777b538SAndroid Build Coastguard Worker
761*6777b538SAndroid Build Coastguard Worker // The key and signature must match, rather than only extracting the hash
762*6777b538SAndroid Build Coastguard Worker // function.
763*6777b538SAndroid Build Coastguard Worker {"key_usage_p256_digitalsignature.pem",
764*6777b538SAndroid Build Coastguard Worker crypto::SignatureVerifier::RSA_PKCS1_SHA256, p256Signature, false},
765*6777b538SAndroid Build Coastguard Worker {"key_usage_rsa_digitalsignature.pem",
766*6777b538SAndroid Build Coastguard Worker crypto::SignatureVerifier::ECDSA_SHA256, rsaSignaturePKCS1, false},
767*6777b538SAndroid Build Coastguard Worker };
768*6777b538SAndroid Build Coastguard Worker
769*6777b538SAndroid Build Coastguard Worker for (const auto& test : kTests) {
770*6777b538SAndroid Build Coastguard Worker SCOPED_TRACE(test.cert);
771*6777b538SAndroid Build Coastguard Worker scoped_refptr<X509Certificate> cert =
772*6777b538SAndroid Build Coastguard Worker ImportCertFromFile(GetTestCertsDirectory(), test.cert);
773*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(cert);
774*6777b538SAndroid Build Coastguard Worker
775*6777b538SAndroid Build Coastguard Worker crypto::SignatureVerifier verifier;
776*6777b538SAndroid Build Coastguard Worker bool ok = SignatureVerifierInitWithCertificate(
777*6777b538SAndroid Build Coastguard Worker &verifier, test.algorithm, test.signature, cert->cert_buffer());
778*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(ok, test.ok);
779*6777b538SAndroid Build Coastguard Worker if (ok) {
780*6777b538SAndroid Build Coastguard Worker verifier.VerifyUpdate(kMessage);
781*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(verifier.VerifyFinal());
782*6777b538SAndroid Build Coastguard Worker
783*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(SignatureVerifierInitWithCertificate(
784*6777b538SAndroid Build Coastguard Worker &verifier, test.algorithm, test.signature, cert->cert_buffer()));
785*6777b538SAndroid Build Coastguard Worker verifier.VerifyUpdate(kWrongMessage);
786*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(verifier.VerifyFinal());
787*6777b538SAndroid Build Coastguard Worker }
788*6777b538SAndroid Build Coastguard Worker }
789*6777b538SAndroid Build Coastguard Worker }
790*6777b538SAndroid Build Coastguard Worker
TEST(X509UtilTest,HasRsaPkcs1Sha1Signature)791*6777b538SAndroid Build Coastguard Worker TEST(X509UtilTest, HasRsaPkcs1Sha1Signature) {
792*6777b538SAndroid Build Coastguard Worker base::FilePath certs_dir = GetTestCertsDirectory();
793*6777b538SAndroid Build Coastguard Worker
794*6777b538SAndroid Build Coastguard Worker scoped_refptr<X509Certificate> sha1_leaf =
795*6777b538SAndroid Build Coastguard Worker ImportCertFromFile(certs_dir, "sha1_leaf.pem");
796*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(sha1_leaf);
797*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(HasRsaPkcs1Sha1Signature(sha1_leaf->cert_buffer()));
798*6777b538SAndroid Build Coastguard Worker
799*6777b538SAndroid Build Coastguard Worker scoped_refptr<X509Certificate> ok_cert =
800*6777b538SAndroid Build Coastguard Worker ImportCertFromFile(certs_dir, "ok_cert.pem");
801*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(ok_cert);
802*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(HasRsaPkcs1Sha1Signature(ok_cert->cert_buffer()));
803*6777b538SAndroid Build Coastguard Worker }
804*6777b538SAndroid Build Coastguard Worker
805*6777b538SAndroid Build Coastguard Worker } // namespace net::x509_util
806