@claw-network/core 0.1.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/crypto/aes.d.ts +8 -0
- package/dist/crypto/aes.d.ts.map +1 -0
- package/dist/crypto/aes.js +29 -0
- package/dist/crypto/aes.js.map +1 -0
- package/dist/crypto/ed25519.d.ts +11 -0
- package/dist/crypto/ed25519.d.ts.map +1 -0
- package/dist/crypto/ed25519.js +25 -0
- package/dist/crypto/ed25519.js.map +1 -0
- package/dist/crypto/hash.d.ts +5 -0
- package/dist/crypto/hash.d.ts.map +1 -0
- package/dist/crypto/hash.js +16 -0
- package/dist/crypto/hash.js.map +1 -0
- package/dist/crypto/hkdf.d.ts +2 -0
- package/dist/crypto/hkdf.d.ts.map +1 -0
- package/dist/crypto/hkdf.js +6 -0
- package/dist/crypto/hkdf.js.map +1 -0
- package/dist/crypto/index.d.ts +10 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +10 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/jcs.d.ts +3 -0
- package/dist/crypto/jcs.d.ts.map +1 -0
- package/dist/crypto/jcs.js +14 -0
- package/dist/crypto/jcs.js.map +1 -0
- package/dist/crypto/mnemonic.d.ts +9 -0
- package/dist/crypto/mnemonic.d.ts.map +1 -0
- package/dist/crypto/mnemonic.js +22 -0
- package/dist/crypto/mnemonic.js.map +1 -0
- package/dist/crypto/rotation.d.ts +20 -0
- package/dist/crypto/rotation.d.ts.map +1 -0
- package/dist/crypto/rotation.js +37 -0
- package/dist/crypto/rotation.js.map +1 -0
- package/dist/crypto/shamir.d.ts +3 -0
- package/dist/crypto/shamir.d.ts.map +1 -0
- package/dist/crypto/shamir.js +125 -0
- package/dist/crypto/shamir.js.map +1 -0
- package/dist/crypto/x25519.d.ts +8 -0
- package/dist/crypto/x25519.d.ts.map +1 -0
- package/dist/crypto/x25519.js +13 -0
- package/dist/crypto/x25519.js.map +1 -0
- package/dist/encoding/base58.d.ts +5 -0
- package/dist/encoding/base58.d.ts.map +1 -0
- package/dist/encoding/base58.js +63 -0
- package/dist/encoding/base58.js.map +1 -0
- package/dist/encoding/index.d.ts +2 -0
- package/dist/encoding/index.d.ts.map +1 -0
- package/dist/encoding/index.js +2 -0
- package/dist/encoding/index.js.map +1 -0
- package/dist/identity/did.d.ts +6 -0
- package/dist/identity/did.d.ts.map +1 -0
- package/dist/identity/did.js +48 -0
- package/dist/identity/did.js.map +1 -0
- package/dist/identity/index.d.ts +2 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +2 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/p2p/config.d.ts +26 -0
- package/dist/p2p/config.d.ts.map +1 -0
- package/dist/p2p/config.js +14 -0
- package/dist/p2p/config.js.map +1 -0
- package/dist/p2p/index.d.ts +4 -0
- package/dist/p2p/index.d.ts.map +1 -0
- package/dist/p2p/index.js +4 -0
- package/dist/p2p/index.js.map +1 -0
- package/dist/p2p/node.d.ts +44 -0
- package/dist/p2p/node.d.ts.map +1 -0
- package/dist/p2p/node.js +299 -0
- package/dist/p2p/node.js.map +1 -0
- package/dist/p2p/topics.d.ts +6 -0
- package/dist/p2p/topics.d.ts.map +1 -0
- package/dist/p2p/topics.js +6 -0
- package/dist/p2p/topics.js.map +1 -0
- package/dist/protocol/constants.d.ts +3 -0
- package/dist/protocol/constants.d.ts.map +1 -0
- package/dist/protocol/constants.js +3 -0
- package/dist/protocol/constants.js.map +1 -0
- package/dist/protocol/credentials.d.ts +30 -0
- package/dist/protocol/credentials.d.ts.map +1 -0
- package/dist/protocol/credentials.js +61 -0
- package/dist/protocol/credentials.js.map +1 -0
- package/dist/protocol/event-hash.d.ts +10 -0
- package/dist/protocol/event-hash.d.ts.map +1 -0
- package/dist/protocol/event-hash.js +32 -0
- package/dist/protocol/event-hash.js.map +1 -0
- package/dist/protocol/index.d.ts +5 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +5 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/protocol/key-rotation.d.ts +23 -0
- package/dist/protocol/key-rotation.d.ts.map +1 -0
- package/dist/protocol/key-rotation.js +34 -0
- package/dist/protocol/key-rotation.js.map +1 -0
- package/dist/storage/config.d.ts +22 -0
- package/dist/storage/config.d.ts.map +1 -0
- package/dist/storage/config.js +63 -0
- package/dist/storage/config.js.map +1 -0
- package/dist/storage/event-store.d.ts +49 -0
- package/dist/storage/event-store.d.ts.map +1 -0
- package/dist/storage/event-store.js +329 -0
- package/dist/storage/event-store.js.map +1 -0
- package/dist/storage/health.d.ts +9 -0
- package/dist/storage/health.d.ts.map +1 -0
- package/dist/storage/health.js +25 -0
- package/dist/storage/health.js.map +1 -0
- package/dist/storage/index.d.ts +13 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +13 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/keystore.d.ts +36 -0
- package/dist/storage/keystore.d.ts.map +1 -0
- package/dist/storage/keystore.js +129 -0
- package/dist/storage/keystore.js.map +1 -0
- package/dist/storage/kv.d.ts +11 -0
- package/dist/storage/kv.d.ts.map +1 -0
- package/dist/storage/kv.js +2 -0
- package/dist/storage/kv.js.map +1 -0
- package/dist/storage/level.d.ts +17 -0
- package/dist/storage/level.d.ts.map +1 -0
- package/dist/storage/level.js +57 -0
- package/dist/storage/level.js.map +1 -0
- package/dist/storage/memory.d.ts +12 -0
- package/dist/storage/memory.d.ts.map +1 -0
- package/dist/storage/memory.js +20 -0
- package/dist/storage/memory.js.map +1 -0
- package/dist/storage/migrations.d.ts +11 -0
- package/dist/storage/migrations.d.ts.map +1 -0
- package/dist/storage/migrations.js +47 -0
- package/dist/storage/migrations.js.map +1 -0
- package/dist/storage/paths.d.ts +14 -0
- package/dist/storage/paths.d.ts.map +1 -0
- package/dist/storage/paths.js +30 -0
- package/dist/storage/paths.js.map +1 -0
- package/dist/storage/snapshot-scheduler.d.ts +16 -0
- package/dist/storage/snapshot-scheduler.d.ts.map +1 -0
- package/dist/storage/snapshot-scheduler.js +43 -0
- package/dist/storage/snapshot-scheduler.js.map +1 -0
- package/dist/storage/snapshots.d.ts +53 -0
- package/dist/storage/snapshots.d.ts.map +1 -0
- package/dist/storage/snapshots.js +192 -0
- package/dist/storage/snapshots.js.map +1 -0
- package/dist/storage/state-store.d.ts +14 -0
- package/dist/storage/state-store.d.ts.map +1 -0
- package/dist/storage/state-store.js +38 -0
- package/dist/storage/state-store.js.map +1 -0
- package/dist/utils/PromiseWithResolvers.d.ts +2 -0
- package/dist/utils/PromiseWithResolvers.d.ts.map +1 -0
- package/dist/utils/PromiseWithResolvers.js +18 -0
- package/dist/utils/PromiseWithResolvers.js.map +1 -0
- package/dist/utils/bytes.d.ts +8 -0
- package/dist/utils/bytes.d.ts.map +1 -0
- package/dist/utils/bytes.js +40 -0
- package/dist/utils/bytes.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface AesGcmEncrypted {
|
|
2
|
+
nonceHex: string;
|
|
3
|
+
ciphertextHex: string;
|
|
4
|
+
tagHex: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function encryptAes256Gcm(key: Uint8Array, plaintext: Uint8Array): AesGcmEncrypted;
|
|
7
|
+
export declare function decryptAes256Gcm(key: Uint8Array, encrypted: AesGcmEncrypted): Uint8Array;
|
|
8
|
+
//# sourceMappingURL=aes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aes.d.ts","sourceRoot":"","sources":["../../src/crypto/aes.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,eAAe,CAaxF;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,eAAe,GACzB,UAAU,CAWZ"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { createCipheriv, createDecipheriv, randomBytes } from 'node:crypto';
|
|
2
|
+
import { bytesToHex, hexToBytes } from '../utils/bytes.js';
|
|
3
|
+
export function encryptAes256Gcm(key, plaintext) {
|
|
4
|
+
if (key.length !== 32) {
|
|
5
|
+
throw new Error('AES-256-GCM requires 32-byte key');
|
|
6
|
+
}
|
|
7
|
+
const nonce = randomBytes(12);
|
|
8
|
+
const cipher = createCipheriv('aes-256-gcm', key, nonce);
|
|
9
|
+
const ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final()]);
|
|
10
|
+
const tag = cipher.getAuthTag();
|
|
11
|
+
return {
|
|
12
|
+
nonceHex: bytesToHex(nonce),
|
|
13
|
+
ciphertextHex: bytesToHex(ciphertext),
|
|
14
|
+
tagHex: bytesToHex(tag),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function decryptAes256Gcm(key, encrypted) {
|
|
18
|
+
if (key.length !== 32) {
|
|
19
|
+
throw new Error('AES-256-GCM requires 32-byte key');
|
|
20
|
+
}
|
|
21
|
+
const nonce = hexToBytes(encrypted.nonceHex);
|
|
22
|
+
const ciphertext = hexToBytes(encrypted.ciphertextHex);
|
|
23
|
+
const tag = hexToBytes(encrypted.tagHex);
|
|
24
|
+
const decipher = createDecipheriv('aes-256-gcm', key, nonce);
|
|
25
|
+
decipher.setAuthTag(tag);
|
|
26
|
+
const plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
|
|
27
|
+
return new Uint8Array(plaintext);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=aes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aes.js","sourceRoot":"","sources":["../../src/crypto/aes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQ3D,MAAM,UAAU,gBAAgB,CAAC,GAAe,EAAE,SAAqB;IACrE,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAChC,OAAO;QACL,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC;QAC3B,aAAa,EAAE,UAAU,CAAC,UAAU,CAAC;QACrC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,GAAe,EACf,SAA0B;IAE1B,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7D,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjF,OAAO,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface Keypair {
|
|
2
|
+
privateKey: Uint8Array;
|
|
3
|
+
publicKey: Uint8Array;
|
|
4
|
+
}
|
|
5
|
+
export declare function generateKeypair(): Promise<Keypair>;
|
|
6
|
+
export declare function publicKeyFromPrivateKey(privateKey: Uint8Array): Promise<Uint8Array>;
|
|
7
|
+
export declare function signBytes(message: Uint8Array, privateKey: Uint8Array): Promise<Uint8Array>;
|
|
8
|
+
export declare function verifySignature(signature: Uint8Array, message: Uint8Array, publicKey: Uint8Array): Promise<boolean>;
|
|
9
|
+
export declare function signBase58(message: Uint8Array, privateKey: Uint8Array): Promise<string>;
|
|
10
|
+
export declare function verifyBase58(signatureBase58: string, message: Uint8Array, publicKey: Uint8Array): Promise<boolean>;
|
|
11
|
+
//# sourceMappingURL=ed25519.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["../../src/crypto/ed25519.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,UAAU,CAAC;CACvB;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAIxD;AAED,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAEzF;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAEhG;AAED,wBAAsB,eAAe,CACnC,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7F;AAED,wBAAsB,YAAY,CAChC,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,OAAO,CAAC,CAGlB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as ed25519 from '@noble/ed25519';
|
|
2
|
+
import { base58btcDecode, base58btcEncode } from '../encoding/base58.js';
|
|
3
|
+
export async function generateKeypair() {
|
|
4
|
+
const privateKey = ed25519.utils.randomPrivateKey();
|
|
5
|
+
const publicKey = await ed25519.getPublicKeyAsync(privateKey);
|
|
6
|
+
return { privateKey, publicKey };
|
|
7
|
+
}
|
|
8
|
+
export async function publicKeyFromPrivateKey(privateKey) {
|
|
9
|
+
return ed25519.getPublicKeyAsync(privateKey);
|
|
10
|
+
}
|
|
11
|
+
export async function signBytes(message, privateKey) {
|
|
12
|
+
return ed25519.signAsync(message, privateKey);
|
|
13
|
+
}
|
|
14
|
+
export async function verifySignature(signature, message, publicKey) {
|
|
15
|
+
return ed25519.verifyAsync(signature, message, publicKey);
|
|
16
|
+
}
|
|
17
|
+
export async function signBase58(message, privateKey) {
|
|
18
|
+
const sig = await signBytes(message, privateKey);
|
|
19
|
+
return base58btcEncode(sig);
|
|
20
|
+
}
|
|
21
|
+
export async function verifyBase58(signatureBase58, message, publicKey) {
|
|
22
|
+
const sig = base58btcDecode(signatureBase58);
|
|
23
|
+
return verifySignature(sig, message, publicKey);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=ed25519.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ed25519.js","sourceRoot":"","sources":["../../src/crypto/ed25519.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAOzE,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;IACpD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC9D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,UAAsB;IAClE,OAAO,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAmB,EAAE,UAAsB;IACzE,OAAO,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAqB,EACrB,OAAmB,EACnB,SAAqB;IAErB,OAAO,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAmB,EAAE,UAAsB;IAC1E,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACjD,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,eAAuB,EACvB,OAAmB,EACnB,SAAqB;IAErB,MAAM,GAAG,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;IAC7C,OAAO,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function sha256Bytes(data: Uint8Array): Uint8Array;
|
|
2
|
+
export declare function sha256Hex(data: Uint8Array): string;
|
|
3
|
+
export declare function blake3Bytes(data: Uint8Array): Uint8Array;
|
|
4
|
+
export declare function blake3Hex(data: Uint8Array): string;
|
|
5
|
+
//# sourceMappingURL=hash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/crypto/hash.ts"],"names":[],"mappings":"AAIA,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAExD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAElD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAExD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAElD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { blake3 } from '@noble/hashes/blake3';
|
|
2
|
+
import { sha256 } from '@noble/hashes/sha256';
|
|
3
|
+
import { bytesToHex } from '../utils/bytes.js';
|
|
4
|
+
export function sha256Bytes(data) {
|
|
5
|
+
return sha256(data);
|
|
6
|
+
}
|
|
7
|
+
export function sha256Hex(data) {
|
|
8
|
+
return bytesToHex(sha256Bytes(data));
|
|
9
|
+
}
|
|
10
|
+
export function blake3Bytes(data) {
|
|
11
|
+
return blake3(data);
|
|
12
|
+
}
|
|
13
|
+
export function blake3Hex(data) {
|
|
14
|
+
return bytesToHex(blake3Bytes(data));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/crypto/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAgB;IACxC,OAAO,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAgB;IACxC,OAAO,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hkdf.d.ts","sourceRoot":"","sources":["../../src/crypto/hkdf.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,IAAI,CAAC,EAAE,UAAU,EACjB,IAAI,CAAC,EAAE,UAAU,EACjB,MAAM,SAAK,GACV,UAAU,CAEZ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hkdf.js","sourceRoot":"","sources":["../../src/crypto/hkdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,UAAU,UAAU,CACxB,GAAe,EACf,IAAiB,EACjB,IAAiB,EACjB,MAAM,GAAG,EAAE;IAEX,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './aes.js';
|
|
2
|
+
export * from './ed25519.js';
|
|
3
|
+
export * from './hash.js';
|
|
4
|
+
export * from './hkdf.js';
|
|
5
|
+
export * from './jcs.js';
|
|
6
|
+
export * from './mnemonic.js';
|
|
7
|
+
export * from './rotation.js';
|
|
8
|
+
export * from './shamir.js';
|
|
9
|
+
export * from './x25519.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/crypto/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './aes.js';
|
|
2
|
+
export * from './ed25519.js';
|
|
3
|
+
export * from './hash.js';
|
|
4
|
+
export * from './hkdf.js';
|
|
5
|
+
export * from './jcs.js';
|
|
6
|
+
export * from './mnemonic.js';
|
|
7
|
+
export * from './rotation.js';
|
|
8
|
+
export * from './shamir.js';
|
|
9
|
+
export * from './x25519.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/crypto/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jcs.d.ts","sourceRoot":"","sources":["../../src/crypto/jcs.ts"],"names":[],"mappings":"AAKA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMvD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAE5D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import canonicalizeModule from 'canonicalize';
|
|
2
|
+
import { utf8ToBytes } from '../utils/bytes.js';
|
|
3
|
+
const canonicalize = canonicalizeModule;
|
|
4
|
+
export function canonicalizeJson(input) {
|
|
5
|
+
const out = canonicalize(input);
|
|
6
|
+
if (out === undefined) {
|
|
7
|
+
throw new Error('Unable to canonicalize input');
|
|
8
|
+
}
|
|
9
|
+
return out;
|
|
10
|
+
}
|
|
11
|
+
export function canonicalizeBytes(input) {
|
|
12
|
+
return utf8ToBytes(canonicalizeJson(input));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=jcs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jcs.js","sourceRoot":"","sources":["../../src/crypto/jcs.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,YAAY,GAAG,kBAAuE,CAAC;AAE7F,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type Wordlist = string[];
|
|
2
|
+
export declare const DEFAULT_WORDLIST: Wordlist;
|
|
3
|
+
export declare function generateMnemonic(strength?: number, wordlist?: Wordlist): string;
|
|
4
|
+
export declare function validateMnemonic(mnemonic: string, wordlist?: Wordlist): boolean;
|
|
5
|
+
export declare function mnemonicToEntropy(mnemonic: string, wordlist?: Wordlist): Uint8Array;
|
|
6
|
+
export declare function entropyToMnemonic(entropy: Uint8Array, wordlist?: Wordlist): string;
|
|
7
|
+
export declare function mnemonicToSeed(mnemonic: string, passphrase?: string): Promise<Uint8Array>;
|
|
8
|
+
export declare function mnemonicToSeedSync(mnemonic: string, passphrase?: string): Uint8Array;
|
|
9
|
+
//# sourceMappingURL=mnemonic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mnemonic.d.ts","sourceRoot":"","sources":["../../src/crypto/mnemonic.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC;AAEhC,eAAO,MAAM,gBAAgB,EAAE,QAAkB,CAAC;AAElD,wBAAgB,gBAAgB,CAAC,QAAQ,SAAM,EAAE,QAAQ,GAAE,QAA2B,GAAG,MAAM,CAE9F;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,QAA2B,GAAG,OAAO,CAEjG;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,QAA2B,GACpC,UAAU,CAEZ;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,GAAE,QAA2B,GAAG,MAAM,CAEpG;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,UAAU,SAAK,GACd,OAAO,CAAC,UAAU,CAAC,CAErB;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,SAAK,GAAG,UAAU,CAEhF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { entropyToMnemonic as entropyToMnemonicBase, generateMnemonic as generateMnemonicBase, mnemonicToEntropy as mnemonicToEntropyBase, mnemonicToSeed as mnemonicToSeedBase, mnemonicToSeedSync as mnemonicToSeedSyncBase, validateMnemonic as validateMnemonicBase, } from '@scure/bip39';
|
|
2
|
+
import { wordlist as english } from '@scure/bip39/wordlists/english';
|
|
3
|
+
export const DEFAULT_WORDLIST = english;
|
|
4
|
+
export function generateMnemonic(strength = 128, wordlist = DEFAULT_WORDLIST) {
|
|
5
|
+
return generateMnemonicBase(wordlist, strength);
|
|
6
|
+
}
|
|
7
|
+
export function validateMnemonic(mnemonic, wordlist = DEFAULT_WORDLIST) {
|
|
8
|
+
return validateMnemonicBase(mnemonic, wordlist);
|
|
9
|
+
}
|
|
10
|
+
export function mnemonicToEntropy(mnemonic, wordlist = DEFAULT_WORDLIST) {
|
|
11
|
+
return mnemonicToEntropyBase(mnemonic, wordlist);
|
|
12
|
+
}
|
|
13
|
+
export function entropyToMnemonic(entropy, wordlist = DEFAULT_WORDLIST) {
|
|
14
|
+
return entropyToMnemonicBase(entropy, wordlist);
|
|
15
|
+
}
|
|
16
|
+
export async function mnemonicToSeed(mnemonic, passphrase = '') {
|
|
17
|
+
return mnemonicToSeedBase(mnemonic, passphrase);
|
|
18
|
+
}
|
|
19
|
+
export function mnemonicToSeedSync(mnemonic, passphrase = '') {
|
|
20
|
+
return mnemonicToSeedSyncBase(mnemonic, passphrase);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=mnemonic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mnemonic.js","sourceRoot":"","sources":["../../src/crypto/mnemonic.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,IAAI,qBAAqB,EAC1C,gBAAgB,IAAI,oBAAoB,EACxC,iBAAiB,IAAI,qBAAqB,EAC1C,cAAc,IAAI,kBAAkB,EACpC,kBAAkB,IAAI,sBAAsB,EAC5C,gBAAgB,IAAI,oBAAoB,GACzC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAIrE,MAAM,CAAC,MAAM,gBAAgB,GAAa,OAAO,CAAC;AAElD,MAAM,UAAU,gBAAgB,CAAC,QAAQ,GAAG,GAAG,EAAE,WAAqB,gBAAgB;IACpF,OAAO,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,WAAqB,gBAAgB;IACtF,OAAO,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAAgB,EAChB,WAAqB,gBAAgB;IAErC,OAAO,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAmB,EAAE,WAAqB,gBAAgB;IAC1F,OAAO,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,UAAU,GAAG,EAAE;IAEf,OAAO,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,UAAU,GAAG,EAAE;IAClE,OAAO,sBAAsB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface KeyRotationPolicy {
|
|
2
|
+
maxAgeMs: number;
|
|
3
|
+
maxUsage: number;
|
|
4
|
+
}
|
|
5
|
+
export declare const DEFAULT_KEY_ROTATION_POLICY: KeyRotationPolicy;
|
|
6
|
+
export type KeyRotationReason = 'age' | 'usage' | 'manual';
|
|
7
|
+
export interface KeyRotationState {
|
|
8
|
+
createdAt: string;
|
|
9
|
+
lastRotatedAt?: string;
|
|
10
|
+
lastUsedAt?: string;
|
|
11
|
+
usageCount: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function initKeyRotationState(createdAt?: string): KeyRotationState;
|
|
14
|
+
export declare function recordKeyUsage(state: KeyRotationState, increment?: number, now?: number): KeyRotationState;
|
|
15
|
+
export declare function shouldRotateKey(state: KeyRotationState, policy?: KeyRotationPolicy, now?: number): {
|
|
16
|
+
rotate: boolean;
|
|
17
|
+
reason: KeyRotationReason | null;
|
|
18
|
+
};
|
|
19
|
+
export declare function markKeyRotated(state: KeyRotationState, now?: number): KeyRotationState;
|
|
20
|
+
//# sourceMappingURL=rotation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotation.d.ts","sourceRoot":"","sources":["../../src/crypto/rotation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,2BAA2B,EAAE,iBAGzC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,SAAS,GAAE,MAAiC,GAAG,gBAAgB,CAKnG;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,gBAAgB,EACvB,SAAS,SAAI,EACb,GAAG,GAAE,MAAmB,GACvB,gBAAgB,CAMlB;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,gBAAgB,EACvB,MAAM,GAAE,iBAA+C,EACvD,GAAG,GAAE,MAAmB,GACvB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAAE,CAUvD;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,gBAAgB,EACvB,GAAG,GAAE,MAAmB,GACvB,gBAAgB,CAOlB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export const DEFAULT_KEY_ROTATION_POLICY = {
|
|
2
|
+
maxAgeMs: 90 * 24 * 60 * 60 * 1000,
|
|
3
|
+
maxUsage: 100_000,
|
|
4
|
+
};
|
|
5
|
+
export function initKeyRotationState(createdAt = new Date().toISOString()) {
|
|
6
|
+
return {
|
|
7
|
+
createdAt,
|
|
8
|
+
usageCount: 0,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export function recordKeyUsage(state, increment = 1, now = Date.now()) {
|
|
12
|
+
return {
|
|
13
|
+
...state,
|
|
14
|
+
usageCount: state.usageCount + Math.max(0, increment),
|
|
15
|
+
lastUsedAt: new Date(now).toISOString(),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function shouldRotateKey(state, policy = DEFAULT_KEY_ROTATION_POLICY, now = Date.now()) {
|
|
19
|
+
if (state.usageCount >= policy.maxUsage) {
|
|
20
|
+
return { rotate: true, reason: 'usage' };
|
|
21
|
+
}
|
|
22
|
+
const base = state.lastRotatedAt ?? state.createdAt;
|
|
23
|
+
const ageMs = now - Date.parse(base);
|
|
24
|
+
if (ageMs >= policy.maxAgeMs) {
|
|
25
|
+
return { rotate: true, reason: 'age' };
|
|
26
|
+
}
|
|
27
|
+
return { rotate: false, reason: null };
|
|
28
|
+
}
|
|
29
|
+
export function markKeyRotated(state, now = Date.now()) {
|
|
30
|
+
return {
|
|
31
|
+
...state,
|
|
32
|
+
lastRotatedAt: new Date(now).toISOString(),
|
|
33
|
+
lastUsedAt: new Date(now).toISOString(),
|
|
34
|
+
usageCount: 0,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=rotation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotation.js","sourceRoot":"","sources":["../../src/crypto/rotation.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,2BAA2B,GAAsB;IAC5D,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IAClC,QAAQ,EAAE,OAAO;CAClB,CAAC;AAWF,MAAM,UAAU,oBAAoB,CAAC,YAAoB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAC/E,OAAO;QACL,SAAS;QACT,UAAU,EAAE,CAAC;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAuB,EACvB,SAAS,GAAG,CAAC,EACb,MAAc,IAAI,CAAC,GAAG,EAAE;IAExB,OAAO;QACL,GAAG,KAAK;QACR,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;QACrD,UAAU,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;KACxC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAuB,EACvB,SAA4B,2BAA2B,EACvD,MAAc,IAAI,CAAC,GAAG,EAAE;IAExB,IAAI,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC3C,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,SAAS,CAAC;IACpD,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC7B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACzC,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAuB,EACvB,MAAc,IAAI,CAAC,GAAG,EAAE;IAExB,OAAO;QACL,GAAG,KAAK;QACR,aAAa,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;QAC1C,UAAU,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;QACvC,UAAU,EAAE,CAAC;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shamir.d.ts","sourceRoot":"","sources":["../../src/crypto/shamir.ts"],"names":[],"mappings":"AAyDA,wBAAgB,WAAW,CACzB,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAwB,GAC9C,UAAU,EAAE,CA0Bd;AAaD,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAwC9D"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
const GF_SIZE = 256;
|
|
3
|
+
const GF_EXP = new Uint8Array(GF_SIZE * 2);
|
|
4
|
+
const GF_LOG = new Uint8Array(GF_SIZE);
|
|
5
|
+
(function initGfTables() {
|
|
6
|
+
let x = 1;
|
|
7
|
+
for (let i = 0; i < GF_SIZE - 1; i++) {
|
|
8
|
+
GF_EXP[i] = x;
|
|
9
|
+
GF_LOG[x] = i;
|
|
10
|
+
const x2 = x << 1;
|
|
11
|
+
const reduced = (x2 & 0x100) ? (x2 ^ 0x11b) : x2;
|
|
12
|
+
x = reduced ^ x;
|
|
13
|
+
}
|
|
14
|
+
for (let i = GF_SIZE - 1; i < GF_EXP.length; i++) {
|
|
15
|
+
GF_EXP[i] = GF_EXP[i - (GF_SIZE - 1)];
|
|
16
|
+
}
|
|
17
|
+
})();
|
|
18
|
+
function gfAdd(a, b) {
|
|
19
|
+
return a ^ b;
|
|
20
|
+
}
|
|
21
|
+
function gfMul(a, b) {
|
|
22
|
+
if (a === 0 || b === 0)
|
|
23
|
+
return 0;
|
|
24
|
+
return GF_EXP[GF_LOG[a] + GF_LOG[b]];
|
|
25
|
+
}
|
|
26
|
+
function gfDiv(a, b) {
|
|
27
|
+
if (a === 0)
|
|
28
|
+
return 0;
|
|
29
|
+
if (b === 0)
|
|
30
|
+
throw new Error('division by zero in GF(256)');
|
|
31
|
+
return GF_EXP[GF_LOG[a] + (GF_SIZE - 1) - GF_LOG[b]];
|
|
32
|
+
}
|
|
33
|
+
function evalPolynomial(coeffs, x) {
|
|
34
|
+
let result = 0;
|
|
35
|
+
let power = 1;
|
|
36
|
+
for (let i = 0; i < coeffs.length; i++) {
|
|
37
|
+
result = gfAdd(result, gfMul(coeffs[i], power));
|
|
38
|
+
power = gfMul(power, x);
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
function assertShareCount(threshold, shareCount) {
|
|
43
|
+
if (threshold < 2) {
|
|
44
|
+
throw new Error('threshold must be at least 2');
|
|
45
|
+
}
|
|
46
|
+
if (shareCount < threshold) {
|
|
47
|
+
throw new Error('shareCount must be >= threshold');
|
|
48
|
+
}
|
|
49
|
+
if (shareCount > 255) {
|
|
50
|
+
throw new Error('shareCount must be <= 255');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function splitSecret(secret, threshold, shareCount, rng = randomBytes) {
|
|
54
|
+
if (secret.length === 0) {
|
|
55
|
+
throw new Error('secret must not be empty');
|
|
56
|
+
}
|
|
57
|
+
assertShareCount(threshold, shareCount);
|
|
58
|
+
const shares = [];
|
|
59
|
+
for (let i = 1; i <= shareCount; i++) {
|
|
60
|
+
shares.push(new Uint8Array(secret.length + 1));
|
|
61
|
+
shares[i - 1][0] = i;
|
|
62
|
+
}
|
|
63
|
+
for (let byteIndex = 0; byteIndex < secret.length; byteIndex++) {
|
|
64
|
+
const coeffs = new Uint8Array(threshold);
|
|
65
|
+
coeffs[0] = secret[byteIndex];
|
|
66
|
+
if (threshold > 1) {
|
|
67
|
+
const random = rng(threshold - 1);
|
|
68
|
+
coeffs.set(random, 1);
|
|
69
|
+
}
|
|
70
|
+
for (let shareIndex = 0; shareIndex < shareCount; shareIndex++) {
|
|
71
|
+
const x = shares[shareIndex][0];
|
|
72
|
+
shares[shareIndex][byteIndex + 1] = evalPolynomial(coeffs, x);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return shares;
|
|
76
|
+
}
|
|
77
|
+
function decodeShare(share) {
|
|
78
|
+
if (share.length < 2) {
|
|
79
|
+
throw new Error('share length too small');
|
|
80
|
+
}
|
|
81
|
+
const id = share[0];
|
|
82
|
+
if (id === 0) {
|
|
83
|
+
throw new Error('share id must be non-zero');
|
|
84
|
+
}
|
|
85
|
+
return { id, data: share.subarray(1) };
|
|
86
|
+
}
|
|
87
|
+
export function combineShares(shares) {
|
|
88
|
+
if (shares.length < 2) {
|
|
89
|
+
throw new Error('at least two shares are required');
|
|
90
|
+
}
|
|
91
|
+
const decoded = shares.map(decodeShare);
|
|
92
|
+
const length = decoded[0].data.length;
|
|
93
|
+
const seen = new Set();
|
|
94
|
+
for (const share of decoded) {
|
|
95
|
+
if (share.data.length !== length) {
|
|
96
|
+
throw new Error('all shares must have the same length');
|
|
97
|
+
}
|
|
98
|
+
if (seen.has(share.id)) {
|
|
99
|
+
throw new Error('duplicate share id');
|
|
100
|
+
}
|
|
101
|
+
seen.add(share.id);
|
|
102
|
+
}
|
|
103
|
+
const secret = new Uint8Array(length);
|
|
104
|
+
for (let byteIndex = 0; byteIndex < length; byteIndex++) {
|
|
105
|
+
let value = 0;
|
|
106
|
+
for (let i = 0; i < decoded.length; i++) {
|
|
107
|
+
const xi = decoded[i].id;
|
|
108
|
+
const yi = decoded[i].data[byteIndex];
|
|
109
|
+
let num = 1;
|
|
110
|
+
let den = 1;
|
|
111
|
+
for (let j = 0; j < decoded.length; j++) {
|
|
112
|
+
if (i === j)
|
|
113
|
+
continue;
|
|
114
|
+
const xj = decoded[j].id;
|
|
115
|
+
num = gfMul(num, xj);
|
|
116
|
+
den = gfMul(den, gfAdd(xj, xi));
|
|
117
|
+
}
|
|
118
|
+
const lagrange = gfDiv(num, den);
|
|
119
|
+
value = gfAdd(value, gfMul(yi, lagrange));
|
|
120
|
+
}
|
|
121
|
+
secret[byteIndex] = value;
|
|
122
|
+
}
|
|
123
|
+
return secret;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=shamir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shamir.js","sourceRoot":"","sources":["../../src/crypto/shamir.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface X25519Keypair {
|
|
2
|
+
privateKey: Uint8Array;
|
|
3
|
+
publicKey: Uint8Array;
|
|
4
|
+
}
|
|
5
|
+
export declare function generateX25519Keypair(): X25519Keypair;
|
|
6
|
+
export declare function x25519PublicKeyFromPrivateKey(privateKey: Uint8Array): Uint8Array;
|
|
7
|
+
export declare function x25519SharedSecret(privateKey: Uint8Array, publicKey: Uint8Array): Uint8Array;
|
|
8
|
+
//# sourceMappingURL=x25519.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x25519.d.ts","sourceRoot":"","sources":["../../src/crypto/x25519.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,UAAU,CAAC;CACvB;AAED,wBAAgB,qBAAqB,IAAI,aAAa,CAIrD;AAED,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAEhF;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,UAAU,GACpB,UAAU,CAEZ"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { x25519 } from '@noble/curves/ed25519';
|
|
2
|
+
export function generateX25519Keypair() {
|
|
3
|
+
const privateKey = x25519.utils.randomPrivateKey();
|
|
4
|
+
const publicKey = x25519.getPublicKey(privateKey);
|
|
5
|
+
return { privateKey, publicKey };
|
|
6
|
+
}
|
|
7
|
+
export function x25519PublicKeyFromPrivateKey(privateKey) {
|
|
8
|
+
return x25519.getPublicKey(privateKey);
|
|
9
|
+
}
|
|
10
|
+
export function x25519SharedSecret(privateKey, publicKey) {
|
|
11
|
+
return x25519.getSharedSecret(privateKey, publicKey);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=x25519.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x25519.js","sourceRoot":"","sources":["../../src/crypto/x25519.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAO/C,MAAM,UAAU,qBAAqB;IACnC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;IACnD,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAClD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,UAAsB;IAClE,OAAO,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,UAAsB,EACtB,SAAqB;IAErB,OAAO,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function base58btcEncode(bytes: Uint8Array): string;
|
|
2
|
+
export declare function base58btcDecode(input: string): Uint8Array;
|
|
3
|
+
export declare function multibaseEncode(bytes: Uint8Array): string;
|
|
4
|
+
export declare function multibaseDecode(input: string): Uint8Array;
|
|
5
|
+
//# sourceMappingURL=base58.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base58.d.ts","sourceRoot":"","sources":["../../src/encoding/base58.ts"],"names":[],"mappings":"AAKA,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAwBzD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAyBzD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEzD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAKzD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
const ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
2
|
+
const ALPHABET_MAP = new Map(ALPHABET.split('').map((char, index) => [char, index]));
|
|
3
|
+
export function base58btcEncode(bytes) {
|
|
4
|
+
if (bytes.length === 0) {
|
|
5
|
+
return '';
|
|
6
|
+
}
|
|
7
|
+
const digits = [0];
|
|
8
|
+
for (const byte of bytes) {
|
|
9
|
+
let carry = byte;
|
|
10
|
+
for (let i = 0; i < digits.length; i++) {
|
|
11
|
+
carry += digits[i] << 8;
|
|
12
|
+
digits[i] = carry % 58;
|
|
13
|
+
carry = Math.floor(carry / 58);
|
|
14
|
+
}
|
|
15
|
+
while (carry > 0) {
|
|
16
|
+
digits.push(carry % 58);
|
|
17
|
+
carry = Math.floor(carry / 58);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
for (let i = 0; i < bytes.length && bytes[i] === 0; i++) {
|
|
21
|
+
digits.push(0);
|
|
22
|
+
}
|
|
23
|
+
return digits
|
|
24
|
+
.reverse()
|
|
25
|
+
.map((digit) => ALPHABET[digit])
|
|
26
|
+
.join('');
|
|
27
|
+
}
|
|
28
|
+
export function base58btcDecode(input) {
|
|
29
|
+
if (input.length === 0) {
|
|
30
|
+
return new Uint8Array();
|
|
31
|
+
}
|
|
32
|
+
const bytes = [0];
|
|
33
|
+
for (const char of input) {
|
|
34
|
+
const value = ALPHABET_MAP.get(char);
|
|
35
|
+
if (value === undefined) {
|
|
36
|
+
throw new Error(`Invalid base58 character: ${char}`);
|
|
37
|
+
}
|
|
38
|
+
let carry = value;
|
|
39
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
40
|
+
carry += bytes[i] * 58;
|
|
41
|
+
bytes[i] = carry & 0xff;
|
|
42
|
+
carry >>= 8;
|
|
43
|
+
}
|
|
44
|
+
while (carry > 0) {
|
|
45
|
+
bytes.push(carry & 0xff);
|
|
46
|
+
carry >>= 8;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
for (let i = 0; i < input.length && input[i] === '1'; i++) {
|
|
50
|
+
bytes.push(0);
|
|
51
|
+
}
|
|
52
|
+
return new Uint8Array(bytes.reverse());
|
|
53
|
+
}
|
|
54
|
+
export function multibaseEncode(bytes) {
|
|
55
|
+
return `z${base58btcEncode(bytes)}`;
|
|
56
|
+
}
|
|
57
|
+
export function multibaseDecode(input) {
|
|
58
|
+
if (!input.startsWith('z')) {
|
|
59
|
+
throw new Error('multibase string must start with z');
|
|
60
|
+
}
|
|
61
|
+
return base58btcDecode(input.slice(1));
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=base58.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base58.js","sourceRoot":"","sources":["../../src/encoding/base58.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/encoding/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/encoding/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function didFromPublicKey(publicKey: Uint8Array): string;
|
|
2
|
+
export declare function publicKeyFromDid(did: string): Uint8Array;
|
|
3
|
+
export declare function addressFromPublicKey(publicKey: Uint8Array): string;
|
|
4
|
+
export declare function publicKeyFromAddress(address: string): Uint8Array;
|
|
5
|
+
export declare function addressFromDid(did: string): string;
|
|
6
|
+
//# sourceMappingURL=did.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"did.d.ts","sourceRoot":"","sources":["../../src/identity/did.ts"],"names":[],"mappings":"AAQA,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAE9D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAKxD;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAOlE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAsBhE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD"}
|