[][src]Crate nisty

Library for NIST P256 signatures, for when you really need them.

This library completely decouples entropy from key generation and signatures, and offers a similar API as salty.

In particular, all signatures are deterministic, similar to RFC 6979.

The flip side of this is that we need to pull in a CSRNG, for the ultra-rare case where a 32-byte seed does not directly give rise to a valid keypair; we use ChaCha20.

In the backend, this library currently uses micro-ecc, exposed via micro-ecc-sys.

Example

let seed = [1u8; 32]; // use an actually entropic seed
let keypair = nisty::Keypair::from(&seed);
let message = b"hello, nisty";
let signature = keypair.sign(message);
assert!(keypair.public.verify(message, &signature));

Microcontrollers

Because bindgen, no_std and Rust's limited feature tree handling don't play nice together, on microcontrollers the bindings to micro-ecc need to be pre-generated.

For Cortex-M4 and Cortex-M33 microcontrollers, they are packaged, and it is sufficient to use nisty as follows:

[dependencies.nisty]
default-features = false

When compiled as release build, these platforms automatically pick up UMAAL assembly optimizations.

On an NXP LPC55S69, signature generation takes around 6.9M cycles, signature verification around 7.6M.

Structs

Error

Either there is an error, or there is not - no reasons given.

Keypair

Create keys, generate signatures.

PublicKey

Public part of a keypair, a point on the curve.

SecretKey

Secret part of a keypair, a scalar.

Seed

32 entropic bytes, input for key generation.

Signature

Pair of two curve scalars.

Constants

PUBLICKEY_COMPRESSED_LENGTH

the length of a public key when serialized in compressed format

PUBLICKEY_LENGTH

the length of a public key when serialized

SECRETKEY_LENGTH

the length of a secret key when serialized

SEED_LENGTH

the length of a secret key seed when serialized

SHA256_LENGTH

the length of a SHA256 digest

SIGNATURE_LENGTH

the length of a signature when serialized

Functions

hash_calls

How many hash digests were calculated for signatures so far.

prehash

Type Definitions

Result