use std::fmt::Debug;
use async_trait::async_trait;
use serde::Serialize;
use crate::{
identity::{
builder::{AsyncCredentialHolder, CredentialHolder, IdentityBuilderError},
identity_assertion::signature_verifier::ToCredentialSummary,
SignatureVerifier, SignerPayload, ValidationError,
},
status_tracker::StatusTracker,
};
pub(crate) struct NaiveCredentialHolder {}
impl CredentialHolder for NaiveCredentialHolder {
fn sig_type(&self) -> &'static str {
"INVALID.identity.naive_credential"
}
fn reserve_size(&self) -> usize {
1000
}
fn sign(&self, signer_payload: &SignerPayload) -> Result<Vec<u8>, IdentityBuilderError> {
let mut result: Vec<u8> = vec![];
c2pa_cbor::to_writer(&mut result, signer_payload)?;
Ok(result)
}
}
#[derive(Debug)]
pub(crate) struct NaiveAsyncCredentialHolder {}
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
impl AsyncCredentialHolder for NaiveAsyncCredentialHolder {
fn sig_type(&self) -> &'static str {
"INVALID.identity.naive_credential"
}
fn reserve_size(&self) -> usize {
1000
}
async fn sign(&self, signer_payload: &SignerPayload) -> Result<Vec<u8>, IdentityBuilderError> {
let mut result: Vec<u8> = vec![];
c2pa_cbor::to_writer(&mut result, signer_payload)?;
Ok(result)
}
}
pub(crate) struct NaiveSignatureVerifier {}
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
impl SignatureVerifier for NaiveSignatureVerifier {
type Error = ();
type Output = NaiveCredential;
async fn check_signature(
&self,
signer_payload: &SignerPayload,
signature: &[u8],
_status_tracker: &mut StatusTracker,
) -> Result<Self::Output, ValidationError<Self::Error>> {
let mut signer_payload_cbor: Vec<u8> = vec![];
c2pa_cbor::to_writer(&mut signer_payload_cbor, signer_payload)
.map_err(|_| ValidationError::InternalError("CBOR serialization error".to_string()))?;
if signer_payload_cbor != signature {
Err(ValidationError::SignatureMismatch)
} else {
Ok(NaiveCredential {})
}
}
}
pub(crate) struct NaiveCredential {}
impl ToCredentialSummary for NaiveCredential {
type CredentialSummary = NaiveCredentialSummary;
fn to_summary(&self) -> Self::CredentialSummary {
NaiveCredentialSummary {}
}
}
#[doc(hidden)]
#[derive(Serialize)]
pub struct NaiveCredentialSummary {}