OpenSSL密码库算法笔记——第5.1.1章 椭圆曲线点群的定义

下面定义的椭圆曲线点群不仅包含了域的信息和曲线的信息,甚至还包括了很多别的有利于实现的信息。

椭圆曲线点群的定义如下。

typedef struct ec_group_st   EC_GROUP;

struct ec_group_st {

        const EC_METHOD *meth;

        EC_POINT *generator;

        BIGNUM order, cofactor;

        int curve_name;

        int asn1_flag;

        point_conversion_form_t asn1_form;

        unsigned char *seed;

        size_t seed_len;

        EC_EXTRA_DATA *extra_data;

        BIGNUM field;

        unsigned int poly[5];

        BIGNUM a, b;

        int a_is_minus3;

        void *field_data1;

        void *field_data2;

        int (*field_mod_func)(BIGNUM *, const BIGNUM *, const BIGNUM *);             

} /* EC_GROUP */;

现在来介绍下上面列举出的部分参数,这部分介绍可参见代码中的ec.h和ec_lcl.h文件。

  1. const EC_METHOD *meth指出椭圆曲线所用的是那些算法,详情参见§5.1.2。
  2. EC_POINT *generator为基点(EC_POINT的定义参见§5.1.3)。
  3. BIGNUM order, cofactor为基点的阶和相伴因子
  4. point_conversion_form_t asn1_form为点的压缩形式(参见§5.4.5)。
  5. BIGNUM field对素域而言就是特征p。
  6. BIGNUM a, b为曲线参数,即Weierstrass方程中的参数a、b。
  7. int a_is_minus3; 判断a是否为负3,因为a为负3时点的运算可优化(参见§5.4.4)。
  8. void *field_data1, *field_data2和int (*field_mod_func)(BIGNUM *, const BIGNUM *, const BIGNUM *)是为了优化点运算而采取的特殊方法(如Montgomery方法)。

你可能感兴趣的:(openssl)