Skip to content

Commit 52b6033

Browse files
authored
Merge pull request #165 from auths-dev/dev-keriSaidCompliance
refactor: migrate to spec-compliant KERI
2 parents 252dddb + dca2eed commit 52b6033

File tree

84 files changed

+8213
-1531
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+8213
-1531
lines changed

.auths/allowed_signers

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
# auths:managed — do not edit manually
22
# auths:attestation
3-
z6MkhPJCPXd5A9VN4wScJkxTtz6de7egZQx78vsiAT1vg3PZ@auths.local namespaces="git" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICuPK6OfYp7ngZp40Q+Dsrahhks472v6gPIMD0upCRnM
4-
z6MkhfnUUc2UJJ5C9sQQ7GvXmSbQJsdtNKV6HNYcQtTjc7xE@auths.local namespaces="git" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC/Ib83sxXogDnEVzLjFBkyC+DhP+cssbPzZAmQhB+Lz
3+
z6MknkJY66KPDbAEeRVbSJ4MbigiHYGAumVzpgi3QfjhJc6T@auths.local namespaces="git" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHs7L6XhpNR/Qfp4rr+4GoTo6d38rAJKLI1WRtsLXm+Q
54
# auths:manual

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/auths-cli/src/commands/artifact/verify.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use serde::Serialize;
33
use std::fs;
44
use std::path::{Path, PathBuf};
55

6-
use auths_keri::witness::Receipt;
6+
use auths_keri::witness::SignedReceipt;
77
use auths_transparency::{
88
BundleVerificationReport, CheckpointStatus, DelegationStatus, InclusionStatus, NamespaceStatus,
99
OfflineBundle, SignatureStatus, TrustRoot, WitnessStatus,
@@ -344,7 +344,7 @@ async fn verify_witnesses(
344344

345345
let receipts_bytes = fs::read(receipts_path)
346346
.with_context(|| format!("Failed to read witness receipts: {:?}", receipts_path))?;
347-
let receipts: Vec<Receipt> =
347+
let receipts: Vec<SignedReceipt> =
348348
serde_json::from_slice(&receipts_bytes).context("Failed to parse witness receipts JSON")?;
349349

350350
let witness_keys = parse_witness_keys(witness_keys_raw)?;

crates/auths-cli/src/commands/device/verify_attestation.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::ux::format::is_json_mode;
22
use anyhow::{Context, Result, anyhow};
3-
use auths_keri::witness::Receipt;
3+
use auths_keri::witness::SignedReceipt;
44
use auths_sdk::trust::{PinnedIdentity, PinnedIdentityStore, RootsFile, TrustLevel, TrustPolicy};
55
use auths_verifier::Capability;
66
use auths_verifier::core::Attestation;
@@ -313,7 +313,7 @@ async fn run_verify(now: chrono::DateTime<Utc>, cmd: &VerifyCommand) -> Result<V
313313
let receipts_bytes = fs::read(receipts_path).with_context(|| {
314314
format!("Failed to read witness receipts: {:?}", receipts_path)
315315
})?;
316-
let receipts: Vec<Receipt> = serde_json::from_slice(&receipts_bytes)
316+
let receipts: Vec<SignedReceipt> = serde_json::from_slice(&receipts_bytes)
317317
.context("Failed to parse witness receipts JSON")?;
318318
let witness_keys = parse_witness_keys(&cmd.witness_keys)?;
319319

crates/auths-cli/src/commands/verify_commit.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::ux::format::is_json_mode;
22
use anyhow::{Context, Result, anyhow};
3-
use auths_keri::witness::Receipt;
3+
use auths_keri::witness::SignedReceipt;
44
use auths_verifier::witness::{WitnessQuorum, WitnessVerifyConfig};
55
use auths_verifier::{
66
Attestation, IdentityBundle, VerificationReport, verify_chain, verify_chain_with_witnesses,
@@ -502,7 +502,7 @@ async fn verify_witnesses(
502502
let receipts_bytes = fs::read(receipts_path)
503503
.with_context(|| format!("Failed to read witness receipts: {:?}", receipts_path))?;
504504

505-
let receipts: Vec<Receipt> =
505+
let receipts: Vec<SignedReceipt> =
506506
serde_json::from_slice(&receipts_bytes).context("Failed to parse witness receipts JSON")?;
507507

508508
let witness_keys = parse_witness_keys(&cmd.witness_keys)?;

crates/auths-core/src/witness/collector.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -243,13 +243,13 @@ impl ReceiptCollector {
243243
return None;
244244
}
245245

246-
let expected_said = &existing[0].a;
247-
if new.a != *expected_said {
246+
let expected_said = &existing[0].d;
247+
if new.d != *expected_said {
248248
Some(DuplicityEvidence {
249249
prefix: Prefix::default(),
250-
sequence: new.s,
250+
sequence: new.s.value(),
251251
event_a_said: expected_said.clone(),
252-
event_b_said: new.a.clone(),
252+
event_b_said: new.d.clone(),
253253
witness_reports: vec![],
254254
})
255255
} else {

crates/auths-core/src/witness/duplicity.rs

Lines changed: 25 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ impl DuplicityDetector {
139139
/// Verify that a set of receipts are consistent (same event SAID).
140140
///
141141
/// This checks that all receipts are for the same event. If receipts
142-
/// have different `a` (event SAID) fields, this indicates duplicity.
142+
/// have different `d` (event SAID) fields, this indicates duplicity.
143143
///
144144
/// # Arguments
145145
///
@@ -155,21 +155,21 @@ impl DuplicityDetector {
155155
}
156156

157157
let first = &receipts[0];
158-
let expected_said = &first.a;
158+
let expected_said = &first.d;
159159

160160
for receipt in receipts.iter().skip(1) {
161-
if receipt.a != *expected_said {
161+
if receipt.d != *expected_said {
162162
// Different receipts claim different SAIDs
163163
return Err(DuplicityEvidence {
164164
prefix: Prefix::default(),
165-
sequence: first.s,
165+
sequence: first.s.value(),
166166
event_a_said: expected_said.clone(),
167-
event_b_said: receipt.a.clone(),
167+
event_b_said: receipt.d.clone(),
168168
witness_reports: receipts
169169
.iter()
170170
.map(|r| WitnessReport {
171-
witness_id: r.i.clone(),
172-
observed_said: r.a.clone(),
171+
witness_id: r.i.as_str().to_string(),
172+
observed_said: r.d.clone(),
173173
observed_at: None,
174174
})
175175
.collect(),
@@ -289,26 +289,23 @@ mod tests {
289289

290290
#[test]
291291
fn verify_receipts_consistent() {
292+
use auths_keri::{KeriSequence, VersionString};
292293
let detector = DuplicityDetector::new();
293294

294295
let receipts = vec![
295296
Receipt {
296-
v: "KERI".into(),
297+
v: VersionString::placeholder(),
297298
t: "rct".into(),
298-
d: Said::new_unchecked("ER1".into()),
299-
i: "W1".into(),
300-
s: 5,
301-
a: Said::new_unchecked("EEVENT_SAID".into()),
302-
sig: vec![0; 64],
299+
d: Said::new_unchecked("EEVENT_SAID".into()),
300+
i: Prefix::new_unchecked("W1".into()),
301+
s: KeriSequence::new(5),
303302
},
304303
Receipt {
305-
v: "KERI".into(),
304+
v: VersionString::placeholder(),
306305
t: "rct".into(),
307-
d: Said::new_unchecked("ER2".into()),
308-
i: "W2".into(),
309-
s: 5,
310-
a: Said::new_unchecked("EEVENT_SAID".into()),
311-
sig: vec![0; 64],
306+
d: Said::new_unchecked("EEVENT_SAID".into()),
307+
i: Prefix::new_unchecked("W2".into()),
308+
s: KeriSequence::new(5),
312309
},
313310
];
314311

@@ -317,26 +314,23 @@ mod tests {
317314

318315
#[test]
319316
fn verify_receipts_inconsistent() {
317+
use auths_keri::{KeriSequence, VersionString};
320318
let detector = DuplicityDetector::new();
321319

322320
let receipts = vec![
323321
Receipt {
324-
v: "KERI".into(),
322+
v: VersionString::placeholder(),
325323
t: "rct".into(),
326-
d: Said::new_unchecked("ER1".into()),
327-
i: "W1".into(),
328-
s: 5,
329-
a: Said::new_unchecked("ESAID_A".into()),
330-
sig: vec![0; 64],
324+
d: Said::new_unchecked("ESAID_A".into()),
325+
i: Prefix::new_unchecked("W1".into()),
326+
s: KeriSequence::new(5),
331327
},
332328
Receipt {
333-
v: "KERI".into(),
329+
v: VersionString::placeholder(),
334330
t: "rct".into(),
335-
d: Said::new_unchecked("ER2".into()),
336-
i: "W2".into(),
337-
s: 5,
338-
a: Said::new_unchecked("ESAID_B".into()),
339-
sig: vec![0; 64],
331+
d: Said::new_unchecked("ESAID_B".into()),
332+
i: Prefix::new_unchecked("W2".into()),
333+
s: KeriSequence::new(5),
340334
},
341335
];
342336

crates/auths-core/src/witness/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,10 @@ mod server;
8686
mod storage;
8787

8888
// Re-export KERI witness protocol types from auths-keri
89+
pub use auths_keri::KERI_VERSION_PREFIX;
8990
pub use auths_keri::witness::{
90-
AsyncWitnessProvider, DuplicityEvidence, EventHash, EventHashParseError, KERI_VERSION,
91-
NoOpAsyncWitness, RECEIPT_TYPE, Receipt, ReceiptBuilder, WitnessError, WitnessProvider,
91+
AsyncWitnessProvider, DuplicityEvidence, EventHash, EventHashParseError, NoOpAsyncWitness,
92+
RECEIPT_TYPE, Receipt, ReceiptBuilder, SignedReceipt, WitnessError, WitnessProvider,
9293
WitnessReport,
9394
};
9495
pub use noop::NoOpWitness;
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
#[allow(unused_imports)]
2-
pub use auths_keri::witness::{KERI_VERSION, RECEIPT_TYPE, Receipt};
2+
pub use auths_keri::KERI_VERSION_PREFIX;
3+
#[allow(unused_imports)]
4+
pub use auths_keri::witness::{RECEIPT_TYPE, Receipt, SignedReceipt};

0 commit comments

Comments
 (0)