如何在 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
不能再被直接访问。
话虽如此,我有几个问题:
- 是否有我可以用来访问
top
的替代品?
top
代表什么? (IIRC 它持有 bignum 的 MSB,但我找不到任何地方可以确认)
- 否则,有什么办法可以完全避免使用
top
?
有问题的代码可用 here,第 196
行是 d->top
的第一个实例所在的位置。
整个项目位于in this repository.
您链接的完整示例将 BIGNUM
(RSA d 指数)中的位复制到不同的结构中。它不仅访问 d->top
(已使用块的数量),而且访问 d->d
(指向实际块的指针)作为下一行中 memcpy
的来源。
复制 BIGNUM
位的规范方法是 bn2bin。
关于您的具体问题:
- 一般来说,不会,因为它的语义指的是内部表示。但是,您可以根据您已经可以访问的
BIGNUM
位数轻松计算出 所需的 大小。
- The number of chunks used to store the
BIGNUM
- 通过使用 export function.
将函数导出到适当大小的目标缓冲区
我目前正在尝试将旧的 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
不能再被直接访问。
话虽如此,我有几个问题:
- 是否有我可以用来访问
top
的替代品? top
代表什么? (IIRC 它持有 bignum 的 MSB,但我找不到任何地方可以确认)- 否则,有什么办法可以完全避免使用
top
?
有问题的代码可用 here,第 196
行是 d->top
的第一个实例所在的位置。
整个项目位于in this repository.
您链接的完整示例将 BIGNUM
(RSA d 指数)中的位复制到不同的结构中。它不仅访问 d->top
(已使用块的数量),而且访问 d->d
(指向实际块的指针)作为下一行中 memcpy
的来源。
复制 BIGNUM
位的规范方法是 bn2bin。
关于您的具体问题:
- 一般来说,不会,因为它的语义指的是内部表示。但是,您可以根据您已经可以访问的
BIGNUM
位数轻松计算出 所需的 大小。 - The number of chunks used to store the
BIGNUM
- 通过使用 export function. 将函数导出到适当大小的目标缓冲区