Index: net/base/x509_cert_types_mac.cc |
diff --git a/net/base/x509_cert_types_mac.cc b/net/base/x509_cert_types_mac.cc |
index 7647d93cd46134b8a396560c51f7d3efcdce1c8c..7f192b1f8727bc3e5f36c9450c7a55e1beaa90dc 100644 |
--- a/net/base/x509_cert_types_mac.cc |
+++ b/net/base/x509_cert_types_mac.cc |
@@ -54,48 +54,38 @@ const CSSM_OID* kOIDs[] = { |
// These are used to parse the contents of a raw |
// BER DistinguishedName structure. |
-struct KeyValuePair { |
- enum ValueType { |
- kTypeOther = 0, |
- kTypePrintableString, |
- kTypeIA5String, |
- kTypeT61String, |
- kTypeUTF8String, |
- kTypeBMPString, |
- kTypeUniversalString, |
- }; |
- |
- CSSM_OID key; |
- ValueType value_type; |
- CSSM_DATA value; |
-}; |
- |
const SecAsn1Template kStringValueTemplate[] = { |
- { SEC_ASN1_CHOICE, offsetof(KeyValuePair, value_type), }, |
+ { SEC_ASN1_CHOICE, offsetof(CSSM_X509_TYPE_VALUE_PAIR, valueType), }, |
{ SEC_ASN1_PRINTABLE_STRING, |
- offsetof(KeyValuePair, value), 0, KeyValuePair::kTypePrintableString }, |
+ offsetof(CSSM_X509_TYPE_VALUE_PAIR, value), 0, |
+ BER_TAG_PRINTABLE_STRING }, |
{ SEC_ASN1_IA5_STRING, |
- offsetof(KeyValuePair, value), 0, KeyValuePair::kTypeIA5String }, |
+ offsetof(CSSM_X509_TYPE_VALUE_PAIR, value), 0, |
+ BER_TAG_IA5_STRING }, |
{ SEC_ASN1_T61_STRING, |
- offsetof(KeyValuePair, value), 0, KeyValuePair::kTypeT61String }, |
+ offsetof(CSSM_X509_TYPE_VALUE_PAIR, value), 0, |
+ BER_TAG_T61_STRING }, |
{ SEC_ASN1_UTF8_STRING, |
- offsetof(KeyValuePair, value), 0, KeyValuePair::kTypeUTF8String }, |
+ offsetof(CSSM_X509_TYPE_VALUE_PAIR, value), 0, |
+ BER_TAG_PKIX_UTF8_STRING }, |
{ SEC_ASN1_BMP_STRING, |
- offsetof(KeyValuePair, value), 0, KeyValuePair::kTypeBMPString }, |
+ offsetof(CSSM_X509_TYPE_VALUE_PAIR, value), 0, |
+ BER_TAG_PKIX_BMP_STRING }, |
{ SEC_ASN1_UNIVERSAL_STRING, |
- offsetof(KeyValuePair, value), 0, KeyValuePair::kTypeUniversalString }, |
+ offsetof(CSSM_X509_TYPE_VALUE_PAIR, value), 0, |
+ BER_TAG_PKIX_UNIVERSAL_STRING }, |
{ 0, } |
}; |
const SecAsn1Template kKeyValuePairTemplate[] = { |
- { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(KeyValuePair) }, |
- { SEC_ASN1_OBJECT_ID, offsetof(KeyValuePair, key), }, |
+ { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(CSSM_X509_TYPE_VALUE_PAIR) }, |
+ { SEC_ASN1_OBJECT_ID, offsetof(CSSM_X509_TYPE_VALUE_PAIR, type), }, |
{ SEC_ASN1_INLINE, 0, &kStringValueTemplate, }, |
{ 0, } |
}; |
struct KeyValuePairs { |
- KeyValuePair* pairs; |
+ CSSM_X509_TYPE_VALUE_PAIR* pairs; |
}; |
const SecAsn1Template kKeyValuePairSetTemplate[] = { |
@@ -233,43 +223,43 @@ bool CertPrincipal::ParseDistinguishedName(const void* ber_name_data, |
DCHECK(arraysize(kOIDs) == arraysize(values)); |
for (int rdn = 0; name[rdn].pairs_list; ++rdn) { |
- KeyValuePair *pair; |
+ CSSM_X509_TYPE_VALUE_PAIR* pair; |
for (int pair_index = 0; |
NULL != (pair = name[rdn].pairs_list[0][pair_index].pairs); |
++pair_index) { |
- switch (pair->value_type) { |
- case KeyValuePair::kTypeIA5String: // ASCII (that means 7-bit!) |
- case KeyValuePair::kTypePrintableString: // a subset of ASCII |
- case KeyValuePair::kTypeUTF8String: // UTF-8 |
- AddTypeValuePair(pair->key, DataToString(pair->value), values); |
+ switch (pair->valueType) { |
+ case BER_TAG_IA5_STRING: // ASCII (that means 7-bit!) |
+ case BER_TAG_PRINTABLE_STRING: // a subset of ASCII |
+ case BER_TAG_PKIX_UTF8_STRING: // UTF-8 |
+ AddTypeValuePair(pair->type, DataToString(pair->value), values); |
break; |
- case KeyValuePair::kTypeT61String: // T61, pretend it's Latin-1 |
- AddTypeValuePair(pair->key, |
+ case BER_TAG_T61_STRING: // T61, pretend it's Latin-1 |
+ AddTypeValuePair(pair->type, |
Latin1DataToUTF8String(pair->value), |
values); |
break; |
- case KeyValuePair::kTypeBMPString: { // UTF-16, big-endian |
+ case BER_TAG_PKIX_BMP_STRING: { // UTF-16, big-endian |
std::string value; |
UTF16BigEndianToUTF8(reinterpret_cast<char16*>(pair->value.Data), |
pair->value.Length / sizeof(char16), |
&value); |
- AddTypeValuePair(pair->key, value, values); |
+ AddTypeValuePair(pair->type, value, values); |
break; |
} |
- case KeyValuePair::kTypeUniversalString: { // UTF-32, big-endian |
+ case BER_TAG_PKIX_UNIVERSAL_STRING: { // UTF-32, big-endian |
std::string value; |
UTF32BigEndianToUTF8(reinterpret_cast<char32*>(pair->value.Data), |
pair->value.Length / sizeof(char32), |
&value); |
- AddTypeValuePair(pair->key, value, values); |
+ AddTypeValuePair(pair->type, value, values); |
break; |
} |
default: |
- DCHECK_EQ(pair->value_type, KeyValuePair::kTypeOther); |
+ DCHECK_EQ(pair->valueType, BER_TAG_UNKNOWN); |
// We don't know what data type this is, but we'll store it as a blob. |
// Displaying the string may not work, but at least it can be compared |
// byte-for-byte by a Matches() call. |
- AddTypeValuePair(pair->key, DataToString(pair->value), values); |
+ AddTypeValuePair(pair->type, DataToString(pair->value), values); |
break; |
} |
} |
@@ -285,37 +275,6 @@ bool CertPrincipal::ParseDistinguishedName(const void* ber_name_data, |
return true; |
} |
-void CertPrincipal::Parse(const CSSM_X509_NAME* name) { |
- std::vector<std::string> common_names, locality_names, state_names, |
- country_names; |
- |
- std::vector<std::string>* values[] = { |
- &common_names, &locality_names, |
- &state_names, &country_names, |
- &(this->street_addresses), |
- &(this->organization_names), |
- &(this->organization_unit_names), |
- &(this->domain_components) |
- }; |
- DCHECK(arraysize(kOIDs) == arraysize(values)); |
- |
- for (size_t rdn = 0; rdn < name->numberOfRDNs; ++rdn) { |
- CSSM_X509_RDN rdn_struct = name->RelativeDistinguishedName[rdn]; |
- for (size_t pair = 0; pair < rdn_struct.numberOfPairs; ++pair) { |
- CSSM_X509_TYPE_VALUE_PAIR pair_struct = |
- rdn_struct.AttributeTypeAndValue[pair]; |
- AddTypeValuePair(pair_struct.type, |
- DataToString(pair_struct.value), |
- values); |
- } |
- } |
- |
- SetSingle(common_names, &this->common_name); |
- SetSingle(locality_names, &this->locality_name); |
- SetSingle(state_names, &this->state_or_province_name); |
- SetSingle(country_names, &this->country_name); |
-} |
- |
bool CertPrincipal::Matches(const CertPrincipal& against) const { |
return match(common_name, against.common_name) && |
match(locality_name, against.locality_name) && |