CCF
Loading...
Searching...
No Matches
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
6#include "openssl_wrappers.h"
7
8#include <openssl/err.h>
9#include <openssl/evp.h>
10#include <stdexcept>
11#include <string>
12
13namespace ccf::crypto
14{
16 {
17 protected:
18 EVP_PKEY* key = nullptr;
20
21#if defined(OPENSSL_VERSION_MAJOR) && OPENSSL_VERSION_MAJOR >= 3
22 std::vector<uint8_t> ec_point_public_from_jwk(
23 const JsonWebKeyECPublic& jwk);
24#else
26 const JsonWebKeyECPublic& jwk);
27#endif
28
29 public:
31 PublicKey_OpenSSL(EVP_PKEY* key);
32 PublicKey_OpenSSL(const Pem& pem);
33 PublicKey_OpenSSL(const std::vector<uint8_t>& der);
35 virtual ~PublicKey_OpenSSL();
36
39
40 virtual bool verify(
41 const uint8_t* contents,
42 size_t contents_size,
43 const uint8_t* sig,
44 size_t sig_size,
45 MDType md_type,
46 HashBytes& bytes) override;
47
48 virtual bool verify_hash(
49 const uint8_t* hash,
50 size_t hash_size,
51 const uint8_t* sig,
52 size_t sig_size,
53 MDType md_type) override;
54
55 virtual Pem public_key_pem() const override;
56 virtual std::vector<uint8_t> public_key_der() const override;
57 virtual std::vector<uint8_t> public_key_raw() const override;
58
59 virtual CurveID get_curve_id() const override;
60
61 int get_openssl_group_id() const;
62 static int get_openssl_group_id(CurveID gid);
63
64 operator EVP_PKEY*() const
65 {
66 return key;
67 }
68
69 virtual Coordinates coordinates() const override;
70
72 const std::optional<std::string>& kid = std::nullopt) const override;
73 };
74
75 OpenSSL::Unique_PKEY key_from_raw_ec_point(
76 const std::vector<uint8_t>& raw, int nid);
77}
Definition pem.h:18
Definition public_key.h:16
OpenSSL::Unique_EC_KEY ec_key_public_from_jwk(const JsonWebKeyECPublic &jwk)
Definition public_key.cpp:88
virtual ~PublicKey_OpenSSL()
Definition public_key.cpp:124
virtual CurveID get_curve_id() const override
Definition public_key.cpp:132
PublicKey_OpenSSL()
Definition public_key.cpp:30
virtual Pem public_key_pem() const override
Definition public_key.cpp:249
virtual std::vector< uint8_t > public_key_raw() const override
Definition public_key.cpp:271
virtual std::vector< uint8_t > public_key_der() const override
Definition public_key.cpp:260
virtual 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 public_key.cpp:199
virtual bool verify_hash(const uint8_t *hash, size_t hash_size, const uint8_t *sig, size_t sig_size, MDType md_type) override
Definition public_key.cpp:216
virtual JsonWebKeyECPublic public_key_jwk(const std::optional< std::string > &kid=std::nullopt) const override
Definition public_key.cpp:360
EVP_PKEY * key
Definition public_key.h:18
virtual Coordinates coordinates() const override
Definition public_key.cpp:334
int get_openssl_group_id() const
Definition public_key.cpp:149
PublicKey_OpenSSL(PublicKey_OpenSSL &&key)=default
Definition public_key.h:19
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 bool verify_hash(const std::vector< uint8_t > &hash, const std::vector< uint8_t > &signature, MDType md_type)
Definition public_key.h:93
Definition base64.h:9
std::vector< uint8_t > HashBytes
Definition hash_bytes.h:10
Unique_PKEY key_from_raw_ec_point(const std::vector< uint8_t > &raw, int nid)
Definition public_key.cpp:287
MDType
Definition md_type.h:10
CurveID
Definition curve.h:18
Definition openssl_wrappers.h:404