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/ecc_key.h>
17#include <botan/ec_group.h>
18#include <botan/asn1_obj.h>
31 EC_PublicKeyGenerationProperties(
const std::vector<uint8_t>& ec_params);
34 inline const std::vector<uint8_t>& ec_params()
const
40 const std::vector<uint8_t> m_ec_params;
51 EC_PublicKeyImportProperties(
const std::vector<uint8_t>& ec_params,
const std::vector<uint8_t>& ec_point);
54 inline const std::vector<uint8_t>& ec_params()
const
60 inline const std::vector<uint8_t>& ec_point()
const
66 const std::vector<uint8_t> m_ec_params;
67 const std::vector<uint8_t> m_ec_point;
71class BOTAN_PUBLIC_API(2,0) PKCS11_EC_PublicKey :
public virtual EC_PublicKey,
82 PKCS11_EC_PublicKey(Session& session, ObjectHandle handle);
89 PKCS11_EC_PublicKey(Session& session,
const EC_PublicKeyImportProperties& props);
96 EC_PrivateKeyGenerationProperties()
109 EC_PrivateKeyImportProperties(
const std::vector<uint8_t>& ec_params,
const BigInt& value);
112 inline const std::vector<uint8_t>& ec_params()
const
118 inline const BigInt& value()
const
124 const std::vector<uint8_t> m_ec_params;
125 const BigInt m_value;
131class BOTAN_PUBLIC_API(2,0) PKCS11_EC_PrivateKey :
public virtual Private_Key,
142 PKCS11_EC_PrivateKey(Session& session, ObjectHandle handle);
149 PKCS11_EC_PrivateKey(Session& session,
const EC_PrivateKeyImportProperties& props);
158 PKCS11_EC_PrivateKey(Session& session,
const std::vector<uint8_t>& ec_params,
159 const EC_PrivateKeyGenerationProperties& props);
162 inline const EC_Group& domain()
const
164 return m_domain_params;
172 void set_public_point(
const PointGFp& point, PublicPointEncoding point_encoding = PublicPointEncoding::Der)
174 m_public_key = point;
175 m_point_encoding = point_encoding;
185 const PointGFp& public_point()
const
187 if(m_public_key.is_zero())
189 throw Invalid_State(
"Public point not set. Inferring the public key from a PKCS#11 ec private key is not possible.");
197 return m_point_encoding;
202 std::vector<uint8_t> public_key_bits()
const override;
204 std::size_t key_length()
const override;
206 std::size_t estimated_strength()
const override;
208 bool check_key(RandomNumberGenerator&,
bool)
const override;
210 AlgorithmIdentifier algorithm_identifier()
const override;
213 EC_Group m_domain_params;
214 PointGFp m_public_key;
int(* final)(unsigned char *, CTX *)
#define BOTAN_PUBLIC_API(maj, min)