概述
首先来看怎样新建一个大整数。
以下两种方式中的任意一种都可以新建一个大整数。
- 方法1:
首先象定义普通数据类型一样定义一个大整数a:
BIGNUM a;
然后用初始化函数void BN_init(BIGNUM *a)作初始化:
BN_init(&a);
- 方法2:
首先象定义指向普通数据类型的指针一样定义一个指向大整数的指针a:
BIGNUM *a;
然后调用新建大整数函数BIGNUM *BN_new(void),将函数返回的大整数地址赋给a:
a=BN_new();
上述方法中涉及的两个函数,其详细信息如下:
───────────────────────────────────────
void BN_init(BIGNUM *a)
功能: 初始化大整数a,且让a中信息全部为0。
输入: a
输出: -
返回: —
出处: bn_lib.c
备注: 只能对BIGNUM a这样申明的大整数进行初始化;
不能对BIGNUM * a这样申明的大整数进行初始化。
───────────────────────────────────────
而对BIGNUM * a申明的大整数就需要用到新建大整数函数BN_new。该函数详细信息如下:
───────────────────────────────────────
BIGNUM *BN_new(void)
功能: 新建一个大整数
输入: -
输出: -
返回: 新建大整数的地址
出处: bn_lib.c
备注: 新建大整数中的信息全部置0,但flag除外。
属性值flag置为BN_FLG_MALLOCED(其值定义为1)。
───────────────────────────────────────
关于这个属性值flag有必要交代一下。flag有多种取值,这里只简单介绍其中几个:0、BN_FLG_MALLOCED(其值定义为1)、BN_FLG_STATIC_DATA(其值定义为2)、。
- flag=0:如果用方法1——BN_init新建大整数,就将其flag值置为0;
- flag=BN_FLG_MALLOCED:如果用方法2——BN_new新建大整数,就将其flag值置为BN_FLG_MALLOCED。
- flag=BN_FLG_STATIC_DATA:此时的大整数为静态变量。
有关flag的详细取值可参见[4,5]。
如何知道大整数是否具有上述某个属性呢?可以调用BN_get_flags函数:
───────────────────────────────────────
#define BN_get_flags(BIGNUM *b, int n)
功能: 判断大整数是否带有n属性
输入: b,n
输出: —
返回: n【b带有属性n】或者0【b无属性n】
出处: bn.h
备注: 宏定义。#define BN_get_flags(b,n) ((b)→flags&(n))
───────────────────────────────────────
接下来谈一谈大整数的释放。
- 用方法1——BN_init新建的大整数,无法人为地释放。只有当该大整数所在的函数执行完毕后,才能同别的数据类型一起被释放。
- 用方法2——BN_new新建的大整数,可以人为地释放。调用专门的大整数释放函数BN_free即可:
BN_free(a);
在这里简单解释一下BN_free函数:
───────────────────────────────────────
void BN_free(BIGNUM *a)
功能: 释放大整数
输入: a
输出: -
返回: —
出处: bn_lib.c
───────────────────────────────────────
最后
以上就是单薄盼望为你收集整理的OpenSSL密码库算法笔记——第0.2.1章 新建与释放大整数的全部内容,希望文章能够帮你解决OpenSSL密码库算法笔记——第0.2.1章 新建与释放大整数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复