blob: c3a5c24e73981ea3bc3c89978a606e1e8f1ec192 [file] [log] [blame]
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_COMMON_NET_X509_CERTIFICATE_MODEL_NSS_H_
#define CHROME_COMMON_NET_X509_CERTIFICATE_MODEL_NSS_H_
#include <stddef.h>
#include <string>
#include <vector>
#include "net/cert/cert_type.h"
#include "net/cert/scoped_nss_types.h"
typedef struct CERTCertificateStr CERTCertificate;
namespace base {
class Time;
}
// This namespace defines a set of functions to be used in UI-related bits of
// X509 certificates.
namespace x509_certificate_model {
std::string GetCertNameOrNickname(CERTCertificate* cert_handle);
std::string GetVersion(CERTCertificate* cert_handle);
net::CertType GetType(CERTCertificate* cert_handle);
void GetUsageStrings(CERTCertificate* cert_handle,
std::vector<std::string>* usages);
std::string GetSerialNumberHexified(CERTCertificate* cert_handle,
const std::string& alternative_text);
std::string GetIssuerCommonName(CERTCertificate* cert_handle,
const std::string& alternative_text);
std::string GetIssuerOrgName(CERTCertificate* cert_handle,
const std::string& alternative_text);
std::string GetIssuerOrgUnitName(CERTCertificate* cert_handle,
const std::string& alternative_text);
std::string GetSubjectOrgName(CERTCertificate* cert_handle,
const std::string& alternative_text);
std::string GetSubjectOrgUnitName(CERTCertificate* cert_handle,
const std::string& alternative_text);
std::string GetSubjectCommonName(CERTCertificate* cert_handle,
const std::string& alternative_text);
std::string GetIssuerDisplayName(CERTCertificate* cert_handle);
std::string GetSubjectDisplayName(CERTCertificate* cert_handle);
bool GetTimes(CERTCertificate* cert_handle,
base::Time* issued,
base::Time* expires);
std::string GetTitle(CERTCertificate* cert_handle);
std::string GetIssuerName(CERTCertificate* cert_handle);
std::string GetSubjectName(CERTCertificate* cert_handle);
struct Extension {
std::string name;
std::string value;
};
typedef std::vector<Extension> Extensions;
void GetExtensions(const std::string& critical_label,
const std::string& non_critical_label,
CERTCertificate* cert_handle,
Extensions* extensions);
// Hash a certificate using the given algorithm, return the result as a
// colon-seperated hex string.
std::string HashCertSHA256(CERTCertificate* cert_handle);
std::string HashCertSHA1(CERTCertificate* cert_handle);
std::string GetCMSString(const net::ScopedCERTCertificateList& cert_chain,
size_t start,
size_t end);
std::string ProcessSecAlgorithmSignature(CERTCertificate* cert_handle);
std::string ProcessSecAlgorithmSubjectPublicKey(CERTCertificate* cert_handle);
std::string ProcessSecAlgorithmSignatureWrap(CERTCertificate* cert_handle);
std::string ProcessSubjectPublicKeyInfo(CERTCertificate* cert_handle);
std::string ProcessRawBitsSignatureWrap(CERTCertificate* cert_handle);
// For host values, if they contain IDN Punycode-encoded A-labels, this will
// return a string suitable for display that contains both the original and the
// decoded U-label form. Otherwise, the string will be returned as is.
std::string ProcessIDN(const std::string& input);
// Format a buffer as |hex_separator| separated string, with 16 bytes on each
// line separated using |line_separator|.
std::string ProcessRawBytesWithSeparators(const unsigned char* data,
size_t data_length,
char hex_separator,
char line_separator);
// Format a buffer as a space separated string, with 16 bytes on each line.
std::string ProcessRawBytes(const unsigned char* data, size_t data_length);
// Format a buffer as a space separated string, with 16 bytes on each line.
// |data_length| is the length in bits.
std::string ProcessRawBits(const unsigned char* data, size_t data_length);
} // namespace x509_certificate_model
#endif // CHROME_COMMON_NET_X509_CERTIFICATE_MODEL_NSS_H_