CCF
Loading...
Searching...
No Matches
eddsa_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
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 ~EdDSAKeyPair() = default;
22
26 [[nodiscard]] virtual Pem private_key_pem() const = 0;
27
31 [[nodiscard]] virtual Pem public_key_pem() const = 0;
32
33 [[nodiscard]] virtual std::vector<uint8_t> sign(
34 std::span<const uint8_t> d) const = 0;
35
36 virtual bool verify(
37 const uint8_t* contents,
38 size_t contents_size,
39 const uint8_t* signature,
40 size_t signature_size) = 0;
41
42 virtual bool verify(
43 const std::vector<uint8_t>& contents,
44 const std::vector<uint8_t>& signature)
45 {
46 return verify(
47 contents.data(), contents.size(), signature.data(), signature.size());
48 }
49
50 [[nodiscard]] virtual CurveID get_curve_id() const = 0;
51
53 const std::optional<std::string>& kid = std::nullopt) const = 0;
54 };
55
56 using EdDSAPublicKeyPtr = std::shared_ptr<EdDSAPublicKey>;
57 using EdDSAKeyPairPtr = std::shared_ptr<EdDSAKeyPair>;
58
65
73
83
90
98}
Definition eddsa_key_pair.h:19
virtual Pem private_key_pem() const =0
virtual CurveID get_curve_id() const =0
virtual Pem public_key_pem() const =0
virtual bool verify(const uint8_t *contents, size_t contents_size, const uint8_t *signature, size_t signature_size)=0
virtual ~EdDSAKeyPair()=default
virtual bool verify(const std::vector< uint8_t > &contents, const std::vector< uint8_t > &signature)
Definition eddsa_key_pair.h:42
virtual std::vector< uint8_t > sign(std::span< const uint8_t > d) const =0
virtual JsonWebKeyEdDSAPrivate private_key_jwk_eddsa(const std::optional< std::string > &kid=std::nullopt) const =0
Definition pem.h:18
Definition base64.h:10
CurveID
Definition curve.h:18
@ CURVE25519
The CURVE25519 curve.
EdDSAKeyPairPtr make_eddsa_key_pair(CurveID curve_id=CurveID::CURVE25519)
Definition eddsa_key_pair.cpp:27
std::shared_ptr< EdDSAPublicKey > EdDSAPublicKeyPtr
Definition eddsa_key_pair.h:56
std::shared_ptr< EdDSAKeyPair > EdDSAKeyPairPtr
Definition eddsa_key_pair.h:57
EdDSAPublicKeyPtr make_eddsa_public_key(const Pem &pem)
Definition eddsa_key_pair.cpp:17