@engramx/client 0.8.0-rc.3 → 0.9.0-rc.1
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/encryption.d.ts +11 -0
- package/dist/encryption.js +64 -10
- package/dist/encryption.js.map +1 -1
- package/dist/lineage.d.ts +1 -1
- package/dist/lineage.js +1 -1
- package/dist/lineage.js.map +1 -1
- package/package.json +2 -2
package/dist/encryption.d.ts
CHANGED
|
@@ -6,8 +6,19 @@ interface KeyDerivingActor {
|
|
|
6
6
|
err: string;
|
|
7
7
|
}>;
|
|
8
8
|
getMemoryKeyVerificationKey(): Promise<Uint8Array | number[]>;
|
|
9
|
+
/** 0.8.1+ engrams only. Epoch 0 never needs it (the legacy method IS epoch 0),
|
|
10
|
+
* and nonzero epochs can only exist on engrams that have the method. */
|
|
11
|
+
getEncryptedMemoryKeyForEpoch?(epoch: bigint, transportPublicKey: Uint8Array): Promise<{
|
|
12
|
+
ok: Uint8Array;
|
|
13
|
+
} | {
|
|
14
|
+
err: string;
|
|
15
|
+
}>;
|
|
9
16
|
}
|
|
10
17
|
export declare class EncryptionManager {
|
|
18
|
+
/** Derived key material PER EPOCH. The epoch in the map key is the in-memory twin of the
|
|
19
|
+
* re-pinned persistence rule (canisterId, context, epoch): a cache that cannot distinguish
|
|
20
|
+
* epochs would seal post-rotation content with a pre-rotation key, and verify-after-encrypt
|
|
21
|
+
* is structurally blind to that (the same stale key encrypts and decrypts). */
|
|
11
22
|
private dkm;
|
|
12
23
|
private enabled;
|
|
13
24
|
/**
|
package/dist/encryption.js
CHANGED
|
@@ -19,6 +19,13 @@ const ASSOCIATED_DATA = new Uint8Array(0);
|
|
|
19
19
|
const MAGIC = new Uint8Array([0x45, 0x4e, 0x43, 0x01]);
|
|
20
20
|
// "ENC" + 0x02 — marks a length-framed append segment (see encodeAppendDelta).
|
|
21
21
|
const SEGMENT_MAGIC = new Uint8Array([0x45, 0x4e, 0x43, 0x02]);
|
|
22
|
+
// "ENC" + 0x03 — epoch-tagged envelope: ENC\x03 | u16 BE epoch | ciphertext. NO WRITER EMITS
|
|
23
|
+
// THIS YET (rotation Phase 1 is read-side only); the decoder ships a full release ahead so no
|
|
24
|
+
// deployed SDK can ever meet an epoch-tagged byte it does not understand. The epoch is folded
|
|
25
|
+
// into the AES-GCM ASSOCIATED DATA (ratified D2, a one-way door): a flipped epoch byte redirects
|
|
26
|
+
// the reader to a different key AND fails the GCM tag, instead of silently decrypting under the
|
|
27
|
+
// wrong epoch's key.
|
|
28
|
+
const EPOCH_MAGIC = new Uint8Array([0x45, 0x4e, 0x43, 0x03]);
|
|
22
29
|
function startsWith(bytes, prefix) {
|
|
23
30
|
if (bytes.length < prefix.length)
|
|
24
31
|
return false;
|
|
@@ -41,7 +48,11 @@ export class EncryptionManager {
|
|
|
41
48
|
* regardless of this flag, so reads keep working during/after migration.
|
|
42
49
|
*/
|
|
43
50
|
constructor(enabled = false) {
|
|
44
|
-
|
|
51
|
+
/** Derived key material PER EPOCH. The epoch in the map key is the in-memory twin of the
|
|
52
|
+
* re-pinned persistence rule (canisterId, context, epoch): a cache that cannot distinguish
|
|
53
|
+
* epochs would seal post-rotation content with a pre-rotation key, and verify-after-encrypt
|
|
54
|
+
* is structurally blind to that (the same stale key encrypts and decrypts). */
|
|
55
|
+
this.dkm = new Map();
|
|
45
56
|
this.enabled = enabled;
|
|
46
57
|
}
|
|
47
58
|
/** Update the write-time encryption mode (e.g. synced from the canister flag). */
|
|
@@ -53,19 +64,31 @@ export class EncryptionManager {
|
|
|
53
64
|
}
|
|
54
65
|
/** Derive (once, cached) the shared AES key material via vetKeys. Throws on
|
|
55
66
|
* failure — a confidentiality feature must fail loud, never silently write plaintext. */
|
|
56
|
-
async deriveKey(actor) {
|
|
57
|
-
|
|
58
|
-
|
|
67
|
+
async deriveKey(actor, epoch = 0) {
|
|
68
|
+
const cached = this.dkm.get(epoch);
|
|
69
|
+
if (cached)
|
|
70
|
+
return cached;
|
|
59
71
|
const { TransportSecretKey, EncryptedVetKey, DerivedPublicKey } = await import('@icp-sdk/vetkeys');
|
|
60
72
|
const tsk = TransportSecretKey.random();
|
|
61
|
-
|
|
73
|
+
// Epoch 0 goes through the LEGACY method deliberately: it is epoch 0, byte-for-byte (the
|
|
74
|
+
// canister's epochInput(0) is the same literal), and it exists on every deployed engram.
|
|
75
|
+
// Nonzero epochs can only exist on engrams new enough to have the epoch method.
|
|
76
|
+
const res = epoch === 0
|
|
77
|
+
? await actor.getEncryptedMemoryKey(tsk.publicKeyBytes())
|
|
78
|
+
: actor.getEncryptedMemoryKeyForEpoch
|
|
79
|
+
? await actor.getEncryptedMemoryKeyForEpoch(BigInt(epoch), tsk.publicKeyBytes())
|
|
80
|
+
: {
|
|
81
|
+
err: `content is sealed under key epoch ${epoch}, but this engram predates epoch-aware derivation — upgrade the engram before reading post-rotation content`,
|
|
82
|
+
};
|
|
62
83
|
if (!('ok' in res)) {
|
|
63
|
-
throw new Error(`vetKeys:
|
|
84
|
+
throw new Error(`vetKeys: memory key derivation failed (epoch ${epoch}): ${'err' in res ? res.err : 'unknown'}`);
|
|
64
85
|
}
|
|
86
|
+
const input = epoch === 0 ? KEY_INPUT : new TextEncoder().encode(`memory:epoch:${epoch}`);
|
|
65
87
|
const dpk = DerivedPublicKey.deserialize(toU8(await actor.getMemoryKeyVerificationKey()));
|
|
66
|
-
const vetKey = EncryptedVetKey.deserialize(toU8(res.ok)).decryptAndVerify(tsk, dpk,
|
|
67
|
-
|
|
68
|
-
|
|
88
|
+
const vetKey = EncryptedVetKey.deserialize(toU8(res.ok)).decryptAndVerify(tsk, dpk, input);
|
|
89
|
+
const dkm = await vetKey.asDerivedKeyMaterial();
|
|
90
|
+
this.dkm.set(epoch, dkm);
|
|
91
|
+
return dkm;
|
|
69
92
|
}
|
|
70
93
|
/** Warm the key cache (one vetKD derivation). No-op when disabled. */
|
|
71
94
|
async prepare(actor) {
|
|
@@ -92,6 +115,37 @@ export class EncryptionManager {
|
|
|
92
115
|
/** Byte-exact decrypt. Untagged bytes are returned unchanged; magic-tagged bytes
|
|
93
116
|
* are AES-GCM decrypted to the original bytes. */
|
|
94
117
|
async decryptBytes(actor, bytes) {
|
|
118
|
+
// UNKNOWN ENVELOPE VERSION → THROW, never fall through (key-rotation Phase 0c). The exact
|
|
119
|
+
// 4-byte match below means any FUTURE envelope ("ENC" + a version byte we don't know) fails
|
|
120
|
+
// hasMagic and would be handed back to the caller AS CONTENT — silently, ciphertext rendered
|
|
121
|
+
// as data. This guard must be in a PUBLISHED release one full cycle before any new envelope
|
|
122
|
+
// version exists anywhere, so an old SDK meeting new bytes fails loudly instead of lying.
|
|
123
|
+
//
|
|
124
|
+
// bytes[3] < 0x20 is what keeps this from regressing plaintext: real files legitimately begin
|
|
125
|
+
// with the ASCII text "ENC" ("ENCODING:", "ENCRYPTED", "ENC_KEY=" all have bytes[3] >= 0x20,
|
|
126
|
+
// a printable character). Version bytes are control-range by construction (0x01, 0x02, ...).
|
|
127
|
+
if (bytes.length >= 4 &&
|
|
128
|
+
bytes[0] === 0x45 &&
|
|
129
|
+
bytes[1] === 0x4e &&
|
|
130
|
+
bytes[2] === 0x43 &&
|
|
131
|
+
bytes[3] < 0x20 &&
|
|
132
|
+
bytes[3] !== 0x01 &&
|
|
133
|
+
bytes[3] !== 0x02 &&
|
|
134
|
+
bytes[3] !== 0x03) {
|
|
135
|
+
throw new Error(`Unknown encryption envelope version 0x${bytes[3].toString(16).padStart(2, '0')} — ` +
|
|
136
|
+
`this SDK understands ENC\\x01 (envelope) and ENC\\x02 (segment framing) only. ` +
|
|
137
|
+
`The content was written by a newer engram/SDK; upgrade @engramx/client rather than ` +
|
|
138
|
+
`treating these bytes as plaintext.`);
|
|
139
|
+
}
|
|
140
|
+
if (startsWith(bytes, EPOCH_MAGIC)) {
|
|
141
|
+
if (bytes.length < 6) {
|
|
142
|
+
throw new Error('Malformed epoch envelope: ENC\\x03 requires a 2-byte epoch after the magic.');
|
|
143
|
+
}
|
|
144
|
+
const epoch = (bytes[4] << 8) | bytes[5];
|
|
145
|
+
const aad = bytes.subarray(4, 6); // the epoch bytes ARE the associated data (D2)
|
|
146
|
+
const key = await this.deriveKey(actor, epoch);
|
|
147
|
+
return key.decryptMessage(bytes.subarray(6), DOMAIN_SEP, aad);
|
|
148
|
+
}
|
|
95
149
|
if (!hasMagic(bytes))
|
|
96
150
|
return bytes;
|
|
97
151
|
const key = await this.deriveKey(actor);
|
|
@@ -189,7 +243,7 @@ export class EncryptionManager {
|
|
|
189
243
|
return await this.decryptBytes(actor, bytes);
|
|
190
244
|
}
|
|
191
245
|
clearCache() {
|
|
192
|
-
this.dkm
|
|
246
|
+
this.dkm.clear();
|
|
193
247
|
}
|
|
194
248
|
}
|
|
195
249
|
//# sourceMappingURL=encryption.js.map
|
package/dist/encryption.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../src/encryption.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,EAAE;AACF,iFAAiF;AACjF,yEAAyE;AACzE,kFAAkF;AAClF,iFAAiF;AACjF,0DAA0D;AAC1D,EAAE;AACF,4EAA4E;AAC5E,+EAA+E;AAC/E,uEAAuE;AAUvE,6EAA6E;AAC7E,MAAM,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACrD,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;AACxE,yEAAyE;AACzE,iFAAiF;AACjF,MAAM,eAAe,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1C,wEAAwE;AACxE,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACvD,+EAA+E;AAC/E,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../src/encryption.ts"],"names":[],"mappings":"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"}
|
package/dist/lineage.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { type HttpAgent } from '@icp-sdk/core/agent';
|
|
|
2
2
|
/** The canonical registry — SET AT FLEET DEPLOY (empty until then, like @engramx/owner's
|
|
3
3
|
* config). While empty, verification without an explicit registryId reports 'indeterminate'
|
|
4
4
|
* rather than guessing. */
|
|
5
|
-
export declare const CANONICAL_REGISTRY_CANISTER_ID = "";
|
|
5
|
+
export declare const CANONICAL_REGISTRY_CANISTER_ID = "safaa-qaaaa-aaaam-qjb5a-cai";
|
|
6
6
|
export type CustodyMode = 'managed' | 'sovereign' | 'unknown';
|
|
7
7
|
export interface LineageVerdict {
|
|
8
8
|
/** The verdict:
|
package/dist/lineage.js
CHANGED
|
@@ -19,7 +19,7 @@ import { Principal } from '@icp-sdk/core/principal';
|
|
|
19
19
|
/** The canonical registry — SET AT FLEET DEPLOY (empty until then, like @engramx/owner's
|
|
20
20
|
* config). While empty, verification without an explicit registryId reports 'indeterminate'
|
|
21
21
|
* rather than guessing. */
|
|
22
|
-
export const CANONICAL_REGISTRY_CANISTER_ID = '';
|
|
22
|
+
export const CANONICAL_REGISTRY_CANISTER_ID = 'safaa-qaaaa-aaaam-qjb5a-cai';
|
|
23
23
|
const engramLineageIdl = ({ IDL }) => IDL.Service({ getSpawnedBy: IDL.Func([], [IDL.Opt(IDL.Principal)], ['query']) });
|
|
24
24
|
const registryLineageIdl = ({ IDL }) => IDL.Service({
|
|
25
25
|
getCustodyMode: IDL.Func([IDL.Principal], [IDL.Text], ['query']),
|
package/dist/lineage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lineage.js","sourceRoot":"","sources":["../src/lineage.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,6FAA6F;AAC7F,mCAAmC;AACnC,EAAE;AACF,iGAAiG;AACjG,+FAA+F;AAC/F,8FAA8F;AAC9F,iGAAiG;AACjG,kGAAkG;AAClG,EAAE;AACF,iGAAiG;AACjG,+FAA+F;AAC/F,6FAA6F;AAC7F,8FAA8F;AAC9F,8FAA8F;AAC9F,6FAA6F;AAC7F,OAAO,EAAE,KAAK,EAAE,cAAc,EAAkB,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD;;4BAE4B;AAC5B,MAAM,CAAC,MAAM,8BAA8B,GAAG,
|
|
1
|
+
{"version":3,"file":"lineage.js","sourceRoot":"","sources":["../src/lineage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@engramx/client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0-rc.1",
|
|
4
4
|
"description": "Client SDK for EngramX — persistent, decentralized memory for AI agents on ICP",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "EngramX <developer@engramx.ai>",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"@icp-sdk/core": "^5.4.0"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@ic402/client": "^2.
|
|
53
|
+
"@ic402/client": "^2.13.0",
|
|
54
54
|
"@icp-sdk/core": "^5.4.0",
|
|
55
55
|
"@icp-sdk/vetkeys": "0.5.0-beta.0",
|
|
56
56
|
"cborg": "^5.1.7"
|