在新建了一个大整数以后,就可以开始设置这个大整数了。比如给这个大整数赋值——有可能是复制前面已有的某个大整数的所有相关数据,也有可能是将大整数设置为一些特殊的数,比如1、0等,当然你也可以自己输入相关数据。
将一个大整数的相关数据复制给另外一个大整数可以使用BN_copy:
───────────────────────────────────────
BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b)
功能: 大整数复制。
输入: b
输出: a ← b
返回: a
出处: bn_lib.c
───────────────────────────────────────
另外一种将经常出现的情况就是将大整数设置为一些特殊的数。首先来看看将大整数设置成一个小数——字。
───────────────────────────────────────
int BN_set_word(BIGNUM *a, BN_ULONG w)
功能: 将字赋给大整数
输入: w
输出: a ← w
返回: 1【正常】or 0【出错】
出处: bn_lib.c
───────────────────────────────────────
很多时候会将大整数设置为更特殊的数——1或者0,因此就有必要编写两个专门的函数(宏定义)来实现这些功能。下面这个宏定义是将大整数置为1。
───────────────────────────────────────
#define BN_one(BIGNUM *a)
功能: 将大整数置为1
输入: -
输出: a ← 1
返回: 1【正常】or 0【出错】
出处: bn.h
备注: 宏定义。#define BN_one(a) (BN_set_word((a),1))。
───────────────────────────────────────
下面将要介绍的BN_value_one与BN_one的作用类似,它们的区别是:你可以将BN_value_one()当成大数1来直接使用,而不需要象BN_one那样事先声明一个大数。举个例子,BN_copy(&b, BN_value_one())就等价于BN_one(&b)。
───────────────────────────────────────
const BIGNUM *BN_value_one(void)
功能: 给出一个大数1
输入: -
输出: -
返回: 大数1
出处: bn_lib.c
───────────────────────────────────────
接下来看看将大整数设置为0的宏定义。
───────────────────────────────────────
#define BN_zero(BIGNUM * a)
功能: 将大整数赋值为零。
输入: -
输出: a ← 0
返回: 1【正常】or 0【出错】
出处: bn.h
备注: 宏定义。#define BN_zero(a) (BN_set_word((a),0)
───────────────────────────────────────
定义的大整数都是带符号的,neg值为0时表示正数,neg值为1时表示负数。当需要修改大整数的符号时调用BN_set_negative。比如想将大整数b设置为-1,可先BN_one(&b),再BN_set_negative(&b, 1)。
───────────────────────────────────────
void BN_set_negative(BIGNUM *a, int b)
功能: 设置大整数符号
输入: a,b【用来设置大整数的符号】
输出: a【设置符号后的a】
返回: -
出处: bn_lib.c
备注: 在a≠0,b≠0时,将a置为负数。即不会出现设置出负零的情况。
───────────────────────────────────────