fedimovies/src/identity/claims.rs
2022-11-11 00:53:23 +00:00

52 lines
1.3 KiB
Rust

use serde::Serialize;
use crate::utils::canonicalization::{
canonicalize_object,
CanonicalizationError,
};
use super::did::Did;
// https://www.w3.org/TR/vc-data-model/#credential-subject
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct Claim {
id: String, // actor ID
owner_of: Did,
}
/// Creates key ownership claim and prepares it for signing
pub fn create_identity_claim(
actor_id: &str,
did: &Did,
) -> Result<String, CanonicalizationError> {
let claim = Claim {
id: actor_id.to_string(),
owner_of: did.clone(),
};
let message = canonicalize_object(&claim)?;
Ok(message)
}
#[cfg(test)]
mod tests {
use crate::identity::did_pkh::DidPkh;
use crate::utils::currencies::Currency;
use super::*;
#[test]
fn test_create_identity_claim() {
let actor_id = "https://example.org/users/test";
let ethereum_address = "0xB9C5714089478a327F09197987f16f9E5d936E8a";
let did = Did::Pkh(DidPkh::from_address(
&Currency::Ethereum,
ethereum_address,
));
let claim = create_identity_claim(actor_id, &did).unwrap();
assert_eq!(
claim,
r#"{"id":"https://example.org/users/test","ownerOf":"did:pkh:eip155:1:0xb9c5714089478a327f09197987f16f9e5d936e8a"}"#,
);
}
}