user1641854
user1641854

Reputation:

Access BIGNUM bits in OpenSSL 1.1?

Prior 1.1 version of OpenSSL API I had access to raw representation of BIGNUM types through "d" field in 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;
           };

In my program I need to get lowest byte from BIGNUM after some computations - it is quite easily - simply as:

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

With API of OpenSSL version 1.1 many BN internals have been made opaque - I cannot get direct access to representation of BIGNUM. I still can get raw representation, but with additional copying - either BN_bn2bin or BN_mask_bits.

There is any way to access lowest byte without extra copying?

Upvotes: 1

Views: 1437

Answers (1)

jww
jww

Reputation: 102346

There is any way to access lowest byte without extra copying?

Yes and no. If the BIGNUM is smaller that 0xffffffff, then use BN_get_word(bn) & 0xff;.

If your BIGNUM is larger than 0xffffffff, then use BN_bn2binpad to copy out a range of bytes.

Also see Issue 2001, Please provide BIGNUM And, Or and Xor ops in the OpenSSL bug tracker.

Upvotes: 1

Related Questions