跳转到内容

OpenSSL/EC GROUP new

来自维基教科书,自由的教科书

库中包含两种形式的椭圆曲线,它们值得关注。第一种形式是在素数域 Fp 上定义的。Fp 的元素是 0 到 p-1 之间的整数,其中 p 是素数。这将为我们提供以下修正后的椭圆曲线方程

y^2 mod p = x^3 +ax + b mod p

第二种形式是在二进制域 F2^m 上定义的,其中域的元素是长度最多为 m 位的整数。对于这种形式,椭圆曲线方程被修改为

y^2 + xy = x^3 + ax^2 + b (where b != 0)

可以使用 EC_GROUP_new 创建一个新的曲线,使用由传递的 EC_METHOD 参数提供的实现(参见 EC_GFp_simple_method)。然后,需要调用 EC_GROUP_set_curve_GFp 或 EC_GROUP_set_curve_GF2m(视情况而定)来创建一个分别在 Fp 上或在 F2^m 上定义的曲线。

EC_GROUP_set_curve_GFp 为存储在 group 中的 Fp 上的曲线设置曲线参数 pab。EC_group_get_curve_GFp 获取先前设置的曲线参数。

EC_GROUP_set_curve_GF2m 为 F2^m 上的曲线设置等效的曲线参数。在这种情况下,p = 2^m。EC_group_get_curve_GF2m 获取先前设置的曲线参数。

函数 EC_GROUP_new_curve_GFp 和 EC_GROUP_new_curve_GF2m 是调用 EC_GROUP_new 和相应的 EC_group_set_curve 函数的快捷方式。将使用适当的默认实现方法。

虽然可以使用上述函数来创建任何曲线,但库中也提供了一些预定义的曲线。要获取所有预定义曲线的列表,请调用函数 EC_get_builtin_curves。参数 r 应为大小为 nitems 的 EC_builtin_curve 结构数组。该函数将用有关内置曲线的的信息填充 r 数组。如果 nitems 小于可用的曲线总数,则将返回前 nitems 条曲线。否则,将提供曲线总数。返回值是可用的曲线总数(无论该数字是否已填充到 r 中)。传递一个 NULL r 或将 nitems 设置为 0 除了返回可用的曲线总数之外不会做任何事情。EC_builtin_curve 结构的定义如下

typedef struct { 
       int nid;
       const char *comment;
       } EC_builtin_curve;

每个 EC_builtin_curve 项都有一个唯一的整数 id (nid) 和一个描述曲线的可读注释字符串。

要构建一个内置曲线,请使用函数 EC_GROUP_new_by_curve_name 并提供要构建的曲线的 nid

EC_GROUP_free 释放与 EC_GROUP 关联的内存。

EC_GROUP_clear_free 销毁 EC_GROUP 中保存的任何敏感数据,然后释放其内存。

返回值

[编辑 | 编辑源代码]

所有 EC_GROUP_new* 函数都会返回一个指向新构造的组的指针,或者在发生错误时返回 NULL。

EC_get_builtin_curves 返回可用的内置曲线数量。

EC_GROUP_set_curve_GFp、EC_GROUP_get_curve_GFp、EC_GROUP_set_curve_GF2m、EC_GROUP_get_curve_GF2m 在成功时返回 1,在发生错误时返回 0。

华夏公益教科书