mod cose;
use cose::*;
mod namespace;
pub use namespace::SigningNamespace;
mod signed_object;
pub use signed_object::SignedObject;
mod signature;
pub use signature::Signature;
mod signing_key;
pub use signing_key::SigningKey;
mod verifying_key;
pub use verifying_key::VerifyingKey;
mod message;
pub use message::SerializedMessage;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[cfg(feature = "wasm")]
use {tsify::Tsify, wasm_bindgen::prelude::*};
#[derive(Serialize, Deserialize, Debug, JsonSchema, PartialEq)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
#[cfg_attr(feature = "uniffi", derive(uniffi::Enum))]
#[cfg_attr(feature = "wasm", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))]
pub enum SignatureAlgorithm {
Ed25519,
MlDsa44,
}
impl SignatureAlgorithm {
pub fn default_algorithm() -> Self {
SignatureAlgorithm::MlDsa44
}
}
impl std::fmt::Display for SignatureAlgorithm {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
SignatureAlgorithm::Ed25519 => write!(f, "ed25519"),
SignatureAlgorithm::MlDsa44 => write!(f, "mldsa44"),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::CoseSerializable;
#[derive(Deserialize, Debug, PartialEq, Serialize)]
struct TestMessage {
field1: String,
}
#[test]
fn make_test_vectors() {
let signing_key = SigningKey::make(SignatureAlgorithm::Ed25519);
let verifying_key = signing_key.to_verifying_key();
let test_message = TestMessage {
field1: "Test message".to_string(),
};
let (signature, serialized_message) = signing_key
.sign_detached(&test_message, &SigningNamespace::ExampleNamespace)
.unwrap();
let signed_object = signing_key
.sign(&test_message, &SigningNamespace::ExampleNamespace)
.unwrap();
let raw_signed_array = signing_key.sign_raw("Test message".as_bytes());
println!("const SIGNING_KEY: &[u8] = &{:?};", signing_key.to_cose());
println!(
"const VERIFYING_KEY: &[u8] = &{:?};",
verifying_key.to_cose()
);
println!("const SIGNATURE: &[u8] = &{:?};", signature.to_cose());
println!(
"const SERIALIZED_MESSAGE: &[u8] = &{:?};",
serialized_message.as_bytes()
);
println!(
"const SIGNED_OBJECT: &[u8] = &{:?};",
signed_object.to_cose()
);
println!(
"const SIGNED_OBJECT_RAW: &[u8] = &{:?};",
raw_signed_array.as_slice()
);
}
}