跳转到内容

OpenSSL/EC 密钥新

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

EC_KEY 表示一个公钥和(可选)一个关联的私钥。可以通过调用 EC_KEY_new 来构造一个新的 EC_KEY(没有关联的曲线)。新创建的 EC_KEY 的引用计数最初设置为 1。可以通过调用 EC_KEY_set_group 将曲线与 EC_KEY 关联。

或者,可以通过调用 EC_KEY_new_by_curve_name 并提供关联曲线的 nid 来构造一个新的 EC_KEY。有关曲线名称的说明,请参阅 EC_GROUP_new。此函数只是将调用封装到 EC_KEY_new 和 EC_GROUP_new_by_curve_name 中。

调用 EC_KEY_free 会减少 EC_KEY 对象的引用计数,如果它已降至零,则会释放与之关联的内存。

EC_KEY_copy 将src 中的 EC_KEY 的内容复制到dest 中。

EC_KEY_dup 创建一个新的 EC_KEY 对象并将ec_key 复制到其中。

EC_KEY_up_ref 会增加与 EC_KEY 对象关联的引用计数。

EC_KEY_generate_key 为提供的eckey 对象生成一个新的公钥和私钥。eckey 必须在调用此函数之前与一个 EC_GROUP 对象关联。私钥是一个随机整数(0 < priv_key < order,其中 order 是 EC_GROUP 对象的阶)。公钥是通过将曲线的生成元乘以私钥来计算的曲线上的 EC_POINT。

EC_KEY_check_key 对 EC_KEY 对象执行各种健全性检查,以确认其有效性。

EC_KEY_set_public_key_affine_coordinates 基于其仿射坐标设置key 的公钥,即它根据提供的xy 值构造一个 EC_POINT 对象,并将公钥设置为这个 EC_POINT。它还会对密钥执行某些健全性检查,以确认其有效性。

函数 EC_KEY_get0_group、EC_KEY_set_group、EC_KEY_get0_private_key、EC_KEY_set_private_key、EC_KEY_get0_public_key 和 EC_KEY_set_public_key 分别获取和设置key 的 EC_GROUP 对象、私钥和 EC_POINT 公钥。

函数 EC_KEY_get_enc_flags 和 EC_KEY_set_enc_flags 获取和设置key 的编码标志的值。目前定义了两个编码标志 - EC_PKEY_NO_PARAMETERS 和 EC_PKEY_NO_PUBKEY。这些标志定义了key 如何在调用 i2d_ECPrivateKey 时转换为 ASN1 的行为。如果设置了 EC_PKEY_NO_PARAMETERS,则不会将曲线的公共参数与私钥一起编码。如果设置了 EC_PKEY_NO_PUBKEY,则不会将公钥与私钥一起编码。

函数 EC_KEY_get_conv_form 和 EC_KEY_set_conv_form 获取和设置密钥的 point_conversion_form。有关 point_conversion_forms 的说明,请参阅 EC_POINT_new

EC_KEY_insert_key_method_data 和 EC_KEY_get_key_method_data 使调用者能够将与正在使用的椭圆曲线方案相关的任意附加数据与 EC_KEY 对象关联。这些数据被 ec 库视为一个“黑盒”。要由 EC_KEY_insert_key_method_data 存储的数据在data 参数中提供,该参数必须具有与复制、释放和“清除释放”数据项相关的函数。如果随后发出 EC_KEY_get_key_method_data 调用,则必须再次提供复制、释放和“清除释放”数据项的函数,并且它们必须与插入数据项时的函数相同。

EC_KEY_set_flags 在 EC_KEY 对象上设置flags 参数中的标志。任何已设置的标志都保持设置。当前定义的标准标志是 EC_FLAG_NON_FIPS_ALLOW 和 EC_FLAG_FIPS_CHECKED。此外,还有标志 EC_FLAG_COFACTOR_ECDH,它是特定于 ECDH 的,并在 ecdh.h 中定义。EC_KEY_get_flags 返回为此 EC_KEY 设置的当前标志。EC_KEY_clear_flags 会清除由flags 参数指示的标志。所有其他标志都保留在它们现有的状态中。

EC_KEY_set_asn1_flag 会在底层 EC_GROUP 对象上设置 asn1_flag(如果设置)。有关 asn1_flag 的更多信息,请参阅 EC_GROUP_copy

EC_KEY_precompute_mult 会存储底层 EC_GROUP 生成元的倍数,以加快点乘运算。另请参阅 EC_POINT_add

返回值

[编辑 | 编辑源代码]

EC_KEY_new、EC_KEY_new_by_curve_name 和 EC_KEY_dup 会返回指向新创建的 EC_KEY 对象的指针,或者在出错时返回 NULL。

EC_KEY_get_flags 会以整数的形式返回与 EC_KEY 对象关联的标志。

EC_KEY_copy 会返回指向目标密钥的指针,或者在出错时返回 NULL。

EC_KEY_up_ref、EC_KEY_set_group、EC_KEY_set_private_key、EC_KEY_set_public_key、EC_KEY_precompute_mult、EC_KEY_generate_key、EC_KEY_check_key 和 EC_KEY_set_public_key_affine_coordinates 在成功时返回 1,在出错时返回 0。

EC_KEY_get0_group 会返回与 EC_KEY 关联的 EC_GROUP。

EC_KEY_get0_private_key 会返回与 EC_KEY 关联的私钥。

EC_KEY_get_enc_flags 会返回 EC_KEY 的当前编码标志的值。

EC_KEY_get_conv_form 会返回 EC_KEY 的 point_conversion_form。

华夏公益教科书