14a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// found in the LICENSE file.
4513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
5513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#ifndef NET_BASE_X509_OPENSSL_UTIL_H_
6513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define NET_BASE_X509_OPENSSL_UTIL_H_
7513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#pragma once
8513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
9513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include <openssl/asn1.h>
10513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include <openssl/x509v3.h>
11513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
12513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include <string>
134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include <vector>
14513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
15513209b27ff55e2841eac0e4120199c23acce758Ben Murdochnamespace base {
16513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass Time;
17513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}  // namespace base
18513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
19513209b27ff55e2841eac0e4120199c23acce758Ben Murdochnamespace net {
20513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
21513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// A collection of helper functions to fetch data from OpenSSL X509 certificates
22513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// into more convenient std / base datatypes.
23513209b27ff55e2841eac0e4120199c23acce758Ben Murdochnamespace x509_openssl_util {
24513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
25513209b27ff55e2841eac0e4120199c23acce758Ben Murdochbool ParsePrincipalKeyAndValueByIndex(X509_NAME* name,
26513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                      int index,
27513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                      std::string* key,
28513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                      std::string* value);
29513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
30513209b27ff55e2841eac0e4120199c23acce758Ben Murdochbool ParsePrincipalValueByIndex(X509_NAME* name, int index, std::string* value);
31513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
32513209b27ff55e2841eac0e4120199c23acce758Ben Murdochbool ParsePrincipalValueByNID(X509_NAME* name, int nid, std::string* value);
33513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
34513209b27ff55e2841eac0e4120199c23acce758Ben Murdochbool ParseDate(ASN1_TIME* x509_time, base::Time* time);
35513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
36513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} // namespace x509_openssl_util
37513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
38513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} // namespace net
39513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
40513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif  // NET_BASE_X509_OPENSSL_UTIL_H_
41