@cedulon/checkpoint 0.2.0 → 0.3.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/checkpoint.d.ts +24 -4
- package/dist/checkpoint.d.ts.map +1 -1
- package/dist/checkpoint.js +28 -8
- package/dist/checkpoint.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/transparency.d.ts +13 -0
- package/dist/transparency.d.ts.map +1 -1
- package/dist/transparency.js +31 -3
- package/dist/transparency.js.map +1 -1
- package/package.json +47 -47
package/dist/checkpoint.d.ts
CHANGED
|
@@ -14,7 +14,12 @@ export type CheckpointClaims = {
|
|
|
14
14
|
endMs: number;
|
|
15
15
|
receiptCount: number;
|
|
16
16
|
chainHeadHash: string | null;
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Per-currency settled totals for the window. `null` means the issuer published
|
|
19
|
+
* the checkpoint with its totals withheld. The distinction is inside the signature:
|
|
20
|
+
* an empty object is an honest zero, `null` is a redaction the issuer signed for.
|
|
21
|
+
*/
|
|
22
|
+
totals: Record<string, string> | null;
|
|
18
23
|
prevCheckpointHash: string | null;
|
|
19
24
|
};
|
|
20
25
|
export type SignedCheckpoint = {
|
|
@@ -29,16 +34,31 @@ export declare function buildCheckpointClaims(epoch: number, receipts: SignedRec
|
|
|
29
34
|
export declare function checkpointToCbor(claims: CheckpointClaims): Uint8Array;
|
|
30
35
|
export declare function checkpointFromCbor(bytes: Uint8Array): CheckpointClaims;
|
|
31
36
|
export declare function signCheckpoint(claims: CheckpointClaims, privateKeyPem: string, publicKeyPem: string): SignedCheckpoint;
|
|
32
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Publish a checkpoint with its totals withheld. The redaction is part of what
|
|
39
|
+
* gets signed, so it cannot be asserted — or undone — after the fact.
|
|
40
|
+
*/
|
|
41
|
+
export declare function redactCheckpointTotals(claims: CheckpointClaims): CheckpointClaims;
|
|
42
|
+
/**
|
|
43
|
+
* `expectedIssuerKeyPem` is the key the verifier holds out of band. Without it
|
|
44
|
+
* the checkpoint is checked against the key it carries, which proves internal
|
|
45
|
+
* consistency and nothing about who published the epoch.
|
|
46
|
+
*/
|
|
47
|
+
export declare function verifyCheckpoint(signed: SignedCheckpoint, expectedIssuerKeyPem?: string): boolean;
|
|
33
48
|
export declare function checkpointHash(signed: SignedCheckpoint): string;
|
|
34
49
|
export type ChainBreak = {
|
|
35
50
|
index: number;
|
|
36
51
|
reason: string;
|
|
37
52
|
};
|
|
38
|
-
export declare function findCheckpointChainBreak(chain: SignedCheckpoint[]): ChainBreak | null;
|
|
53
|
+
export declare function findCheckpointChainBreak(chain: SignedCheckpoint[], expectedIssuerKeyPem?: string): ChainBreak | null;
|
|
39
54
|
export type Equivocation = {
|
|
40
55
|
epoch: number;
|
|
41
56
|
hashes: string[];
|
|
42
57
|
};
|
|
43
|
-
|
|
58
|
+
/**
|
|
59
|
+
* `expectedIssuerKeyPem` names whose epochs these are. Two issuers signing one
|
|
60
|
+
* epoch number is not one issuer equivocating, and without the key this cannot
|
|
61
|
+
* tell those apart.
|
|
62
|
+
*/
|
|
63
|
+
export declare function findEquivocation(checkpoints: SignedCheckpoint[], expectedIssuerKeyPem?: string): Equivocation | null;
|
|
44
64
|
//# sourceMappingURL=checkpoint.d.ts.map
|
package/dist/checkpoint.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../src/checkpoint.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../src/checkpoint.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEpE,eAAO,MAAM,gBAAgB;;;;;;;;CAQnB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACtC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,gBAAgB,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAcpF;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,kBAAkB,EAAE,MAAM,GAAG,IAAI,GAChC,gBAAgB,CAUlB;AAkBD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAYrE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,gBAAgB,CAwBtE;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,gBAAgB,EACxB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,gBAAgB,CAQlB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAEjF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,EAAE,MAAM,GAAG,OAAO,CAejG;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAE/D;AAED,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,gBAAgB,EAAE,EACzB,oBAAoB,CAAC,EAAE,MAAM,GAC5B,UAAU,GAAG,IAAI,CAWnB;AAED,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE/D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,gBAAgB,EAAE,EAC/B,oBAAoB,CAAC,EAAE,MAAM,GAC5B,YAAY,GAAG,IAAI,CAiBrB"}
|
package/dist/checkpoint.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { canonical } from "@cedulon/core";
|
|
3
|
-
import { CTY_CHECKPOINT, asMap, cborMap, decodeCbor, decodeCoseSign1, encodeCbor, mapGet, signCoseSign1, verifyCoseSign1, } from "@cedulon/cose";
|
|
3
|
+
import { CTY_CHECKPOINT, asMap, cborMap, decodeCbor, decodeCoseSign1, encodeCbor, mapGet, sameSpkiKey, signCoseSign1, verifyCoseSign1, } from "@cedulon/cose";
|
|
4
4
|
import { receiptHash } from "@cedulon/receipts";
|
|
5
5
|
export const CHECKPOINT_CLAIM = {
|
|
6
6
|
epoch: -70101,
|
|
@@ -61,7 +61,7 @@ export function checkpointToCbor(claims) {
|
|
|
61
61
|
[CHECKPOINT_CLAIM.endMs, claims.endMs],
|
|
62
62
|
[CHECKPOINT_CLAIM.receiptCount, claims.receiptCount],
|
|
63
63
|
[CHECKPOINT_CLAIM.chainHeadHash, claims.chainHeadHash],
|
|
64
|
-
[CHECKPOINT_CLAIM.totals, totalsToCbor(claims.totals)],
|
|
64
|
+
[CHECKPOINT_CLAIM.totals, claims.totals === null ? null : totalsToCbor(claims.totals)],
|
|
65
65
|
[CHECKPOINT_CLAIM.prevCheckpointHash, claims.prevCheckpointHash],
|
|
66
66
|
]));
|
|
67
67
|
}
|
|
@@ -90,7 +90,7 @@ export function checkpointFromCbor(bytes) {
|
|
|
90
90
|
endMs: num(CHECKPOINT_CLAIM.endMs),
|
|
91
91
|
receiptCount: num(CHECKPOINT_CLAIM.receiptCount),
|
|
92
92
|
chainHeadHash: textOrNull(CHECKPOINT_CLAIM.chainHeadHash),
|
|
93
|
-
totals: totalsFromCbor(totalsVal),
|
|
93
|
+
totals: totalsVal === null ? null : totalsFromCbor(totalsVal),
|
|
94
94
|
prevCheckpointHash: textOrNull(CHECKPOINT_CLAIM.prevCheckpointHash),
|
|
95
95
|
};
|
|
96
96
|
}
|
|
@@ -103,7 +103,22 @@ export function signCheckpoint(claims, privateKeyPem, publicKeyPem) {
|
|
|
103
103
|
coseHex: Buffer.from(cose).toString("hex"),
|
|
104
104
|
};
|
|
105
105
|
}
|
|
106
|
-
|
|
106
|
+
/**
|
|
107
|
+
* Publish a checkpoint with its totals withheld. The redaction is part of what
|
|
108
|
+
* gets signed, so it cannot be asserted — or undone — after the fact.
|
|
109
|
+
*/
|
|
110
|
+
export function redactCheckpointTotals(claims) {
|
|
111
|
+
return { ...claims, totals: null };
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* `expectedIssuerKeyPem` is the key the verifier holds out of band. Without it
|
|
115
|
+
* the checkpoint is checked against the key it carries, which proves internal
|
|
116
|
+
* consistency and nothing about who published the epoch.
|
|
117
|
+
*/
|
|
118
|
+
export function verifyCheckpoint(signed, expectedIssuerKeyPem) {
|
|
119
|
+
if (expectedIssuerKeyPem !== undefined && !sameSpkiKey(signed.publicKeyPem, expectedIssuerKeyPem)) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
107
122
|
const bytes = Buffer.from(signed.coseHex, "hex");
|
|
108
123
|
if (!verifyCoseSign1(bytes, signed.publicKeyPem, CTY_CHECKPOINT)) {
|
|
109
124
|
return false;
|
|
@@ -120,9 +135,9 @@ export function verifyCheckpoint(signed) {
|
|
|
120
135
|
export function checkpointHash(signed) {
|
|
121
136
|
return sha256Hex(Buffer.from(signed.coseHex, "hex"));
|
|
122
137
|
}
|
|
123
|
-
export function findCheckpointChainBreak(chain) {
|
|
138
|
+
export function findCheckpointChainBreak(chain, expectedIssuerKeyPem) {
|
|
124
139
|
for (let i = 0; i < chain.length; i += 1) {
|
|
125
|
-
if (!verifyCheckpoint(chain[i])) {
|
|
140
|
+
if (!verifyCheckpoint(chain[i], expectedIssuerKeyPem)) {
|
|
126
141
|
return { index: i, reason: "bad-signature" };
|
|
127
142
|
}
|
|
128
143
|
const expectedPrev = i === 0 ? null : checkpointHash(chain[i - 1]);
|
|
@@ -132,10 +147,15 @@ export function findCheckpointChainBreak(chain) {
|
|
|
132
147
|
}
|
|
133
148
|
return null;
|
|
134
149
|
}
|
|
135
|
-
|
|
150
|
+
/**
|
|
151
|
+
* `expectedIssuerKeyPem` names whose epochs these are. Two issuers signing one
|
|
152
|
+
* epoch number is not one issuer equivocating, and without the key this cannot
|
|
153
|
+
* tell those apart.
|
|
154
|
+
*/
|
|
155
|
+
export function findEquivocation(checkpoints, expectedIssuerKeyPem) {
|
|
136
156
|
const byEpoch = new Map();
|
|
137
157
|
for (const cp of checkpoints) {
|
|
138
|
-
if (!verifyCheckpoint(cp)) {
|
|
158
|
+
if (!verifyCheckpoint(cp, expectedIssuerKeyPem)) {
|
|
139
159
|
continue;
|
|
140
160
|
}
|
|
141
161
|
const h = checkpointHash(cp);
|
package/dist/checkpoint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../src/checkpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EACL,cAAc,EACd,KAAK,EACL,OAAO,EACP,UAAU,EACV,eAAe,EACf,UAAU,EACV,MAAM,EACN,aAAa,EACb,eAAe,GAGhB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAsB,MAAM,mBAAmB,CAAC;AAEpE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,CAAC,KAAK;IACb,OAAO,EAAE,CAAC,KAAK;IACf,KAAK,EAAE,CAAC,KAAK;IACb,YAAY,EAAE,CAAC,KAAK;IACpB,aAAa,EAAE,CAAC,KAAK;IACrB,MAAM,EAAE,CAAC,KAAK;IACd,kBAAkB,EAAE,CAAC,KAAK;CAClB,CAAC;
|
|
1
|
+
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../src/checkpoint.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { CHECKPOINT_CLAIM, buildCheckpointClaims, checkpointFromCbor, checkpointHash, checkpointToCbor, findCheckpointChainBreak, findEquivocation, signCheckpoint, totalsFromReceipts, verifyCheckpoint, type ChainBreak, type CheckpointClaims, type Equivocation, type SignedCheckpoint, } from "./checkpoint.ts";
|
|
2
|
-
export { MemoryTransparencyService, anchorCheckpoint, anchorReceipt, decodeInclusionPayload, statementHashOfCheckpoint, statementHashOfReceipt, type InclusionReceipt, } from "./transparency.ts";
|
|
1
|
+
export { CHECKPOINT_CLAIM, buildCheckpointClaims, checkpointFromCbor, checkpointHash, checkpointToCbor, findCheckpointChainBreak, findEquivocation, redactCheckpointTotals, signCheckpoint, totalsFromReceipts, verifyCheckpoint, type ChainBreak, type CheckpointClaims, type Equivocation, type SignedCheckpoint, } from "./checkpoint.ts";
|
|
2
|
+
export { MemoryTransparencyService, anchorCheckpoint, anchorReceipt, decodeInclusionPayload, statementHashOfCheckpoint, statementHashOfReceipt, verifyInclusionReceipt, type InclusionReceipt, } from "./transparency.ts";
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { CHECKPOINT_CLAIM, buildCheckpointClaims, checkpointFromCbor, checkpointHash, checkpointToCbor, findCheckpointChainBreak, findEquivocation, signCheckpoint, totalsFromReceipts, verifyCheckpoint, } from "./checkpoint.js";
|
|
2
|
-
export { MemoryTransparencyService, anchorCheckpoint, anchorReceipt, decodeInclusionPayload, statementHashOfCheckpoint, statementHashOfReceipt, } from "./transparency.js";
|
|
1
|
+
export { CHECKPOINT_CLAIM, buildCheckpointClaims, checkpointFromCbor, checkpointHash, checkpointToCbor, findCheckpointChainBreak, findEquivocation, redactCheckpointTotals, signCheckpoint, totalsFromReceipts, verifyCheckpoint, } from "./checkpoint.js";
|
|
2
|
+
export { MemoryTransparencyService, anchorCheckpoint, anchorReceipt, decodeInclusionPayload, statementHashOfCheckpoint, statementHashOfReceipt, verifyInclusionReceipt, } from "./transparency.js";
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GAKjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,GAEvB,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GAKjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,GAEvB,MAAM,mBAAmB,CAAC"}
|
package/dist/transparency.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export type InclusionReceipt = {
|
|
|
6
6
|
treeHead: string;
|
|
7
7
|
issuerPublicKeyPem: string;
|
|
8
8
|
coseHex: string;
|
|
9
|
+
/** Statement body when the caller still holds it. Not part of the inclusion COSE. */
|
|
10
|
+
checkpoint?: SignedCheckpoint;
|
|
9
11
|
};
|
|
10
12
|
/** In-process append-only log. No network. SCITT/RFC 9943 spirit, not SCRAPI. */
|
|
11
13
|
export declare class MemoryTransparencyService {
|
|
@@ -18,10 +20,21 @@ export declare class MemoryTransparencyService {
|
|
|
18
20
|
privateKeyPem: string;
|
|
19
21
|
});
|
|
20
22
|
register(statementHex: string): InclusionReceipt;
|
|
23
|
+
/** The log answering about its own receipt: checked against this log's key. */
|
|
21
24
|
verifyInclusion(receipt: InclusionReceipt): boolean;
|
|
22
25
|
size(): number;
|
|
23
26
|
}
|
|
24
27
|
export declare function anchorReceipt(ts: MemoryTransparencyService, signed: SignedReceipt): InclusionReceipt;
|
|
28
|
+
/**
|
|
29
|
+
* `expectedWitnessKeyPem` is the log's key, held out of band. Without it this
|
|
30
|
+
* checks the receipt against the key it carries, so anyone able to mint a
|
|
31
|
+
* keypair can assert that a statement is in a log they invented.
|
|
32
|
+
*
|
|
33
|
+
* The signed payload carries `index` and `treeHead` as well; comparing only
|
|
34
|
+
* `statementHash` would let the envelope claim a position in the log that its
|
|
35
|
+
* own signature does not support.
|
|
36
|
+
*/
|
|
37
|
+
export declare function verifyInclusionReceipt(receipt: InclusionReceipt, expectedWitnessKeyPem?: string): boolean;
|
|
25
38
|
export declare function anchorCheckpoint(ts: MemoryTransparencyService, signed: SignedCheckpoint): InclusionReceipt;
|
|
26
39
|
export declare function statementHashOfReceipt(signed: SignedReceipt): string;
|
|
27
40
|
export declare function statementHashOfCheckpoint(signed: SignedCheckpoint): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transparency.d.ts","sourceRoot":"","sources":["../src/transparency.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transparency.d.ts","sourceRoot":"","sources":["../src/transparency.ts"],"names":[],"mappings":"AAaA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B,CAAC;AAEF,iFAAiF;AACjF,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAkB;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,IAAI,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;IAKjE,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB;IAwBhD,+EAA+E;IAC/E,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;IAOnD,IAAI,IAAI,MAAM;CAGf;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,yBAAyB,EAAE,MAAM,EAAE,aAAa,GAAG,gBAAgB,CAKpG;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,gBAAgB,EACzB,qBAAqB,CAAC,EAAE,MAAM,GAC7B,OAAO,CAoBT;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,yBAAyB,EAC7B,MAAM,EAAE,gBAAgB,GACvB,gBAAgB,CAElB;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAEpE;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAE1E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG;IACvD,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,CAUA"}
|
package/dist/transparency.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import { CTY_INCLUSION, asMap, cborMap, decodeCbor, decodeCoseSign1, encodeCbor, mapGet, signCoseSign1, verifyCoseSign1, } from "@cedulon/cose";
|
|
2
|
+
import { CTY_INCLUSION, asMap, cborMap, decodeCbor, decodeCoseSign1, encodeCbor, mapGet, sameSpkiKey, signCoseSign1, verifyCoseSign1, } from "@cedulon/cose";
|
|
3
3
|
import { receiptHash } from "@cedulon/receipts";
|
|
4
4
|
import { checkpointHash } from "./checkpoint.js";
|
|
5
5
|
/** In-process append-only log. No network. SCITT/RFC 9943 spirit, not SCRAPI. */
|
|
@@ -33,11 +33,12 @@ export class MemoryTransparencyService {
|
|
|
33
33
|
coseHex: Buffer.from(cose).toString("hex"),
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
|
+
/** The log answering about its own receipt: checked against this log's key. */
|
|
36
37
|
verifyInclusion(receipt) {
|
|
37
38
|
if (this.leaves[receipt.index] !== receipt.statementHash) {
|
|
38
39
|
return false;
|
|
39
40
|
}
|
|
40
|
-
return
|
|
41
|
+
return verifyInclusionReceipt(receipt, this.publicKeyPem);
|
|
41
42
|
}
|
|
42
43
|
size() {
|
|
43
44
|
return this.leaves.length;
|
|
@@ -49,8 +50,35 @@ export function anchorReceipt(ts, signed) {
|
|
|
49
50
|
}
|
|
50
51
|
return ts.register(signed.coseHex);
|
|
51
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* `expectedWitnessKeyPem` is the log's key, held out of band. Without it this
|
|
55
|
+
* checks the receipt against the key it carries, so anyone able to mint a
|
|
56
|
+
* keypair can assert that a statement is in a log they invented.
|
|
57
|
+
*
|
|
58
|
+
* The signed payload carries `index` and `treeHead` as well; comparing only
|
|
59
|
+
* `statementHash` would let the envelope claim a position in the log that its
|
|
60
|
+
* own signature does not support.
|
|
61
|
+
*/
|
|
62
|
+
export function verifyInclusionReceipt(receipt, expectedWitnessKeyPem) {
|
|
63
|
+
if (expectedWitnessKeyPem !== undefined &&
|
|
64
|
+
!sameSpkiKey(receipt.issuerPublicKeyPem, expectedWitnessKeyPem)) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
if (!verifyCoseSign1(Buffer.from(receipt.coseHex, "hex"), receipt.issuerPublicKeyPem, CTY_INCLUSION)) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
const signed = decodeInclusionPayload(receipt.coseHex);
|
|
72
|
+
return (signed.statementHash === receipt.statementHash &&
|
|
73
|
+
signed.index === receipt.index &&
|
|
74
|
+
signed.treeHead === receipt.treeHead);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
52
80
|
export function anchorCheckpoint(ts, signed) {
|
|
53
|
-
return ts.register(signed.coseHex);
|
|
81
|
+
return { ...ts.register(signed.coseHex), checkpoint: signed };
|
|
54
82
|
}
|
|
55
83
|
export function statementHashOfReceipt(signed) {
|
|
56
84
|
return receiptHash(signed);
|
package/dist/transparency.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transparency.js","sourceRoot":"","sources":["../src/transparency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,aAAa,EACb,KAAK,EACL,OAAO,EACP,UAAU,EACV,eAAe,EACf,UAAU,EACV,MAAM,EACN,aAAa,EACb,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAsB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAyB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"transparency.js","sourceRoot":"","sources":["../src/transparency.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@cedulon/checkpoint",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Epoch checkpoints and an in-process transparency log for Cedulon.",
|
|
5
|
-
"license": "Apache-2.0",
|
|
6
|
-
"type": "module",
|
|
7
|
-
"engines": {
|
|
8
|
-
"node": ">=20"
|
|
9
|
-
},
|
|
10
|
-
"repository": {
|
|
11
|
-
"type": "git",
|
|
12
|
-
"url": "git+https://github.com/dogrucanemek-alt/cedulon.git",
|
|
13
|
-
"directory": "packages/checkpoint"
|
|
14
|
-
},
|
|
15
|
-
"homepage": "https://github.com/dogrucanemek-alt/cedulon/tree/master/packages/checkpoint",
|
|
16
|
-
"bugs": {
|
|
17
|
-
"url": "https://github.com/dogrucanemek-alt/cedulon/issues"
|
|
18
|
-
},
|
|
19
|
-
"keywords": [
|
|
20
|
-
"cedulon",
|
|
21
|
-
"checkpoint"
|
|
22
|
-
],
|
|
23
|
-
"scripts": {
|
|
24
|
-
"build": "tsc -p tsconfig.build.json"
|
|
25
|
-
},
|
|
26
|
-
"main": "./dist/index.js",
|
|
27
|
-
"types": "./dist/index.d.ts",
|
|
28
|
-
"exports": {
|
|
29
|
-
".": {
|
|
30
|
-
"types": "./dist/index.d.ts",
|
|
31
|
-
"import": "./dist/index.js"
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
"files": [
|
|
35
|
-
"dist",
|
|
36
|
-
"README.md",
|
|
37
|
-
"LICENSE"
|
|
38
|
-
],
|
|
39
|
-
"publishConfig": {
|
|
40
|
-
"access": "public"
|
|
41
|
-
},
|
|
42
|
-
"dependencies": {
|
|
43
|
-
"@cedulon/core": "^0.
|
|
44
|
-
"@cedulon/cose": "^0.
|
|
45
|
-
"@cedulon/receipts": "^0.
|
|
46
|
-
}
|
|
47
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@cedulon/checkpoint",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Epoch checkpoints and an in-process transparency log for Cedulon.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=20"
|
|
9
|
+
},
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git+https://github.com/dogrucanemek-alt/cedulon.git",
|
|
13
|
+
"directory": "packages/checkpoint"
|
|
14
|
+
},
|
|
15
|
+
"homepage": "https://github.com/dogrucanemek-alt/cedulon/tree/master/packages/checkpoint",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/dogrucanemek-alt/cedulon/issues"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"cedulon",
|
|
21
|
+
"checkpoint"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc -p tsconfig.build.json"
|
|
25
|
+
},
|
|
26
|
+
"main": "./dist/index.js",
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"exports": {
|
|
29
|
+
".": {
|
|
30
|
+
"types": "./dist/index.d.ts",
|
|
31
|
+
"import": "./dist/index.js"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"dist",
|
|
36
|
+
"README.md",
|
|
37
|
+
"LICENSE"
|
|
38
|
+
],
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@cedulon/core": "^0.3.0",
|
|
44
|
+
"@cedulon/cose": "^0.3.0",
|
|
45
|
+
"@cedulon/receipts": "^0.3.0"
|
|
46
|
+
}
|
|
47
|
+
}
|