openssl使用
BIGNUM(大数)
BIGNUM是 OpenSSL 里用于存储大整数的结构体,远超普通的int或long,适合密码学中用到的大数运算。- 常用操作函数示例:
BN_new()— 创建一个新的大数对象。BN_free()— 释放大数对象。BN_hex2bn(BIGNUM **bn, const char *hex)— 从十六进制字符串创建大数。BN_bn2hex(const BIGNUM *bn)— 把大数转成十六进制字符串。BN_mod_inverse()— 计算模逆。BN_mod_mul()— 模乘。BN_mod_add()— 模加。BN_rand_range()— 生成范围内随机数。
BN_CTX
是大数计算时的临时变量池,避免频繁申请释放内存。
使用流程:
BN_CTX_new()创建。BN_CTX_start()开始申请临时变量。BN_CTX_get()依次申请临时变量(BIGNUM指针)。- 计算结束后用
BN_CTX_end()和BN_CTX_free()清理。
EC_GROUP
- 代表一个椭圆曲线参数集合,例如素域p,系数a,b,基点G,阶n等。
EC_GROUP_new_curve_GFp(p, a, b, ctx)— 根据参数创建一个椭圆曲线。EC_GROUP_set_generator(group, generator, order, cofactor)— 设置曲线的生成元和阶。
EC_POINT
- 曲线上一个点,类似二维坐标 (x,y)。
EC_POINT_new(group)— 创建一个点对象。EC_POINT_set_affine_coordinates_GFp(group, point, x, y, ctx)— 设定点的坐标(注意这个函数从 OpenSSL 3.0 开始被标记为废弃)。EC_POINT_get_affine_coordinates_GFp(group, point, x, y, ctx)— 获取点的坐标。EC_POINT_mul(group, R, k, Q, l, ctx)— 计算R = k*G + l*Q(点乘运算)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 infinite_blog!
