confium_jce_provider/
lib.rs1#![forbid(unsafe_code)]
13#![allow(missing_docs)] use serde::{Deserialize, Serialize};
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
19pub struct JceProviderInfo {
20 pub name: String,
22 pub version: String,
24 pub info: String,
26}
27
28impl JceProviderInfo {
29 pub fn default_confium() -> Self {
31 Self {
32 name: "Confium".into(),
33 version: env!("CARGO_PKG_VERSION").into(),
34 info: "Confium threshold cryptography provider for Java".into(),
35 }
36 }
37}
38
39#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
41#[serde(rename_all = "snake_case")]
42pub enum JavaAlgorithm {
43 Ed25519,
45 EcdsaP256,
47 MlDsa65,
49}
50
51impl JavaAlgorithm {
52 pub fn java_name(&self) -> &'static str {
54 match self {
55 JavaAlgorithm::Ed25519 => "Ed25519",
56 JavaAlgorithm::EcdsaP256 => "SHA256withECDSA",
57 JavaAlgorithm::MlDsa65 => "ML-DSA-65",
58 }
59 }
60}
61
62#[derive(Debug, thiserror::Error)]
64pub enum JceError {
65 #[error("algorithm not supported: {0}")]
67 UnsupportedAlgorithm(String),
68 #[error("threshold signing failed: {0}")]
70 SignFailed(String),
71 #[error("key not found: {0}")]
73 KeyNotFound(String),
74}
75
76#[cfg(test)]
77mod tests {
78 use super::*;
79
80 #[test]
81 fn default_provider_info() {
82 let info = JceProviderInfo::default_confium();
83 assert_eq!(info.name, "Confium");
84 }
85
86 #[test]
87 fn java_algorithm_names() {
88 assert_eq!(JavaAlgorithm::Ed25519.java_name(), "Ed25519");
89 assert_eq!(JavaAlgorithm::EcdsaP256.java_name(), "SHA256withECDSA");
90 }
91}