9 #ifndef BOTAN_P11_ECC_H__
10 #define BOTAN_P11_ECC_H__
12 #include <botan/build.h>
13 #include <botan/p11_object.h>
15 #if defined(BOTAN_HAS_ECC_PUBLIC_KEY_CRYPTO)
16 #include <botan/pk_keys.h>
17 #include <botan/ecc_key.h>
18 #include <botan/ec_group.h>
19 #include <botan/rng.h>
20 #include <botan/alg_id.h>
29 class BOTAN_DLL EC_PublicKeyGenerationProperties final :
public PublicKeyProperties
33 EC_PublicKeyGenerationProperties(
const std::vector<uint8_t>& ec_params);
36 inline const std::vector<uint8_t>& ec_params()
const
42 const std::vector<uint8_t> m_ec_params;
46 class BOTAN_DLL EC_PublicKeyImportProperties final :
public PublicKeyProperties
53 EC_PublicKeyImportProperties(
const std::vector<uint8_t>& ec_params,
const std::vector<uint8_t>& ec_point);
56 inline const std::vector<uint8_t>& ec_params()
const
62 inline const std::vector<uint8_t>& ec_point()
const
68 const std::vector<uint8_t> m_ec_params;
69 const std::vector<uint8_t> m_ec_point;
73 class BOTAN_DLL PKCS11_EC_PublicKey :
public virtual EC_PublicKey,
84 PKCS11_EC_PublicKey(Session& session,
ObjectHandle handle);
91 PKCS11_EC_PublicKey(Session& session,
const EC_PublicKeyImportProperties& props);
95 class BOTAN_DLL EC_PrivateKeyGenerationProperties final :
public PrivateKeyProperties
98 EC_PrivateKeyGenerationProperties()
104 class BOTAN_DLL EC_PrivateKeyImportProperties final :
public PrivateKeyProperties
111 EC_PrivateKeyImportProperties(
const std::vector<uint8_t>& ec_params,
const BigInt& value);
114 inline const std::vector<uint8_t>& ec_params()
const
120 inline const BigInt& value()
const
126 const std::vector<uint8_t> m_ec_params;
127 const BigInt m_value;
133 class BOTAN_DLL PKCS11_EC_PrivateKey :
public virtual Private_Key,
144 PKCS11_EC_PrivateKey(Session& session,
ObjectHandle handle);
151 PKCS11_EC_PrivateKey(Session& session,
const EC_PrivateKeyImportProperties& props);
160 PKCS11_EC_PrivateKey(Session& session,
const std::vector<uint8_t>& ec_params,
161 const EC_PrivateKeyGenerationProperties& props);
164 inline const EC_Group& domain()
const
166 return m_domain_params;
176 m_public_key = point;
177 m_point_encoding = point_encoding;
187 const PointGFp& public_point()
const
189 if(m_public_key.is_zero())
191 throw Exception(
"Public point not set. Inferring the public key from a PKCS#11 ec private key is not possible.");
199 return m_point_encoding;
204 std::vector<uint8_t> public_key_bits()
const override;
206 std::size_t key_length()
const override;
208 std::size_t estimated_strength()
const override;
210 bool check_key(RandomNumberGenerator&,
bool)
const override;
212 AlgorithmIdentifier algorithm_identifier()
const override;
215 EC_Group m_domain_params;
216 PointGFp m_public_key;
CK_OBJECT_HANDLE ObjectHandle