Home | History | Annotate | Download | only in base
      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