mirror of
https://github.com/RustCrypto/signatures
synced 2026-06-21 13:45:42 +00:00
1b47ec5298
This renames the old `SigningKey::generate` to `try_generate_from_rng_with_components`, having the new one generate random `Components` with a 3072-bit modulus size, which is now the `Default` for `KeySize`.
37 lines
1.3 KiB
Rust
37 lines
1.3 KiB
Rust
use digest::Digest;
|
|
use dsa::{Components, KeySize, SigningKey};
|
|
use getrandom::{SysRng, rand_core::UnwrapErr};
|
|
use pkcs8::{EncodePrivateKey, EncodePublicKey, LineEnding};
|
|
use sha1::Sha1;
|
|
use signature::{RandomizedDigestSigner, SignatureEncoding};
|
|
use std::{fs::File, io::Write};
|
|
|
|
fn main() {
|
|
let components =
|
|
Components::try_generate_from_rng_with_key_size(&mut SysRng, KeySize::DSA_2048_256)
|
|
.unwrap();
|
|
|
|
let mut rng = UnwrapErr(SysRng);
|
|
let signing_key =
|
|
SigningKey::try_generate_from_rng_with_components(&mut rng, components).unwrap();
|
|
let verifying_key = signing_key.verifying_key();
|
|
|
|
let signature = signing_key
|
|
.sign_digest_with_rng(&mut rng, |digest: &mut Sha1| digest.update(b"hello world"));
|
|
|
|
let signing_key_bytes = signing_key.to_pkcs8_pem(LineEnding::LF).unwrap();
|
|
let verifying_key_bytes = verifying_key.to_public_key_pem(LineEnding::LF).unwrap();
|
|
|
|
let mut file = File::create("public.pem").unwrap();
|
|
file.write_all(verifying_key_bytes.as_bytes()).unwrap();
|
|
file.flush().unwrap();
|
|
|
|
let mut file = File::create("signature.der").unwrap();
|
|
file.write_all(&signature.to_bytes()).unwrap();
|
|
file.flush().unwrap();
|
|
|
|
let mut file = File::create("private.pem").unwrap();
|
|
file.write_all(signing_key_bytes.as_bytes()).unwrap();
|
|
file.flush().unwrap();
|
|
}
|