CCF
Loading...
Searching...
No Matches
ec_public_key.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/curve.h"
7#include "ccf/crypto/jwk.h"
8#include "ccf/crypto/pem.h"
9#include "ccf/crypto/san.h"
10
11#include <cstdint>
12#include <optional>
13#include <string>
14#include <vector>
15
16namespace ccf::crypto
17{
19 {
20 public:
21 virtual ~ECPublicKey() = default;
22
36 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,
42 HashBytes& bytes) = 0;
43
57 bool verify(
58 const uint8_t* contents,
59 size_t contents_size,
60 const uint8_t* sig,
61 size_t sig_size,
62 MDType md_type = MDType::NONE)
63 {
64 HashBytes hash;
65 return verify(contents, contents_size, sig, sig_size, md_type, hash);
66 }
67
77 virtual bool verify(
78 const std::vector<uint8_t>& contents,
79 const std::vector<uint8_t>& signature)
80 {
81 return verify(
82 contents.data(), contents.size(), signature.data(), signature.size());
83 }
84
95 virtual bool verify_hash(
96 const std::vector<uint8_t>& hash,
97 const std::vector<uint8_t>& signature,
98 MDType md_type)
99 {
100 return verify_hash(
101 hash.data(), hash.size(), signature.data(), signature.size(), md_type);
102 }
103
116 virtual bool verify_hash(
117 const uint8_t* hash,
118 size_t hash_size,
119 const uint8_t* sig,
120 size_t sig_size,
121 MDType md_type) = 0;
122
126 [[nodiscard]] virtual Pem public_key_pem() const = 0;
127
131 [[nodiscard]] virtual std::vector<uint8_t> public_key_der() const = 0;
132
136 [[nodiscard]] virtual std::vector<uint8_t> public_key_raw() const = 0;
137
141 [[nodiscard]] virtual CurveID get_curve_id() const = 0;
142
144 {
145 std::vector<uint8_t> x;
146 std::vector<uint8_t> y;
147 };
148
152 [[nodiscard]] virtual Coordinates coordinates() const = 0;
153
154 [[nodiscard]] virtual JsonWebKeyECPublic public_key_jwk(
155 const std::optional<std::string>& kid = std::nullopt) const = 0;
156 };
157
158 using ECPublicKeyPtr = std::shared_ptr<ECPublicKey>;
159
167
174 ECPublicKeyPtr make_ec_public_key(const std::vector<uint8_t>& der);
175
183}
Definition ec_public_key.h:19
virtual JsonWebKeyECPublic public_key_jwk(const std::optional< std::string > &kid=std::nullopt) const =0
virtual Coordinates coordinates() 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)=0
virtual bool verify(const uint8_t *contents, size_t contents_size, const uint8_t *sig, size_t sig_size, MDType md_type, HashBytes &bytes)=0
virtual std::vector< uint8_t > public_key_raw() const =0
virtual bool verify(const std::vector< uint8_t > &contents, const std::vector< uint8_t > &signature)
Definition ec_public_key.h:77
virtual bool verify_hash(const std::vector< uint8_t > &hash, const std::vector< uint8_t > &signature, MDType md_type)
Definition ec_public_key.h:95
virtual std::vector< uint8_t > public_key_der() const =0
virtual Pem public_key_pem() const =0
bool verify(const uint8_t *contents, size_t contents_size, const uint8_t *sig, size_t sig_size, MDType md_type=MDType::NONE)
Definition ec_public_key.h:57
virtual ~ECPublicKey()=default
virtual CurveID get_curve_id() const =0
Definition pem.h:18
Definition base64.h:10
CurveID
Definition curve.h:18
MDType
Definition md_type.h:10
std::vector< uint8_t > HashBytes
Definition hash_bytes.h:10
std::shared_ptr< ECPublicKey > ECPublicKeyPtr
Definition ec_public_key.h:158
ECPublicKeyPtr make_ec_public_key(const Pem &pem)
Definition ec_public_key.cpp:331
Definition ec_public_key.h:144
std::vector< uint8_t > y
Definition ec_public_key.h:146
std::vector< uint8_t > x
Definition ec_public_key.h:145