Use proof suites with prefix Mitra
This commit is contained in:
parent
f0ae82c0db
commit
08c55cc71c
3 changed files with 58 additions and 6 deletions
|
@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||
|
||||
## [Unreleased]
|
||||
|
||||
### Changed
|
||||
|
||||
- Use proof suites with prefix `Mitra`.
|
||||
|
||||
## [1.12.0] - 2023-01-26
|
||||
|
||||
### Added
|
||||
|
|
|
@ -29,12 +29,60 @@ And these additional standards:
|
|||
|
||||
Activities are implemented in way that is compatible with Pleroma, Mastodon and other popular ActivityPub servers.
|
||||
|
||||
## Supported FEPs
|
||||
Supported FEPs:
|
||||
|
||||
- [FEP-f1d5: NodeInfo in Fediverse Software](https://codeberg.org/fediverse/fep/src/branch/main/feps/fep-f1d5.md)
|
||||
- [FEP-e232: Object Links](https://codeberg.org/fediverse/fep/src/branch/main/feps/fep-e232.md)
|
||||
- [FEP-8b32: Object Integrity Proofs](https://codeberg.org/fediverse/fep/src/branch/main/feps/fep-8b32.md)
|
||||
|
||||
## Object integrity proofs
|
||||
|
||||
All outgoing activities are signed with actor's key in accordance with [FEP-8b32](https://codeberg.org/fediverse/fep/src/branch/main/feps/fep-8b32.md) document.
|
||||
|
||||
Example:
|
||||
|
||||
```json
|
||||
{
|
||||
"@context": "https://www.w3.org/ns/activitystreams",
|
||||
"actor": "https://example.com/users/alice",
|
||||
"cc": [],
|
||||
"id": "https://example.com/objects/0185f5f8-10b5-1b69-f45e-25f06792f411",
|
||||
"object": "https://example.net/users/bob/posts/141892712081205472",
|
||||
"proof": {
|
||||
"created": "2023-01-28T01:22:40.183273595Z",
|
||||
"proofPurpose": "assertionMethod",
|
||||
"proofValue": "z5djAdMSrV...",
|
||||
"type": "MitraJcsRsaSignature2022",
|
||||
"verificationMethod": "https://example.com/users/alice#main-key"
|
||||
},
|
||||
"to": [
|
||||
"https://example.net/users/bob",
|
||||
"https://www.w3.org/ns/activitystreams#Public"
|
||||
],
|
||||
"type":"Like"
|
||||
}
|
||||
```
|
||||
|
||||
### Supported proof suites
|
||||
|
||||
#### MitraJcsRsaSignature2022
|
||||
|
||||
Canonicalization algorithm: JCS
|
||||
Hashing algorithm: SHA-256
|
||||
Signature algorithm: RSASSA-PKCS1-v1_5
|
||||
|
||||
#### MitraJcsEip191Signature2022
|
||||
|
||||
Canonicalization algorithm: JCS
|
||||
Hashing algorithm: KECCAK-256 (EIP-191)
|
||||
Signature algorithm: ECDSA (EIP-191)
|
||||
|
||||
#### MitraJcsEd25519Signature2022
|
||||
|
||||
Canonicalization algorithm: JCS
|
||||
Hashing algorithm: BLAKE2b-512
|
||||
Signature algorithm: EdDSA
|
||||
|
||||
## Profile extensions
|
||||
|
||||
### Cryptocurrency addresses
|
||||
|
|
|
@ -8,8 +8,8 @@ use crate::identity::{
|
|||
did_pkh::DidPkh,
|
||||
signatures::{
|
||||
PROOF_TYPE_JCS_ED25519,
|
||||
PROOF_TYPE_JCS_EIP191_LEGACY,
|
||||
PROOF_TYPE_JCS_RSA_LEGACY,
|
||||
PROOF_TYPE_JCS_EIP191,
|
||||
PROOF_TYPE_JCS_RSA,
|
||||
},
|
||||
};
|
||||
use crate::utils::{
|
||||
|
@ -43,7 +43,7 @@ impl IntegrityProof {
|
|||
signature: &[u8],
|
||||
) -> Self {
|
||||
Self {
|
||||
proof_type: PROOF_TYPE_JCS_RSA_LEGACY.to_string(),
|
||||
proof_type: PROOF_TYPE_JCS_RSA.to_string(),
|
||||
proof_purpose: PROOF_PURPOSE.to_string(),
|
||||
verification_method: signer_key_id.to_string(),
|
||||
created: Utc::now(),
|
||||
|
@ -56,7 +56,7 @@ impl IntegrityProof {
|
|||
signature: &[u8],
|
||||
) -> Self {
|
||||
Self {
|
||||
proof_type: PROOF_TYPE_JCS_EIP191_LEGACY.to_string(),
|
||||
proof_type: PROOF_TYPE_JCS_EIP191.to_string(),
|
||||
proof_purpose: PROOF_PURPOSE.to_string(),
|
||||
verification_method: signer.to_string(),
|
||||
created: Utc::now(),
|
||||
|
@ -160,7 +160,7 @@ mod tests {
|
|||
assert_eq!(result["object"], object["object"]);
|
||||
let signature_date = result["proof"]["created"].as_str().unwrap();
|
||||
// Put * in place of date to avoid escaping all curly brackets
|
||||
let expected_result = r#"{"actor":"https://example.org/users/test","id":"https://example.org/objects/1","object":{"content":"test","type":"Note"},"proof":{"created":"*","proofPurpose":"assertionMethod","proofValue":"z2Gh9LYrXjSqFrkia6gMg7xp2wftn1hqmYeEXxrsH9Eh6agB2VYraSYrDoSufbXEHnnyHMCoDSAriLpVacj6E4LFK","type":"JcsRsaSignature2022","verificationMethod":"https://example.org/users/test#main-key"},"to":["https://example.org/users/yyy","https://example.org/users/xxx"],"type":"Create"}"#;
|
||||
let expected_result = r#"{"actor":"https://example.org/users/test","id":"https://example.org/objects/1","object":{"content":"test","type":"Note"},"proof":{"created":"*","proofPurpose":"assertionMethod","proofValue":"z2Gh9LYrXjSqFrkia6gMg7xp2wftn1hqmYeEXxrsH9Eh6agB2VYraSYrDoSufbXEHnnyHMCoDSAriLpVacj6E4LFK","type":"MitraJcsRsaSignature2022","verificationMethod":"https://example.org/users/test#main-key"},"to":["https://example.org/users/yyy","https://example.org/users/xxx"],"type":"Create"}"#;
|
||||
assert_eq!(
|
||||
serde_json::to_string(&result).unwrap(),
|
||||
expected_result.replace('*', signature_date),
|
||||
|
|
Loading…
Reference in a new issue