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
6#include "ccf/crypto/jwk.h"
7#include "ccf/crypto/pem.h"
9#include "ccf/ds/nonstd.h"
10
11#include <chrono>
12
13namespace ccf::crypto
14{
16 {
17 protected:
18 std::variant<ccf::crypto::RSAPublicKeyPtr, ccf::crypto::ECPublicKeyPtr>
20
21 public:
22 Verifier() = default;
23 virtual ~Verifier() = default;
24
25 virtual std::vector<uint8_t> cert_der() = 0;
26 virtual Pem cert_pem() = 0;
27
36 [[nodiscard]] virtual bool verify(
37 const uint8_t* contents,
38 size_t contents_size,
39 const uint8_t* sig,
40 size_t sig_size,
41 MDType md_type = MDType::NONE) const;
42
49 [[nodiscard]] virtual bool verify(
50 std::span<const uint8_t> contents,
51 std::span<const uint8_t> sig,
52 MDType md_type = MDType::NONE) const
53 {
54 return verify(
55 contents.data(), contents.size(), sig.data(), sig.size(), md_type);
56 }
57
64 [[nodiscard]] virtual bool verify(
65 const std::vector<uint8_t>& contents,
66 const std::vector<uint8_t>& signature,
67 MDType md_type = MDType::NONE) const
68 {
69 return verify(
70 contents.data(),
71 contents.size(),
72 signature.data(),
73 signature.size(),
74 md_type);
75 }
76
85 virtual bool verify_hash(
86 const uint8_t* hash,
87 size_t hash_size,
88 const uint8_t* sig,
89 size_t sig_size,
90 MDType md_type = MDType::NONE);
91
98 virtual bool verify_hash(
99 const std::vector<uint8_t>& hash,
100 const std::vector<uint8_t>& signature,
101 MDType md_type = MDType::NONE)
102 {
103 return verify_hash(
104 hash.data(), hash.size(), signature.data(), signature.size(), md_type);
105 }
106
113 template <size_t SIZE>
115 const std::array<uint8_t, SIZE>& hash,
116 const std::vector<uint8_t>& signature,
117 MDType md_type = MDType::NONE)
118 {
119 return verify_hash(
120 hash.data(), hash.size(), signature.data(), signature.size(), md_type);
121 }
122
126 [[nodiscard]] virtual Pem public_key_pem() const;
127
131 [[nodiscard]] virtual std::vector<uint8_t> public_key_der() const;
132
140 [[nodiscard]] virtual bool verify_certificate(
141 const std::vector<const Pem*>& trusted_certs,
142 const std::vector<const Pem*>& chain = {},
143 bool ignore_time = false) = 0;
144
146 [[nodiscard]] virtual bool is_self_signed() const = 0;
147
149 [[nodiscard]] virtual std::string serial_number() const = 0;
150
152 [[nodiscard]] virtual std::pair<std::string, std::string> validity_period()
153 const = 0;
154
157 [[nodiscard]] virtual size_t remaining_seconds(
158 const ccf::nonstd::SystemClock::time_point& now) const = 0;
159
161 [[nodiscard]] virtual double remaining_percentage(
162 const ccf::nonstd::SystemClock::time_point& now) const = 0;
163
165 [[nodiscard]] virtual std::string subject() const = 0;
166 };
167
168 using VerifierPtr = std::shared_ptr<Verifier>;
169 using VerifierUniquePtr = std::unique_ptr<Verifier>;
170
175 VerifierUniquePtr make_unique_verifier(const std::vector<uint8_t>& cert);
176
181 VerifierPtr make_verifier(const std::vector<uint8_t>& cert);
182
188
193 VerifierPtr make_verifier(const Pem& pem);
194
195 ccf::crypto::Pem cert_der_to_pem(const std::vector<uint8_t>& der);
196 std::vector<uint8_t> cert_pem_to_der(const Pem& pem);
197
198 std::vector<uint8_t> public_key_der_from_cert(
199 const std::vector<uint8_t>& der);
200
201 ccf::crypto::Pem public_key_pem_from_cert(const std::vector<uint8_t>& der);
202
203 std::string get_subject_name(const Pem& cert);
204}
Definition pem.h:18
Definition verifier.h:16
virtual bool verify(std::span< const uint8_t > contents, std::span< const uint8_t > sig, MDType md_type=MDType::NONE) const
Definition verifier.h:49
virtual std::vector< uint8_t > public_key_der() const
Definition verifier.cpp:111
virtual size_t remaining_seconds(const ccf::nonstd::SystemClock::time_point &now) const =0
virtual bool verify(const std::vector< uint8_t > &contents, const std::vector< uint8_t > &signature, MDType md_type=MDType::NONE) const
Definition verifier.h:64
bool verify_hash(const std::array< uint8_t, SIZE > &hash, const std::vector< uint8_t > &signature, MDType md_type=MDType::NONE)
Definition verifier.h:114
std::variant< ccf::crypto::RSAPublicKeyPtr, ccf::crypto::ECPublicKeyPtr > public_key
Definition verifier.h:19
virtual ~Verifier()=default
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:98
virtual Pem cert_pem()=0
virtual bool is_self_signed() const =0
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.cpp:78
virtual std::pair< std::string, std::string > validity_period() const =0
virtual double remaining_percentage(const ccf::nonstd::SystemClock::time_point &now) const =0
virtual Pem public_key_pem() const
Definition verifier.cpp:98
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.cpp:58
virtual std::string serial_number() const =0
Definition base64.h:11
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:169
ccf::crypto::Pem public_key_pem_from_cert(const std::vector< uint8_t > &der)
Definition verifier.cpp:48
MDType
Definition md_type.h:10
std::shared_ptr< Verifier > VerifierPtr
Definition verifier.h:168
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
std::chrono::time_point< SystemClock > time_point
Definition nonstd.h:231