#![forbid(unsafe_code)]
#![allow(missing_docs)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProviderInfo {
pub name: String,
pub version: String,
pub description: String,
pub buildinfo: String,
}
impl ProviderInfo {
pub fn default_confium() -> Self {
Self {
name: "confium".into(),
version: env!("CARGO_PKG_VERSION").into(),
description: "Confium threshold cryptography provider for OpenSSL 3.0".into(),
buildinfo: "Confium OpenSSL Provider".into(),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Operation {
Signer,
Verifier,
Digester,
KeyGenerator,
KeyEncoder,
StoreLoader,
}
impl Operation {
pub fn all() -> &'static [Operation] {
&[
Operation::Signer,
Operation::Verifier,
Operation::Digester,
Operation::KeyGenerator,
Operation::KeyEncoder,
Operation::StoreLoader,
]
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Algorithm {
Ed25519,
EcdsaP256,
EcdsaP384,
MlDsa65,
CompositeEd25519MlDsa65,
}
impl Algorithm {
pub fn openssl_name(&self) -> &'static str {
match self {
Algorithm::Ed25519 => "Ed25519",
Algorithm::EcdsaP256 => "ECDSA",
Algorithm::EcdsaP384 => "ECDSA",
Algorithm::MlDsa65 => "ML-DSA-65",
Algorithm::CompositeEd25519MlDsa65 => "composite-MLDSA65-Ed25519",
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProviderConfig {
pub daemon_socket: String,
pub default_quorum: String,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_provider_info() {
let info = ProviderInfo::default_confium();
assert_eq!(info.name, "confium");
}
#[test]
fn all_operations_non_empty() {
assert!(!Operation::all().is_empty());
}
#[test]
fn ed25519_openssl_name() {
assert_eq!(Algorithm::Ed25519.openssl_name(), "Ed25519");
}
}