第十一章 大数 / 11.2 openssl大数表示

crypto/bn.h中定义了大数的表示方式,如下:

struct bignum_st

{

       BN_ULONG *d;

       int top;   

       int dmax;

       int neg;

       int flags;

};

各项意义如下:

dBN_ULONG(应系统而异,win32下为4个字节)数组指针首地址,大数就存放在这里面,不过是倒放的。比如,用户要存放的大数为12345678000(通过BN_bin2bn放入),则d的内容如下:0x30 0x30 0x30 0x38 0x37 0x36 0x35 0x34 0x33 0x32 0x31

top:用来指明大数占多少个BN_ULONG空间,上例中top3

dmaxd数组的大小。

neg:是否为负数,如果为1,则是负数,为0,则为正数。

flags:用于存放一些标记,比如flags含有BN_FLG_STATIC_DATA时,表明d的内存是静态分配的;含有BN_FLG_MALLOCED时,d的内存是动态分配的。