如何在 OpenSSL 1.1.x 中访问 BIGNUM 的成员“top”?

How do I access the member `top` of a BIGNUM in OpenSSL 1.1.x?

我目前正在尝试将旧的 C++ 项目从 OpenSSL 1.0.2 移植到 OpenSSL 1.1.1。值得注意的是,这不是我的代码,而是来自一个开源项目,我无法确切地说出这部分应该做什么。 一个文件使用了这段代码(对此进行了简化post):

BIGNUM *d; //Assume this is a valid, populated BIGNUM
int x = d->top;

不幸的是,BIGNUM 结构现在在 OpenSSL 1.1.x 中是不透明的,这意味着它的成员 top 不能再被直接访问。 话虽如此,我有几个问题:

  1. 是否有我可以用来访问 top 的替代品?
  2. top代表什么? (IIRC 它持有 bignum 的 MSB,但我找不到任何地方可以确认)
  3. 否则,有什么办法可以完全避免使用 top

有问题的代码可用 here,第 196 行是 d->top 的第一个实例所在的位置。 整个项目位于in this repository.

您链接的完整示例将 BIGNUM(RSA d 指数)中的位复制到不同的结构中。它不仅访问 d->top(已使用块的数量),而且访问 d->d(指向实际块的指针)作为下一行中 memcpy 的来源。

复制 BIGNUM 位的规范方法是 bn2bin

关于您的具体问题:

  1. 一般来说,不会,因为它的语义指的是内部表示。但是,您可以根据您已经可以访问的 BIGNUM 位数轻松计算出 所需的 大小。
  2. The number of chunks used to store the BIGNUM
  3. 通过使用 export function.
  4. 将函数导出到适当大小的目标缓冲区