CCF
Loading...
Searching...
No Matches
certs.h
Go to the documentation of this file.
1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the Apache 2.0 License.
3#pragma once
4
6#include "ccf/crypto/pem.h"
8
9#include <chrono>
10#include <string>
11
12namespace ccf::crypto
13{
14 static std::string compute_cert_valid_to_string(
15 const std::string& valid_from, size_t validity_period_days)
16 {
17 using namespace std::chrono_literals;
18 // Note: As per RFC 5280, the validity period runs until "notAfter"
19 // _inclusive_ so substract one second from the validity period.
20 auto valid_to = ccf::ds::time_point_from_string(valid_from) +
21 std::chrono::days(validity_period_days) - 1s;
22 return ccf::ds::to_x509_time_string(valid_to);
23 }
24
25 static Pem create_self_signed_cert(
26 const KeyPairPtr& key_pair,
27 const std::string& subject_name,
28 const std::vector<SubjectAltName>& subject_alt_names,
29 const std::string& valid_from,
30 const std::string& valid_to)
31 {
32 return key_pair->self_sign(
33 subject_name, valid_from, valid_to, subject_alt_names, true /* CA */);
34 }
35
36 static Pem create_self_signed_cert(
37 const KeyPairPtr& key_pair,
38 const std::string& subject_name,
39 const std::vector<SubjectAltName>& subject_alt_names,
40 const std::string& valid_from,
41 size_t validity_period_days)
42 {
43 return create_self_signed_cert(
44 key_pair,
45 subject_name,
46 subject_alt_names,
47 valid_from,
48 compute_cert_valid_to_string(valid_from, validity_period_days));
49 }
50
51 static Pem create_endorsed_cert(
52 const Pem& csr,
53 const std::string& valid_from,
54 const std::string& valid_to,
55 const Pem& issuer_private_key,
56 const Pem& issuer_cert)
57 {
58 return make_key_pair(issuer_private_key)
59 ->sign_csr(issuer_cert, csr, valid_from, valid_to, false /* Not CA */);
60 }
61
62 static Pem create_endorsed_cert(
63 const Pem& csr,
64 const std::string& valid_from,
65 size_t validity_period_days,
66 const Pem& issuer_private_key,
67 const Pem& issuer_cert)
68 {
69 return create_endorsed_cert(
70 csr,
71 valid_from,
72 compute_cert_valid_to_string(valid_from, validity_period_days),
73 issuer_private_key,
74 issuer_cert);
75 }
76
77 static Pem create_endorsed_cert(
78 const KeyPairPtr& subject_key_pair,
79 const std::string& subject_name,
80 const std::vector<SubjectAltName>& subject_alt_names,
81 const std::string& valid_from,
82 size_t validity_period_days,
83 const Pem& issuer_private_key,
84 const Pem& issuer_cert)
85 {
86 return create_endorsed_cert(
87 subject_key_pair->create_csr(subject_name, subject_alt_names),
88 valid_from,
89 validity_period_days,
90 issuer_private_key,
91 issuer_cert);
92 }
93
94 static Pem create_endorsed_cert(
95 const Pem& public_key,
96 const std::string& subject_name,
97 const std::vector<SubjectAltName>& subject_alt_names,
98 const std::string& valid_from,
99 const std::string& valid_to,
100 const Pem& issuer_private_key,
101 const Pem& issuer_cert,
102 bool ca = false)
103 {
104 auto issuer_key_pair = make_key_pair(issuer_private_key);
105 auto csr =
106 issuer_key_pair->create_csr(subject_name, subject_alt_names, public_key);
107 return issuer_key_pair->sign_csr(
108 issuer_cert, csr, valid_from, valid_to, ca, KeyPair::Signer::ISSUER);
109 }
110
111 static Pem create_endorsed_cert(
112 const Pem& public_key,
113 const std::string& subject_name,
114 const std::vector<SubjectAltName>& subject_alt_names,
115 const std::pair<std::string, std::string>& validity_period,
116 const Pem& issuer_private_key,
117 const Pem& issuer_cert,
118 bool ca = false)
119 {
120 return create_endorsed_cert(
121 public_key,
122 subject_name,
123 subject_alt_names,
124 validity_period.first,
125 validity_period.second,
126 issuer_private_key,
127 issuer_cert,
128 ca);
129 }
130}
Definition base64.h:10
std::shared_ptr< KeyPair > KeyPairPtr
Definition key_pair.h:145
KeyPairPtr make_key_pair(CurveID curve_id=service_identity_curve_choice)
Definition key_pair.cpp:35