diff options
Diffstat (limited to 'src/libs/3rdparty/botan/src/lib/pubkey/ec_group/ec_group.h')
-rw-r--r-- | src/libs/3rdparty/botan/src/lib/pubkey/ec_group/ec_group.h | 374 |
1 files changed, 0 insertions, 374 deletions
diff --git a/src/libs/3rdparty/botan/src/lib/pubkey/ec_group/ec_group.h b/src/libs/3rdparty/botan/src/lib/pubkey/ec_group/ec_group.h deleted file mode 100644 index 8a22cebce1..0000000000 --- a/src/libs/3rdparty/botan/src/lib/pubkey/ec_group/ec_group.h +++ /dev/null @@ -1,374 +0,0 @@ -/* -* ECC Domain Parameters -* -* (C) 2007 Falko Strenzke, FlexSecure GmbH -* 2008-2010 Jack Lloyd -* -* Botan is released under the Simplified BSD License (see license.txt) -*/ - -#ifndef BOTAN_ECC_DOMAIN_PARAMETERS_H_ -#define BOTAN_ECC_DOMAIN_PARAMETERS_H_ - -#include <botan/point_gfp.h> -#include <botan/asn1_oid.h> -#include <memory> -#include <set> - -namespace Botan { - -/** -* This class represents elliptic curce domain parameters -*/ -enum EC_Group_Encoding { - EC_DOMPAR_ENC_EXPLICIT = 0, - EC_DOMPAR_ENC_IMPLICITCA = 1, - EC_DOMPAR_ENC_OID = 2 -}; - -class CurveGFp; - -class EC_Group_Data; -class EC_Group_Data_Map; - -/** -* Class representing an elliptic curve -* -* The internal representation is stored in a shared_ptr, so copying an -* EC_Group is inexpensive. -*/ -class BOTAN_PUBLIC_API(2,0) EC_Group final - { - public: - - /** - * Construct Domain paramers from specified parameters - * @param curve elliptic curve - * @param base_point a base point - * @param order the order of the base point - * @param cofactor the cofactor - */ - BOTAN_DEPRECATED("Use version taking all BigInts") - EC_Group(const CurveGFp& curve, - const PointGFp& base_point, - const BigInt& order, - const BigInt& cofactor) : - EC_Group(curve.get_p(), - curve.get_a(), - curve.get_b(), - base_point.get_affine_x(), - base_point.get_affine_y(), - order, - cofactor) {} - - /** - * Construct Domain paramers from specified parameters - * @param p the elliptic curve p - * @param a the elliptic curve a param - * @param b the elliptic curve b param - * @param base_x the x coordinate of the base point - * @param base_y the y coordinate of the base point - * @param order the order of the base point - * @param cofactor the cofactor - * @param oid an optional OID used to identify this curve - */ - EC_Group(const BigInt& p, - const BigInt& a, - const BigInt& b, - const BigInt& base_x, - const BigInt& base_y, - const BigInt& order, - const BigInt& cofactor, - const OID& oid = OID()); - - /** - * Decode a BER encoded ECC domain parameter set - * @param ber_encoding the bytes of the BER encoding - */ - explicit EC_Group(const std::vector<uint8_t>& ber_encoding); - - /** - * Create an EC domain by OID (or throw if unknown) - * @param oid the OID of the EC domain to create - */ - explicit EC_Group(const OID& oid); - - /** - * Create an EC domain from PEM encoding (as from PEM_encode), or - * from an OID name (eg "secp256r1", or "1.2.840.10045.3.1.7") - * @param pem_or_oid PEM-encoded data, or an OID - */ - explicit EC_Group(const std::string& pem_or_oid); - - /** - * Create an uninitialized EC_Group - */ - EC_Group(); - - ~EC_Group(); - - /** - * Create the DER encoding of this domain - * @param form of encoding to use - * @returns bytes encododed as DER - */ - std::vector<uint8_t> DER_encode(EC_Group_Encoding form) const; - - /** - * Return the PEM encoding (always in explicit form) - * @return string containing PEM data - */ - std::string PEM_encode() const; - - /** - * Return domain parameter curve - * @result domain parameter curve - */ - BOTAN_DEPRECATED("Avoid CurveGFp") const CurveGFp& get_curve() const; - - /** - * Return if a == -3 mod p - */ - bool a_is_minus_3() const; - - /** - * Return if a == 0 mod p - */ - bool a_is_zero() const; - - /** - * Return the size of p in bits (same as get_p().bits()) - */ - size_t get_p_bits() const; - - /** - * Return the size of p in bits (same as get_p().bytes()) - */ - size_t get_p_bytes() const; - - /** - * Return the size of group order in bits (same as get_order().bits()) - */ - size_t get_order_bits() const; - - /** - * Return the size of p in bytes (same as get_order().bytes()) - */ - size_t get_order_bytes() const; - - /** - * Return the prime modulus of the field - */ - const BigInt& get_p() const; - - /** - * Return the a parameter of the elliptic curve equation - */ - const BigInt& get_a() const; - - /** - * Return the b parameter of the elliptic curve equation - */ - const BigInt& get_b() const; - - /** - * Return group base point - * @result base point - */ - const PointGFp& get_base_point() const; - - /** - * Return the x coordinate of the base point - */ - const BigInt& get_g_x() const; - - /** - * Return the y coordinate of the base point - */ - const BigInt& get_g_y() const; - - /** - * Return the order of the base point - * @result order of the base point - */ - const BigInt& get_order() const; - - /* - * Reduce x modulo the order - */ - BigInt mod_order(const BigInt& x) const; - - /* - * Return inverse of x modulo the order - */ - BigInt inverse_mod_order(const BigInt& x) const; - - /* - * Reduce (x*x) modulo the order - */ - BigInt square_mod_order(const BigInt& x) const; - - /* - * Reduce (x*y) modulo the order - */ - BigInt multiply_mod_order(const BigInt& x, const BigInt& y) const; - - /* - * Reduce (x*y*z) modulo the order - */ - BigInt multiply_mod_order(const BigInt& x, const BigInt& y, const BigInt& z) const; - - /** - * Return the cofactor - * @result the cofactor - */ - const BigInt& get_cofactor() const; - - /** - * Check if y is a plausible point on the curve - * - * In particular, checks that it is a point on the curve, not infinity, - * and that it has order matching the group. - */ - bool verify_public_element(const PointGFp& y) const; - - /** - * Return the OID of these domain parameters - * @result the OID as a string - */ - std::string BOTAN_DEPRECATED("Use get_curve_oid") get_oid() const { return get_curve_oid().as_string(); } - - /** - * Return the OID of these domain parameters - * @result the OID - */ - const OID& get_curve_oid() const; - - /** - * Return a point on this curve with the affine values x, y - */ - PointGFp point(const BigInt& x, const BigInt& y) const; - - /** - * Multi exponentiate. Not constant time. - * @return base_point*x + pt*y - */ - PointGFp point_multiply(const BigInt& x, const PointGFp& pt, const BigInt& y) const; - - /** - * Blinded point multiplication, attempts resistance to side channels - * @param k the scalar - * @param rng a random number generator - * @param ws a temp workspace - * @return base_point*k - */ - PointGFp blinded_base_point_multiply(const BigInt& k, - RandomNumberGenerator& rng, - std::vector<BigInt>& ws) const; - - /** - * Blinded point multiplication, attempts resistance to side channels - * Returns just the x coordinate of the point - * - * @param k the scalar - * @param rng a random number generator - * @param ws a temp workspace - * @return x coordinate of base_point*k - */ - BigInt blinded_base_point_multiply_x(const BigInt& k, - RandomNumberGenerator& rng, - std::vector<BigInt>& ws) const; - - /** - * Blinded point multiplication, attempts resistance to side channels - * @param point input point - * @param k the scalar - * @param rng a random number generator - * @param ws a temp workspace - * @return point*k - */ - PointGFp blinded_var_point_multiply(const PointGFp& point, - const BigInt& k, - RandomNumberGenerator& rng, - std::vector<BigInt>& ws) const; - - /** - * Return a random scalar ie an integer in [1,order) - */ - BigInt random_scalar(RandomNumberGenerator& rng) const; - - /** - * Return the zero (or infinite) point on this curve - */ - PointGFp zero_point() const; - - size_t point_size(PointGFp::Compression_Type format) const; - - PointGFp OS2ECP(const uint8_t bits[], size_t len) const; - - template<typename Alloc> - PointGFp OS2ECP(const std::vector<uint8_t, Alloc>& vec) const - { - return this->OS2ECP(vec.data(), vec.size()); - } - - bool initialized() const { return (m_data != nullptr); } - - /** - * Verify EC_Group domain - * @returns true if group is valid. false otherwise - */ - bool verify_group(RandomNumberGenerator& rng, - bool strong = false) const; - - bool operator==(const EC_Group& other) const; - - /** - * Return PEM representation of named EC group - * Deprecated: Use EC_Group(name).PEM_encode() if this is needed - */ - static std::string BOTAN_DEPRECATED("See header comment") PEM_for_named_group(const std::string& name); - - /** - * Return a set of known named EC groups - */ - static const std::set<std::string>& known_named_groups(); - - /* - * For internal use only - */ - static std::shared_ptr<EC_Group_Data> EC_group_info(const OID& oid); - - static size_t clear_registered_curve_data(); - - private: - static EC_Group_Data_Map& ec_group_data(); - - static std::shared_ptr<EC_Group_Data> BER_decode_EC_group(const uint8_t bits[], size_t len); - - static std::shared_ptr<EC_Group_Data> - load_EC_group_info(const char* p, - const char* a, - const char* b, - const char* g_x, - const char* g_y, - const char* order, - const OID& oid); - - // Member data - const EC_Group_Data& data() const; - std::shared_ptr<EC_Group_Data> m_data; - }; - -inline bool operator!=(const EC_Group& lhs, - const EC_Group& rhs) - { - return !(lhs == rhs); - } - -// For compatibility with 1.8 -typedef EC_Group EC_Domain_Params; - -} - -#endif |