OpenSSL密码库算法笔记——第0.2.2章 大整数赋值

在新建了一个大整数以后,就可以开始设置这个大整数了。比如给这个大整数赋值——有可能是复制前面已有的某个大整数的所有相关数据,也有可能是将大整数设置为一些特殊的数,比如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置为负数。即不会出现设置出负零的情况。

───────────────────────────────────────

你可能感兴趣的:(openssl,密码,密码技术与应用)