访问OpenSSL 1.1中的BIGNUM位?

时间:2017-08-01 07:46:32

标签: api openssl bignum

OpenSSL API的早期版本1.1我可以通过" d"访问BIGNUM类型的原始表示。 struct bignum_st中的字段:

   struct bignum_st
           {
           BN_ULONG *d;    /* Pointer to an array of 'BN_BITS2' bit chunks. */
           int top;        /* Index of last used d +1. */
           /* The next are internal book keeping for bn_expand. */
           int dmax;       /* Size of the d array. */
           int neg;        /* one if the number is negative */
           int flags;
           };

在我的程序中,我需要在进行一些计算后从BIGNUM获得最低字节 - 很容易 - 只需:

(bn->d[0] & 0xff)

使用OpenSSL 1.1版的API,许多BN内部构件变得不透明 - 我无法直接访问BIGNUM的表示。我仍然可以获得原始表示,但需要额外复制 - BN_bn2binBN_mask_bits

有没有办法在没有额外复制的情况下访问最低字节?

1 个答案:

答案 0 :(得分:1)

  

有没有办法在没有额外复制的情况下访问最低字节?

是和否。如果BIGNUM小于0xffffffff,请使用BN_get_word(bn) & 0xff;

如果您的BIGNUM大于0xffffffff,请使用BN_bn2binpad复制一系列字节。

另请参阅OpenSSL错误跟踪器中的Issue 2001, Please provide BIGNUM And, Or and Xor ops