crypto/bn.h中定义了大数的表示方式,如下:
struct bignum_st
{
BN_ULONG *d;
int top;
int dmax;
int neg;
int flags;
};
各项意义如下:
d:BN_ULONG(应系统而异,win32下为4个字节)数组指针首地址,大数就存放在这里面,不过是倒放的。比如,用户要存放的大数为12345678000(通过BN_bin2bn放入),则d的内容如下:0x30 0x30 0x30 0x38 0x37 0x36 0x35 0x34 0x33 0x32 0x31;
top:用来指明大数占多少个BN_ULONG空间,上例中top为3。
dmax:d数组的大小。
neg:是否为负数,如果为1,则是负数,为0,则为正数。
flags:用于存放一些标记,比如flags含有BN_FLG_STATIC_DATA时,表明d的内存是静态分配的;含有BN_FLG_MALLOCED时,d的内存是动态分配的。