Crate minisign

Crate minisign 

Source
Expand description

CI status Last version Documentation

§rust-minisign

A pure Rust implementation of the Minisign signature system.

This is a crate designed to be used by applications.

For a command-line tool reimplementing the Minisign utility in Rust, and based on this crate, check out rsign2.

For a minimal crate that only verifies signatures, check out minisign-verify.

§API documentation

API documentation on docs.rs

§Example

use minisign::{KeyPair, PublicKeyBox, SecretKeyBox, SignatureBox};
use std::io::Cursor;

// Generate and return a new key pair
// The key is encrypted using a password.
// If `None` is given, the password will be asked for interactively.
let KeyPair { pk, sk } =
    KeyPair::generate_encrypted_keypair(Some("key password".to_string())).unwrap();

// In order to be stored to disk, keys have to be converted to "boxes".
// A box is just a container, with some metadata about its content.
// Boxes can be converted to/from strings, making them convenient to use for storage.
let pk_box_str = pk.to_box().unwrap().to_string();
let sk_box_str = sk
    .to_box(None) // Optional comment about the key
    .unwrap()
    .to_string();

// `pk_box_str` and `sk_box_str` can now be saved to disk.
// This is a long-term key pair, that can be used to sign as many files as needed.
// For convenience, the `KeyPair::generate_and_write_encrypted_keypair()` function
// is available: it generates a new key pair, and saves it to disk (or any `Writer`)
// before returning it.

// Assuming that `sk_box_str` is something we previously saved and just reloaded,
// it can be converted back to a secret key box:
let sk_box = SecretKeyBox::from_string(&sk_box_str).unwrap();

// and the box can be opened using the password to reveal the original secret key:
let sk = sk_box
    .into_secret_key(Some("key password".to_string()))
    .unwrap();

// Now, we can use the secret key to sign anything.
let data = b"lorem ipsum";
let data_reader = Cursor::new(data);
let signature_box = minisign::sign(None, &sk, data_reader, None, None).unwrap();

// We have a signature! Let's inspect it a little bit.
println!(
    "Untrusted comment: [{}]",
    signature_box.untrusted_comment().unwrap()
);
println!(
    "Trusted comment: [{}]",
    signature_box.trusted_comment().unwrap()
);

// Converting the signature box to a string in order to save it is easy.
let signature_box_str = signature_box.into_string();

// Now, let's verify the signature.
// Assuming we just loaded it into `signature_box_str`, get the box back.
let signature_box = SignatureBox::from_string(&signature_box_str).unwrap();

// Load the public key from the string.
let pk_box = PublicKeyBox::from_string(&pk_box_str).unwrap();
let pk = pk_box.into_public_key().unwrap();

// And verify the data.
let data_reader = Cursor::new(data);
let verified = minisign::verify(&pk, &signature_box, data_reader, true, false, false);
match verified {
    Ok(()) => println!("Success!"),
    Err(_) => println!("Verification failed"),
};

Structs§

KeyPair
A key pair (PublicKey and SecretKey).
PError
Error structure for the minisign crate.
PublicKey
A PublicKey is used to verify signatures.
PublicKeyBox
A public key and its metadata.
SecretKey
A SecretKey is used to create signatures.
SecretKeyBox
A secret key and its metadata.
SignatureBones
A trimmed-down signature, without any comments section, with binary serialization only
SignatureBox
A signature, as well as the metadata required to verify it.

Enums§

ErrorKind

Constants§

DEFAULT_COMMENT
The default untrusted comment.
SIG_DEFAULT_CONFIG_DIR
The default configuration directory of the rsign tool.
SIG_DEFAULT_CONFIG_DIR_ENV_VAR
The default environment variable for the directory of the rsign tool.
SIG_DEFAULT_PKFILE
The default file name for the public key.
SIG_DEFAULT_SKFILE
The default file name for the secret key.
SIG_SUFFIX
The default suffix for signatures.

Functions§

sign
Compute a signature.
verify
Verify a signature using a public key.

Type Aliases§

Result