@motebit/crypto 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/artifacts.d.ts +1 -1
- package/dist/artifacts.js +1158 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/credential-anchor.d.ts.map +1 -1
- package/dist/credential-anchor.js +200 -0
- package/dist/credential-anchor.js.map +1 -0
- package/dist/credentials.js +212 -0
- package/dist/credentials.js.map +1 -0
- package/dist/deletion-certificate.d.ts +256 -0
- package/dist/deletion-certificate.d.ts.map +1 -0
- package/dist/deletion-certificate.js +562 -0
- package/dist/deletion-certificate.js.map +1 -0
- package/dist/hardware-attestation.js +400 -0
- package/dist/hardware-attestation.js.map +1 -0
- package/dist/index.d.ts +120 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1070 -5862
- package/dist/index.js.map +1 -0
- package/dist/merkle.d.ts +34 -0
- package/dist/merkle.d.ts.map +1 -0
- package/dist/merkle.js +84 -0
- package/dist/merkle.js.map +1 -0
- package/dist/signing.js +314 -0
- package/dist/signing.js.map +1 -0
- package/dist/skills.d.ts +95 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +228 -0
- package/dist/skills.js.map +1 -0
- package/dist/suite-dispatch.js +189 -3223
- package/dist/suite-dispatch.js.map +1 -0
- package/dist/witness-omission-dispute.d.ts +98 -0
- package/dist/witness-omission-dispute.d.ts.map +1 -0
- package/dist/witness-omission-dispute.js +237 -0
- package/dist/witness-omission-dispute.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deletion certificate — sign + verify for the three retention shapes.
|
|
3
|
+
*
|
|
4
|
+
* Permissive floor (Apache-2.0). Zero monorepo dependencies — types
|
|
5
|
+
* mirror `@motebit/protocol`'s discriminated union; primitives route
|
|
6
|
+
* through `@motebit/crypto/suite-dispatch`.
|
|
7
|
+
*
|
|
8
|
+
* Three arms in one union (`@motebit/protocol :: DeletionCertificate`):
|
|
9
|
+
*
|
|
10
|
+
* - `mutable_pruning` and `consolidation_flush` — multi-signature
|
|
11
|
+
* certs (subject / operator / delegate / guardian, at-least-one
|
|
12
|
+
* required by the reason-table). Each present signature covers the
|
|
13
|
+
* same canonical bytes: `canonicalJson(cert minus all *_signature
|
|
14
|
+
* fields)`. Pattern matches identity-v1 §3.8.1 dual-signature
|
|
15
|
+
* succession (one canonical payload, multiple verifiable signers).
|
|
16
|
+
*
|
|
17
|
+
* - `append_only_horizon` — single-issuer signature plus witness
|
|
18
|
+
* signatures. Both the issuer and every witness sign the same
|
|
19
|
+
* `canonicalJson(cert minus signature)`. Witness array is part of
|
|
20
|
+
* the signed body — a forged witness fails verification.
|
|
21
|
+
*
|
|
22
|
+
* Verification dispatches by `kind`. Reason × signer × mode table
|
|
23
|
+
* (decision 5) gates which signer compositions are admissible. Each
|
|
24
|
+
* admissible signature is then cryptographically verified through
|
|
25
|
+
* `verifyBySuite`.
|
|
26
|
+
*/
|
|
27
|
+
import type { DeletionCertificate, HorizonWitness, HorizonWitnessRequestBody, SuiteId } from "@motebit/protocol";
|
|
28
|
+
/** The cryptosuite every deletion certificate signs under today. */
|
|
29
|
+
export declare const DELETION_CERTIFICATE_SUITE: SuiteId;
|
|
30
|
+
/**
|
|
31
|
+
* Filing window for `WitnessOmissionDispute` (retention phase 4b-3).
|
|
32
|
+
* A dispute MUST be filed within 24h of the cert's `issued_at`;
|
|
33
|
+
* `verifyWitnessOmissionDispute` rejects beyond this window. Mirrors
|
|
34
|
+
* the 24h cadence of `spec/dispute-v1.md` §7.5 (filing / withdrawal /
|
|
35
|
+
* appeal windows).
|
|
36
|
+
*/
|
|
37
|
+
export declare const WITNESS_OMISSION_DISPUTE_WINDOW_MS: number;
|
|
38
|
+
type DeploymentMode = "sovereign" | "mediated" | "enterprise";
|
|
39
|
+
/** Result of verifying a deletion certificate. Fail-closed: any failure → `valid: false`. */
|
|
40
|
+
export interface DeletionCertificateVerifyResult {
|
|
41
|
+
readonly valid: boolean;
|
|
42
|
+
readonly errors: string[];
|
|
43
|
+
/** Per-step breakdown — useful for debugging and audit display. */
|
|
44
|
+
readonly steps: {
|
|
45
|
+
readonly reason_table_satisfied: boolean;
|
|
46
|
+
readonly subject_signature_valid: boolean | null;
|
|
47
|
+
readonly operator_signature_valid: boolean | null;
|
|
48
|
+
readonly delegate_signature_valid: boolean | null;
|
|
49
|
+
readonly guardian_signature_valid: boolean | null;
|
|
50
|
+
/** Horizon-arm only: issuer signature on the cert body. */
|
|
51
|
+
readonly horizon_issuer_signature_valid: boolean | null;
|
|
52
|
+
/** Horizon-arm only: count of witness signatures that verified. */
|
|
53
|
+
readonly horizon_witnesses_valid_count: number | null;
|
|
54
|
+
/** Horizon-arm only: count of witness signatures present. */
|
|
55
|
+
readonly horizon_witnesses_present_count: number | null;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Resolver context for the verifier. Callers supply the public-key
|
|
60
|
+
* resolution paths the cert's signers reference. Resolvers return
|
|
61
|
+
* `null` when the key cannot be resolved (unknown id, registry miss);
|
|
62
|
+
* the verifier rejects fail-closed in that case.
|
|
63
|
+
*
|
|
64
|
+
* The guardian signature embeds its own public key (`guardian_public_key`),
|
|
65
|
+
* so no guardian resolver is needed — the verifier does cross-check that
|
|
66
|
+
* the embedded key matches the motebit's declared guardian via the
|
|
67
|
+
* `validateGuardianBinding` callback when supplied.
|
|
68
|
+
*/
|
|
69
|
+
export interface DeletionCertificateVerifyContext {
|
|
70
|
+
/** Resolve a motebit's identity Ed25519 public key (32 bytes). */
|
|
71
|
+
readonly resolveMotebitPublicKey: (motebitId: string) => Promise<Uint8Array | null>;
|
|
72
|
+
/** Resolve an operator's Ed25519 public key (32 bytes). */
|
|
73
|
+
readonly resolveOperatorPublicKey: (operatorId: string) => Promise<Uint8Array | null>;
|
|
74
|
+
/**
|
|
75
|
+
* Optional cross-check that an embedded `guardian_public_key` actually
|
|
76
|
+
* is the declared guardian for the cert's subject motebit. When
|
|
77
|
+
* absent, the verifier verifies the signature against the embedded
|
|
78
|
+
* key without checking the binding.
|
|
79
|
+
*/
|
|
80
|
+
readonly validateGuardianBinding?: (targetMotebitId: string | undefined, guardianPublicKeyHex: string) => Promise<boolean>;
|
|
81
|
+
/**
|
|
82
|
+
* Optional declared deployment mode. When supplied, the verifier
|
|
83
|
+
* additionally checks the cert's reason against
|
|
84
|
+
* `REASON_TABLE[reason].modes`. When absent, mode-checking is skipped
|
|
85
|
+
* (the reason × signer table still applies).
|
|
86
|
+
*/
|
|
87
|
+
readonly deploymentMode?: DeploymentMode;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Compute the canonical signing bytes for a `mutable_pruning` or
|
|
91
|
+
* `consolidation_flush` cert. Strips every `*_signature` field so all
|
|
92
|
+
* present signers sign identical bytes — matches identity-v1 §3.8.1's
|
|
93
|
+
* dual-signature canonical payload.
|
|
94
|
+
*/
|
|
95
|
+
export declare function canonicalizeMultiSignatureCert(cert: Extract<DeletionCertificate, {
|
|
96
|
+
kind: "mutable_pruning" | "consolidation_flush";
|
|
97
|
+
}>): Uint8Array;
|
|
98
|
+
/**
|
|
99
|
+
* Compute the canonical signing bytes for an `append_only_horizon`
|
|
100
|
+
* cert's ISSUER signature. Strips only `signature`. The issuer commits
|
|
101
|
+
* to the full body — including every witness's signature in
|
|
102
|
+
* `witnessed_by` — so a forged witness fails verification at the
|
|
103
|
+
* issuer signature step (the body the issuer signed no longer matches
|
|
104
|
+
* the post-tampering body).
|
|
105
|
+
*/
|
|
106
|
+
export declare function canonicalizeHorizonCert(cert: Extract<DeletionCertificate, {
|
|
107
|
+
kind: "append_only_horizon";
|
|
108
|
+
}>): Uint8Array;
|
|
109
|
+
/**
|
|
110
|
+
* Compute the canonical signing bytes for a WITNESS signature on an
|
|
111
|
+
* `append_only_horizon` cert. Strips both `signature` and
|
|
112
|
+
* `witnessed_by` so witnesses can co-sign asynchronously without
|
|
113
|
+
* needing to know each other's signatures.
|
|
114
|
+
*
|
|
115
|
+
* Witness's identity is bound to the signature via the public key
|
|
116
|
+
* used at verification (resolved from `witnessed_by[i].motebit_id`).
|
|
117
|
+
* The cert body's other fields (subject, store_id, horizon_ts,
|
|
118
|
+
* issued_at, federation_graph_anchor) make two distinct horizon
|
|
119
|
+
* advances produce distinct signing bytes, so a witness signature
|
|
120
|
+
* cannot be relayed to a different cert.
|
|
121
|
+
*
|
|
122
|
+
* The issuer's separate signature commits to the assembled witness
|
|
123
|
+
* array — that's the binding that makes a forged or substituted
|
|
124
|
+
* witness detectable.
|
|
125
|
+
*/
|
|
126
|
+
export declare function canonicalizeHorizonCertForWitness(cert: Extract<DeletionCertificate, {
|
|
127
|
+
kind: "append_only_horizon";
|
|
128
|
+
}>): Uint8Array;
|
|
129
|
+
/**
|
|
130
|
+
* Sign a `mutable_pruning` or `consolidation_flush` cert as the
|
|
131
|
+
* subject (motebit identity key). Adds the `subject_signature` block.
|
|
132
|
+
*
|
|
133
|
+
* Callers compose: sign as subject → optionally sign as operator → emit.
|
|
134
|
+
* Each signing step appends a signature block; the canonical bytes are
|
|
135
|
+
* recomputed from the body each time, so signatures are commutative
|
|
136
|
+
* (any signing order produces identical bytes for every signer).
|
|
137
|
+
*/
|
|
138
|
+
export declare function signCertAsSubject<T extends Extract<DeletionCertificate, {
|
|
139
|
+
kind: "mutable_pruning" | "consolidation_flush";
|
|
140
|
+
}>>(cert: T, motebitId: string, privateKey: Uint8Array): Promise<T>;
|
|
141
|
+
/** Sign a multi-signature cert as the operator. */
|
|
142
|
+
export declare function signCertAsOperator<T extends Extract<DeletionCertificate, {
|
|
143
|
+
kind: "mutable_pruning" | "consolidation_flush";
|
|
144
|
+
}>>(cert: T, operatorId: string, privateKey: Uint8Array): Promise<T>;
|
|
145
|
+
/** Sign a multi-signature cert as a delegate (multi-hop authorization). */
|
|
146
|
+
export declare function signCertAsDelegate<T extends Extract<DeletionCertificate, {
|
|
147
|
+
kind: "mutable_pruning" | "consolidation_flush";
|
|
148
|
+
}>>(cert: T, delegateMotebitId: string, delegationReceiptId: string, privateKey: Uint8Array): Promise<T>;
|
|
149
|
+
/** Sign a multi-signature cert as the guardian (enterprise custody). */
|
|
150
|
+
export declare function signCertAsGuardian<T extends Extract<DeletionCertificate, {
|
|
151
|
+
kind: "mutable_pruning" | "consolidation_flush";
|
|
152
|
+
}>>(cert: T, guardianPublicKey: Uint8Array, privateKey: Uint8Array): Promise<T>;
|
|
153
|
+
/**
|
|
154
|
+
* Sign an `append_only_horizon` cert as the issuer. The issuer is the
|
|
155
|
+
* subject named by the discriminator — motebit identity key for
|
|
156
|
+
* per-motebit horizons, operator key for operator-wide horizons.
|
|
157
|
+
*/
|
|
158
|
+
export declare function signHorizonCertAsIssuer(cert: Omit<Extract<DeletionCertificate, {
|
|
159
|
+
kind: "append_only_horizon";
|
|
160
|
+
}>, "suite" | "signature">, privateKey: Uint8Array): Promise<Extract<DeletionCertificate, {
|
|
161
|
+
kind: "append_only_horizon";
|
|
162
|
+
}>>;
|
|
163
|
+
/**
|
|
164
|
+
* Add a witness signature to an `append_only_horizon` cert. Witness
|
|
165
|
+
* signs the same canonical body as the issuer; the witness array is
|
|
166
|
+
* part of the signed body, so once the issuer has signed, the witness
|
|
167
|
+
* additions are appended without re-signing the issuer side.
|
|
168
|
+
*
|
|
169
|
+
* Note: the issuer's signature is over the body INCLUDING the
|
|
170
|
+
* witness array as it stood when the issuer signed. Witnesses added
|
|
171
|
+
* after issuer-signing invalidate the issuer signature. Production
|
|
172
|
+
* flow: build the witness array first → issuer signs last. This
|
|
173
|
+
* function is here for tests and offline witness aggregation.
|
|
174
|
+
*/
|
|
175
|
+
export declare function signHorizonWitness(cert: Extract<DeletionCertificate, {
|
|
176
|
+
kind: "append_only_horizon";
|
|
177
|
+
}>, witnessMotebitId: string, privateKey: Uint8Array, inclusionProof?: HorizonWitness["inclusion_proof"]): Promise<HorizonWitness>;
|
|
178
|
+
/**
|
|
179
|
+
* Compute the canonical signing bytes for a `HorizonWitnessRequestBody`.
|
|
180
|
+
* Byte-equal to `canonicalizeHorizonCertForWitness` over the
|
|
181
|
+
* corresponding full cert (since the function strips
|
|
182
|
+
* `witnessed_by[]` + `signature`); exposed as a separate helper so
|
|
183
|
+
* call sites pass the wire-shaped request body directly without
|
|
184
|
+
* synthesizing a full cert.
|
|
185
|
+
*/
|
|
186
|
+
export declare function canonicalizeHorizonWitnessRequestBody(body: HorizonWitnessRequestBody): Uint8Array;
|
|
187
|
+
/**
|
|
188
|
+
* Sign a `HorizonWitnessRequestBody` — produces a base64url-encoded
|
|
189
|
+
* Ed25519 signature over the canonical bytes. Used by BOTH:
|
|
190
|
+
*
|
|
191
|
+
* - the issuer, for `WitnessSolicitationRequest.issuer_signature`
|
|
192
|
+
* (attests authenticity of the solicitation request before any
|
|
193
|
+
* peer signs as witness),
|
|
194
|
+
* - each peer witness, for `WitnessSolicitationResponse.signature`
|
|
195
|
+
* (the per-witness signature copied verbatim into
|
|
196
|
+
* `cert.witnessed_by[].signature`).
|
|
197
|
+
*
|
|
198
|
+
* Both roles sign byte-equal canonical bytes by design (session-3
|
|
199
|
+
* sub-decision: issuer-signature payload IS witness-signature payload).
|
|
200
|
+
* The peer's verify-issuer + sign-as-witness paths share canonical-bytes
|
|
201
|
+
* derivation through this primitive — drift-impossible.
|
|
202
|
+
*/
|
|
203
|
+
export declare function signHorizonWitnessRequestBody(body: HorizonWitnessRequestBody, privateKey: Uint8Array): Promise<string>;
|
|
204
|
+
/**
|
|
205
|
+
* Verify the issuer's `issuer_signature` on a
|
|
206
|
+
* `WitnessSolicitationRequest`. Peer-side fail-closed gate before the
|
|
207
|
+
* peer signs as a witness over the same bytes. Returns `false` on any
|
|
208
|
+
* malformed signature, suite mismatch, or hash failure — never throws.
|
|
209
|
+
*/
|
|
210
|
+
export declare function verifyHorizonWitnessRequestSignature(body: HorizonWitnessRequestBody, signatureBase64Url: string, issuerPublicKey: Uint8Array): Promise<boolean>;
|
|
211
|
+
/**
|
|
212
|
+
* Verify a deletion certificate. Single entry point — dispatches by
|
|
213
|
+
* `kind` to the per-arm verifier. Fail-closed throughout: any
|
|
214
|
+
* verification step that errors or returns false → `valid: false`.
|
|
215
|
+
*
|
|
216
|
+
* The verifier checks, in order:
|
|
217
|
+
* 1. Reason × signer × mode table is satisfied (decision 5).
|
|
218
|
+
* 2. Each present signature is cryptographically valid against the
|
|
219
|
+
* cert's canonical signing bytes.
|
|
220
|
+
* 3. (Horizon arm only) the issuer signature and each witness
|
|
221
|
+
* signature verify.
|
|
222
|
+
* 4. (Optional, when `validateGuardianBinding` supplied) the
|
|
223
|
+
* embedded guardian public key matches the subject motebit's
|
|
224
|
+
* declared guardian.
|
|
225
|
+
*/
|
|
226
|
+
export declare function verifyDeletionCertificate(cert: DeletionCertificate, ctx: DeletionCertificateVerifyContext): Promise<DeletionCertificateVerifyResult>;
|
|
227
|
+
import type { RetentionManifest } from "@motebit/protocol";
|
|
228
|
+
/** Result of verifying a retention manifest. Fail-closed: any failure → `valid: false`. */
|
|
229
|
+
export interface RetentionManifestVerifyResult {
|
|
230
|
+
readonly valid: boolean;
|
|
231
|
+
readonly errors: string[];
|
|
232
|
+
/** The parsed manifest if signature verified, else `null`. */
|
|
233
|
+
readonly manifest: RetentionManifest | null;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Verify a retention manifest published at
|
|
237
|
+
* `/.well-known/motebit-retention.json`. The manifest's signature
|
|
238
|
+
* covers `canonicalJson(manifest minus signature)`, signed by the
|
|
239
|
+
* operator's identity key under `motebit-jcs-ed25519-hex-v1` —
|
|
240
|
+
* sibling to the operator-transparency manifest's signing flow.
|
|
241
|
+
*
|
|
242
|
+
* Browser-side re-verifier per docs/doctrine/retention-policy.md
|
|
243
|
+
* §"Self-attesting transparency". Composes existing primitives —
|
|
244
|
+
* `canonicalJson` from signing.ts, `verifyBySuite` from
|
|
245
|
+
* suite-dispatch.ts. Same shape as the `verifySkillBundle`
|
|
246
|
+
* (87e2f174) browser primitive.
|
|
247
|
+
*
|
|
248
|
+
* The verifier accepts the operator's public key directly — callers
|
|
249
|
+
* resolve it from the operator-transparency manifest at
|
|
250
|
+
* `/.well-known/motebit-transparency.json` (its `relay_public_key`
|
|
251
|
+
* field), so a single manifest fetch + verify pair gives users a
|
|
252
|
+
* full retention claim audit.
|
|
253
|
+
*/
|
|
254
|
+
export declare function verifyRetentionManifest(manifest: RetentionManifest, operatorPublicKey: Uint8Array): Promise<RetentionManifestVerifyResult>;
|
|
255
|
+
export {};
|
|
256
|
+
//# sourceMappingURL=deletion-certificate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deletion-certificate.d.ts","sourceRoot":"","sources":["../src/deletion-certificate.ts"],"names":[],"mappings":"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"}
|