我目前正在尝试为RSA实现实现一些测试向量,我想通过OpenSSL v1.1.0f实现测试它们。但是,当我尝试设置密钥(对于e,n p,q或d)时,我有以下错误:
erreur:取消引用指向不完整类型的指针«RSA {alias struct rsa_st}»
我的代码如下:
int rsa_encrypt(byte *in, size_t in_len, byte *out, const char *n, const char *e, char padding){
int err = -1;
RSA *keys = NULL;
keys = RSA_new();
BN_hex2bn(&keys->n, n); // error here
BN_hex2bn(&keys->e, e); // and here
out = malloc(RSA_size(keys));
if (padding == OAEP ) {
err = RSA_public_encrypt(in_len, in, out, keys, RSA_PKCS1_OAEP_PADDING);
}
else if (padding == v1_5) {
err = RSA_public_encrypt(in_len, in, out, keys, RSA_PKCS1_PADDING);
}
RSA_free(keys);
return err;
}
其中n和e是以hexa表示我的参数的字符串。
我已经找到了与RSA类型相对应的结构,并找到了this。 我不明白为什么我不能设置n和e ...任何想法?
答案 0 :(得分:2)
OpenSSL结构在1.1.x中是不透明的,你不能谈论它们的字段。除其他外,它允许在服务版本期间添加新的结构字段,因为调用者代码无法知道字段偏移。
对于1.1.x,你需要做类似于
的事情BN* bnN = NULL;
BN* bnE = NULL;
RSA* keys = RSA_new();
BN_hex2bn(&bnN, n);
BN_hex2bn(&bnE, e);
RSA_set0_key(keys, bnN, bnE, NULL);
...
RSA_free(keys);
// do not free bnN or bnE, they were freed by RSA_free.
请注意,我遗漏了必要的错误检查。