ockam_vault/types/signatures.rs
1use minicbor::{CborLen, Decode, Encode};
2
3/// EdDSACurve25519 signature length.
4pub const EDDSA_CURVE25519_SIGNATURE_LENGTH: usize = 64;
5/// ECDSASHA256CurveP256 signature length.
6pub const ECDSA_SHA256_CURVEP256_SIGNATURE_LENGTH: usize = 64;
7
8/// A cryptographic signature.
9#[derive(Encode, Decode, CborLen)]
10#[rustfmt::skip]
11pub enum Signature {
12 /// An EdDSA signature using Curve 25519.
13 #[n(0)] EdDSACurve25519(#[n(0)] EdDSACurve25519Signature),
14 /// An ECDSA signature using SHA-256 and Curve P-256.
15 #[n(1)] ECDSASHA256CurveP256(#[n(0)] ECDSASHA256CurveP256Signature),
16}
17
18/// An EdDSA Signature using Curve25519.
19///
20/// - EdDSA Signature as defined [here][1].
21/// - Curve25519 as defined in [here][2].
22///
23/// [1]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf
24/// [2]: https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-186.pdf
25#[derive(Encode, Decode, CborLen, PartialEq, Eq, Clone, Debug)]
26#[cbor(transparent)]
27pub struct EdDSACurve25519Signature(
28 #[cbor(n(0), with = "minicbor::bytes")] pub [u8; EDDSA_CURVE25519_SIGNATURE_LENGTH],
29);
30
31/// An ECDSA Signature using SHA256 and Curve P-256.
32///
33/// - ECDSA Signature as defined [here][1].
34/// - SHA256 as defined [here][2].
35/// - Curve P-256 as defined [here][3].
36///
37/// [1]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf
38/// [2]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf
39/// [3]: https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-186.pdf
40#[derive(Encode, Decode, CborLen, PartialEq, Eq, Clone, Debug)]
41#[cbor(transparent)]
42pub struct ECDSASHA256CurveP256Signature(
43 #[cbor(n(0), with = "minicbor::bytes")] pub [u8; ECDSA_SHA256_CURVEP256_SIGNATURE_LENGTH],
44);