Use canonicalized JSON for identity claims

This commit is contained in:
silverpill 2022-11-10 16:44:05 +00:00
parent 14a123ad7e
commit cd93858488
7 changed files with 42 additions and 8 deletions

View file

@ -1,4 +1,10 @@
use serde::Serialize;
use crate::utils::canonicalization::{
canonicalize_object,
CanonicalizationError,
};
use super::did::Did;
// https://www.w3.org/TR/vc-data-model/#credential-subject
@ -6,18 +12,40 @@ use super::did::Did;
#[serde(rename_all = "camelCase")]
struct Claim {
id: String, // actor ID
owner_of: String, // DID
owner_of: Did,
}
/// Creates key ownership claim and prepares it for signing
pub fn create_identity_claim(
actor_id: &str,
did: &Did,
) -> Result<String, serde_json::Error> {
) -> Result<String, CanonicalizationError> {
let claim = Claim {
id: actor_id.to_string(),
owner_of: did.to_string(),
owner_of: did.clone(),
};
let message = serde_json::to_string(&claim)?;
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"}"#,
);
}
}

View file

@ -4,8 +4,11 @@ use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::identity::did_pkh::DidPkh;
use crate::utils::canonicalization::{
canonicalize_object,
CanonicalizationError,
};
use crate::utils::crypto::sign_message;
use super::canonicalization::{canonicalize_object, CanonicalizationError};
pub const PROOF_KEY: &str = "proof";

View file

@ -1,3 +1,2 @@
pub mod canonicalization;
pub mod create;
pub mod verify;

View file

@ -6,8 +6,11 @@ use crate::ethereum::{
utils::address_to_string,
};
use crate::identity::did_pkh::DidPkh;
use crate::utils::canonicalization::{
canonicalize_object,
CanonicalizationError,
};
use crate::utils::crypto::verify_signature;
use super::canonicalization::{canonicalize_object, CanonicalizationError};
use super::create::{
IntegrityProof,
PROOF_TYPE_JCS_EIP191,

View file

@ -35,7 +35,6 @@ use crate::identity::{
},
};
use crate::json_signatures::{
canonicalization::canonicalize_object,
create::{add_integrity_proof, IntegrityProof},
verify::verify_jcs_eip191_signature,
};
@ -73,6 +72,7 @@ use crate::models::users::queries::{
};
use crate::models::users::types::UserCreateData;
use crate::utils::caip2::ChainId;
use crate::utils::canonicalization::canonicalize_object;
use crate::utils::crypto::{
hash_password,
generate_private_key,

View file

@ -1,4 +1,5 @@
pub mod caip2;
pub mod canonicalization;
pub mod crypto;
pub mod currencies;
pub mod files;