Skip to main content

15_key_encrypt_export/
15_key_encrypt_export.rs

1mod support;
2
3use security::{Certificate, EncryptionAlgorithm, KeyType, PrivateKey, SignatureAlgorithm};
4
5fn main() -> Result<(), Box<dyn std::error::Error>> {
6    let private_key = PrivateKey::from_data(
7        &std::fs::read("tests/fixtures/test-key-rsa.pkcs1.der")?,
8        KeyType::Rsa,
9        2048,
10    )?;
11    let public_key = private_key.public_key()?;
12
13    let ciphertext = public_key.encrypt(
14        EncryptionAlgorithm::RsaEncryptionOaepSha256,
15        b"security-rs example",
16    )?;
17    let plaintext =
18        private_key.decrypt(EncryptionAlgorithm::RsaEncryptionOaepSha256, &ciphertext)?;
19    assert_eq!(plaintext, b"security-rs example");
20
21    let signature = private_key.sign(
22        SignatureAlgorithm::RsaSignatureMessagePkcs1v15Sha256,
23        b"security-rs example",
24    )?;
25    let certificate = Certificate::from_pem(&std::fs::read("tests/fixtures/test-cert.pem")?)?;
26    assert!(certificate.public_key()?.verify_signature(
27        SignatureAlgorithm::RsaSignatureMessagePkcs1v15Sha256,
28        b"security-rs example",
29        &signature,
30    )?);
31
32    println!(
33        "key_type_id={} block_size={} exported_private={} exported_public={}",
34        PrivateKey::type_id(),
35        public_key.block_size(),
36        private_key.external_representation()?.len(),
37        public_key.external_representation()?.len(),
38    );
39
40    Ok(())
41}