10 #include <botan/ecc_key.h>
11 #include <botan/x509_key.h>
12 #include <botan/numthry.h>
13 #include <botan/der_enc.h>
14 #include <botan/ber_dec.h>
15 #include <botan/secmem.h>
16 #include <botan/point_gfp.h>
17 #include <botan/workfactor.h>
33 m_domain_params(dom_par), m_public_key(pub_point),
41 const std::vector<uint8_t>& key_bits) :
43 m_public_key{
OS2ECP(key_bits, domain().get_curve())},
100 "EC-key object whose corresponding domain "
101 "parameters are without oid");
109 throw Invalid_State(
"EC_PrivateKey::private_value - uninitialized");
120 bool with_modular_inverse)
138 "Generated public key point was on the curve");
145 .
encode(static_cast<size_t>(1))
154 bool with_modular_inverse)
170 if(!key_parameters.
empty() && key_parameters != alg_id.
oid)
171 throw Decoding_Error(
"EC_PrivateKey - inner and outer OIDs did not match");
173 if(public_key_bits.empty())
179 "Public point derived from loaded key was on the curve");
std::string get_oid() const
const EC_Group & domain() const
secure_vector< uint8_t > EC2OSP(const PointGFp &point, uint8_t format)
std::vector< uint8_t > parameters
BER_Decoder & decode_optional_string(std::vector< uint8_t, Alloc > &out, ASN1_Tag real_type, uint16_t type_no, ASN1_Tag class_tag=CONTEXT_SPECIFIC)
void set_parameter_encoding(EC_Group_Encoding enc)
BER_Decoder & decode_and_check(const T &expected, const std::string &error_msg)
const PointGFp & get_base_point() const
secure_vector< uint8_t > get_contents()
size_t ecp_work_factor(size_t bits)
static BigInt random_integer(RandomNumberGenerator &rng, const BigInt &min, const BigInt &max)
virtual OID get_oid() const
const PointGFp & public_point() const
#define BOTAN_ASSERT(expr, assertion_made)
const BigInt & private_value() const
DER_Encoder & encode(bool b)
BER_Decoder & decode_optional(T &out, ASN1_Tag type_tag, ASN1_Tag class_tag, const T &default_value=T())
const CurveGFp & get_curve() const
std::vector< T, secure_allocator< T >> secure_vector
std::vector< uint8_t > DER_domain() const
PointGFp OS2ECP(const uint8_t data[], size_t data_len, const CurveGFp &curve)
BER_Decoder start_cons(ASN1_Tag type_tag, ASN1_Tag class_tag=UNIVERSAL)
const BigInt & get_order() const
bool check_key(RandomNumberGenerator &rng, bool strong) const override
std::vector< T > unlock(const secure_vector< T > &in)
BigInt inverse_mod(const BigInt &n, const BigInt &mod)
const BigInt & get_p() const
std::vector< uint8_t > public_key_bits() const override
secure_vector< uint8_t > private_key_bits() const override
AlgorithmIdentifier algorithm_identifier() const override
size_t key_length() const override
bool on_the_curve() const
DER_Encoder & start_cons(ASN1_Tag type_tag, ASN1_Tag class_tag=UNIVERSAL)
static secure_vector< uint8_t > encode_1363(const BigInt &n, size_t bytes)
bool verify_group(RandomNumberGenerator &rng, bool strong=false) const
size_t estimated_strength() const override
EC_Group_Encoding m_domain_encoding
const BigInt & get_cofactor() const