Use canonicalized JSON for identity claims
This commit is contained in:
parent
14a123ad7e
commit
cd93858488
7 changed files with 42 additions and 8 deletions
|
@ -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"}"#,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
|
||||
|
|
|
@ -1,3 +1,2 @@
|
|||
pub mod canonicalization;
|
||||
pub mod create;
|
||||
pub mod verify;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
pub mod caip2;
|
||||
pub mod canonicalization;
|
||||
pub mod crypto;
|
||||
pub mod currencies;
|
||||
pub mod files;
|
||||
|
|
Loading…
Reference in a new issue