CCF
Loading...
Searching...
No Matches
ec_key_pair.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
8
9#include <optional>
10#include <stdexcept>
11#include <string>
12
13namespace ccf::crypto
14{
16 {
17 public:
18 ECKeyPair_OpenSSL(CurveID curve_id);
20 ECKeyPair_OpenSSL(const Pem& pem);
22 ~ECKeyPair_OpenSSL() override = default;
23
24 [[nodiscard]] Pem private_key_pem() const override;
25 [[nodiscard]] Pem public_key_pem() const override;
26 [[nodiscard]] std::vector<uint8_t> public_key_der() const override;
27 [[nodiscard]] std::vector<uint8_t> private_key_der() const override;
28
30
31 bool verify(
32 const std::vector<uint8_t>& contents,
33 const std::vector<uint8_t>& signature) override;
34
35 bool verify(
36 const uint8_t* contents,
37 size_t contents_size,
38 const uint8_t* signature,
39 size_t signature_size) override;
40
41 [[nodiscard]] std::vector<uint8_t> sign(
42 std::span<const uint8_t> d, MDType md_type = {}) const override;
43
44 int sign(
45 std::span<const uint8_t> d,
46 size_t* sig_size,
47 uint8_t* sig,
48 MDType md_type = {}) const;
49
50 std::vector<uint8_t> sign_hash(
51 const uint8_t* hash, size_t hash_size) const override;
52
53 int sign_hash(
54 const uint8_t* hash,
55 size_t hash_size,
56 size_t* sig_size,
57 uint8_t* sig) const override;
58
59 [[nodiscard]] Pem create_csr(
60 const std::string& subject_name,
61 const std::vector<SubjectAltName>& subject_alt_names,
62 const std::optional<Pem>& public_key = std::nullopt) const override;
63
64 [[nodiscard]] std::vector<uint8_t> create_csr_der(
65 const std::string& subject_name,
66 const std::vector<SubjectAltName>& subject_alt_names,
67 const std::optional<Pem>& public_key = std::nullopt) const override;
68
69 [[nodiscard]] Pem sign_csr_impl(
70 const std::optional<Pem>& issuer_cert,
71 const Pem& signing_request,
72 const std::string& valid_from,
73 const std::string& valid_to,
74 bool ca = false,
75 Signer signer = Signer::SUBJECT) const override;
76
77 std::vector<uint8_t> derive_shared_secret(
78 const ECPublicKey& peer_key) override;
79
80 [[nodiscard]] CurveID get_curve_id() const override;
81
82 [[nodiscard]] std::vector<uint8_t> public_key_raw() const override;
83
84 [[nodiscard]] ECPublicKey::Coordinates coordinates() const override;
85
86 [[nodiscard]] JsonWebKeyECPrivate private_key_jwk(
87 const std::optional<std::string>& kid = std::nullopt) const override;
88
89 protected:
90 [[nodiscard]] OpenSSL::Unique_X509_REQ create_req(
91 const std::string& subject_name,
92 const std::vector<SubjectAltName>& subject_alt_names,
93 const std::optional<Pem>& public_key) const;
94 };
95}
Definition ec_key_pair.h:16
~ECKeyPair_OpenSSL() override=default
bool verify(const std::vector< uint8_t > &contents, const std::vector< uint8_t > &signature) override
Definition ec_key_pair.cpp:143
ECKeyPair_OpenSSL(const ECKeyPair_OpenSSL &)=delete
Pem public_key_pem() const override
Definition ec_key_pair.cpp:122
OpenSSL::Unique_X509_REQ create_req(const std::string &subject_name, const std::vector< SubjectAltName > &subject_alt_names, const std::optional< Pem > &public_key) const
Definition ec_key_pair.cpp:210
std::vector< uint8_t > private_key_der() const override
Definition ec_key_pair.cpp:132
ECPublicKey::Coordinates coordinates() const override
Definition ec_key_pair.cpp:502
std::vector< uint8_t > create_csr_der(const std::string &subject_name, const std::vector< SubjectAltName > &subject_alt_names, const std::optional< Pem > &public_key=std::nullopt) const override
Definition ec_key_pair.cpp:285
std::vector< uint8_t > public_key_raw() const override
Definition ec_key_pair.cpp:476
JsonWebKeyECPrivate private_key_jwk(const std::optional< std::string > &kid=std::nullopt) const override
Definition ec_key_pair.cpp:507
std::vector< uint8_t > sign_hash(const uint8_t *hash, size_t hash_size) const override
Definition ec_key_pair.cpp:186
std::vector< uint8_t > derive_shared_secret(const ECPublicKey &peer_key) override
Definition ec_key_pair.cpp:481
Pem create_csr(const std::string &subject_name, const std::vector< SubjectAltName > &subject_alt_names, const std::optional< Pem > &public_key=std::nullopt) const override
Definition ec_key_pair.cpp:269
Pem private_key_pem() const override
Definition ec_key_pair.cpp:109
std::vector< uint8_t > public_key_der() const override
Definition ec_key_pair.cpp:127
std::vector< uint8_t > sign(std::span< const uint8_t > d, MDType md_type={}) const override
Definition ec_key_pair.cpp:159
CurveID get_curve_id() const override
Definition ec_key_pair.cpp:471
Pem sign_csr_impl(const std::optional< Pem > &issuer_cert, const Pem &signing_request, const std::string &valid_from, const std::string &valid_to, bool ca=false, Signer signer=Signer::SUBJECT) const override
Definition ec_key_pair.cpp:304
Definition ec_key_pair.h:19
Signer
Definition ec_key_pair.h:77
Definition ec_public_key.h:17
bool verify(const uint8_t *contents, size_t contents_size, const uint8_t *sig, size_t sig_size, MDType md_type, HashBytes &bytes) override
Definition ec_public_key.cpp:174
Definition pem.h:18
Definition base64.h:10
CurveID
Definition curve.h:18
MDType
Definition md_type.h:10
std::vector< uint8_t > ECPublicKey
Definition jwt.h:38