跳转到内容

OpenSSL/EC POINT new

来自Wikibooks,开放世界中的开放书籍

EC_POINT 代表曲线上的一个点。通过调用函数 EC_POINT_new 并提供点相关的组对象来构造一个新点。

EC_POINT_free 释放与 EC_POINT 相关的内存。

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

EC_POINT_copy 将点src复制到dst中。srcdst必须使用相同的 EC_METHOD。

EC_POINT_dup 创建一个新的 EC_POINT 对象,并将内容从src复制到新创建的 EC_POINT 对象。

EC_POINT_method_of 获取与point关联的 EC_METHOD。

曲线上有效的点是无穷远处的特殊点。通过调用 EC_POINT_set_to_infinity 将点设置为无穷远点。

点的仿射坐标用其 x 和 y 位置来描述一个点。函数 EC_POINT_set_affine_coordinates_GFp 和 EC_POINT_set_affine_coordinates_GF2m 设置在group中给定的曲线上定义的点pxy坐标。

除了仿射坐标外,还可以用雅可比射影坐标(仅适用于 Fp 曲线)来描述一个点。雅可比射影坐标表示为三个值 x、y 和 z。在此坐标系中工作可以提供更高效的点乘法运算。雅可比射影坐标和仿射坐标之间存在映射关系。雅可比射影坐标 (x, y, z) 可以写成仿射坐标 (x/(z^2), y/(z^3))。从雅可比射影坐标到仿射坐标的转换很简单。坐标 (x, y) 映射到 (x, y, 1)。要设置或获取射影坐标,分别使用 EC_POINT_set_Jprojective_coordinates_GFp 和 EC_POINT_get_Jprojective_coordinates_GFp。

点也可以用它们的压缩坐标来描述。对于点 (x, y),对于 x 的任何给定值,只要该点在曲线上,y 就只有两个可能的值。因此,可以使用 EC_POINT_set_compressed_coordinates_GFp 和 EC_POINT_set_compressed_coordinates_GF2m 函数设置一个点,其中x是 x 坐标,y_bit是值 0 或 1,用于标识应使用两个可能的 y 值中的哪一个。

此外,EC_POINT 可以转换为各种外部表示形式,反之亦然。支持的表示形式包括八位字节字符串、BIGNUM 和十六进制。外部表示形式的格式由 point_conversion_form 描述。有关 point_conversion_form 的描述,请参阅EC_GROUP_copy。八位字节字符串存储在缓冲区中,以及相关的缓冲区长度。保存在 BIGNUM 中的点是通过将点转换为八位字节字符串,然后将该八位字节字符串转换为 BIGNUM 整数来计算的。十六进制格式的点存储在以 NULL 结尾的字符字符串中,其中每个字符都是可打印值 0-9 或 A-F(或 a-f)之一。

返回值

[编辑 | 编辑源代码]

EC_POINT_new 和 EC_POINT_dup 返回新分配的 EC_POINT,或者在出错时返回 NULL。

以下函数在成功时返回 1,在出错时返回 0:EC_POINT_copy、EC_POINT_set_to_infinity、EC_POINT_set_Jprojective_coordinates_GFp、EC_POINT_get_Jprojective_coordinates_GFp、EC_POINT_set_affine_coordinates_GFp、EC_POINT_get_affine_coordinates_GFp、EC_POINT_set_compressed_coordinates_GFp、EC_POINT_set_affine_coordinates_GF2m、EC_POINT_get_affine_coordinates_GF2m、EC_POINT_set_compressed_coordinates_GF2m 和 EC_POINT_oct2point。

EC_POINT_method_of 返回与提供的 EC_POINT 关联的 EC_METHOD。

EC_POINT_point2oct 返回所需缓冲区的长度,或在出错时返回 0。

EC_POINT_point2bn 返回指向提供的 BIGNUM 的指针,或在出错时返回 NULL。

EC_POINT_bn2point 返回指向提供的 EC_POINT 的指针,或在出错时返回 NULL。

EC_POINT_point2hex 返回指向十六进制字符串的指针,或在出错时返回 NULL。

EC_POINT_hex2point 返回指向提供的 EC_POINT 的指针,或在出错时返回 NULL。

函数 EC_POINT_point2oct、EC_POINT_oct2point、EC_POINT_point2bn、EC_POINT_bn2point、EC_POINT_point2hex 和 EC_POINT_hex2point 分别在 EC_POINT 与以下格式之间进行转换:八位字节字符串、BIGNUM 和十六进制。

函数 EC_POINT_point2oct 必须提供一个足够长的缓冲区来存储八位字节字符串。返回值提供存储的八位字节数。使用 NULL 缓冲区调用该函数不会执行转换,但仍会返回所需的缓冲区长度。

函数 EC_POINT_point2hex 将分配足够的内存来存储十六进制字符串。调用方有责任随后调用 OPENSSL_free() 来释放此内存。

华夏公益教科书