1// Copyright (c) 2010 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 "base/basictypes.h"
6#include "net/base/x509_cert_types.h"
7#include "testing/gtest/include/gtest/gtest.h"
8
9//  0:d=0  hl=2 l=  95 cons: SEQUENCE
10//  2:d=1  hl=2 l=  11 cons:  SET
11//  4:d=2  hl=2 l=   9 cons:   SEQUENCE
12//  6:d=3  hl=2 l=   3 prim:    OBJECT            :countryName
13// 11:d=3  hl=2 l=   2 prim:    PRINTABLESTRING   :US
14// 15:d=1  hl=2 l=  23 cons:  SET
15// 17:d=2  hl=2 l=  21 cons:   SEQUENCE
16// 19:d=3  hl=2 l=   3 prim:    OBJECT            :organizationName
17// 24:d=3  hl=2 l=  14 prim:    PRINTABLESTRING   :VeriSign, Inc.
18// 40:d=1  hl=2 l=  55 cons:  SET
19// 42:d=2  hl=2 l=  53 cons:   SEQUENCE
20// 44:d=3  hl=2 l=   3 prim:    OBJECT            :organizationalUnitName
21// 49:d=3  hl=2 l=  46 prim:    PRINTABLESTRING   :Class 1 Public Primary Certification Authority
22static const uint8 VerisignDN[] = {
23  0x30, 0x5f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
24  0x55, 0x53, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0e,
25  0x56, 0x65, 0x72, 0x69, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x49, 0x6e, 0x63,
26  0x2e, 0x31, 0x37, 0x30, 0x35, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x2e, 0x43,
27  0x6c, 0x61, 0x73, 0x73, 0x20, 0x31, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63,
28  0x20, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x43, 0x65, 0x72, 0x74,
29  0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74,
30  0x68, 0x6f, 0x72, 0x69, 0x74, 0x79
31};
32
33//  0:d=0  hl=2 l= 125 cons: SEQUENCE
34//  2:d=1  hl=2 l=  11 cons:  SET
35//  4:d=2  hl=2 l=   9 cons:   SEQUENCE
36//  6:d=3  hl=2 l=   3 prim:    OBJECT            :countryName
37// 11:d=3  hl=2 l=   2 prim:    PRINTABLESTRING   :IL
38// 15:d=1  hl=2 l=  22 cons:  SET
39// 17:d=2  hl=2 l=  20 cons:   SEQUENCE
40// 19:d=3  hl=2 l=   3 prim:    OBJECT            :organizationName
41// 24:d=3  hl=2 l=  13 prim:    PRINTABLESTRING   :StartCom Ltd.
42// 39:d=1  hl=2 l=  43 cons:  SET
43// 41:d=2  hl=2 l=  41 cons:   SEQUENCE
44// 43:d=3  hl=2 l=   3 prim:    OBJECT            :organizationalUnitName
45// 48:d=3  hl=2 l=  34 prim:    PRINTABLESTRING   :Secure Digital Certificate Signing
46// 84:d=1  hl=2 l=  41 cons:  SET
47// 86:d=2  hl=2 l=  39 cons:   SEQUENCE
48// 88:d=3  hl=2 l=   3 prim:    OBJECT            :commonName
49// 93:d=3  hl=2 l=  32 prim:    PRINTABLESTRING   :StartCom Certification Authority
50static const uint8 StartComDN[] = {
51  0x30, 0x7d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
52  0x49, 0x4c, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0d,
53  0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x20, 0x4c, 0x74, 0x64, 0x2e,
54  0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x22, 0x53, 0x65,
55  0x63, 0x75, 0x72, 0x65, 0x20, 0x44, 0x69, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x20,
56  0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x53,
57  0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x31, 0x29, 0x30, 0x27, 0x06, 0x03, 0x55,
58  0x04, 0x03, 0x13, 0x20, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x20,
59  0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
60  0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79
61};
62
63//  0:d=0  hl=3 l= 174 cons: SEQUENCE
64//  3:d=1  hl=2 l=  11 cons:  SET
65//  5:d=2  hl=2 l=   9 cons:   SEQUENCE
66//  7:d=3  hl=2 l=   3 prim:    OBJECT            :countryName
67// 12:d=3  hl=2 l=   2 prim:    PRINTABLESTRING   :US
68// 16:d=1  hl=2 l=  11 cons:  SET
69// 18:d=2  hl=2 l=   9 cons:   SEQUENCE
70// 20:d=3  hl=2 l=   3 prim:    OBJECT            :stateOrProvinceName
71// 25:d=3  hl=2 l=   2 prim:    PRINTABLESTRING   :UT
72// 29:d=1  hl=2 l=  23 cons:  SET
73// 31:d=2  hl=2 l=  21 cons:   SEQUENCE
74// 33:d=3  hl=2 l=   3 prim:    OBJECT            :localityName
75// 38:d=3  hl=2 l=  14 prim:    PRINTABLESTRING   :Salt Lake City
76// 54:d=1  hl=2 l=  30 cons:  SET
77// 56:d=2  hl=2 l=  28 cons:   SEQUENCE
78// 58:d=3  hl=2 l=   3 prim:    OBJECT            :organizationName
79// 63:d=3  hl=2 l=  21 prim:    PRINTABLESTRING   :The USERTRUST Network
80// 86:d=1  hl=2 l=  33 cons:  SET
81// 88:d=2  hl=2 l=  31 cons:   SEQUENCE
82// 90:d=3  hl=2 l=   3 prim:    OBJECT            :organizationalUnitName
83// 95:d=3  hl=2 l=  24 prim:    PRINTABLESTRING   :http://www.usertrust.com
84//121:d=1  hl=2 l=  54 cons:  SET
85//123:d=2  hl=2 l=  52 cons:   SEQUENCE
86//125:d=3  hl=2 l=   3 prim:    OBJECT            :commonName
87//130:d=3  hl=2 l=  45 prim:    PRINTABLESTRING   :UTN-USERFirst-Client Authentication and Email
88static const uint8 UserTrustDN[] = {
89  0x30, 0x81, 0xae, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
90  0x02, 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13,
91  0x02, 0x55, 0x54, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13,
92  0x0e, 0x53, 0x61, 0x6c, 0x74, 0x20, 0x4c, 0x61, 0x6b, 0x65, 0x20, 0x43, 0x69,
93  0x74, 0x79, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15,
94  0x54, 0x68, 0x65, 0x20, 0x55, 0x53, 0x45, 0x52, 0x54, 0x52, 0x55, 0x53, 0x54,
95  0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x31, 0x21, 0x30, 0x1f, 0x06,
96  0x03, 0x55, 0x04, 0x0b, 0x13, 0x18, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
97  0x77, 0x77, 0x77, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74,
98  0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x36, 0x30, 0x34, 0x06, 0x03, 0x55, 0x04, 0x03,
99  0x13, 0x2d, 0x55, 0x54, 0x4e, 0x2d, 0x55, 0x53, 0x45, 0x52, 0x46, 0x69, 0x72,
100  0x73, 0x74, 0x2d, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x41, 0x75, 0x74,
101  0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61,
102  0x6e, 0x64, 0x20, 0x45, 0x6d, 0x61, 0x69, 0x6c
103};
104
105//  0:d=0  hl=3 l= 190 cons: SEQUENCE
106//  3:d=1  hl=2 l=  63 cons:  SET
107//  5:d=2  hl=2 l=  61 cons:   SEQUENCE
108//  7:d=3  hl=2 l=   3 prim:    OBJECT            :commonName
109// 12:d=3  hl=2 l=  54 prim:    UTF8STRING        :TÃRKTRUST Elektronik Sertifika Hizmet SaÄlayıcısı
110// 68:d=1  hl=2 l=  11 cons:  SET
111// 70:d=2  hl=2 l=   9 cons:   SEQUENCE
112// 72:d=3  hl=2 l=   3 prim:    OBJECT            :countryName
113// 77:d=3  hl=2 l=   2 prim:    PRINTABLESTRING   :TR
114// 81:d=1  hl=2 l=  15 cons:  SET
115// 83:d=2  hl=2 l=  13 cons:   SEQUENCE
116// 85:d=3  hl=2 l=   3 prim:    OBJECT            :localityName
117// 90:d=3  hl=2 l=   6 prim:    UTF8STRING        :Ankara
118// 98:d=1  hl=2 l=  93 cons:  SET
119//100:d=2  hl=2 l=  91 cons:   SEQUENCE
120//102:d=3  hl=2 l=   3 prim:    OBJECT            :organizationName
121//107:d=3  hl=2 l=  84 prim:    UTF8STRING        :TÃRKTRUST Bilgi Ä°letiÅim ve BiliÅim GüvenliÄi Hizmetleri A.Å. (c) Kasım 2005
122static const uint8 TurkTrustDN[] = {
123  0x30, 0x81, 0xbe, 0x31, 0x3f, 0x30, 0x3d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c,
124  0x36, 0x54, 0xc3, 0x9c, 0x52, 0x4b, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x45,
125  0x6c, 0x65, 0x6b, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x6b, 0x20, 0x53, 0x65, 0x72,
126  0x74, 0x69, 0x66, 0x69, 0x6b, 0x61, 0x20, 0x48, 0x69, 0x7a, 0x6d, 0x65, 0x74,
127  0x20, 0x53, 0x61, 0xc4, 0x9f, 0x6c, 0x61, 0x79, 0xc4, 0xb1, 0x63, 0xc4, 0xb1,
128  0x73, 0xc4, 0xb1, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
129  0x02, 0x54, 0x52, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c,
130  0x06, 0x41, 0x6e, 0x6b, 0x61, 0x72, 0x61, 0x31, 0x5d, 0x30, 0x5b, 0x06, 0x03,
131  0x55, 0x04, 0x0a, 0x0c, 0x54, 0x54, 0xc3, 0x9c, 0x52, 0x4b, 0x54, 0x52, 0x55,
132  0x53, 0x54, 0x20, 0x42, 0x69, 0x6c, 0x67, 0x69, 0x20, 0xc4, 0xb0, 0x6c, 0x65,
133  0x74, 0x69, 0xc5, 0x9f, 0x69, 0x6d, 0x20, 0x76, 0x65, 0x20, 0x42, 0x69, 0x6c,
134  0x69, 0xc5, 0x9f, 0x69, 0x6d, 0x20, 0x47, 0xc3, 0xbc, 0x76, 0x65, 0x6e, 0x6c,
135  0x69, 0xc4, 0x9f, 0x69, 0x20, 0x48, 0x69, 0x7a, 0x6d, 0x65, 0x74, 0x6c, 0x65,
136  0x72, 0x69, 0x20, 0x41, 0x2e, 0xc5, 0x9e, 0x2e, 0x20, 0x28, 0x63, 0x29, 0x20,
137  0x4b, 0x61, 0x73, 0xc4, 0xb1, 0x6d, 0x20, 0x32, 0x30, 0x30, 0x35, 0x30, 0x1e,
138  0x17, 0x0d, 0x30, 0x35, 0x31, 0x31, 0x30, 0x37, 0x31, 0x30, 0x30, 0x37, 0x35,
139  0x37
140};
141
142// 33:d=2  hl=3 l= 207 cons:   SEQUENCE
143// 36:d=3  hl=2 l=  11 cons:    SET
144// 38:d=4  hl=2 l=   9 cons:     SEQUENCE
145// 40:d=5  hl=2 l=   3 prim:      OBJECT            :countryName
146// 45:d=5  hl=2 l=   2 prim:      PRINTABLESTRING   :AT
147// 49:d=3  hl=3 l= 139 cons:    SET
148// 52:d=4  hl=3 l= 136 cons:     SEQUENCE
149// 55:d=5  hl=2 l=   3 prim:      OBJECT            :organizationName
150// 60:d=5  hl=3 l= 128 prim:      BMPSTRING         :A-Trust Ges. für Sicherheitssysteme im elektr. Datenverkehr GmbH
151//191:d=3  hl=2 l=  24 cons:    SET
152//193:d=4  hl=2 l=  22 cons:     SEQUENCE
153//195:d=5  hl=2 l=   3 prim:      OBJECT            :organizationalUnitName
154//200:d=5  hl=2 l=  15 prim:      PRINTABLESTRING   :A-Trust-Qual-01
155//217:d=3  hl=2 l=  24 cons:    SET
156//219:d=4  hl=2 l=  22 cons:     SEQUENCE
157//221:d=5  hl=2 l=   3 prim:      OBJECT            :commonName
158//226:d=5  hl=2 l=  15 prim:      PRINTABLESTRING   :A-Trust-Qual-01
159static const uint8 ATrustQual01DN[] = {
160  0x30, 0x81, 0xcf, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
161  0x02, 0x41, 0x54, 0x31, 0x81, 0x8b, 0x30, 0x81, 0x88, 0x06, 0x03, 0x55, 0x04,
162  0x0a, 0x1e, 0x81, 0x80, 0x00, 0x41, 0x00, 0x2d, 0x00, 0x54, 0x00, 0x72, 0x00,
163  0x75, 0x00, 0x73, 0x00, 0x74, 0x00, 0x20, 0x00, 0x47, 0x00, 0x65, 0x00, 0x73,
164  0x00, 0x2e, 0x00, 0x20, 0x00, 0x66, 0x00, 0xfc, 0x00, 0x72, 0x00, 0x20, 0x00,
165  0x53, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x68,
166  0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x73, 0x00, 0x79, 0x00,
167  0x73, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x20, 0x00, 0x69,
168  0x00, 0x6d, 0x00, 0x20, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x6b, 0x00,
169  0x74, 0x00, 0x72, 0x00, 0x2e, 0x00, 0x20, 0x00, 0x44, 0x00, 0x61, 0x00, 0x74,
170  0x00, 0x65, 0x00, 0x6e, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6b, 0x00,
171  0x65, 0x00, 0x68, 0x00, 0x72, 0x00, 0x20, 0x00, 0x47, 0x00, 0x6d, 0x00, 0x62,
172  0x00, 0x48, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0f,
173  0x41, 0x2d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x2d, 0x51, 0x75, 0x61, 0x6c, 0x2d,
174  0x30, 0x31, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0f,
175  0x41, 0x2d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x2d, 0x51, 0x75, 0x61, 0x6c, 0x2d,
176  0x30, 0x31, 0x30, 0x1e, 0x17
177};
178
179// 34:d=2  hl=3 l= 180 cons:   SEQUENCE
180// 37:d=3  hl=2 l=  20 cons:    SET
181// 39:d=4  hl=2 l=  18 cons:     SEQUENCE
182// 41:d=5  hl=2 l=   3 prim:      OBJECT            :organizationName
183// 46:d=5  hl=2 l=  11 prim:      PRINTABLESTRING   :Entrust.net
184// 59:d=3  hl=2 l=  64 cons:    SET
185// 61:d=4  hl=2 l=  62 cons:     SEQUENCE
186// 63:d=5  hl=2 l=   3 prim:      OBJECT            :organizationalUnitName
187// 68:d=5  hl=2 l=  55 prim:      T61STRING         :www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)
188//125:d=3  hl=2 l=  37 cons:    SET
189//127:d=4  hl=2 l=  35 cons:     SEQUENCE
190//129:d=5  hl=2 l=   3 prim:      OBJECT            :organizationalUnitName
191//134:d=5  hl=2 l=  28 prim:      PRINTABLESTRING   :(c) 1999 Entrust.net Limited
192//164:d=3  hl=2 l=  51 cons:    SET
193//166:d=4  hl=2 l=  49 cons:     SEQUENCE
194//168:d=5  hl=2 l=   3 prim:      OBJECT            :commonName
195//173:d=5  hl=2 l=  42 prim:      PRINTABLESTRING   :Entrust.net Certification Authority (2048)
196static const uint8 EntrustDN[] = {
197  0x30, 0x81, 0xb4, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13,
198  0x0b, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x31,
199  0x40, 0x30, 0x3e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x14, 0x37, 0x77, 0x77, 0x77,
200  0x2e, 0x65, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f,
201  0x43, 0x50, 0x53, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x20, 0x69, 0x6e, 0x63, 0x6f,
202  0x72, 0x70, 0x2e, 0x20, 0x62, 0x79, 0x20, 0x72, 0x65, 0x66, 0x2e, 0x20, 0x28,
203  0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x20, 0x6c, 0x69, 0x61, 0x62, 0x2e, 0x29,
204  0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1c, 0x28, 0x63,
205  0x29, 0x20, 0x31, 0x39, 0x39, 0x39, 0x20, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73,
206  0x74, 0x2e, 0x6e, 0x65, 0x74, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64,
207  0x31, 0x33, 0x30, 0x31, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x2a, 0x45, 0x6e,
208  0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x20, 0x43, 0x65, 0x72,
209  0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75,
210  0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x28, 0x32, 0x30, 0x34, 0x38,
211  0x29
212};
213
214namespace net {
215
216TEST(X509TypesTest, Matching) {
217  CertPrincipal spamco;
218  spamco.common_name = "SpamCo Dept. Of Certificization";
219  spamco.country_name = "EB";
220  spamco.organization_names.push_back("SpamCo Holding Company, LLC");
221  spamco.organization_names.push_back("SpamCo Evil Masterminds");
222  spamco.organization_unit_names.push_back("Class Z Obfuscation Authority");
223  ASSERT_TRUE(spamco.Matches(spamco));
224
225  CertPrincipal bogus;
226  EXPECT_FALSE(bogus.Matches(spamco));
227  EXPECT_FALSE(spamco.Matches(bogus));
228
229  bogus = spamco;
230  EXPECT_TRUE(bogus.Matches(spamco));
231  EXPECT_TRUE(spamco.Matches(bogus));
232
233  bogus.organization_names.erase(bogus.organization_names.begin(),
234                                 bogus.organization_names.end());
235  EXPECT_FALSE(bogus.Matches(spamco));
236  EXPECT_FALSE(spamco.Matches(bogus));
237
238  bogus.organization_names.push_back("SpamCo Holding Company, LLC");
239  bogus.organization_names.push_back("SpamCo Evil Masterminds");
240  EXPECT_TRUE(bogus.Matches(spamco));
241  EXPECT_TRUE(spamco.Matches(bogus));
242
243  bogus.locality_name = "Elbosdorf";
244  EXPECT_FALSE(bogus.Matches(spamco));
245  EXPECT_FALSE(spamco.Matches(bogus));
246
247  bogus.locality_name = "";
248  bogus.organization_unit_names.push_back("Q Division");
249  EXPECT_FALSE(bogus.Matches(spamco));
250  EXPECT_FALSE(spamco.Matches(bogus));
251}
252
253TEST(X509TypesTest, ParseDNVerisign) {
254  CertPrincipal verisign;
255  EXPECT_TRUE(verisign.ParseDistinguishedName(VerisignDN, sizeof(VerisignDN)));
256  EXPECT_EQ("", verisign.common_name);
257  EXPECT_EQ("US", verisign.country_name);
258  ASSERT_EQ(1U, verisign.organization_names.size());
259  EXPECT_EQ("VeriSign, Inc.", verisign.organization_names[0]);
260  ASSERT_EQ(1U, verisign.organization_unit_names.size());
261  EXPECT_EQ("Class 1 Public Primary Certification Authority",
262            verisign.organization_unit_names[0]);
263}
264
265TEST(X509TypesTest, ParseDNStartcom) {
266  CertPrincipal startcom;
267  EXPECT_TRUE(startcom.ParseDistinguishedName(StartComDN, sizeof(StartComDN)));
268  EXPECT_EQ("StartCom Certification Authority", startcom.common_name);
269  EXPECT_EQ("IL", startcom.country_name);
270  ASSERT_EQ(1U, startcom.organization_names.size());
271  EXPECT_EQ("StartCom Ltd.", startcom.organization_names[0]);
272  ASSERT_EQ(1U, startcom.organization_unit_names.size());
273  EXPECT_EQ("Secure Digital Certificate Signing",
274            startcom.organization_unit_names[0]);
275}
276
277TEST(X509TypesTest, ParseDNUserTrust) {
278  CertPrincipal usertrust;
279  EXPECT_TRUE(usertrust.ParseDistinguishedName(UserTrustDN,
280                                               sizeof(UserTrustDN)));
281  EXPECT_EQ("UTN-USERFirst-Client Authentication and Email",
282            usertrust.common_name);
283  EXPECT_EQ("US", usertrust.country_name);
284  EXPECT_EQ("UT", usertrust.state_or_province_name);
285  EXPECT_EQ("Salt Lake City", usertrust.locality_name);
286  ASSERT_EQ(1U, usertrust.organization_names.size());
287  EXPECT_EQ("The USERTRUST Network", usertrust.organization_names[0]);
288  ASSERT_EQ(1U, usertrust.organization_unit_names.size());
289  EXPECT_EQ("http://www.usertrust.com",
290            usertrust.organization_unit_names[0]);
291}
292
293TEST(X509TypesTest, ParseDNTurkTrust) {
294  // Note: This tests parsing UTF8STRINGs.
295  CertPrincipal turktrust;
296  EXPECT_TRUE(turktrust.ParseDistinguishedName(TurkTrustDN,
297                                               sizeof(TurkTrustDN)));
298  EXPECT_EQ("TÃRKTRUST Elektronik Sertifika Hizmet SaÄlayıcısı",
299            turktrust.common_name);
300  EXPECT_EQ("TR", turktrust.country_name);
301  EXPECT_EQ("Ankara", turktrust.locality_name);
302  ASSERT_EQ(1U, turktrust.organization_names.size());
303  EXPECT_EQ("TÃRKTRUST Bilgi Ä°letiÅim ve BiliÅim GüvenliÄi Hizmetleri A.Å. (c) Kasım 2005",
304            turktrust.organization_names[0]);
305}
306
307TEST(X509TypesTest, ParseDNATrust) {
308  // Note: This tests parsing 16-bit BMPSTRINGs.
309  CertPrincipal atrust;
310  EXPECT_TRUE(atrust.ParseDistinguishedName(ATrustQual01DN,
311                                            sizeof(ATrustQual01DN)));
312  EXPECT_EQ("A-Trust-Qual-01",
313            atrust.common_name);
314  EXPECT_EQ("AT", atrust.country_name);
315  ASSERT_EQ(1U, atrust.organization_names.size());
316  EXPECT_EQ("A-Trust Ges. für Sicherheitssysteme im elektr. Datenverkehr GmbH",
317            atrust.organization_names[0]);
318  ASSERT_EQ(1U, atrust.organization_unit_names.size());
319  EXPECT_EQ("A-Trust-Qual-01",
320            atrust.organization_unit_names[0]);
321}
322
323TEST(X509TypesTest, ParseDNEntrust) {
324  // Note: This tests parsing T61STRINGs and fields with multiple values.
325  CertPrincipal entrust;
326  EXPECT_TRUE(entrust.ParseDistinguishedName(EntrustDN,
327                                             sizeof(EntrustDN)));
328  EXPECT_EQ("Entrust.net Certification Authority (2048)",
329            entrust.common_name);
330  EXPECT_EQ("", entrust.country_name);
331  ASSERT_EQ(1U, entrust.organization_names.size());
332  EXPECT_EQ("Entrust.net",
333            entrust.organization_names[0]);
334  ASSERT_EQ(2U, entrust.organization_unit_names.size());
335  EXPECT_EQ("www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)",
336            entrust.organization_unit_names[0]);
337  EXPECT_EQ("(c) 1999 Entrust.net Limited",
338            entrust.organization_unit_names[1]);
339}
340
341}  // namespace net
342