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 serde::Serialize;
|
||||||
|
|
||||||
|
use crate::utils::canonicalization::{
|
||||||
|
canonicalize_object,
|
||||||
|
CanonicalizationError,
|
||||||
|
};
|
||||||
|
|
||||||
use super::did::Did;
|
use super::did::Did;
|
||||||
|
|
||||||
// https://www.w3.org/TR/vc-data-model/#credential-subject
|
// https://www.w3.org/TR/vc-data-model/#credential-subject
|
||||||
|
@ -6,18 +12,40 @@ use super::did::Did;
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
struct Claim {
|
struct Claim {
|
||||||
id: String, // actor ID
|
id: String, // actor ID
|
||||||
owner_of: String, // DID
|
owner_of: Did,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates key ownership claim and prepares it for signing
|
/// Creates key ownership claim and prepares it for signing
|
||||||
pub fn create_identity_claim(
|
pub fn create_identity_claim(
|
||||||
actor_id: &str,
|
actor_id: &str,
|
||||||
did: &Did,
|
did: &Did,
|
||||||
) -> Result<String, serde_json::Error> {
|
) -> Result<String, CanonicalizationError> {
|
||||||
let claim = Claim {
|
let claim = Claim {
|
||||||
id: actor_id.to_string(),
|
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)
|
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 serde_json::Value;
|
||||||
|
|
||||||
use crate::identity::did_pkh::DidPkh;
|
use crate::identity::did_pkh::DidPkh;
|
||||||
|
use crate::utils::canonicalization::{
|
||||||
|
canonicalize_object,
|
||||||
|
CanonicalizationError,
|
||||||
|
};
|
||||||
use crate::utils::crypto::sign_message;
|
use crate::utils::crypto::sign_message;
|
||||||
use super::canonicalization::{canonicalize_object, CanonicalizationError};
|
|
||||||
|
|
||||||
pub const PROOF_KEY: &str = "proof";
|
pub const PROOF_KEY: &str = "proof";
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,2 @@
|
||||||
pub mod canonicalization;
|
|
||||||
pub mod create;
|
pub mod create;
|
||||||
pub mod verify;
|
pub mod verify;
|
||||||
|
|
|
@ -6,8 +6,11 @@ use crate::ethereum::{
|
||||||
utils::address_to_string,
|
utils::address_to_string,
|
||||||
};
|
};
|
||||||
use crate::identity::did_pkh::DidPkh;
|
use crate::identity::did_pkh::DidPkh;
|
||||||
|
use crate::utils::canonicalization::{
|
||||||
|
canonicalize_object,
|
||||||
|
CanonicalizationError,
|
||||||
|
};
|
||||||
use crate::utils::crypto::verify_signature;
|
use crate::utils::crypto::verify_signature;
|
||||||
use super::canonicalization::{canonicalize_object, CanonicalizationError};
|
|
||||||
use super::create::{
|
use super::create::{
|
||||||
IntegrityProof,
|
IntegrityProof,
|
||||||
PROOF_TYPE_JCS_EIP191,
|
PROOF_TYPE_JCS_EIP191,
|
||||||
|
|
|
@ -35,7 +35,6 @@ use crate::identity::{
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use crate::json_signatures::{
|
use crate::json_signatures::{
|
||||||
canonicalization::canonicalize_object,
|
|
||||||
create::{add_integrity_proof, IntegrityProof},
|
create::{add_integrity_proof, IntegrityProof},
|
||||||
verify::verify_jcs_eip191_signature,
|
verify::verify_jcs_eip191_signature,
|
||||||
};
|
};
|
||||||
|
@ -73,6 +72,7 @@ use crate::models::users::queries::{
|
||||||
};
|
};
|
||||||
use crate::models::users::types::UserCreateData;
|
use crate::models::users::types::UserCreateData;
|
||||||
use crate::utils::caip2::ChainId;
|
use crate::utils::caip2::ChainId;
|
||||||
|
use crate::utils::canonicalization::canonicalize_object;
|
||||||
use crate::utils::crypto::{
|
use crate::utils::crypto::{
|
||||||
hash_password,
|
hash_password,
|
||||||
generate_private_key,
|
generate_private_key,
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
pub mod caip2;
|
pub mod caip2;
|
||||||
|
pub mod canonicalization;
|
||||||
pub mod crypto;
|
pub mod crypto;
|
||||||
pub mod currencies;
|
pub mod currencies;
|
||||||
pub mod files;
|
pub mod files;
|
||||||
|
|
Loading…
Reference in a new issue