CCF
Loading...
Searching...
No Matches
rsa_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/jwk.h"
7#include "ccf/crypto/pem.h"
9
10#include <cstdint>
11#include <optional>
12#include <string>
13#include <vector>
14
15namespace ccf::crypto
16{
18 {
19 public:
20 static constexpr size_t default_public_key_size = 2048;
21 static constexpr size_t default_public_exponent = 65537;
22
23 RSAKeyPair() = default;
24 RSAKeyPair(const RSAKeyPair&) = delete;
25 RSAKeyPair(const Pem& pem);
26 virtual ~RSAKeyPair() = default;
27
28 virtual size_t key_size() const = 0;
29
38 virtual std::vector<uint8_t> rsa_oaep_unwrap(
39 const std::vector<uint8_t>& input,
40 const std::optional<std::vector<std::uint8_t>>& label = std::nullopt) = 0;
41
45 virtual Pem private_key_pem() const = 0;
46
50 virtual Pem public_key_pem() const = 0;
51
55 virtual std::vector<uint8_t> public_key_der() const = 0;
56
57 virtual std::vector<uint8_t> sign(
58 std::span<const uint8_t> d,
59 MDType md_type = MDType::NONE,
60 size_t salt_length = 0) const = 0;
61
62 virtual bool verify(
63 const uint8_t* contents,
64 size_t contents_size,
65 const uint8_t* signature,
66 size_t signature_size,
67 MDType md_type = MDType::NONE,
68 size_t salt_length = 0) = 0;
69
70 virtual bool verify(
71 const std::vector<uint8_t>& contents,
72 const std::vector<uint8_t>& signature,
73 MDType md_type = MDType::NONE,
74 size_t salt_length = 0)
75 {
76 return verify(
77 contents.data(),
78 contents.size(),
79 signature.data(),
80 signature.size(),
81 md_type,
82 salt_length);
83 }
84
86 const std::optional<std::string>& kid = std::nullopt) const = 0;
87 };
88
89 using RSAPublicKeyPtr = std::shared_ptr<RSAPublicKey>;
90 using RSAKeyPairPtr = std::shared_ptr<RSAKeyPair>;
91
93 RSAPublicKeyPtr make_rsa_public_key(const std::vector<uint8_t>& der);
95 RSAPublicKeyPtr make_rsa_public_key(const uint8_t* data, size_t size);
96
101 size_t public_key_size = RSAKeyPair::default_public_key_size,
102 size_t public_exponent = RSAKeyPair::default_public_exponent);
103
108
114}
Definition pem.h:18
Definition rsa_key_pair.h:18
static constexpr size_t default_public_key_size
Definition rsa_key_pair.h:20
virtual JsonWebKeyRSAPrivate private_key_jwk_rsa(const std::optional< std::string > &kid=std::nullopt) const =0
virtual std::vector< uint8_t > public_key_der() const =0
virtual size_t key_size() const =0
virtual std::vector< uint8_t > sign(std::span< const uint8_t > d, MDType md_type=MDType::NONE, size_t salt_length=0) const =0
virtual Pem private_key_pem() const =0
RSAKeyPair(const RSAKeyPair &)=delete
RSAKeyPair(const Pem &pem)
virtual Pem public_key_pem() const =0
static constexpr size_t default_public_exponent
Definition rsa_key_pair.h:21
virtual ~RSAKeyPair()=default
virtual bool verify(const std::vector< uint8_t > &contents, const std::vector< uint8_t > &signature, MDType md_type=MDType::NONE, size_t salt_length=0)
Definition rsa_key_pair.h:70
virtual bool verify(const uint8_t *contents, size_t contents_size, const uint8_t *signature, size_t signature_size, MDType md_type=MDType::NONE, size_t salt_length=0)=0
virtual std::vector< uint8_t > rsa_oaep_unwrap(const std::vector< uint8_t > &input, const std::optional< std::vector< std::uint8_t > > &label=std::nullopt)=0
Definition base64.h:10
RSAKeyPairPtr make_rsa_key_pair(size_t public_key_size=RSAKeyPair::default_public_key_size, size_t public_exponent=RSAKeyPair::default_public_exponent)
Definition rsa_key_pair.cpp:50
MDType
Definition md_type.h:10
std::shared_ptr< RSAKeyPair > RSAKeyPairPtr
Definition rsa_key_pair.h:90
std::shared_ptr< RSAPublicKey > RSAPublicKeyPtr
Definition rsa_key_pair.h:89
RSAPublicKeyPtr make_rsa_public_key(const Pem &pem)
Definition rsa_key_pair.cpp:13