51 lines
1.3 KiB
Rust
51 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"}"#,
|
|
);
|
|
}
|
|
}
|