@de-otio/chaoskb-client 0.3.6 → 0.3.7

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.
Files changed (125) hide show
  1. package/dist/cli/bootstrap.d.ts +11 -3
  2. package/dist/cli/bootstrap.d.ts.map +1 -1
  3. package/dist/cli/bootstrap.js +181 -126
  4. package/dist/cli/bootstrap.js.map +1 -1
  5. package/dist/cli/commands/config.d.ts +7 -4
  6. package/dist/cli/commands/config.d.ts.map +1 -1
  7. package/dist/cli/commands/config.js +161 -134
  8. package/dist/cli/commands/config.js.map +1 -1
  9. package/dist/cli/commands/devices.d.ts.map +1 -1
  10. package/dist/cli/commands/devices.js +58 -33
  11. package/dist/cli/commands/devices.js.map +1 -1
  12. package/dist/cli/commands/export.d.ts.map +1 -1
  13. package/dist/cli/commands/export.js +6 -9
  14. package/dist/cli/commands/export.js.map +1 -1
  15. package/dist/cli/commands/import.js +1 -1
  16. package/dist/cli/commands/import.js.map +1 -1
  17. package/dist/cli/commands/projects.d.ts.map +1 -1
  18. package/dist/cli/commands/projects.js +33 -10
  19. package/dist/cli/commands/projects.js.map +1 -1
  20. package/dist/cli/commands/rotate-key.d.ts +3 -3
  21. package/dist/cli/commands/rotate-key.d.ts.map +1 -1
  22. package/dist/cli/commands/rotate-key.js +88 -35
  23. package/dist/cli/commands/rotate-key.js.map +1 -1
  24. package/dist/cli/commands/setup-sync.d.ts.map +1 -1
  25. package/dist/cli/commands/setup-sync.js +22 -4
  26. package/dist/cli/commands/setup-sync.js.map +1 -1
  27. package/dist/cli/mcp-server.d.ts.map +1 -1
  28. package/dist/cli/mcp-server.js +90 -42
  29. package/dist/cli/mcp-server.js.map +1 -1
  30. package/dist/crypto/aad.d.ts +2 -5
  31. package/dist/crypto/aad.d.ts.map +1 -1
  32. package/dist/crypto/aad.js +2 -8
  33. package/dist/crypto/aad.js.map +1 -1
  34. package/dist/crypto/aead.d.ts +8 -16
  35. package/dist/crypto/aead.d.ts.map +1 -1
  36. package/dist/crypto/aead.js +10 -36
  37. package/dist/crypto/aead.js.map +1 -1
  38. package/dist/crypto/blob-id.d.ts +2 -3
  39. package/dist/crypto/blob-id.d.ts.map +1 -1
  40. package/dist/crypto/blob-id.js +2 -30
  41. package/dist/crypto/blob-id.js.map +1 -1
  42. package/dist/crypto/canonical-json.d.ts +5 -3
  43. package/dist/crypto/canonical-json.d.ts.map +1 -1
  44. package/dist/crypto/canonical-json.js +5 -85
  45. package/dist/crypto/canonical-json.js.map +1 -1
  46. package/dist/crypto/commitment.d.ts +3 -9
  47. package/dist/crypto/commitment.d.ts.map +1 -1
  48. package/dist/crypto/commitment.js +3 -27
  49. package/dist/crypto/commitment.js.map +1 -1
  50. package/dist/crypto/encryption-service.d.ts +3 -0
  51. package/dist/crypto/encryption-service.d.ts.map +1 -1
  52. package/dist/crypto/encryption-service.js +10 -6
  53. package/dist/crypto/encryption-service.js.map +1 -1
  54. package/dist/crypto/envelope-cbor.d.ts +4 -34
  55. package/dist/crypto/envelope-cbor.d.ts.map +1 -1
  56. package/dist/crypto/envelope-cbor.js +4 -121
  57. package/dist/crypto/envelope-cbor.js.map +1 -1
  58. package/dist/crypto/envelope.d.ts +1 -31
  59. package/dist/crypto/envelope.d.ts.map +1 -1
  60. package/dist/crypto/envelope.js +31 -137
  61. package/dist/crypto/envelope.js.map +1 -1
  62. package/dist/crypto/hkdf.d.ts +7 -11
  63. package/dist/crypto/hkdf.d.ts.map +1 -1
  64. package/dist/crypto/hkdf.js +9 -18
  65. package/dist/crypto/hkdf.js.map +1 -1
  66. package/dist/crypto/index.d.ts +9 -4
  67. package/dist/crypto/index.d.ts.map +1 -1
  68. package/dist/crypto/index.js +9 -4
  69. package/dist/crypto/index.js.map +1 -1
  70. package/dist/crypto/ssh-keys.d.ts +17 -10
  71. package/dist/crypto/ssh-keys.d.ts.map +1 -1
  72. package/dist/crypto/ssh-keys.js +28 -108
  73. package/dist/crypto/ssh-keys.js.map +1 -1
  74. package/dist/crypto/types.d.ts +18 -88
  75. package/dist/crypto/types.d.ts.map +1 -1
  76. package/dist/crypto/types.js +3 -0
  77. package/dist/crypto/types.js.map +1 -1
  78. package/dist/pipeline/content-pipeline.d.ts.map +1 -1
  79. package/dist/pipeline/content-pipeline.js +19 -3
  80. package/dist/pipeline/content-pipeline.js.map +1 -1
  81. package/dist/pipeline/extract.d.ts +8 -0
  82. package/dist/pipeline/extract.d.ts.map +1 -1
  83. package/dist/pipeline/extract.js +15 -4
  84. package/dist/pipeline/extract.js.map +1 -1
  85. package/dist/pipeline/fetch-browser.d.ts +29 -0
  86. package/dist/pipeline/fetch-browser.d.ts.map +1 -0
  87. package/dist/pipeline/fetch-browser.js +98 -0
  88. package/dist/pipeline/fetch-browser.js.map +1 -0
  89. package/package.json +4 -1
  90. package/dist/crypto/argon2.d.ts +0 -11
  91. package/dist/crypto/argon2.d.ts.map +0 -1
  92. package/dist/crypto/argon2.js +0 -33
  93. package/dist/crypto/argon2.js.map +0 -1
  94. package/dist/crypto/invite.d.ts +0 -31
  95. package/dist/crypto/invite.d.ts.map +0 -1
  96. package/dist/crypto/invite.js +0 -139
  97. package/dist/crypto/invite.js.map +0 -1
  98. package/dist/crypto/keyring.d.ts +0 -37
  99. package/dist/crypto/keyring.d.ts.map +0 -1
  100. package/dist/crypto/keyring.js +0 -219
  101. package/dist/crypto/keyring.js.map +0 -1
  102. package/dist/crypto/known-keys.d.ts +0 -34
  103. package/dist/crypto/known-keys.d.ts.map +0 -1
  104. package/dist/crypto/known-keys.js +0 -114
  105. package/dist/crypto/known-keys.js.map +0 -1
  106. package/dist/crypto/project-keys.d.ts +0 -26
  107. package/dist/crypto/project-keys.d.ts.map +0 -1
  108. package/dist/crypto/project-keys.js +0 -69
  109. package/dist/crypto/project-keys.js.map +0 -1
  110. package/dist/crypto/secure-buffer.d.ts +0 -31
  111. package/dist/crypto/secure-buffer.d.ts.map +0 -1
  112. package/dist/crypto/secure-buffer.js +0 -61
  113. package/dist/crypto/secure-buffer.js.map +0 -1
  114. package/dist/crypto/tiers/enhanced.d.ts +0 -25
  115. package/dist/crypto/tiers/enhanced.d.ts.map +0 -1
  116. package/dist/crypto/tiers/enhanced.js +0 -56
  117. package/dist/crypto/tiers/enhanced.js.map +0 -1
  118. package/dist/crypto/tiers/maximum.d.ts +0 -19
  119. package/dist/crypto/tiers/maximum.d.ts.map +0 -1
  120. package/dist/crypto/tiers/maximum.js +0 -25
  121. package/dist/crypto/tiers/maximum.js.map +0 -1
  122. package/dist/crypto/tiers/standard.d.ts +0 -27
  123. package/dist/crypto/tiers/standard.d.ts.map +0 -1
  124. package/dist/crypto/tiers/standard.js +0 -155
  125. package/dist/crypto/tiers/standard.js.map +0 -1
@@ -1,155 +0,0 @@
1
- import * as crypto from 'node:crypto';
2
- import sodium from 'sodium-native';
3
- import { aeadEncrypt, aeadDecrypt } from '../aead.js';
4
- import { SecureBuffer } from '../secure-buffer.js';
5
- import { ed25519ToX25519PublicKey, ed25519ToX25519SecretKey } from '../ssh-keys.js';
6
- const RSA_MIN_BITS = 2048;
7
- /**
8
- * Standard tier: SSH key wrapping.
9
- *
10
- * For Ed25519 keys: crypto_box_seal (ephemeral X25519 ECDH + XSalsa20-Poly1305)
11
- * For RSA keys: RSA-OAEP-SHA256 KEM + XChaCha20-Poly1305 DEM
12
- */
13
- /**
14
- * Wrap a master key with an SSH public key.
15
- * Ed25519: uses crypto_box_seal after converting to X25519.
16
- * RSA: uses RSA-OAEP KEM + XChaCha20-Poly1305 DEM.
17
- */
18
- export function wrapMasterKey(masterKey, sshPublicKey) {
19
- if (sshPublicKey.type === 'ed25519') {
20
- return wrapWithEd25519(masterKey, sshPublicKey.publicKeyBytes);
21
- }
22
- else if (sshPublicKey.type === 'rsa') {
23
- return wrapWithRSA(masterKey, sshPublicKey.publicKeyBytes);
24
- }
25
- throw new Error(`Unsupported SSH key type: ${sshPublicKey.type}`);
26
- }
27
- /**
28
- * Unwrap a master key with an SSH private key (Ed25519).
29
- * @param wrappedKey - The sealed box
30
- * @param ed25519SecretKey - The 64-byte Ed25519 secret key
31
- */
32
- export function unwrapMasterKeyEd25519(wrappedKey, ed25519SecretKey, ed25519PublicKey) {
33
- const x25519Sk = ed25519ToX25519SecretKey(ed25519SecretKey);
34
- const x25519Pk = ed25519ToX25519PublicKey(ed25519PublicKey);
35
- const skBuf = Buffer.from(x25519Sk);
36
- const pkBuf = Buffer.from(x25519Pk);
37
- const plaintext = Buffer.alloc(wrappedKey.length - sodium.crypto_box_SEALBYTES);
38
- try {
39
- sodium.crypto_box_seal_open(plaintext, Buffer.from(wrappedKey), pkBuf, skBuf);
40
- return SecureBuffer.from(plaintext);
41
- }
42
- finally {
43
- sodium.sodium_memzero(skBuf);
44
- sodium.sodium_memzero(pkBuf);
45
- }
46
- }
47
- /**
48
- * Unwrap a master key wrapped with RSA-OAEP KEM + DEM.
49
- * @param wrappedKey - Serialized [4-byte wrappedWKLen][wrappedWK][nonce][ct][tag]
50
- * @param rsaPrivateKey - RSA private key in PEM or DER format
51
- */
52
- export function unwrapMasterKeyRSA(wrappedKey, rsaPrivateKey) {
53
- const buf = Buffer.from(wrappedKey);
54
- let offset = 0;
55
- // Read wrapped wrapping key length
56
- const wrappedWKLen = buf.readUInt32BE(offset);
57
- offset += 4;
58
- // Read wrapped wrapping key
59
- const wrappedWK = buf.subarray(offset, offset + wrappedWKLen);
60
- offset += wrappedWKLen;
61
- // Remaining is AEAD encrypted master key: nonce(24) || ciphertext || tag(16)
62
- const aeadPayload = buf.subarray(offset);
63
- const nonce = aeadPayload.subarray(0, 24);
64
- const ciphertext = aeadPayload.subarray(24, aeadPayload.length - 16);
65
- const tag = aeadPayload.subarray(aeadPayload.length - 16);
66
- // Decrypt wrapping key with RSA-OAEP
67
- const wrappingKey = crypto.privateDecrypt({
68
- key: rsaPrivateKey,
69
- padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
70
- oaepHash: 'sha256',
71
- }, wrappedWK);
72
- // Decrypt master key with XChaCha20-Poly1305
73
- const emptyAAD = new Uint8Array(0);
74
- const masterKeyBytes = aeadDecrypt(new Uint8Array(wrappingKey), new Uint8Array(nonce), new Uint8Array(ciphertext), new Uint8Array(tag), emptyAAD);
75
- // Zero the wrapping key
76
- wrappingKey.fill(0);
77
- return SecureBuffer.from(Buffer.from(masterKeyBytes));
78
- }
79
- // --- Internal helpers ---
80
- function wrapWithEd25519(masterKey, ed25519PublicKey) {
81
- const x25519Pk = ed25519ToX25519PublicKey(ed25519PublicKey);
82
- const sealed = Buffer.alloc(masterKey.length + sodium.crypto_box_SEALBYTES);
83
- sodium.crypto_box_seal(sealed, masterKey.buffer, Buffer.from(x25519Pk));
84
- return new Uint8Array(sealed);
85
- }
86
- function wrapWithRSA(masterKey, rsaPublicKeyBytes) {
87
- // Parse the RSA public key bytes (SSH wire format: exponent + modulus)
88
- const rsaPubKey = rsaPublicKeyBytesToKeyObject(rsaPublicKeyBytes);
89
- // Check minimum key size
90
- const keyDetail = rsaPubKey.asymmetricKeySize;
91
- if (keyDetail !== undefined && keyDetail * 8 < RSA_MIN_BITS) {
92
- throw new Error(`RSA key too small: ${keyDetail * 8} bits (minimum ${RSA_MIN_BITS})`);
93
- }
94
- // Generate random 32-byte wrapping key
95
- const wrappingKey = crypto.randomBytes(32);
96
- // RSA-OAEP encrypt the wrapping key
97
- const wrappedWK = crypto.publicEncrypt({
98
- key: rsaPubKey,
99
- padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
100
- oaepHash: 'sha256',
101
- }, wrappingKey);
102
- // XChaCha20-Poly1305 encrypt the master key with the wrapping key
103
- const emptyAAD = new Uint8Array(0);
104
- const { nonce, ciphertext, tag } = aeadEncrypt(new Uint8Array(wrappingKey), new Uint8Array(masterKey.buffer), emptyAAD);
105
- // Zero the wrapping key
106
- wrappingKey.fill(0);
107
- // Serialize: [4-byte wrappedWK length][wrappedWK][nonce][ciphertext][tag]
108
- const totalLen = 4 + wrappedWK.length + nonce.length + ciphertext.length + tag.length;
109
- const result = Buffer.alloc(totalLen);
110
- let offset = 0;
111
- result.writeUInt32BE(wrappedWK.length, offset);
112
- offset += 4;
113
- wrappedWK.copy(result, offset);
114
- offset += wrappedWK.length;
115
- Buffer.from(nonce).copy(result, offset);
116
- offset += nonce.length;
117
- Buffer.from(ciphertext).copy(result, offset);
118
- offset += ciphertext.length;
119
- Buffer.from(tag).copy(result, offset);
120
- return new Uint8Array(result);
121
- }
122
- /**
123
- * Convert SSH wire format RSA public key bytes to a Node.js KeyObject.
124
- * Input: [4-byte exponent length][exponent][4-byte modulus length][modulus]
125
- */
126
- function rsaPublicKeyBytesToKeyObject(rsaBytes) {
127
- const buf = Buffer.from(rsaBytes);
128
- let offset = 0;
129
- const eLen = buf.readUInt32BE(offset);
130
- offset += 4;
131
- const e = buf.subarray(offset, offset + eLen);
132
- offset += eLen;
133
- const nLen = buf.readUInt32BE(offset);
134
- offset += 4;
135
- const n = buf.subarray(offset, offset + nLen);
136
- // Build a DER-encoded RSA public key (PKCS#1)
137
- // Use Node.js crypto to create from JWK
138
- const jwk = {
139
- kty: 'RSA',
140
- n: bufferToBase64Url(stripLeadingZero(n)),
141
- e: bufferToBase64Url(stripLeadingZero(e)),
142
- };
143
- return crypto.createPublicKey({ key: jwk, format: 'jwk' });
144
- }
145
- function stripLeadingZero(buf) {
146
- // SSH wire format may have a leading zero byte for sign
147
- if (buf[0] === 0 && buf.length > 1) {
148
- return buf.subarray(1);
149
- }
150
- return buf;
151
- }
152
- function bufferToBase64Url(buf) {
153
- return buf.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
154
- }
155
- //# sourceMappingURL=standard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"standard.js","sourceRoot":"","sources":["../../../crypto/tiers/standard.ts"],"names":[],"mappings":"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"}