@altopelago/aeon-integrity 0.9.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/README.md ADDED
@@ -0,0 +1,79 @@
1
+ # @altopelago/aeon-integrity
2
+
3
+ Canonical hash utilities for AEON integrity envelopes.
4
+
5
+ This package computes deterministic hashes over the Assignment Event Stream
6
+ (AES), excluding the top-level `:envelope` binding when present.
7
+
8
+ ## Quick Start
9
+
10
+ ```ts
11
+ import {
12
+ buildCanonicalReceipt,
13
+ computeCanonicalHash,
14
+ computeByteHash,
15
+ generateEd25519KeyPair,
16
+ signCanonicalStream,
17
+ validateEnvelopeEvents,
18
+ } from '@altopelago/aeon-integrity';
19
+
20
+ const result = computeCanonicalHash(aes, { algorithm: 'sha-256' });
21
+ console.log(result.hash);
22
+
23
+ const bytes = computeByteHash('hello', { algorithm: 'sha-256' });
24
+ console.log(bytes.hash);
25
+
26
+ const { publicKey, privateKey } = generateEd25519KeyPair();
27
+ const signed = signCanonicalStream(result.stream, privateKey);
28
+ console.log(signed.signature, publicKey);
29
+
30
+ const validation = validateEnvelopeEvents(aes, { mode: 'strict' });
31
+ console.log(validation.errors);
32
+
33
+ const receipt = buildCanonicalReceipt(sourceText, aes, {
34
+ canonicalSpecRelease: 'r5',
35
+ producer: {
36
+ implementation: 'aeon-ts',
37
+ version: '2.4.1',
38
+ },
39
+ });
40
+ console.log(receipt.canonical.digest, receipt.canonical.payload);
41
+ ```
42
+
43
+ ## Common Patterns
44
+
45
+ ### Hash the canonical AES stream
46
+
47
+ ```ts
48
+ const result = computeCanonicalHash(aes, { algorithm: 'sha-256' });
49
+ console.log(result.stream);
50
+ console.log(result.hash);
51
+ ```
52
+
53
+ ### Validate an envelope on parsed document events
54
+
55
+ ```ts
56
+ const validation = validateEnvelopeEvents(aes, { mode: 'strict' });
57
+ if (validation.errors.length > 0) {
58
+ console.error(validation.errors);
59
+ }
60
+ ```
61
+
62
+ ## API
63
+
64
+ - `computeCanonicalHash(events, options?)`
65
+ - `computeByteHash(input, options?)`
66
+ - `buildCanonicalReceipt(source, events, options)`
67
+ - `verifyCanonicalReceipt(receipt, source, events)`
68
+ - `verifyByteHash(input, expectedHash, options?)`
69
+ - `verifyCanonicalHash(events, expectedHash, options?)`
70
+ - `signCanonicalStream(stream, privateKey, options?)`
71
+ - `verifyCanonicalStreamSignature(stream, signatureHex, publicKey, options?)`
72
+ - `generateEd25519KeyPair()`
73
+ - `validateEnvelopeDocument(document, options?)`
74
+ - `validateEnvelopeEvents(events, options?)`
75
+
76
+ ## Notes
77
+
78
+ - Canonical hashing is based on the AES stream, not on source text.
79
+ - References are preserved as `~` / `~>` tokens in canonical values.
@@ -0,0 +1,142 @@
1
+ import type { AssignmentEvent } from '@altopelago/aeon-aes';
2
+ type Value = AssignmentEvent['value'];
3
+ type ObjectValue = Extract<Value, {
4
+ type: 'ObjectNode';
5
+ bindings: readonly unknown[];
6
+ }>;
7
+ type Binding = ObjectValue['bindings'][number];
8
+ type EnvelopeDocumentLike = {
9
+ bindings: readonly Binding[];
10
+ };
11
+ export interface CanonicalHashResult {
12
+ readonly algorithm: string;
13
+ readonly hash: string;
14
+ readonly stream: string;
15
+ }
16
+ export interface CanonicalHashOptions {
17
+ readonly algorithm?: 'sha-256' | 'sha-512';
18
+ }
19
+ export interface SignatureOptions {
20
+ readonly algorithm?: 'ed25519' | 'rsa-sha256';
21
+ }
22
+ export interface SignatureResult {
23
+ readonly algorithm: string;
24
+ readonly signature: string;
25
+ }
26
+ export interface EnvelopeDiagnostic {
27
+ readonly level: 'error' | 'warning';
28
+ readonly message: string;
29
+ readonly code?: string;
30
+ }
31
+ export interface EnvelopeValidationResult {
32
+ readonly errors: readonly EnvelopeDiagnostic[];
33
+ readonly warnings: readonly EnvelopeDiagnostic[];
34
+ }
35
+ export interface EnvelopeValidationOptions {
36
+ readonly mode?: 'strict' | 'loose';
37
+ }
38
+ export interface CanonicalReceiptSource {
39
+ readonly mediaType: string;
40
+ readonly encoding: string;
41
+ readonly digestAlgorithm: string;
42
+ readonly digest: string;
43
+ }
44
+ export interface CanonicalReceiptCanonical {
45
+ readonly format: string;
46
+ readonly spec: string;
47
+ readonly specRelease: string;
48
+ readonly mode: string;
49
+ readonly profile: string;
50
+ readonly outputEncoding: string;
51
+ readonly digestAlgorithm: string;
52
+ readonly digest: string;
53
+ readonly length: number;
54
+ readonly payload?: string;
55
+ }
56
+ export interface CanonicalReceiptProducer {
57
+ readonly implementation: string;
58
+ readonly version: string;
59
+ readonly build?: string;
60
+ }
61
+ export interface CanonicalReceiptGenerated {
62
+ readonly at: string;
63
+ }
64
+ export interface CanonicalReceiptWitness {
65
+ readonly implementation: string;
66
+ readonly version: string;
67
+ readonly digest: string;
68
+ }
69
+ export interface CanonicalReceipt {
70
+ readonly source: CanonicalReceiptSource;
71
+ readonly canonical: CanonicalReceiptCanonical;
72
+ readonly producer: CanonicalReceiptProducer;
73
+ readonly generated: CanonicalReceiptGenerated;
74
+ readonly policyLevel?: 'basic' | 'auditable' | 'witnessed';
75
+ readonly witnesses?: readonly CanonicalReceiptWitness[];
76
+ }
77
+ export interface BuildCanonicalReceiptOptions {
78
+ readonly sourceMediaType?: string;
79
+ readonly sourceEncoding?: string;
80
+ readonly canonicalFormat?: string;
81
+ readonly canonicalSpec?: string;
82
+ readonly canonicalSpecRelease?: string;
83
+ readonly canonicalMode?: string;
84
+ readonly canonicalProfile?: string;
85
+ readonly canonicalEncoding?: string;
86
+ readonly canonicalHashAlgorithm?: 'sha-256' | 'sha-512';
87
+ readonly sourceHashAlgorithm?: 'sha-256' | 'sha-512';
88
+ readonly embedCanonicalPayload?: boolean;
89
+ readonly producer: CanonicalReceiptProducer;
90
+ readonly generatedAt?: string;
91
+ readonly policyLevel?: 'basic' | 'auditable' | 'witnessed';
92
+ readonly witnesses?: readonly CanonicalReceiptWitness[];
93
+ }
94
+ export interface CanonicalReceiptVerificationResult {
95
+ readonly source: {
96
+ readonly matches: boolean;
97
+ readonly expected: string;
98
+ readonly computed: string;
99
+ readonly algorithm: string;
100
+ };
101
+ readonly canonical: {
102
+ readonly matches: boolean;
103
+ readonly expected: string;
104
+ readonly computed: string;
105
+ readonly algorithm: string;
106
+ readonly payloadMatches: boolean | null;
107
+ readonly length: number;
108
+ };
109
+ readonly replay: {
110
+ readonly matches: boolean;
111
+ readonly expected: string;
112
+ readonly computed: string;
113
+ readonly algorithm: string;
114
+ };
115
+ }
116
+ export declare function serializeCanonicalEvents(events: readonly AssignmentEvent[]): string;
117
+ export declare function computeCanonicalHash(events: readonly AssignmentEvent[], options?: CanonicalHashOptions): CanonicalHashResult;
118
+ export declare function buildCanonicalReceipt(source: string | Uint8Array, events: readonly AssignmentEvent[], options: BuildCanonicalReceiptOptions): CanonicalReceipt;
119
+ export declare function verifyCanonicalReceipt(receipt: CanonicalReceipt, source: string | Uint8Array, events: readonly AssignmentEvent[]): CanonicalReceiptVerificationResult;
120
+ export interface ByteHashResult {
121
+ readonly algorithm: string;
122
+ readonly hash: string;
123
+ }
124
+ export interface ByteHashOptions {
125
+ readonly algorithm?: 'sha-256' | 'sha-512';
126
+ }
127
+ export declare function computeByteHash(input: string | Uint8Array, options?: ByteHashOptions): ByteHashResult;
128
+ export declare function verifyByteHash(input: string | Uint8Array, expectedHash: string, options?: ByteHashOptions): boolean;
129
+ export declare function verifyCanonicalHash(events: readonly AssignmentEvent[], expectedHash: string, options?: CanonicalHashOptions): boolean;
130
+ export declare function signCanonicalStream(stream: string, privateKey: string | Buffer, options?: SignatureOptions): SignatureResult;
131
+ export declare function signStringPayload(payload: string, privateKey: string | Buffer, options?: SignatureOptions): SignatureResult;
132
+ export declare function verifyCanonicalStreamSignature(stream: string, signatureHex: string, publicKey: string | Buffer, options?: SignatureOptions): boolean;
133
+ export declare function verifyStringPayloadSignature(payload: string, signatureHex: string, publicKey: string | Buffer, options?: SignatureOptions): boolean;
134
+ export declare function generateEd25519KeyPair(): {
135
+ publicKey: string;
136
+ privateKey: string;
137
+ };
138
+ export declare function validateEnvelopeDocument(document: EnvelopeDocumentLike, options?: EnvelopeValidationOptions): EnvelopeValidationResult;
139
+ export declare function validateEnvelopeEvents(events: readonly AssignmentEvent[], options?: EnvelopeValidationOptions): EnvelopeValidationResult;
140
+ export declare function serializeCanonicalValue(value: Value): string;
141
+ export {};
142
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,KAAK,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;AACtC,KAAK,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,CAAC,CAAC;AACxF,KAAK,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/C,KAAK,oBAAoB,GAAG;IAAE,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,CAAC;AAI7D,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;CACjD;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACpD;AAED,MAAM,WAAW,yBAAyB;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACrC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,WAAW,CAAC;IAC3D,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAC;CAC3D;AAED,MAAM,WAAW,4BAA4B;IACzC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,WAAW,CAAC;IAC3D,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAC;CAC3D;AAED,MAAM,WAAW,kCAAkC;IAC/C,QAAQ,CAAC,MAAM,EAAE;QACb,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE;QAChB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;QACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE;QACb,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC9B,CAAC;CACL;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,CAiBnF;AAED,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,OAAO,GAAE,oBAAyB,GACnC,mBAAmB,CAKrB;AAMD,wBAAgB,qBAAqB,CACjC,MAAM,EAAE,MAAM,GAAG,UAAU,EAC3B,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,OAAO,EAAE,4BAA4B,GACtC,gBAAgB,CA6BlB;AAED,wBAAgB,sBAAsB,CAClC,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,MAAM,GAAG,UAAU,EAC3B,MAAM,EAAE,SAAS,eAAe,EAAE,GACnC,kCAAkC,CAwCpC;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAC9C;AAED,wBAAgB,eAAe,CAC3B,KAAK,EAAE,MAAM,GAAG,UAAU,EAC1B,OAAO,GAAE,eAAoB,GAC9B,cAAc,CAKhB;AAED,wBAAgB,cAAc,CAC1B,KAAK,EAAE,MAAM,GAAG,UAAU,EAC1B,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,eAAoB,GAC9B,OAAO,CAIT;AAED,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,oBAAyB,GACnC,OAAO,CAIT;AAED,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GAAG,MAAM,EAC3B,OAAO,GAAE,gBAAqB,GAC/B,eAAe,CAEjB;AAED,wBAAgB,iBAAiB,CAC7B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,MAAM,EAC3B,OAAO,GAAE,gBAAqB,GAC/B,eAAe,CAOjB;AAED,wBAAgB,8BAA8B,CAC1C,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,OAAO,GAAE,gBAAqB,GAC/B,OAAO,CAET;AAED,wBAAgB,4BAA4B,CACxC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,OAAO,GAAE,gBAAqB,GAC/B,OAAO,CAOT;AAED,wBAAgB,sBAAsB,IAAI;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAMlF;AAED,wBAAgB,wBAAwB,CACpC,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,GAAE,yBAA8B,GACxC,wBAAwB,CAyC1B;AAED,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,OAAO,GAAE,yBAA8B,GACxC,wBAAwB,CAyC1B;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAyC5D"}
package/dist/index.js ADDED
@@ -0,0 +1,471 @@
1
+ import { createHash, sign as signData, verify as verifyData, generateKeyPairSync } from 'node:crypto';
2
+ import { formatPath } from '@altopelago/aeon-aes';
3
+ const ENVELOPE_DATATYPE = 'envelope';
4
+ export function serializeCanonicalEvents(events) {
5
+ const envelopeRoots = new Set(events
6
+ .filter((event) => isEnvelopeEvent(event))
7
+ .map((event) => formatPath(event.path)));
8
+ const filtered = events.filter((event) => {
9
+ const path = formatPath(event.path);
10
+ for (const root of envelopeRoots) {
11
+ if (path === root || path.startsWith(`${root}.`)) {
12
+ return false;
13
+ }
14
+ }
15
+ return true;
16
+ });
17
+ const ordered = [...filtered].sort((a, b) => formatPath(a.path).localeCompare(formatPath(b.path)));
18
+ return ordered.map((event) => `${formatPath(event.path)}\t${serializeCanonicalValue(event.value)}\n`).join('');
19
+ }
20
+ export function computeCanonicalHash(events, options = {}) {
21
+ const algorithm = options.algorithm ?? 'sha-256';
22
+ const stream = serializeCanonicalEvents(events);
23
+ const hash = createHash(algorithm).update(stream).digest('hex');
24
+ return { algorithm, hash, stream };
25
+ }
26
+ function utf8ByteLength(value) {
27
+ return Buffer.byteLength(value, 'utf-8');
28
+ }
29
+ export function buildCanonicalReceipt(source, events, options) {
30
+ const canonicalHash = computeCanonicalHash(events, { algorithm: options.canonicalHashAlgorithm ?? 'sha-256' });
31
+ const sourceHash = computeByteHash(source, { algorithm: options.sourceHashAlgorithm ?? 'sha-256' });
32
+ return {
33
+ source: {
34
+ mediaType: options.sourceMediaType ?? 'text/aeon',
35
+ encoding: options.sourceEncoding ?? 'utf-8',
36
+ digestAlgorithm: sourceHash.algorithm,
37
+ digest: sourceHash.hash,
38
+ },
39
+ canonical: {
40
+ format: options.canonicalFormat ?? 'aeon.canonical',
41
+ spec: options.canonicalSpec ?? 'AEON Core',
42
+ specRelease: options.canonicalSpecRelease ?? 'v1',
43
+ mode: options.canonicalMode ?? 'strict',
44
+ profile: options.canonicalProfile ?? 'core',
45
+ outputEncoding: options.canonicalEncoding ?? 'utf-8',
46
+ digestAlgorithm: canonicalHash.algorithm,
47
+ digest: canonicalHash.hash,
48
+ length: utf8ByteLength(canonicalHash.stream),
49
+ ...(options.embedCanonicalPayload ?? true ? { payload: canonicalHash.stream } : {}),
50
+ },
51
+ producer: options.producer,
52
+ generated: {
53
+ at: options.generatedAt ?? new Date().toISOString(),
54
+ },
55
+ ...(options.policyLevel ? { policyLevel: options.policyLevel } : {}),
56
+ ...(options.witnesses ? { witnesses: options.witnesses } : {}),
57
+ };
58
+ }
59
+ export function verifyCanonicalReceipt(receipt, source, events) {
60
+ const sourceHash = computeByteHash(source, {
61
+ algorithm: normalizeHashAlgorithm(receipt.source.digestAlgorithm),
62
+ });
63
+ const replayHash = computeCanonicalHash(events, {
64
+ algorithm: normalizeHashAlgorithm(receipt.canonical.digestAlgorithm),
65
+ });
66
+ const payloadMatches = receipt.canonical.payload === undefined
67
+ ? null
68
+ : normalizeHash(computeByteHash(receipt.canonical.payload, {
69
+ algorithm: normalizeHashAlgorithm(receipt.canonical.digestAlgorithm),
70
+ }).hash) === normalizeHash(receipt.canonical.digest);
71
+ return {
72
+ source: {
73
+ matches: normalizeHash(sourceHash.hash) === normalizeHash(receipt.source.digest),
74
+ expected: receipt.source.digest,
75
+ computed: sourceHash.hash,
76
+ algorithm: sourceHash.algorithm,
77
+ },
78
+ canonical: {
79
+ matches: payloadMatches ?? normalizeHash(replayHash.hash) === normalizeHash(receipt.canonical.digest),
80
+ expected: receipt.canonical.digest,
81
+ computed: receipt.canonical.payload === undefined
82
+ ? replayHash.hash
83
+ : computeByteHash(receipt.canonical.payload, {
84
+ algorithm: normalizeHashAlgorithm(receipt.canonical.digestAlgorithm),
85
+ }).hash,
86
+ algorithm: receipt.canonical.digestAlgorithm,
87
+ payloadMatches,
88
+ length: receipt.canonical.payload === undefined
89
+ ? receipt.canonical.length
90
+ : utf8ByteLength(receipt.canonical.payload),
91
+ },
92
+ replay: {
93
+ matches: normalizeHash(replayHash.hash) === normalizeHash(receipt.canonical.digest),
94
+ expected: receipt.canonical.digest,
95
+ computed: replayHash.hash,
96
+ algorithm: replayHash.algorithm,
97
+ },
98
+ };
99
+ }
100
+ export function computeByteHash(input, options = {}) {
101
+ const algorithm = options.algorithm ?? 'sha-256';
102
+ const buffer = typeof input === 'string' ? Buffer.from(input, 'utf-8') : Buffer.from(input);
103
+ const hash = createHash(algorithm).update(buffer).digest('hex');
104
+ return { algorithm, hash };
105
+ }
106
+ export function verifyByteHash(input, expectedHash, options = {}) {
107
+ const normalized = normalizeHash(expectedHash);
108
+ const computed = computeByteHash(input, options).hash;
109
+ return normalized === computed;
110
+ }
111
+ export function verifyCanonicalHash(events, expectedHash, options = {}) {
112
+ const normalized = normalizeHash(expectedHash);
113
+ const computed = computeCanonicalHash(events, options).hash;
114
+ return normalized === computed;
115
+ }
116
+ export function signCanonicalStream(stream, privateKey, options = {}) {
117
+ return signStringPayload(stream, privateKey, options);
118
+ }
119
+ export function signStringPayload(payload, privateKey, options = {}) {
120
+ const algorithm = options.algorithm ?? 'ed25519';
121
+ const data = Buffer.from(payload, 'utf-8');
122
+ const signature = algorithm === 'ed25519'
123
+ ? signData(null, data, privateKey)
124
+ : signData('sha256', data, privateKey);
125
+ return { algorithm, signature: signature.toString('hex') };
126
+ }
127
+ export function verifyCanonicalStreamSignature(stream, signatureHex, publicKey, options = {}) {
128
+ return verifyStringPayloadSignature(stream, signatureHex, publicKey, options);
129
+ }
130
+ export function verifyStringPayloadSignature(payload, signatureHex, publicKey, options = {}) {
131
+ const algorithm = options.algorithm ?? 'ed25519';
132
+ const data = Buffer.from(payload, 'utf-8');
133
+ const signature = Buffer.from(signatureHex, 'hex');
134
+ return algorithm === 'ed25519'
135
+ ? verifyData(null, data, publicKey, signature)
136
+ : verifyData('sha256', data, publicKey, signature);
137
+ }
138
+ export function generateEd25519KeyPair() {
139
+ const { publicKey, privateKey } = generateKeyPairSync('ed25519', {
140
+ publicKeyEncoding: { type: 'spki', format: 'pem' },
141
+ privateKeyEncoding: { type: 'pkcs8', format: 'pem' },
142
+ });
143
+ return { publicKey, privateKey };
144
+ }
145
+ export function validateEnvelopeDocument(document, options = {}) {
146
+ const strict = (options.mode ?? 'strict') === 'strict';
147
+ const errors = [];
148
+ const warnings = [];
149
+ const bindings = document.bindings;
150
+ const envelopeIndex = bindings.findIndex((binding) => isEnvelopeBinding(binding));
151
+ if (envelopeIndex === -1) {
152
+ return { errors, warnings };
153
+ }
154
+ if (envelopeIndex !== bindings.length - 1) {
155
+ errors.push({
156
+ level: 'error',
157
+ message: 'envelope binding must be the final binding in the document',
158
+ code: 'ENVELOPE_NOT_LAST',
159
+ });
160
+ }
161
+ const envelopeBinding = bindings[envelopeIndex];
162
+ if (envelopeBinding.value.type !== 'ObjectNode') {
163
+ errors.push({
164
+ level: 'error',
165
+ message: 'envelope binding must be an object',
166
+ code: 'ENVELOPE_NOT_OBJECT',
167
+ });
168
+ return { errors, warnings };
169
+ }
170
+ const unknownKeys = collectUnknownEnvelopeKeys(envelopeBinding.value);
171
+ if (unknownKeys.length > 0) {
172
+ const diag = {
173
+ level: strict ? 'error' : 'warning',
174
+ message: `Unknown envelope fields: ${unknownKeys.join(', ')}`,
175
+ code: 'ENVELOPE_UNKNOWN_FIELD',
176
+ };
177
+ if (strict)
178
+ errors.push(diag);
179
+ else
180
+ warnings.push(diag);
181
+ }
182
+ return { errors, warnings };
183
+ }
184
+ export function validateEnvelopeEvents(events, options = {}) {
185
+ const strict = (options.mode ?? 'strict') === 'strict';
186
+ const errors = [];
187
+ const warnings = [];
188
+ const topLevelEvents = events.filter((event) => isTopLevelPath(event.path));
189
+ const envelopeIndex = topLevelEvents.findIndex((event) => isEnvelopeEvent(event));
190
+ if (envelopeIndex === -1) {
191
+ return { errors, warnings };
192
+ }
193
+ if (envelopeIndex !== topLevelEvents.length - 1) {
194
+ errors.push({
195
+ level: 'error',
196
+ message: 'envelope binding must be the final binding in the document',
197
+ code: 'ENVELOPE_NOT_LAST',
198
+ });
199
+ }
200
+ const envelopeEvent = topLevelEvents[envelopeIndex];
201
+ if (envelopeEvent.value.type !== 'ObjectNode') {
202
+ errors.push({
203
+ level: 'error',
204
+ message: 'envelope binding must be an object',
205
+ code: 'ENVELOPE_NOT_OBJECT',
206
+ });
207
+ return { errors, warnings };
208
+ }
209
+ const unknownKeys = collectUnknownEnvelopeKeys(envelopeEvent.value);
210
+ if (unknownKeys.length > 0) {
211
+ const diag = {
212
+ level: strict ? 'error' : 'warning',
213
+ message: `Unknown envelope fields: ${unknownKeys.join(', ')}`,
214
+ code: 'ENVELOPE_UNKNOWN_FIELD',
215
+ };
216
+ if (strict)
217
+ errors.push(diag);
218
+ else
219
+ warnings.push(diag);
220
+ }
221
+ return { errors, warnings };
222
+ }
223
+ export function serializeCanonicalValue(value) {
224
+ switch (value.type) {
225
+ case 'TypedValue':
226
+ return serializeCanonicalValue(value.value);
227
+ case 'StringLiteral':
228
+ return `"${escapeString(value.value)}"`;
229
+ case 'NumberLiteral':
230
+ return normalizeNumber(value.raw);
231
+ case 'InfinityLiteral':
232
+ case 'NaNLiteral':
233
+ return `"${escapeString(value.raw)}"`;
234
+ case 'NullLiteral':
235
+ return value.mode === 'reserved' && value.value === 'none'
236
+ ? 'null'
237
+ : `"${escapeString(value.raw)}"`;
238
+ case 'BooleanLiteral':
239
+ return value.value ? 'true' : 'false';
240
+ case 'ToggleLiteral':
241
+ return `"${escapeString(value.raw)}"`;
242
+ case 'HexLiteral':
243
+ return `"#${value.value.replace(/_/g, '').toLowerCase()}"`;
244
+ case 'RadixLiteral':
245
+ return `"%${value.value.replace(/_/g, '')}"`;
246
+ case 'EncodingLiteral':
247
+ return `"$${value.value}"`;
248
+ case 'SeparatorLiteral':
249
+ return `"${escapeString(value.raw)}"`;
250
+ case 'DateLiteral':
251
+ case 'DateTimeLiteral':
252
+ return `"${escapeString(value.raw)}"`;
253
+ case 'CloneReference':
254
+ return `"~${value.path.join('.')}"`;
255
+ case 'PointerReference':
256
+ return `"~>${value.path.join('.')}"`;
257
+ case 'ObjectNode':
258
+ return serializeObject(value.bindings);
259
+ case 'ListNode':
260
+ return serializeArray(value.elements);
261
+ default:
262
+ return 'null';
263
+ }
264
+ }
265
+ function serializeObject(bindings) {
266
+ const entries = [...bindings].sort((a, b) => a.key.localeCompare(b.key));
267
+ const rendered = entries.map((binding) => `${escapeKey(binding.key)}:${serializeCanonicalValue(binding.value)}`);
268
+ return `{${rendered.join(',')}}`;
269
+ }
270
+ function serializeArray(elements) {
271
+ const rendered = elements.map((value) => serializeCanonicalValue(value));
272
+ return `[${rendered.join(',')}]`;
273
+ }
274
+ function escapeString(value) {
275
+ let out = '';
276
+ for (let i = 0; i < value.length; i++) {
277
+ const ch = value[i];
278
+ switch (ch) {
279
+ case '"':
280
+ out += '\\"';
281
+ break;
282
+ case '\\':
283
+ out += '\\\\';
284
+ break;
285
+ case '\n':
286
+ out += '\\n';
287
+ break;
288
+ case '\r':
289
+ out += '\\r';
290
+ break;
291
+ case '\t':
292
+ out += '\\t';
293
+ break;
294
+ default: {
295
+ const code = ch.charCodeAt(0);
296
+ if (code < 0x20) {
297
+ out += `\\u${code.toString(16).padStart(4, '0')}`;
298
+ }
299
+ else {
300
+ out += ch;
301
+ }
302
+ break;
303
+ }
304
+ }
305
+ }
306
+ return out;
307
+ }
308
+ function escapeKey(value) {
309
+ return `"${escapeString(value)}"`;
310
+ }
311
+ function collectUnknownEnvelopeKeys(node) {
312
+ const keys = [];
313
+ for (const binding of node.bindings) {
314
+ const typedKey = binding.datatype ? `${binding.key}:${binding.datatype.name}` : binding.key;
315
+ switch (binding.key) {
316
+ case 'canonical_hash_alg':
317
+ case 'canonical_hash':
318
+ case 'bytes_hash_alg':
319
+ case 'bytes_hash':
320
+ case 'checksum_alg':
321
+ case 'checksum_value':
322
+ case 'sig':
323
+ case 'canonical':
324
+ case 'bytes':
325
+ case 'checksum':
326
+ continue;
327
+ case 'integrity':
328
+ if (binding.value.type !== 'ObjectNode') {
329
+ keys.push(typedKey);
330
+ continue;
331
+ }
332
+ keys.push(...collectUnknownSectionKeys(binding.value, new Set([
333
+ 'alg',
334
+ 'hash',
335
+ 'bytes_hash_alg',
336
+ 'bytes_hash',
337
+ 'checksum_alg',
338
+ 'checksum_value',
339
+ 'canonical_hash_alg',
340
+ 'canonical_hash',
341
+ ]), typedKey));
342
+ continue;
343
+ case 'signatures':
344
+ if (binding.value.type !== 'ListNode') {
345
+ keys.push(typedKey);
346
+ continue;
347
+ }
348
+ keys.push(...collectUnknownSignatureKeys(binding.value, typedKey));
349
+ continue;
350
+ case 'encryption':
351
+ if (binding.value.type !== 'ObjectNode') {
352
+ keys.push(typedKey);
353
+ continue;
354
+ }
355
+ keys.push(...collectUnknownSectionKeys(binding.value, new Set([
356
+ 'alg',
357
+ 'kid',
358
+ 'ciphertext',
359
+ 'nonce',
360
+ 'tag',
361
+ 'epk',
362
+ ]), typedKey));
363
+ continue;
364
+ default:
365
+ keys.push(typedKey);
366
+ }
367
+ }
368
+ return keys;
369
+ }
370
+ function collectUnknownSectionKeys(node, allowed, section) {
371
+ const keys = [];
372
+ for (const binding of node.bindings) {
373
+ const typedKey = binding.datatype ? `${binding.key}:${binding.datatype.name}` : binding.key;
374
+ if (!allowed.has(binding.key) && !allowed.has(typedKey)) {
375
+ keys.push(`${section}.${typedKey}`);
376
+ }
377
+ }
378
+ return keys;
379
+ }
380
+ function collectUnknownSignatureKeys(value, section) {
381
+ const keys = [];
382
+ for (let index = 0; index < value.elements.length; index++) {
383
+ const element = value.elements[index];
384
+ if (element.type !== 'ObjectNode') {
385
+ keys.push(`${section}[${index}]`);
386
+ continue;
387
+ }
388
+ keys.push(...collectUnknownSectionKeys(element, new Set(['alg', 'kid', 'sig']), `${section}[${index}]`));
389
+ }
390
+ return keys;
391
+ }
392
+ function isEnvelopeBinding(binding) {
393
+ return datatypeBase(binding.datatype?.name) === ENVELOPE_DATATYPE;
394
+ }
395
+ function isEnvelopeEvent(event) {
396
+ return datatypeBase(event.datatype) === ENVELOPE_DATATYPE;
397
+ }
398
+ function datatypeBase(datatype) {
399
+ if (!datatype)
400
+ return null;
401
+ const genericIdx = datatype.indexOf('<');
402
+ const separatorIdx = datatype.indexOf('[');
403
+ const endIdx = [genericIdx, separatorIdx]
404
+ .filter((idx) => idx >= 0)
405
+ .reduce((min, idx) => Math.min(min, idx), datatype.length);
406
+ return datatype.slice(0, endIdx).toLowerCase();
407
+ }
408
+ function isTopLevelPath(path) {
409
+ return path.segments.length === 2
410
+ && path.segments[0]?.type === 'root'
411
+ && path.segments[1]?.type === 'member';
412
+ }
413
+ function normalizeHash(hash) {
414
+ return hash.trim().replace(/^#/, '').toLowerCase();
415
+ }
416
+ function normalizeHashAlgorithm(algorithm) {
417
+ const normalized = algorithm.trim().toLowerCase();
418
+ if (normalized === 'sha-512' || normalized === 'sha512') {
419
+ return 'sha-512';
420
+ }
421
+ return 'sha-256';
422
+ }
423
+ function normalizeNumber(raw) {
424
+ let value = raw.replace(/_/g, '').replace(/E/g, 'e').replace(/^\+/, '');
425
+ const negative = value.startsWith('-');
426
+ if (negative)
427
+ value = value.slice(1);
428
+ const [mantissaRaw, expRaw] = value.split('e');
429
+ let mantissa = mantissaRaw ?? '0';
430
+ let exponent = expRaw ? parseInt(expRaw, 10) : 0;
431
+ if (Number.isNaN(exponent))
432
+ exponent = 0;
433
+ let [intPart, fracPart] = mantissa.split('.');
434
+ intPart = (intPart ?? '0').replace(/^0+/, '') || '0';
435
+ fracPart = trimTrailingZeros(fracPart ?? '');
436
+ const digits = `${intPart}${fracPart}`;
437
+ let decimalIndex = intPart.length + exponent;
438
+ if (digits.replace(/0/g, '').length === 0) {
439
+ return '0';
440
+ }
441
+ if (decimalIndex <= 0) {
442
+ const zeros = '0'.repeat(Math.abs(decimalIndex));
443
+ return trimTrailingDotAndZeros(`${negative ? '-' : ''}0.${zeros}${digits}`);
444
+ }
445
+ if (decimalIndex >= digits.length) {
446
+ const zeros = '0'.repeat(decimalIndex - digits.length);
447
+ return `${negative ? '-' : ''}${digits}${zeros}`;
448
+ }
449
+ const left = digits.slice(0, decimalIndex);
450
+ const right = trimTrailingZeros(digits.slice(decimalIndex));
451
+ const normalized = right.length > 0 ? `${left}.${right}` : left;
452
+ return `${negative ? '-' : ''}${normalized}`;
453
+ }
454
+ function trimTrailingZeros(value) {
455
+ let end = value.length;
456
+ while (end > 0 && value[end - 1] === '0') {
457
+ end -= 1;
458
+ }
459
+ return value.slice(0, end);
460
+ }
461
+ function trimTrailingDotAndZeros(value) {
462
+ let end = value.length;
463
+ while (end > 0 && value[end - 1] === '0') {
464
+ end -= 1;
465
+ }
466
+ if (end > 0 && value[end - 1] === '.') {
467
+ end -= 1;
468
+ }
469
+ return value.slice(0, end);
470
+ }
471
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@altopelago/aeon-integrity",
3
+ "version": "0.9.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js"
11
+ }
12
+ },
13
+ "files": [
14
+ "dist",
15
+ "!dist/**/*.test.d.ts",
16
+ "!dist/**/*.test.d.ts.map",
17
+ "!dist/**/*.test.js",
18
+ "!dist/**/*.test.js.map"
19
+ ],
20
+ "dependencies": {
21
+ "@altopelago/aeon-aes": "0.9.0"
22
+ },
23
+ "devDependencies": {
24
+ "@altopelago/aeon-lexer": "0.9.0",
25
+ "@altopelago/aeon-parser": "0.9.0"
26
+ },
27
+ "scripts": {
28
+ "build": "tsc -p tsconfig.json",
29
+ "test": "node --test dist/*.test.js",
30
+ "clean": "rm -rf dist",
31
+ "typecheck": "tsc -p tsconfig.json --noEmit"
32
+ }
33
+ }