1 // Copyright (c) 2011 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 #ifndef CHROME_COMMON_NET_X509_CERTIFICATE_MODEL_H_ 6 #define CHROME_COMMON_NET_X509_CERTIFICATE_MODEL_H_ 7 8 #include "net/cert/cert_type.h" 9 #include "net/cert/x509_certificate.h" 10 11 // This namespace defines a set of functions to be used in UI-related bits of 12 // X509 certificates. It decouples the UI from the underlying crypto library 13 // (currently NSS or OpenSSL - in development). 14 // This is currently only used by linux, as mac / windows use their own native 15 // certificate viewers and crypto libraries. 16 namespace x509_certificate_model { 17 18 std::string GetCertNameOrNickname( 19 net::X509Certificate::OSCertHandle cert_handle); 20 21 std::string GetNickname(net::X509Certificate::OSCertHandle cert_handle); 22 23 std::string GetTokenName(net::X509Certificate::OSCertHandle cert_handle); 24 25 std::string GetVersion(net::X509Certificate::OSCertHandle cert_handle); 26 27 net::CertType GetType(net::X509Certificate::OSCertHandle cert_handle); 28 29 std::string GetEmailAddress(net::X509Certificate::OSCertHandle cert_handle); 30 31 void GetUsageStrings( 32 net::X509Certificate::OSCertHandle cert_handle, 33 std::vector<std::string>* usages); 34 35 std::string GetKeyUsageString(net::X509Certificate::OSCertHandle cert_handle); 36 37 std::string GetSerialNumberHexified( 38 net::X509Certificate::OSCertHandle cert_handle, 39 const std::string& alternative_text); 40 41 std::string GetIssuerCommonName( 42 net::X509Certificate::OSCertHandle cert_handle, 43 const std::string& alternative_text); 44 45 std::string GetIssuerOrgName( 46 net::X509Certificate::OSCertHandle cert_handle, 47 const std::string& alternative_text); 48 49 std::string GetIssuerOrgUnitName( 50 net::X509Certificate::OSCertHandle cert_handle, 51 const std::string& alternative_text); 52 53 std::string GetSubjectOrgName( 54 net::X509Certificate::OSCertHandle cert_handle, 55 const std::string& alternative_text); 56 57 std::string GetSubjectOrgUnitName( 58 net::X509Certificate::OSCertHandle cert_handle, 59 const std::string& alternative_text); 60 61 std::string GetSubjectCommonName( 62 net::X509Certificate::OSCertHandle cert_handle, 63 const std::string& alternative_text); 64 65 bool GetTimes(net::X509Certificate::OSCertHandle cert_handle, 66 base::Time* issued, base::Time* expires); 67 68 std::string GetTitle(net::X509Certificate::OSCertHandle cert_handle); 69 std::string GetIssuerName(net::X509Certificate::OSCertHandle cert_handle); 70 std::string GetSubjectName(net::X509Certificate::OSCertHandle cert_handle); 71 72 void GetEmailAddresses(net::X509Certificate::OSCertHandle cert_handle, 73 std::vector<std::string>* email_addresses); 74 75 void GetNicknameStringsFromCertList(const net::CertificateList& certs, 76 const std::string& cert_expired, 77 const std::string& cert_not_yet_valid, 78 std::vector<std::string>* nick_names); 79 80 // Returns the PKCS#11 attribute CKA_ID for a certificate as an upper-case 81 // hex string, or the empty string if none is found. 82 std::string GetPkcs11Id(net::X509Certificate::OSCertHandle cert_handle); 83 84 struct Extension { 85 std::string name; 86 std::string value; 87 }; 88 89 typedef std::vector<Extension> Extensions; 90 91 void GetExtensions( 92 const std::string& critical_label, 93 const std::string& non_critical_label, 94 net::X509Certificate::OSCertHandle cert_handle, 95 Extensions* extensions); 96 97 // Hash a certificate using the given algorithm, return the result as a 98 // colon-seperated hex string. 99 std::string HashCertSHA256(net::X509Certificate::OSCertHandle cert_handle); 100 std::string HashCertSHA1(net::X509Certificate::OSCertHandle cert_handle); 101 102 // For host values, if they contain IDN Punycode-encoded A-labels, this will 103 // return a string suitable for display that contains both the original and the 104 // decoded U-label form. Otherwise, the string will be returned as is. 105 std::string ProcessIDN(const std::string& input); 106 107 void GetCertChainFromCert(net::X509Certificate::OSCertHandle cert_handle, 108 net::X509Certificate::OSCertHandles* cert_handles); 109 void DestroyCertChain(net::X509Certificate::OSCertHandles* cert_handles); 110 111 std::string GetDerString(net::X509Certificate::OSCertHandle cert_handle); 112 std::string GetCMSString(const net::X509Certificate::OSCertHandles& cert_chain, 113 size_t start, size_t end); 114 115 std::string ProcessSecAlgorithmSignature( 116 net::X509Certificate::OSCertHandle cert_handle); 117 std::string ProcessSecAlgorithmSubjectPublicKey( 118 net::X509Certificate::OSCertHandle cert_handle); 119 std::string ProcessSecAlgorithmSignatureWrap( 120 net::X509Certificate::OSCertHandle cert_handle); 121 122 std::string ProcessSubjectPublicKeyInfo( 123 net::X509Certificate::OSCertHandle cert_handle); 124 125 std::string ProcessRawBitsSignatureWrap( 126 net::X509Certificate::OSCertHandle cert_handle); 127 128 void RegisterDynamicOids(); 129 130 // Format a buffer as |hex_separator| separated string, with 16 bytes on each 131 // line separated using |line_separator|. 132 std::string ProcessRawBytesWithSeparators(const unsigned char* data, 133 size_t data_length, 134 char hex_separator, 135 char line_separator); 136 137 // Format a buffer as a space separated string, with 16 bytes on each line. 138 std::string ProcessRawBytes(const unsigned char* data, 139 size_t data_length); 140 141 #if defined(USE_NSS) 142 // Format a buffer as a space separated string, with 16 bytes on each line. 143 // |data_length| is the length in bits. 144 std::string ProcessRawBits(const unsigned char* data, 145 size_t data_length); 146 #endif // USE_NSS 147 148 } // namespace x509_certificate_model 149 150 #endif // CHROME_COMMON_NET_X509_CERTIFICATE_MODEL_H_ 151