这里简单介绍两个比特操作函数——判断大整数的某一比特是否为零和设置大整数的某一比特为1。
在模指数运算里面需要判断指数的某一位是不是1,这时候就需要:
───────────────────────────────────────
int BN_is_bit_set(const BIGNUM *a, int n)
功能: 判断大整数第n比特是否为1
输入: a,n
输出: -
返回: 1【a的第n比特为1】 或者 0【a的第n比特为0,或者出现异常】
出处: bn.h
───────────────────────────────────────
有时候需要将大整数的某一比特设置为1,比如想将值为0的大整数a设置为1024就只需要用BN_set_bit(&a, 10)。
───────────────────────────────────────
int BN_set_bit(BIGNUM *a, int n)
功能: 设置大整数第n比特为1。
输入: a,n
输出: a 【设置比特后的a】
返回: 1【正常】or 0【出错】
出处: bn_lib.c
───────────────────────────────────────
大整数的二进制展开在不少地方会涉及,而二进制展开长度就更为重要,比如模指数运算时。大整数是由字组成的,所以要知道大整数的二进制展开长度首先得弄清楚怎样计算一个字的二进制展开长度。
───────────────────────────────────────
int BN_num_bits_word(BN_ULONG w)
功能: 计算字的二进制展开长度
输入: w
输出: -
返回: 字的二进制展开长度
出处: bn_lib.c
───────────────────────────────────────
知道了字的二进制展开长度后,大整数的二进制展开长度也就知道了:
大整数的二进制展开长度 = 最高字的二进制展开长度 + (大整数的字长-1)×32。
───────────────────────────────────────
int BN_num_bits(const BIGNUM *a)
功能: 计算大整数的二进制展开长度
输入: a
输出: -
返回: 大整数的二进制展开长度
出处: bn_lib.c
───────────────────────────────────────