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 NET_CERT_X509_UTIL_OPENSSL_H_ 6#define NET_CERT_X509_UTIL_OPENSSL_H_ 7 8#include <openssl/asn1.h> 9#include <openssl/x509v3.h> 10 11#include <string> 12#include <vector> 13 14#include "base/strings/string_piece.h" 15#include "net/base/net_export.h" 16 17namespace base { 18class Time; 19} // namespace base 20 21namespace net { 22 23// A collection of helper functions to fetch data from OpenSSL X509 certificates 24// into more convenient std / base datatypes. 25namespace x509_util { 26 27bool NET_EXPORT ParsePrincipalKeyAndValue(X509_NAME_ENTRY* entry, 28 std::string* key, 29 std::string* value); 30 31bool NET_EXPORT ParsePrincipalKeyAndValueByIndex(X509_NAME* name, 32 int index, 33 std::string* key, 34 std::string* value); 35 36bool NET_EXPORT ParsePrincipalValueByIndex(X509_NAME* name, 37 int index, 38 std::string* value); 39 40bool NET_EXPORT ParsePrincipalValueByNID(X509_NAME* name, 41 int nid, 42 std::string* value); 43 44bool NET_EXPORT ParseDate(ASN1_TIME* x509_time, base::Time* time); 45 46// DER-encodes |x509|, caching the encoding in a structure owned by 47// the X509. On success, returns true, and sets |*out_der| to point to 48// the encoding. The StringPiece is valid as long as |x509| is not 49// freed. 50// 51// Note: this caches the encoding, so |x509| must not be modified 52// after the first call to this function. 53bool NET_EXPORT GetDER(X509* x509, base::StringPiece* out_der); 54 55} // namespace x509_util 56 57} // namespace net 58 59#endif // NET_CERT_X509_UTIL_OPENSSL_H_ 60