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 22 static 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 50 static 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 88 static 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 :TRKTRUST Elektronik Sertifika Hizmet Salaycs 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 :TRKTRUST Bilgi letiim ve Biliim Gvenlii Hizmetleri A.. (c) Kasm 2005 122 static 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. fr 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 159 static 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) 196 static 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 214 namespace net { 215 216 TEST(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 253 TEST(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 265 TEST(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 277 TEST(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 293 TEST(X509TypesTest, ParseDNTurkTrust) { 294 // Note: This tests parsing UTF8STRINGs. 295 CertPrincipal turktrust; 296 EXPECT_TRUE(turktrust.ParseDistinguishedName(TurkTrustDN, 297 sizeof(TurkTrustDN))); 298 EXPECT_EQ("TRKTRUST Elektronik Sertifika Hizmet Salaycs", 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("TRKTRUST Bilgi letiim ve Biliim Gvenlii Hizmetleri A.. (c) Kasm 2005", 304 turktrust.organization_names[0]); 305 } 306 307 TEST(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. fr 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 323 TEST(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