summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2022-01-07 14:39:14 +0100
committerJustus Winter <justus@sequoia-pgp.org>2023-01-12 16:02:29 +0100
commitd257d46258b00b1368582832242c6265cbeb3268 (patch)
tree7a1af5109be3378270483c10432ab8439cea7af0
parent78389399b30de442715bb505538fcfd91941ad0f (diff)
XXX: Test vector generation.justus/openpgp-next-argon2
-rw-r--r--openpgp/examples/test-vectors-argon2.rs60
1 files changed, 60 insertions, 0 deletions
diff --git a/openpgp/examples/test-vectors-argon2.rs b/openpgp/examples/test-vectors-argon2.rs
new file mode 100644
index 00000000..1e691d76
--- /dev/null
+++ b/openpgp/examples/test-vectors-argon2.rs
@@ -0,0 +1,60 @@
+use std::io::{self, Write};
+
+use anyhow::Context;
+
+use sequoia_openpgp as openpgp;
+
+use openpgp::{
+ crypto::*,
+ fmt::hex,
+ packet::prelude::*,
+ serialize::{Serialize, stream::*},
+ types::*,
+};
+
+const PASSWORD: &str = "password";
+const MESSAGE: &[u8] = b"Hello, world!";
+
+fn main() -> openpgp::Result<()> {
+ let password = PASSWORD.into();
+
+ for sym_algo in &[SymmetricAlgorithm::AES128,
+ SymmetricAlgorithm::AES192,
+ SymmetricAlgorithm::AES256] {
+ let sk = SessionKey::new(sym_algo.key_size()?);
+
+ let mut sink = io::stdout();
+ let message = Message::new(&mut sink);
+ let mut message = Armorer::new(message)
+ .add_header("Comment", format!("Encrypted using {}", sym_algo))
+ .add_header("Comment", format!("Session key: {}", hex::encode(&sk)))
+ .build()?;
+
+ let mut salt = Default::default();
+ openpgp::crypto::random(&mut salt);
+ let skesk4 = SKESK4::with_password(*sym_algo,
+ *sym_algo,
+ S2K::Argon2 {
+ salt,
+ t: 1,
+ p: 4,
+ m: 21,
+ },
+ &sk, &password)?;
+ Packet::from(skesk4).serialize(&mut message)?;
+
+ let message = Encryptor::with_session_key(message, *sym_algo, sk)?
+ .build().context("Failed to create encryptor")?;
+
+ let mut message = LiteralWriter::new(message).build()
+ .context("Failed to create literal writer")?;
+
+ message.write_all(MESSAGE)?;
+
+ // Finally, finalize the OpenPGP message by tearing down the
+ // writer stack.
+ message.finalize()?;
+ }
+
+ Ok(())
+}