10 #include <botan/ecc_key.h>
11 #include <botan/numthry.h>
12 #include <botan/der_enc.h>
13 #include <botan/ber_dec.h>
14 #include <botan/secmem.h>
15 #include <botan/point_gfp.h>
16 #include <botan/workfactor.h>
32 m_domain_params(dom_par), m_public_key(pub_point)
46 const std::vector<uint8_t>& key_bits) :
50 if (!
domain().get_curve_oid().empty())
93 "EC-key object whose corresponding domain "
94 "parameters are without oid");
101 if(m_private_key == 0)
102 throw Invalid_State(
"EC_PrivateKey::private_value - uninitialized");
104 return m_private_key;
113 bool with_modular_inverse)
130 std::vector<BigInt> ws;
132 if(with_modular_inverse)
144 "Generated public key point was on the curve");
151 .
encode(static_cast<size_t>(1))
162 bool with_modular_inverse)
178 .decode_octet_string_bigint(m_private_key)
183 if(public_key_bits.empty())
185 if(with_modular_inverse)
196 "Public point derived from loaded key was on the curve");
PointGFp::Compression_Type point_encoding() const
const PointGFp & get_base_point() const
const EC_Group & domain() const
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)
secure_vector< uint8_t > get_contents()
BigInt inverse_mod_order(const BigInt &x) const
size_t ecp_work_factor(size_t bits)
const OID & get_curve_oid() const
virtual OID get_oid() const
PointGFp::Compression_Type m_point_encoding
const PointGFp & public_point() const
const CurveGFp & get_curve() 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())
std::vector< T, secure_allocator< T >> secure_vector
std::vector< uint8_t > DER_domain() const
const CurveGFp & get_curve() const
BER_Decoder start_cons(ASN1_Tag type_tag, ASN1_Tag class_tag=UNIVERSAL)
bool check_key(RandomNumberGenerator &rng, bool strong) const override
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
size_t get_p_bits() const
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_public_element(const PointGFp &y) const
PointGFp OS2ECP(const uint8_t bits[], size_t len) const
bool verify_group(RandomNumberGenerator &rng, bool strong=false) const
size_t estimated_strength() const override
PointGFp blinded_base_point_multiply(const BigInt &k, RandomNumberGenerator &rng, std::vector< BigInt > &ws) const
std::vector< uint8_t > encode(PointGFp::Compression_Type format) const
void set_point_encoding(PointGFp::Compression_Type enc)
BigInt random_scalar(RandomNumberGenerator &rng) const
const std::vector< uint8_t > & get_parameters() const
EC_Group_Encoding m_domain_encoding