D 编程:openssl rsa 前向引用编译器错误

问题描述 投票:0回答:2
import std.stdio;
import deimos.openssl.bn;
import deimos.openssl.rsa;

const KEY_SIZE = 1024;

void main(string[] args) {
    if (args.length < 1) {
        writeln("too few arguments");
    }

    RSA* rsa = RSA_new();
    rsa = RSA_generate_key(KEY_SIZE, RSA_F4, null, null);
    if(rsa==null) {
        writeln("failure");
    }
    else {
        writeln("success");

        // error generated by the line below
        if(!BN_generate_prime(rsa.p, (KEY_SIZE/2), 1, null, null, null, null)) {
            writeln("prime_failure");
        }
        else {
            writeln("prime success");
        }

        RSA_free(rsa);
    }   
}

这会导致以下错误:

rsa.d(21): Error: struct rsa_st is forward referenced

每当我尝试访问 rsa 结构中的元素时,都会发生错误。有什么想法吗?

compiler-errors openssl rsa d
2个回答
3
投票

我联系到了一位经常在 github 上更新 OpenSSL Deimos 的人,并得到了他的回复。

基本上,OpenSSL C API 在某些不需要确切定义的地方前向声明结构,并且这些结构已保留在某些 D 模块中。

他请求拉取存储库,他所做的更改将解决您当前的问题。这是链接:

Deimos:openssl 更新


1
投票

我不确定 OpenSSL 绑定是否已完成或经过测试。他们在这里的

dmd 2.057
完全坏了。最初的问题是一个
dmd
bug;在另一个
import deimos.openssl.rsa
openssl
之前移动
import
应该将错误 change 更改为其他内容。这可以通过在受影响的模块中导入 pkcs7 来解决......这会发现另一个错误。

我会在 openssl deimos 项目上提出一个问题。

© www.soinside.com 2019 - 2024. All rights reserved.