CCF
Loading...
Searching...
No Matches
rsa_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/jwk.h"
6#include "ccf/crypto/pem.h"
7
8#include <cstdint>
9#include <optional>
10#include <string>
11#include <vector>
12
13namespace ccf::crypto
14{
15 enum class RSAPadding : uint8_t
16 {
19 };
20
22 {
23 public:
24 virtual ~RSAPublicKey() = default;
28 [[nodiscard]] virtual size_t key_size() const = 0;
29
40 virtual std::vector<uint8_t> rsa_oaep_wrap(
41 const uint8_t* input,
42 size_t input_size,
43 const uint8_t* label = nullptr,
44 size_t label_size = 0) = 0;
45
54 virtual std::vector<uint8_t> rsa_oaep_wrap(
55 const std::vector<uint8_t>& input,
56 const std::optional<std::vector<std::uint8_t>>& label = std::nullopt) = 0;
57
61 [[nodiscard]] virtual Pem public_key_pem() const = 0;
62
66 [[nodiscard]] virtual std::vector<uint8_t> public_key_der() const = 0;
67
71 [[nodiscard]] virtual JsonWebKeyRSAPublic public_key_jwk(
72 const std::optional<std::string>& kid = std::nullopt) const = 0;
73
74 virtual bool verify(
75 const uint8_t* contents,
76 size_t contents_size,
77 const uint8_t* signature,
78 size_t signature_size,
79 MDType md_type,
81 size_t salt_length = 0) = 0;
82
83 virtual bool verify_hash(
84 const uint8_t* hash,
85 size_t hash_size,
86 const uint8_t* signature,
87 size_t signature_size,
88 MDType md_type,
90 size_t salt_length = 0) = 0;
91 };
92
93 using RSAPublicKeyPtr = std::shared_ptr<RSAPublicKey>;
94
95 RSAPublicKeyPtr make_rsa_public_key(const uint8_t* data, size_t size);
96
97 RSAPublicKeyPtr make_rsa_public_key(const Pem& public_pem);
98
99 RSAPublicKeyPtr make_rsa_public_key(const std::vector<uint8_t>& der);
100
102}
Definition pem.h:18
Definition rsa_public_key.h:22
virtual std::vector< uint8_t > rsa_oaep_wrap(const std::vector< uint8_t > &input, const std::optional< std::vector< std::uint8_t > > &label=std::nullopt)=0
virtual size_t key_size() const =0
virtual std::vector< uint8_t > public_key_der() const =0
virtual ~RSAPublicKey()=default
virtual Pem public_key_pem() const =0
virtual JsonWebKeyRSAPublic public_key_jwk(const std::optional< std::string > &kid=std::nullopt) const =0
virtual std::vector< uint8_t > rsa_oaep_wrap(const uint8_t *input, size_t input_size, const uint8_t *label=nullptr, size_t label_size=0)=0
virtual bool verify(const uint8_t *contents, size_t contents_size, const uint8_t *signature, size_t signature_size, MDType md_type, RSAPadding padding=RSAPadding::PKCS_PSS, size_t salt_length=0)=0
virtual bool verify_hash(const uint8_t *hash, size_t hash_size, const uint8_t *signature, size_t signature_size, MDType md_type, RSAPadding padding=RSAPadding::PKCS_PSS, size_t salt_length=0)=0
Definition base64.h:10
RSAPublicKeyPtr make_rsa_public_key(const uint8_t *data, size_t size)
Definition rsa_public_key.cpp:283
MDType
Definition md_type.h:10
RSAPadding
Definition rsa_public_key.h:16
std::shared_ptr< RSAPublicKey > RSAPublicKeyPtr
Definition rsa_public_key.h:93