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) :
47 m_domain_params{
EC_Group(alg_id.get_parameters())},
48 m_public_key{domain().
OS2ECP(key_bits)}
50 if (!
domain().get_curve_oid().empty())
93 "EC-key object whose corresponding domain "
94 "parameters are without oid");
102 throw Invalid_State(
"EC_PrivateKey::private_value - uninitialized");
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)
167 if (!
domain().get_curve_oid().empty())
185 if(with_modular_inverse)
196 "Public point derived from loaded key was on the curve");
#define BOTAN_ASSERT(expr, assertion_made)
const std::vector< uint8_t > & get_parameters() const
BER_Decoder start_cons(ASN1_Tag type_tag, ASN1_Tag class_tag=UNIVERSAL)
BER_Decoder & decode_and_check(const T &expected, const std::string &error_msg)
BER_Decoder & decode_optional(T &out, ASN1_Tag type_tag, ASN1_Tag class_tag, const T &default_value=T())
static secure_vector< uint8_t > encode_1363(const BigInt &n, size_t bytes)
secure_vector< uint8_t > get_contents()
DER_Encoder & start_cons(ASN1_Tag type_tag, ASN1_Tag class_tag=UNIVERSAL)
DER_Encoder & encode(bool b)
PointGFp OS2ECP(const uint8_t bits[], size_t len) const
PointGFp blinded_base_point_multiply(const BigInt &k, RandomNumberGenerator &rng, std::vector< BigInt > &ws) const
bool verify_group(RandomNumberGenerator &rng, bool strong=false) const
size_t get_p_bits() const
bool verify_public_element(const PointGFp &y) const
const OID & get_curve_oid() const
const PointGFp & get_base_point() const
BigInt inverse_mod_order(const BigInt &x) const
BigInt random_scalar(RandomNumberGenerator &rng) const
const BigInt & private_value() const
secure_vector< uint8_t > private_key_bits() const override
const EC_Group & domain() const
std::vector< uint8_t > DER_domain() const
PointGFp::Compression_Type point_encoding() const
void set_parameter_encoding(EC_Group_Encoding enc)
EC_Group_Encoding m_domain_encoding
size_t estimated_strength() const override
PointGFp::Compression_Type m_point_encoding
void set_point_encoding(PointGFp::Compression_Type enc)
AlgorithmIdentifier algorithm_identifier() const override
size_t key_length() const override
const PointGFp & public_point() const
bool check_key(RandomNumberGenerator &rng, bool strong) const override
std::vector< uint8_t > public_key_bits() const override
std::vector< uint8_t > encode(PointGFp::Compression_Type format) const
bool on_the_curve() const
virtual OID get_oid() const
size_t ecp_work_factor(size_t bits)
PointGFp OS2ECP(const uint8_t data[], size_t data_len, const CurveGFp &curve)
@ EC_DOMPAR_ENC_IMPLICITCA
std::vector< T, secure_allocator< T > > secure_vector