CCF
Loading...
Searching...
No Matches
verifier.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
5#include "ccf/crypto/jwk.h"
7#include "ccf/crypto/pem.h"
9
10#include <chrono>
11
12namespace ccf::crypto
13{
15 {
16 protected:
17 std::shared_ptr<PublicKey> public_key;
18
19 public:
20 Verifier() : public_key(nullptr) {}
21 virtual ~Verifier() {}
22
23 virtual std::vector<uint8_t> cert_der() = 0;
24 virtual Pem cert_pem() = 0;
25
34 virtual bool verify(
35 const uint8_t* contents,
36 size_t contents_size,
37 const uint8_t* sig,
38 size_t sig_size,
39 MDType md_type = MDType::NONE) const
40 {
41 return public_key->verify(
42 contents, contents_size, sig, sig_size, md_type);
43 }
44
51 virtual bool verify(
52 std::span<const uint8_t> contents,
53 std::span<const uint8_t> sig,
54 MDType md_type = MDType::NONE) const
55 {
56 return verify(
57 contents.data(), contents.size(), sig.data(), sig.size(), md_type);
58 }
59
69 virtual bool verify(
70 const uint8_t* contents,
71 size_t contents_size,
72 const uint8_t* sig,
73 size_t sig_size,
74 MDType md_type,
75 HashBytes& hash_bytes) const
76 {
77 return public_key->verify(
78 contents, contents_size, sig, sig_size, md_type, hash_bytes);
79 }
80
87 virtual bool verify(
88 const std::vector<uint8_t>& contents,
89 const std::vector<uint8_t>& signature,
90 MDType md_type = MDType::NONE) const
91 {
92 return verify(
93 contents.data(),
94 contents.size(),
95 signature.data(),
96 signature.size(),
97 md_type);
98 }
99
107 virtual bool verify(
108 const std::vector<uint8_t>& contents,
109 const std::vector<uint8_t>& signature,
110 MDType md_type,
111 HashBytes& hash_bytes) const
112 {
113 return verify(
114 contents.data(),
115 contents.size(),
116 signature.data(),
117 signature.size(),
118 md_type,
119 hash_bytes);
120 }
121
130 virtual bool verify_hash(
131 const uint8_t* hash,
132 size_t hash_size,
133 const uint8_t* sig,
134 size_t sig_size,
135 MDType md_type = MDType::NONE)
136 {
137 return public_key->verify_hash(hash, hash_size, sig, sig_size, md_type);
138 }
139
146 virtual bool verify_hash(
147 const std::vector<uint8_t>& hash,
148 const std::vector<uint8_t>& signature,
149 MDType md_type = MDType::NONE)
150 {
151 return verify_hash(
152 hash.data(), hash.size(), signature.data(), signature.size(), md_type);
153 }
154
161 template <size_t SIZE>
163 const std::array<uint8_t, SIZE>& hash,
164 const std::vector<uint8_t>& signature,
165 MDType md_type = MDType::NONE)
166 {
167 return verify_hash(
168 hash.data(), hash.size(), signature.data(), signature.size(), md_type);
169 }
170
174 virtual Pem public_key_pem() const
175 {
176 return public_key->public_key_pem();
177 }
178
182 virtual std::vector<uint8_t> public_key_der() const
183 {
184 return public_key->public_key_der();
185 }
186
194 virtual bool verify_certificate(
195 const std::vector<const Pem*>& trusted_certs,
196 const std::vector<const Pem*>& chain = {},
197 bool ignore_time = false) = 0;
198
200 virtual bool is_self_signed() const = 0;
201
203 virtual std::string serial_number() const = 0;
204
206 virtual std::pair<std::string, std::string> validity_period() const = 0;
207
210 virtual size_t remaining_seconds(
211 const std::chrono::system_clock::time_point& now) const = 0;
212
214 virtual double remaining_percentage(
215 const std::chrono::system_clock::time_point& now) const = 0;
216
218 virtual std::string subject() const = 0;
219
222 const std::optional<std::string>& kid = std::nullopt) const
223 {
224 return public_key->public_key_jwk(kid);
225 }
226 };
227
228 using VerifierPtr = std::shared_ptr<Verifier>;
229 using VerifierUniquePtr = std::unique_ptr<Verifier>;
230
235 VerifierUniquePtr make_unique_verifier(const std::vector<uint8_t>& cert);
236
241 VerifierPtr make_verifier(const std::vector<uint8_t>& cert);
242
248
253 VerifierPtr make_verifier(const Pem& pem);
254
255 ccf::crypto::Pem cert_der_to_pem(const std::vector<uint8_t>& der);
256 std::vector<uint8_t> cert_pem_to_der(const Pem& pem);
257
258 std::vector<uint8_t> public_key_der_from_cert(
259 const std::vector<uint8_t>& der);
260
261 ccf::crypto::Pem public_key_pem_from_cert(const std::vector<uint8_t>& der);
262
263 std::string get_subject_name(const Pem& cert);
264}
Definition pem.h:18
Definition verifier.h:15
virtual double remaining_percentage(const std::chrono::system_clock::time_point &now) const =0
virtual bool verify_hash(const uint8_t *hash, size_t hash_size, const uint8_t *sig, size_t sig_size, MDType md_type=MDType::NONE)
Definition verifier.h:130
virtual bool verify(std::span< const uint8_t > contents, std::span< const uint8_t > sig, MDType md_type=MDType::NONE) const
Definition verifier.h:51
virtual ~Verifier()
Definition verifier.h:21
virtual Pem public_key_pem() const
Definition verifier.h:174
virtual bool verify(const std::vector< uint8_t > &contents, const std::vector< uint8_t > &signature, MDType md_type=MDType::NONE) const
Definition verifier.h:87
bool verify_hash(const std::array< uint8_t, SIZE > &hash, const std::vector< uint8_t > &signature, MDType md_type=MDType::NONE)
Definition verifier.h:162
virtual std::string subject() const =0
virtual bool verify_certificate(const std::vector< const Pem * > &trusted_certs, const std::vector< const Pem * > &chain={}, bool ignore_time=false)=0
virtual bool verify_hash(const std::vector< uint8_t > &hash, const std::vector< uint8_t > &signature, MDType md_type=MDType::NONE)
Definition verifier.h:146
virtual Pem cert_pem()=0
virtual JsonWebKeyECPublic public_key_jwk(const std::optional< std::string > &kid=std::nullopt) const
Definition verifier.h:221
Verifier()
Definition verifier.h:20
virtual bool is_self_signed() const =0
virtual bool verify(const uint8_t *contents, size_t contents_size, const uint8_t *sig, size_t sig_size, MDType md_type, HashBytes &hash_bytes) const
Definition verifier.h:69
virtual std::vector< uint8_t > public_key_der() const
Definition verifier.h:182
virtual std::vector< uint8_t > cert_der()=0
virtual bool verify(const uint8_t *contents, size_t contents_size, const uint8_t *sig, size_t sig_size, MDType md_type=MDType::NONE) const
Definition verifier.h:34
virtual bool verify(const std::vector< uint8_t > &contents, const std::vector< uint8_t > &signature, MDType md_type, HashBytes &hash_bytes) const
Definition verifier.h:107
std::shared_ptr< PublicKey > public_key
Definition verifier.h:17
virtual std::pair< std::string, std::string > validity_period() const =0
virtual size_t remaining_seconds(const std::chrono::system_clock::time_point &now) const =0
virtual std::string serial_number() const =0
Definition base64.h:10
ccf::crypto::Pem cert_der_to_pem(const std::vector< uint8_t > &der)
Definition verifier.cpp:33
VerifierUniquePtr make_unique_verifier(const std::vector< uint8_t > &cert)
Definition verifier.cpp:13
std::unique_ptr< Verifier > VerifierUniquePtr
Definition verifier.h:229
ccf::crypto::Pem public_key_pem_from_cert(const std::vector< uint8_t > &der)
Definition verifier.cpp:48
std::vector< uint8_t > HashBytes
Definition hash_bytes.h:10
MDType
Definition md_type.h:10
std::shared_ptr< Verifier > VerifierPtr
Definition verifier.h:228
VerifierPtr make_verifier(const std::vector< uint8_t > &cert)
Definition verifier.cpp:18
std::string get_subject_name(const Pem &cert)
Definition verifier.cpp:53
std::vector< uint8_t > public_key_der_from_cert(const std::vector< uint8_t > &der)
Definition verifier.cpp:43
std::vector< uint8_t > cert_pem_to_der(const Pem &pem)
Definition verifier.cpp:38