fedimovies/src/json_signatures/proofs.rs

66 lines
2.2 KiB
Rust
Raw Normal View History

2023-03-12 23:37:40 +00:00
/// Proof types
use std::str::FromStr;
use crate::errors::ConversionError;
// Identity proof, version 00
pub const PROOF_TYPE_ID_EIP191: &str = "ethereum-eip191-00";
// Identity proof, version 2022A
pub const PROOF_TYPE_ID_MINISIGN: &str = "MitraMinisignSignature2022A";
// https://w3c.github.io/vc-data-integrity/#dataintegrityproof
pub const DATA_INTEGRITY_PROOF: &str = "DataIntegrityProof";
// Similar to https://identity.foundation/JcsEd25519Signature2020/
// - Canonicalization algorithm: JCS
// - Digest algorithm: SHA-256
// - Signature algorithm: RSASSA-PKCS1-v1_5
pub const PROOF_TYPE_JCS_RSA: &str = "MitraJcsRsaSignature2022";
pub const PROOF_TYPE_JCS_RSA_LEGACY: &str = "JcsRsaSignature2022";
pub const CRYPTOSUITE_JCS_RSA: &str = "mitra-jcs-rsa-2022";
// Similar to EthereumPersonalSignature2021 but with JCS
pub const PROOF_TYPE_JCS_EIP191: &str = "MitraJcsEip191Signature2022";
2023-04-24 15:35:32 +00:00
pub const PROOF_TYPE_JCS_EIP191_LEGACY: &str = "JcsEip191Signature2022";
// Similar to Ed25519Signature2020
// https://w3c-ccg.github.io/di-eddsa-2020/#ed25519signature2020
// - Canonicalization algorithm: JCS
// - Digest algorithm: BLAKE2b-512
// - Signature algorithm: EdDSA
pub const PROOF_TYPE_JCS_ED25519: &str = "MitraJcsEd25519Signature2022";
#[derive(Debug, PartialEq)]
2023-03-12 23:37:40 +00:00
pub enum ProofType {
JcsEip191Signature,
JcsEd25519Signature,
JcsRsaSignature,
}
2023-03-12 23:37:40 +00:00
impl FromStr for ProofType {
type Err = ConversionError;
fn from_str(value: &str) -> Result<Self, Self::Err> {
2023-03-12 23:37:40 +00:00
let proof_type = match value {
PROOF_TYPE_JCS_EIP191 => Self::JcsEip191Signature,
PROOF_TYPE_JCS_EIP191_LEGACY => Self::JcsEip191Signature,
PROOF_TYPE_JCS_ED25519 => Self::JcsEd25519Signature,
PROOF_TYPE_JCS_RSA => Self::JcsRsaSignature,
PROOF_TYPE_JCS_RSA_LEGACY => Self::JcsRsaSignature,
_ => return Err(ConversionError),
};
2023-03-12 23:37:40 +00:00
Ok(proof_type)
}
}
impl ProofType {
pub fn from_cryptosuite(value: &str) -> Result<Self, ConversionError> {
let proof_type = match value {
CRYPTOSUITE_JCS_RSA => Self::JcsRsaSignature,
_ => return Err(ConversionError),
};
Ok(proof_type)
}
}