Reputation: 29
I want to call openssl::sign::Signer::sign
, which has the signature:
pub fn sign(&self, buf: &mut [u8]) -> Result<usize, ErrorStack>
I'm trying to hand over buf
. How to I make it &mut [u8]
?
cargo.toml
[dependencies]
openssl = { version = "0.10", features = ["vendored"] }
src/main.rs
use openssl::{base64, sign::Signer};
fn main() {
let mut buffer = [];
let str = base64::encode_block(signer.sign(&mut buffer));
}
But get an error:
openssl::base64::encode_block(signer.sign(&mut buffer));
^^^^^^^^^^^^^^^^^^^ expected `&[u8]`, found enum `std::result::Result`
Upvotes: 1
Views: 2487
Reputation: 5545
I'm not familiar with this crate, but base64::encode_block
expects &[u8]
, while the return value of Signer::sign
is a Result
that returns the number of bytes written as usize
.
I'm not sure if the number of bytes written is what you want to encode?
If you want to encode buffer
to base64
, you could do:
use openssl;
fn main() {
let mut buf = [104, 101, 108, 108, 111];
let encoded = openssl::base64::encode_block(&buf);
println!("{}", encoded);
}
That should give you:
aGVsbG8=
Which is hello
as base64
.
Or, as an example, if you want to sign
the given buf
and encode that as base64
:
use openssl::{base64, hash::MessageDigest, pkey::PKey, rsa::Rsa, sign::Signer};
fn main() {
let keypair = Rsa::generate(2048).unwrap();
let keypair = PKey::from_rsa(keypair).unwrap();
let signer = Signer::new(MessageDigest::sha256(), &keypair).unwrap();
let mut buf = [104, 101, 108, 108, 111].repeat(52);
let written = signer.sign(&mut buf).unwrap();
println!("bytes written: {}", written);
let encoded = base64::encode_block(&buf);
println!("base64: {}", encoded);
}
Which returns:
bytes written: 256
base64: wB4lBbyzpfRPInxhwm0XVKI3dQYqcUZWNdKyb4RTGDUmwq1DDDbQjMRmFBobRse3pNOxoMy+QQNSXsgI46b75hPfkar9TUowrIGk4Y+ZWWX/cwNJCJazC1dfanP4uft0fzpYJKMSfJTAxswccu1g4yT+u0V5yq+eHbeGDJ+bF2MMhCPds7wGjJguxO0e4wx+HQdVGbU9jrHQ38oIYTChG92iKLRpciiyB8vrbNEBcNNi4hlw6U0sUdz6scpXceREdPFVA6wr0otY3wSZLfcIeKELoBQkR2KPNTTCROreVJ49tXwiQdGe7Ky0NDeNba2H5tKu3uLAtAiG/hVoKEAJG2VsbG8=
Upvotes: 3