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/ec_point.h>
16#include <botan/internal/workfactor.h>
44 m_domain_params(dom_par),
45 m_public_key(pub_point),
46 m_domain_encoding(default_encoding_for(m_domain_params))
51 std::span<const uint8_t> key_bits) :
52 m_domain_params{
EC_Group(alg_id.parameters())},
53 m_public_key{domain().
OS2ECP(key_bits)},
54 m_domain_encoding(default_encoding_for(m_domain_params))
89 throw Invalid_Argument(
"Cannot used NamedCurve encoding for a curve without an OID");
97 throw Invalid_State(
"EC_PrivateKey::private_value - uninitialized");
108 bool with_modular_inverse)
122 std::vector<BigInt> ws;
124 if(with_modular_inverse)
136 "Generated public key point was on the curve");
148 .
encode(
static_cast<size_t>(1))
158 std::span<const uint8_t> key_bits,
159 bool with_modular_inverse)
177 if(with_modular_inverse)
188 "Public point derived from loaded key was on the curve");
199 if(field ==
"public_x")
204 else if(field ==
"public_y")
209 else if(field ==
"base_x")
211 else if(field ==
"base_y")
213 else if(field ==
"p")
215 else if(field ==
"a")
217 else if(field ==
"b")
219 else if(field ==
"cofactor")
221 else if(field ==
"order")
#define BOTAN_ASSERT_NOMSG(expr)
#define BOTAN_ASSERT(expr, assertion_made)
const std::vector< uint8_t > & parameters() const
virtual const BigInt & get_int_field(std::string_view field) const
virtual OID object_identifier() const
BER_Decoder start_sequence()
BER_Decoder & decode_optional(T &out, ASN1_Type type_tag, ASN1_Class class_tag, const T &default_value=T())
BER_Decoder & decode_and_check(const T &expected, std::string_view error_msg)
static secure_vector< uint8_t > encode_locked(const BigInt &n)
static secure_vector< uint8_t > encode_1363(const BigInt &n, size_t bytes)
secure_vector< uint8_t > get_contents()
DER_Encoder & start_explicit_context_specific(uint32_t tag)
DER_Encoder & start_sequence()
DER_Encoder & encode(bool b)
const BigInt & get_b() const
const BigInt & get_a() const
const BigInt & get_g_y() const
const BigInt & get_cofactor() const
bool verify_public_element(const EC_Point &y) const
const BigInt & get_p() const
bool verify_group(RandomNumberGenerator &rng, bool strong=false) const
const BigInt & get_order() const
size_t get_p_bits() const
const EC_Point & get_base_point() const
EC_Point blinded_base_point_multiply(const BigInt &k, RandomNumberGenerator &rng, std::vector< BigInt > &ws) const
const BigInt & get_g_x() const
const OID & get_curve_oid() const
BigInt inverse_mod_order(const BigInt &x) const
EC_Point OS2ECP(const uint8_t bits[], size_t len) const
BigInt random_scalar(RandomNumberGenerator &rng) const
const BigInt & get_y() const
bool on_the_curve() const
const BigInt & get_x() const
std::vector< uint8_t > encode(EC_Point_Format format) const
secure_vector< uint8_t > raw_private_key_bits() const override final
secure_vector< uint8_t > private_key_bits() const override final
const BigInt & get_int_field(std::string_view field) const override final
const BigInt & private_value() const
const EC_Group & domain() const
std::vector< uint8_t > DER_domain() const
void set_parameter_encoding(EC_Group_Encoding enc)
EC_Point_Format m_point_encoding
EC_Group_Encoding m_domain_encoding
size_t estimated_strength() const override
AlgorithmIdentifier algorithm_identifier() const override
size_t key_length() const override
void set_point_encoding(EC_Point_Format enc)
const BigInt & get_int_field(std::string_view field) const override
EC_Point_Format point_encoding() const
bool check_key(RandomNumberGenerator &rng, bool strong) const override
const EC_Point & public_point() const
std::vector< uint8_t > public_key_bits() const override
size_t ecp_work_factor(size_t bits)
@ ExplicitContextSpecific
EC_Point OS2ECP(const uint8_t data[], size_t data_len, const CurveGFp &curve)
std::vector< T, secure_allocator< T > > secure_vector