传递openssl :: rsa :: Rsa作为参数时,类型参数的数量错误

时间:2018-03-22 14:00:28

标签: openssl rust rsa

当我尝试将参数传递给函数时,我收到以下错误。

error[E0243]: wrong number of type arguments: expected 1, found 0
  --> src/main.rs:42:24
   |
42 | fn async_encrypt(rsa: &Rsa, plain: &str) -> String {
   |                        ^^^ expected 1 type argument

我相信这是因为我正在定义一个类型,但我不知道openssl::rsa::Rsa是什么类型而不是它自己。

extern crate openssl;
use openssl::rsa::Rsa;

fn main() {
    let plain = String::from("Well hello");
    let rsa = Rsa::generate(4096).unwrap();
    let cipher = async_encrypt(&rsa, &plain);
}

fn async_encrypt(rsa: &Rsa, plain: &str) -> String {
    //  Do some stuff
}

这里发生了什么?

1 个答案:

答案 0 :(得分:2)

openssl::rsa::Rsa需要参数类型T,该参数类型应为PublicPrivate。反过来,这些类型是用于识别密钥类型的标记。

由于静态方法Rsa::generate产生私钥,您可能需要以下签名:

use openssl::pkey::Private;

fn async_encrypt(rsa: &Rsa<Private>, plain: &str) -> String {
    // ...
}

如果该函数应该适用于公钥和私钥,则可以使其在T上通用:

fn async_encrypt<T>(rsa: &Rsa<T>, plain: &str) -> String {
    // ...
}