806 lines
21 KiB
JSON
806 lines
21 KiB
JSON
{
|
|
"v": 1,
|
|
"kind": "aere-conformance-rules",
|
|
"levels": [
|
|
"integrity",
|
|
"authenticity",
|
|
"anchoring",
|
|
"finality"
|
|
],
|
|
"verifiers": {
|
|
"aip23-envelope": {
|
|
"artifacts": [
|
|
"envelope"
|
|
],
|
|
"rules": [
|
|
{
|
|
"id": "envelope.form",
|
|
"source": "form",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the envelope has a statement (object) and a statementHash (0x + 64 hex)"
|
|
},
|
|
{
|
|
"id": "envelope.integrity",
|
|
"source": "integrity",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "sha256 of the canonical statement text is the statementHash"
|
|
},
|
|
{
|
|
"id": "envelope.signature",
|
|
"source": "signature",
|
|
"level": "authenticity",
|
|
"sites": 5,
|
|
"says": "the ML-DSA signature the envelope carries verifies over the canonical statement text"
|
|
},
|
|
{
|
|
"id": "envelope.finality",
|
|
"source": "finality",
|
|
"level": "anchoring",
|
|
"sites": 6,
|
|
"says": "the statementHash is recorded in the notary under a state root that a verified post-quantum anchor certificate covers (level by site: see finalitySites)"
|
|
}
|
|
],
|
|
"finalitySites": [
|
|
{
|
|
"site": "most recent anchor did not verify",
|
|
"level": "finality",
|
|
"reachableWithAnHonestEndpoint": false
|
|
},
|
|
{
|
|
"site": "the header the endpoint served for block",
|
|
"level": "anchoring",
|
|
"reachableWithAnHonestEndpoint": false
|
|
},
|
|
{
|
|
"site": "has no account at",
|
|
"level": "anchoring",
|
|
"reachableWithAnHonestEndpoint": false
|
|
},
|
|
{
|
|
"site": "is not the AereNotary contract",
|
|
"level": "anchoring",
|
|
"reachableWithAnHonestEndpoint": false
|
|
},
|
|
{
|
|
"site": "the Merkle proof for block",
|
|
"level": "anchoring",
|
|
"reachableWithAnHonestEndpoint": false
|
|
},
|
|
{
|
|
"site": "not notarized:",
|
|
"level": "anchoring",
|
|
"reachableWithAnHonestEndpoint": true
|
|
}
|
|
]
|
|
},
|
|
"payment-risk": {
|
|
"artifacts": [
|
|
"payment-risk"
|
|
],
|
|
"rules": [
|
|
{
|
|
"id": "risk.form",
|
|
"source": "forma",
|
|
"level": "integrity",
|
|
"sites": 4,
|
|
"says": "payer and payee are addresses; chain, asset, a positive integer amount and the time are given"
|
|
},
|
|
{
|
|
"id": "risk.asset",
|
|
"source": "activ",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the asset on that chain is allowed by the declared policy"
|
|
},
|
|
{
|
|
"id": "risk.counterparty",
|
|
"source": "contrapartida",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the payee is not the payer and is not a refused counterparty of the policy"
|
|
},
|
|
{
|
|
"id": "risk.rate",
|
|
"source": "curs",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the USD rate is declared (value, source, time) when the policy requires it"
|
|
},
|
|
{
|
|
"id": "risk.limit",
|
|
"source": "limita",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the amount in USD is within the per-payment limit of the policy"
|
|
},
|
|
{
|
|
"id": "risk.window",
|
|
"source": "fereastra",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the amount and the count stay within the sliding window of the policy"
|
|
}
|
|
],
|
|
"marked": "by a marker on every check"
|
|
},
|
|
"payment-receipt": {
|
|
"artifacts": [
|
|
"payment-receipt"
|
|
],
|
|
"rules": [
|
|
{
|
|
"id": "receipt.binding",
|
|
"source": "legatura",
|
|
"level": "integrity",
|
|
"sites": 2,
|
|
"says": "the settlement envelope commits to this instruction and says the same thing"
|
|
},
|
|
{
|
|
"id": "receipt.amount",
|
|
"source": "suma",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the USD amount is the amount at the declared rate, exactly"
|
|
},
|
|
{
|
|
"id": "receipt.policy",
|
|
"source": "politica",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the policy shown hashes to the policy the risk verdict names"
|
|
},
|
|
{
|
|
"id": "receipt.risk",
|
|
"source": "risc",
|
|
"level": "integrity",
|
|
"sites": 3,
|
|
"says": "the risk verdict reproduces from the inputs and the policy, and it allowed this payment"
|
|
},
|
|
{
|
|
"id": "receipt.chain",
|
|
"source": "lant",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the transaction supplied is this payment: payer, payee, value, block, mined"
|
|
}
|
|
],
|
|
"marked": "by a marker on every check"
|
|
},
|
|
"market-timeline": {
|
|
"artifacts": [
|
|
"market-timeline"
|
|
],
|
|
"rules": [
|
|
{
|
|
"id": "market.form",
|
|
"source": "forma",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the timeline is well formed: events with name, arguments, sender, integer time and block; the job and the constants with their integer fields"
|
|
},
|
|
{
|
|
"id": "market.complete",
|
|
"source": "intreg",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the timeline carries every event the job state implies: posted; claimed when a provider is set; submitted and disputed when their times are set"
|
|
},
|
|
{
|
|
"id": "market.posting",
|
|
"source": "postare",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the JobPosted event matches the job (requester, spec, deadline, reward)"
|
|
},
|
|
{
|
|
"id": "market.deadline",
|
|
"source": "termen",
|
|
"level": "integrity",
|
|
"sites": 3,
|
|
"says": "claim and submission are within the deadline; an expiry refund only after it"
|
|
},
|
|
{
|
|
"id": "market.window",
|
|
"source": "fereastra",
|
|
"level": "integrity",
|
|
"sites": 2,
|
|
"says": "a dispute is raised inside the challenge window; a third party finalizes only after it"
|
|
},
|
|
{
|
|
"id": "market.arbiter",
|
|
"source": "arbitru",
|
|
"level": "integrity",
|
|
"sites": 3,
|
|
"says": "a dispute is resolved by the arbiter, or timed out only after the arbitration timeout"
|
|
},
|
|
{
|
|
"id": "market.payout",
|
|
"source": "plata",
|
|
"level": "integrity",
|
|
"sites": 4,
|
|
"says": "the terminal payout matches the final state (who, how much, which bond)"
|
|
},
|
|
{
|
|
"id": "market.result",
|
|
"source": "rezultat",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the result bytes hash to the commitment on chain"
|
|
},
|
|
{
|
|
"id": "market.replay",
|
|
"source": "replay",
|
|
"level": "integrity",
|
|
"sites": 3,
|
|
"says": "the public task recomputed agrees with who was paid or slashed"
|
|
},
|
|
{
|
|
"id": "market.proof",
|
|
"source": "dovada",
|
|
"level": "integrity",
|
|
"sites": 5,
|
|
"says": "the execution envelope names this job and existed before the window closed"
|
|
}
|
|
],
|
|
"marked": "by a marker on every check"
|
|
},
|
|
"dataset": {
|
|
"artifacts": [
|
|
"dataset-record",
|
|
"dataset-answer",
|
|
"dataset-consistency",
|
|
"dataset-sample"
|
|
],
|
|
"rules": [
|
|
{
|
|
"id": "dataset.form",
|
|
"source": "forma",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "a row carries its field commitments and its disclosed fields"
|
|
},
|
|
{
|
|
"id": "dataset.commitment",
|
|
"source": "angajament",
|
|
"level": "integrity",
|
|
"sites": 4,
|
|
"says": "the record, answer or proof names the commitment it is checked against"
|
|
},
|
|
{
|
|
"id": "dataset.field",
|
|
"source": "camp",
|
|
"level": "integrity",
|
|
"sites": 2,
|
|
"says": "a disclosed value opens its salted field commitment"
|
|
},
|
|
{
|
|
"id": "dataset.inclusion",
|
|
"source": "includere",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the record is in the log of that version (RFC 9162 inclusion)"
|
|
},
|
|
{
|
|
"id": "dataset.index",
|
|
"source": "index",
|
|
"level": "integrity",
|
|
"sites": 2,
|
|
"says": "the row is at its stated position of the sorted index"
|
|
},
|
|
{
|
|
"id": "dataset.range",
|
|
"source": "interval",
|
|
"level": "integrity",
|
|
"sites": 2,
|
|
"says": "every row returned is inside the queried range"
|
|
},
|
|
{
|
|
"id": "dataset.order",
|
|
"source": "ordine",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "consecutive rows are in index order"
|
|
},
|
|
{
|
|
"id": "dataset.completeness",
|
|
"source": "completitudine",
|
|
"level": "integrity",
|
|
"sites": 5,
|
|
"says": "the rows are the whole contiguous run; the neighbours on both sides are outside the range"
|
|
},
|
|
{
|
|
"id": "dataset.consistency",
|
|
"source": "consistenta",
|
|
"level": "integrity",
|
|
"sites": 3,
|
|
"says": "the older log is a prefix of the newer (RFC 9162 consistency) and the versions are linked"
|
|
},
|
|
{
|
|
"id": "dataset.sample",
|
|
"source": "esantion",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "every sampled position is served and verifies"
|
|
}
|
|
],
|
|
"marked": "by a marker on every check"
|
|
},
|
|
"ai-trust": {
|
|
"artifacts": [
|
|
"ai-trust-bundle"
|
|
],
|
|
"rules": [
|
|
{
|
|
"id": "aitrust.form",
|
|
"source": "form",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the bundle has the format, an identity, a ledger with its policy, and a Proof of AI envelope"
|
|
},
|
|
{
|
|
"id": "aitrust.identity-mismatch",
|
|
"source": "identity-mismatch",
|
|
"level": "authenticity",
|
|
"sites": 1,
|
|
"says": "the id derived from the key is the one the bundle, the ledger and the output name"
|
|
},
|
|
{
|
|
"id": "aitrust.identity-key",
|
|
"source": "identity-key",
|
|
"level": "authenticity",
|
|
"sites": 1,
|
|
"says": "the public key of the identity can be read"
|
|
},
|
|
{
|
|
"id": "aitrust.version-attestation",
|
|
"source": "version-attestation",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the Proof of Software attestation of the model artifact verifies as an envelope"
|
|
},
|
|
{
|
|
"id": "aitrust.version-artifact-mismatch",
|
|
"source": "version-artifact-mismatch",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the output names model weights that the attestation covers"
|
|
},
|
|
{
|
|
"id": "aitrust.version-label-mismatch",
|
|
"source": "version-label-mismatch",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the output and the attestation name the same model version"
|
|
},
|
|
{
|
|
"id": "aitrust.runtime-record",
|
|
"source": "runtime-record",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the runtime record is a verified runtime attestation"
|
|
},
|
|
{
|
|
"id": "aitrust.runtime-artifact-mismatch",
|
|
"source": "runtime-artifact-mismatch",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the host ran the artifact the output names"
|
|
},
|
|
{
|
|
"id": "aitrust.runtime-after-output",
|
|
"source": "runtime-after-output",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the runtime record is not dated after the output"
|
|
},
|
|
{
|
|
"id": "aitrust.audit-log-broken",
|
|
"source": "audit-log-broken",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the hash chain of the audit log given is intact"
|
|
},
|
|
{
|
|
"id": "aitrust.runtime-not-in-audit-log",
|
|
"source": "runtime-not-in-audit-log",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the runtime record is an entry of the audit log given"
|
|
},
|
|
{
|
|
"id": "aitrust.audit-head",
|
|
"source": "audit-head",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the audit log continues the attested head given"
|
|
},
|
|
{
|
|
"id": "aitrust.witness-head",
|
|
"source": "witness-head",
|
|
"level": "anchoring",
|
|
"sites": 1,
|
|
"says": "every notarized head given is a head of this ledger, recorded on the chain"
|
|
},
|
|
{
|
|
"id": "aitrust.policy-hash",
|
|
"source": "policy-hash",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the policy given hashes to the policy hash the bundle pins"
|
|
},
|
|
{
|
|
"id": "aitrust.ledger-invalid",
|
|
"source": "ledger-invalid",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the ledger verifies under its policy (signatures, chain, every decision re-derived)"
|
|
},
|
|
{
|
|
"id": "aitrust.output-not-in-ledger",
|
|
"source": "output-not-in-ledger",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "a ledger entry links this Proof of AI envelope"
|
|
},
|
|
{
|
|
"id": "aitrust.action-refused",
|
|
"source": "action-refused",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the ledger entry of the output was allowed by the policy"
|
|
},
|
|
{
|
|
"id": "aitrust.ledger-time-mismatch",
|
|
"source": "ledger-time-mismatch",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the ledger entry and the output are dated within the tolerance"
|
|
},
|
|
{
|
|
"id": "aitrust.policy",
|
|
"source": "policy",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the policy given is a policy"
|
|
},
|
|
{
|
|
"id": "aitrust.provenance-envelope",
|
|
"source": "provenance-envelope",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the Proof of AI envelope verifies as an envelope of its kind"
|
|
},
|
|
{
|
|
"id": "aitrust.provenance-finality",
|
|
"source": "provenance-finality",
|
|
"level": "anchoring",
|
|
"sites": 1,
|
|
"says": "a notarization the Proof of AI envelope claims is on the chain"
|
|
}
|
|
],
|
|
"marked": "at the refusal helper"
|
|
},
|
|
"audit-log": {
|
|
"artifacts": [
|
|
"audit-log"
|
|
],
|
|
"rules": [
|
|
{
|
|
"id": "auditlog.entry",
|
|
"source": "intrare",
|
|
"level": "integrity",
|
|
"sites": 2,
|
|
"says": "the log is a list, and each entry is a log entry"
|
|
},
|
|
{
|
|
"id": "auditlog.seq",
|
|
"source": "seq",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the entries are numbered from zero, without a gap"
|
|
},
|
|
{
|
|
"id": "auditlog.chain",
|
|
"source": "lant",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "each entry links the hash of the one before it"
|
|
},
|
|
{
|
|
"id": "auditlog.hash",
|
|
"source": "hash",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the hash of each entry is the hash of its content"
|
|
},
|
|
{
|
|
"id": "auditlog.head-form",
|
|
"source": "cap-forma",
|
|
"level": "integrity",
|
|
"sites": 2,
|
|
"says": "the attested head is an audit head attestation with a count and a head hash"
|
|
},
|
|
{
|
|
"id": "auditlog.head-hash",
|
|
"source": "cap-hash",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the statementHash of the attested head is the hash of its statement"
|
|
},
|
|
{
|
|
"id": "auditlog.head-unsigned",
|
|
"source": "cap-nesemnat",
|
|
"level": "authenticity",
|
|
"sites": 1,
|
|
"says": "the head is signed when a signer is required"
|
|
},
|
|
{
|
|
"id": "auditlog.head-scheme",
|
|
"source": "cap-schema",
|
|
"level": "authenticity",
|
|
"sites": 2,
|
|
"says": "the head signature is an ml-dsa-65 signature, made with an ML-DSA-65 key"
|
|
},
|
|
{
|
|
"id": "auditlog.head-key",
|
|
"source": "cap-cheie",
|
|
"level": "authenticity",
|
|
"sites": 1,
|
|
"says": "the public key of the head signature can be read"
|
|
},
|
|
{
|
|
"id": "auditlog.head-signature",
|
|
"source": "cap-semnatura",
|
|
"level": "authenticity",
|
|
"sites": 1,
|
|
"says": "the head signature verifies over the statement"
|
|
},
|
|
{
|
|
"id": "auditlog.head-signer",
|
|
"source": "cap-semnatar",
|
|
"level": "authenticity",
|
|
"sites": 1,
|
|
"says": "the head is signed by the expected signer"
|
|
},
|
|
{
|
|
"id": "auditlog.head-short",
|
|
"source": "cap-scurt",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the log has at least as many entries as the attested head covers"
|
|
},
|
|
{
|
|
"id": "auditlog.head-rewritten",
|
|
"source": "cap-rescris",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the entry at the attested point is the attested head (the history before it was not rewritten)"
|
|
}
|
|
],
|
|
"marked": "by a marker on every check"
|
|
},
|
|
"audit-tree": {
|
|
"artifacts": [
|
|
"audit-inclusion",
|
|
"audit-consistency"
|
|
],
|
|
"rules": [
|
|
{
|
|
"id": "audittree.proof-form",
|
|
"source": "dovada-forma",
|
|
"level": "integrity",
|
|
"sites": 2,
|
|
"says": "the proof is an inclusion or a consistency proof that can be read"
|
|
},
|
|
{
|
|
"id": "audittree.head-form",
|
|
"source": "arbore-forma",
|
|
"level": "integrity",
|
|
"sites": 2,
|
|
"says": "the tree head is a tree head attestation with a size and a root"
|
|
},
|
|
{
|
|
"id": "audittree.head-hash",
|
|
"source": "arbore-hash",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the statementHash of the tree head is the hash of its statement"
|
|
},
|
|
{
|
|
"id": "audittree.inclusion-index",
|
|
"source": "includere-index",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the entry shown is the entry of the index proven"
|
|
},
|
|
{
|
|
"id": "audittree.inclusion-entry",
|
|
"source": "includere-intrare",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the hash of the entry shown is the hash of its content"
|
|
},
|
|
{
|
|
"id": "audittree.inclusion-envelope",
|
|
"source": "includere-plic",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the envelope inside the entry hashes to its statementHash"
|
|
},
|
|
{
|
|
"id": "audittree.inclusion-leaf",
|
|
"source": "includere-frunza",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the leaf is the leaf of this entry"
|
|
},
|
|
{
|
|
"id": "audittree.inclusion-path",
|
|
"source": "includere-drum",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the path leads from the leaf to the root (RFC 9162 inclusion)"
|
|
},
|
|
{
|
|
"id": "audittree.inclusion-head",
|
|
"source": "includere-cap",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the proof is for the tree of the head given (size and root)"
|
|
},
|
|
{
|
|
"id": "audittree.consistency-start",
|
|
"source": "consistenta-inceput",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the consistency proof starts at the old head"
|
|
},
|
|
{
|
|
"id": "audittree.consistency-end",
|
|
"source": "consistenta-sfarsit",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the consistency proof ends at the new head"
|
|
},
|
|
{
|
|
"id": "audittree.consistency",
|
|
"source": "consistenta",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the new tree extends the old one (RFC 9162 consistency)"
|
|
}
|
|
],
|
|
"marked": "by a marker on every check"
|
|
},
|
|
"agent-ledger": {
|
|
"artifacts": [
|
|
"agent-ledger"
|
|
],
|
|
"rules": [
|
|
{
|
|
"id": "agents.ledger-form",
|
|
"source": "registru",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "a ledger with a list of entries is given"
|
|
},
|
|
{
|
|
"id": "agents.policy",
|
|
"source": "politica",
|
|
"level": "integrity",
|
|
"sites": 2,
|
|
"says": "the policy given is a policy, and hashes to the hash the verifier pins"
|
|
},
|
|
{
|
|
"id": "agents.other-policy",
|
|
"source": "alta-politica",
|
|
"level": "integrity",
|
|
"sites": 3,
|
|
"says": "the ledger and every entry name the policy given, and the policy is this agent's"
|
|
},
|
|
{
|
|
"id": "agents.session",
|
|
"source": "sesiune",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the session is the one derived from the agent and the policy"
|
|
},
|
|
{
|
|
"id": "agents.key",
|
|
"source": "cheie",
|
|
"level": "authenticity",
|
|
"sites": 2,
|
|
"says": "the agent key can be read and is an ML-DSA-65 key"
|
|
},
|
|
{
|
|
"id": "agents.identity",
|
|
"source": "identitate",
|
|
"level": "authenticity",
|
|
"sites": 1,
|
|
"says": "the agent id is derived from the key"
|
|
},
|
|
{
|
|
"id": "agents.anchor",
|
|
"source": "ancora",
|
|
"level": "integrity",
|
|
"sites": 3,
|
|
"says": "every anchor given names an entry of this ledger, with a time"
|
|
},
|
|
{
|
|
"id": "agents.seq",
|
|
"source": "seq",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the entries are numbered from zero, without a gap"
|
|
},
|
|
{
|
|
"id": "agents.chain",
|
|
"source": "lant",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "each entry links the hash of the one before it"
|
|
},
|
|
{
|
|
"id": "agents.body",
|
|
"source": "corp",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the body of an entry names the agent, the session and the sequence number of its header"
|
|
},
|
|
{
|
|
"id": "agents.signature",
|
|
"source": "semnatura",
|
|
"level": "authenticity",
|
|
"sites": 1,
|
|
"says": "every entry is signed by the agent key"
|
|
},
|
|
{
|
|
"id": "agents.hash",
|
|
"source": "hash",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the hash of each entry reproduces"
|
|
},
|
|
{
|
|
"id": "agents.time",
|
|
"source": "timp",
|
|
"level": "integrity",
|
|
"sites": 6,
|
|
"says": "entry times do not go backwards and stay within the bounds the verifier has (its clock, a witnessed start, the anchors)"
|
|
},
|
|
{
|
|
"id": "agents.revocation",
|
|
"source": "revocare",
|
|
"level": "integrity",
|
|
"sites": 3,
|
|
"says": "a revocation entry carries a revocation that verifies, and says what it carries"
|
|
},
|
|
{
|
|
"id": "agents.approvals",
|
|
"source": "aprobari",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "an approvals field, when present, is a list that is not empty"
|
|
},
|
|
{
|
|
"id": "agents.decision",
|
|
"source": "decizie",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "every decision written is the decision the policy gives when replayed"
|
|
}
|
|
],
|
|
"marked": "by a marker on every check"
|
|
}
|
|
},
|
|
"notEnrolled": [
|
|
{
|
|
"verifier": "identity",
|
|
"refusalSites": 41,
|
|
"why": "its checks are labelled rows, not rule ids (counted: the check rows of its presentation verifier; its SD-JWT, Travel Rule and compliance verifiers are not counted)"
|
|
}
|
|
]
|
|
}
|