10 #include <botan/ec_group.h>
11 #include <botan/ber_dec.h>
12 #include <botan/der_enc.h>
13 #include <botan/oids.h>
14 #include <botan/pem.h>
15 #include <botan/reducer.h>
37 std::vector<uint8_t> ber =
64 std::vector<uint8_t> sv_base_point;
71 "Only prime ECC fields supported")
85 m_base_point =
OS2ECP(sv_base_point, m_curve);
88 throw Decoding_Error(
"Unexpected tag while decoding ECC domain params");
96 const size_t ecpVers1 = 1;
97 OID curve_type(
"1.2.840.10045.1.1");
99 const size_t p_bytes = m_curve.
get_p().
bytes();
139 BigInt discriminant = p.multiply(4, m_curve.
get_a());
140 discriminant += p.multiply(27, m_curve.
get_b());
141 discriminant = p.reduce(discriminant);
143 if(discriminant == 0)
157 if((m_base_point * m_cofactor).is_zero())
167 if(!(m_base_point * m_order).is_zero())
const BigInt & get_a() const
std::string get_oid() const
std::vector< uint8_t > get_contents_unlocked()
secure_vector< uint8_t > EC2OSP(const PointGFp &point, uint8_t format)
const BigInt & get_b() const
std::string encode(const uint8_t der[], size_t length, const std::string &label, size_t width)
BER_Decoder & decode_and_check(const T &expected, const std::string &error_msg)
bool is_prime(const BigInt &n, RandomNumberGenerator &rng, size_t prob, bool is_random)
BER_Decoder & decode(bool &v)
BER_Decoder & decode_octet_string_bigint(class BigInt &b)
static std::string PEM_for_named_group(const std::string &name)
DER_Encoder & encode(bool b)
std::string lookup(const OID &oid)
std::string PEM_encode() const
PointGFp OS2ECP(const uint8_t data[], size_t data_len, const CurveGFp &curve)
DER_Encoder & encode_null()
std::vector< uint8_t > DER_encode(EC_Group_Encoding form) const
BER_Decoder start_cons(ASN1_Tag type_tag, ASN1_Tag class_tag=UNIVERSAL)
EC_Group(const CurveGFp &curve, const PointGFp &base_point, const BigInt &order, const BigInt &cofactor)
BER_Object get_next_object()
std::vector< T > unlock(const secure_vector< T > &in)
const BigInt & get_p() const
secure_vector< uint8_t > decode_check_label(DataSource &source, const std::string &label_want)
BER_Decoder & verify_end()
bool on_the_curve() const
std::string as_string() 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