9#ifndef BOTAN_P11_ECC_H_
10#define BOTAN_P11_ECC_H_
12#include <botan/p11_object.h>
13#include <botan/pk_keys.h>
15#if defined(BOTAN_HAS_ECC_PUBLIC_KEY_CRYPTO)
16 #include <botan/asn1_obj.h>
17 #include <botan/ec_group.h>
18 #include <botan/ecc_key.h>
29 EC_PublicKeyGenerationProperties(
const std::vector<uint8_t>& ec_params);
32 inline const std::vector<uint8_t>& ec_params()
const {
return m_ec_params; }
35 const std::vector<uint8_t> m_ec_params;
45 EC_PublicKeyImportProperties(
const std::vector<uint8_t>& ec_params,
const std::vector<uint8_t>& ec_point);
48 inline const std::vector<uint8_t>& ec_params()
const {
return m_ec_params; }
51 inline const std::vector<uint8_t>& ec_point()
const {
return m_ec_point; }
54 const std::vector<uint8_t> m_ec_params;
55 const std::vector<uint8_t> m_ec_point;
59class BOTAN_PUBLIC_API(2, 0) PKCS11_EC_PublicKey :
public virtual EC_PublicKey,
69 PKCS11_EC_PublicKey(Session& session, ObjectHandle handle);
76 PKCS11_EC_PublicKey(Session& session,
const EC_PublicKeyImportProperties& props);
82 EC_PrivateKeyGenerationProperties() : PrivateKeyProperties(
KeyType::
Ec) {}
92 EC_PrivateKeyImportProperties(
const std::vector<uint8_t>& ec_params,
const BigInt& value);
95 inline const std::vector<uint8_t>& ec_params()
const {
return m_ec_params; }
98 inline const BigInt& value()
const {
return m_value; }
101 const std::vector<uint8_t> m_ec_params;
102 const BigInt m_value;
108class BOTAN_PUBLIC_API(2, 0) PKCS11_EC_PrivateKey :
public virtual Private_Key,
118 PKCS11_EC_PrivateKey(Session& session, ObjectHandle handle);
125 PKCS11_EC_PrivateKey(Session& session,
const EC_PrivateKeyImportProperties& props);
134 PKCS11_EC_PrivateKey(Session& session,
135 const std::vector<uint8_t>& ec_params,
136 const EC_PrivateKeyGenerationProperties& props);
139 inline const EC_Group& domain()
const {
return m_domain_params; }
141 #if defined(BOTAN_HAS_LEGACY_EC_POINT)
147 void set_public_point(
const EC_Point& point, PublicPointEncoding point_encoding = PublicPointEncoding::Der) {
148 this->set_public_point(EC_AffinePoint(domain(), point), point_encoding);
157 void set_public_point(
const EC_AffinePoint& point,
158 PublicPointEncoding point_encoding = PublicPointEncoding::Der) {
159 m_public_key = point;
160 m_point_encoding = point_encoding;
168 void set_point_encoding(PublicPointEncoding point_encoding) { m_point_encoding = point_encoding; }
170 #if defined(BOTAN_HAS_LEGACY_EC_POINT)
178 EC_Point public_point()
const {
return this->public_ec_point().to_legacy_point(); }
190 EC_AffinePoint public_ec_point()
const {
192 return m_public_key.value();
195 "Public point not set. Inferring the public key from a PKCS#11 ec private key is not possible.");
204 std::vector<uint8_t> raw_public_key_bits()
const override;
206 std::vector<uint8_t> public_key_bits()
const override;
208 std::size_t key_length()
const override;
210 std::size_t estimated_strength()
const override;
212 bool check_key(RandomNumberGenerator&,
bool)
const override;
214 AlgorithmIdentifier algorithm_identifier()
const override;
217 EC_Group m_domain_params;
218 std::optional<EC_AffinePoint> m_public_key;
#define BOTAN_PUBLIC_API(maj, min)
int(* final)(unsigned char *, CTX *)