@nexwage/crypto 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.
Files changed (38) hide show
  1. package/README.md +171 -0
  2. package/dist/crypto/file-encryption.d.ts +59 -0
  3. package/dist/crypto/file-encryption.d.ts.map +1 -0
  4. package/dist/crypto/file-encryption.js +118 -0
  5. package/dist/crypto/file-encryption.js.map +1 -0
  6. package/dist/crypto/master-key.d.ts +68 -0
  7. package/dist/crypto/master-key.d.ts.map +1 -0
  8. package/dist/crypto/master-key.js +79 -0
  9. package/dist/crypto/master-key.js.map +1 -0
  10. package/dist/crypto/password-kdf.d.ts +49 -0
  11. package/dist/crypto/password-kdf.d.ts.map +1 -0
  12. package/dist/crypto/password-kdf.js +93 -0
  13. package/dist/crypto/password-kdf.js.map +1 -0
  14. package/dist/crypto/recovery-key.d.ts +59 -0
  15. package/dist/crypto/recovery-key.d.ts.map +1 -0
  16. package/dist/crypto/recovery-key.js +121 -0
  17. package/dist/crypto/recovery-key.js.map +1 -0
  18. package/dist/index.d.ts +9 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +7 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/sodium.d.ts +115 -0
  23. package/dist/sodium.d.ts.map +1 -0
  24. package/dist/sodium.js +141 -0
  25. package/dist/sodium.js.map +1 -0
  26. package/dist/types.d.ts +18 -0
  27. package/dist/types.d.ts.map +1 -0
  28. package/dist/types.js +2 -0
  29. package/dist/types.js.map +1 -0
  30. package/dist/utils/bytes.d.ts +12 -0
  31. package/dist/utils/bytes.d.ts.map +1 -0
  32. package/dist/utils/bytes.js +16 -0
  33. package/dist/utils/bytes.js.map +1 -0
  34. package/dist/utils/encoding.d.ts +21 -0
  35. package/dist/utils/encoding.d.ts.map +1 -0
  36. package/dist/utils/encoding.js +27 -0
  37. package/dist/utils/encoding.js.map +1 -0
  38. package/package.json +51 -0
@@ -0,0 +1,59 @@
1
+ import type { AeadEnvelopeV1 } from "../types.js";
2
+ /**
3
+ * Generate recovery key 32-byte secara acak.
4
+ *
5
+ * @returns Bytes recovery key.
6
+ *
7
+ * @example
8
+ * const recoveryKey = await generateRecoveryKey();
9
+ */
10
+ export declare function generateRecoveryKey(): Promise<Uint8Array>;
11
+ /**
12
+ * Bungkus master key menggunakan recovery key.
13
+ *
14
+ * @param masterKey - Master key 32-byte.
15
+ * @param recoveryKey - Recovery key 32-byte.
16
+ * @param aad - Additional authenticated data (opsional).
17
+ * @returns Envelope hasil wrap.
18
+ *
19
+ * @example
20
+ * const wrapped = await wrapMasterKeyWithRecoveryKey(masterKey, recoveryKey);
21
+ */
22
+ export declare function wrapMasterKeyWithRecoveryKey(masterKey: Uint8Array, recoveryKey: Uint8Array, aad?: Uint8Array): Promise<AeadEnvelopeV1>;
23
+ /**
24
+ * Buka master key menggunakan recovery key.
25
+ *
26
+ * @param recoveryKey - Recovery key 32-byte.
27
+ * @param wrapped - Envelope hasil wrap master key.
28
+ * @param aad - Additional authenticated data (opsional).
29
+ * @returns Bytes master key.
30
+ *
31
+ * @example
32
+ * const masterKey = await unwrapMasterKeyWithRecoveryKey(recoveryKey, wrapped);
33
+ */
34
+ export declare function unwrapMasterKeyWithRecoveryKey(recoveryKey: Uint8Array, wrapped: AeadEnvelopeV1, aad?: Uint8Array): Promise<Uint8Array>;
35
+ /**
36
+ * Bungkus recovery key menggunakan master key.
37
+ *
38
+ * @param recoveryKey - Recovery key 32-byte.
39
+ * @param masterKey - Master key 32-byte.
40
+ * @param aad - Additional authenticated data (opsional).
41
+ * @returns Envelope hasil wrap.
42
+ *
43
+ * @example
44
+ * const wrapped = await wrapRecoveryKeyWithMasterKey(recoveryKey, masterKey);
45
+ */
46
+ export declare function wrapRecoveryKeyWithMasterKey(recoveryKey: Uint8Array, masterKey: Uint8Array, aad?: Uint8Array): Promise<AeadEnvelopeV1>;
47
+ /**
48
+ * Buka recovery key menggunakan master key.
49
+ *
50
+ * @param masterKey - Master key 32-byte.
51
+ * @param wrapped - Envelope hasil wrap recovery key.
52
+ * @param aad - Additional authenticated data (opsional).
53
+ * @returns Bytes recovery key.
54
+ *
55
+ * @example
56
+ * const recoveryKey = await unwrapRecoveryKeyWithMasterKey(masterKey, wrapped);
57
+ */
58
+ export declare function unwrapRecoveryKeyWithMasterKey(masterKey: Uint8Array, wrapped: AeadEnvelopeV1, aad?: Uint8Array): Promise<Uint8Array>;
59
+ //# sourceMappingURL=recovery-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery-key.d.ts","sourceRoot":"","sources":["../../src/crypto/recovery-key.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAwElD;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,UAAU,CAAC,CAG/D;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,UAAU,EACrB,WAAW,EAAE,UAAU,EACvB,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,cAAc,CAAC,CAIzB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,8BAA8B,CAClD,WAAW,EAAE,UAAU,EACvB,OAAO,EAAE,cAAc,EACvB,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,UAAU,CAAC,CAKrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,4BAA4B,CAChD,WAAW,EAAE,UAAU,EACvB,SAAS,EAAE,UAAU,EACrB,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,cAAc,CAAC,CAIzB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,8BAA8B,CAClD,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,cAAc,EACvB,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,UAAU,CAAC,CAKrB"}
@@ -0,0 +1,121 @@
1
+ import sodium from "libsodium-wrappers-sumo";
2
+ import { assertByteLength } from "../utils/bytes.js";
3
+ import { decodeBase64, encodeBase64 } from "../utils/encoding.js";
4
+ // Domain: recovery key and its wrapping with master key.
5
+ /**
6
+ * Enkripsi payload dengan key menggunakan AEAD.
7
+ *
8
+ * @param key - Key 32-byte.
9
+ * @param plaintext - Data plaintext.
10
+ * @param aad - Additional authenticated data (opsional).
11
+ * @returns Envelope hasil enkripsi.
12
+ */
13
+ async function encryptWithKey(key, plaintext, aad) {
14
+ await sodium.ready;
15
+ const nonce = sodium.randombytes_buf(sodium.crypto_aead_xchacha20poly1305_ietf_NPUBBYTES);
16
+ const ct = sodium.crypto_aead_xchacha20poly1305_ietf_encrypt(plaintext, aad ?? null, null, nonce, key);
17
+ return {
18
+ v: 1,
19
+ nonce: encodeBase64(nonce),
20
+ ct: encodeBase64(ct),
21
+ };
22
+ }
23
+ /**
24
+ * Dekripsi payload dengan key menggunakan AEAD.
25
+ *
26
+ * @param key - Key 32-byte.
27
+ * @param wrapped - Envelope hasil enkripsi.
28
+ * @param aad - Additional authenticated data (opsional).
29
+ * @returns Bytes hasil dekripsi.
30
+ */
31
+ async function decryptWithKey(key, wrapped, aad) {
32
+ await sodium.ready;
33
+ const nonce = decodeBase64(wrapped.nonce);
34
+ assertByteLength("nonce", nonce, sodium.crypto_aead_xchacha20poly1305_ietf_NPUBBYTES);
35
+ const ct = decodeBase64(wrapped.ct);
36
+ try {
37
+ return sodium.crypto_aead_xchacha20poly1305_ietf_decrypt(null, ct, aad ?? null, nonce, key);
38
+ }
39
+ catch {
40
+ throw new Error("Gagal membuka payload: ciphertext/AAD/keys tidak valid");
41
+ }
42
+ }
43
+ /**
44
+ * Generate recovery key 32-byte secara acak.
45
+ *
46
+ * @returns Bytes recovery key.
47
+ *
48
+ * @example
49
+ * const recoveryKey = await generateRecoveryKey();
50
+ */
51
+ export async function generateRecoveryKey() {
52
+ await sodium.ready;
53
+ return sodium.randombytes_buf(32);
54
+ }
55
+ /**
56
+ * Bungkus master key menggunakan recovery key.
57
+ *
58
+ * @param masterKey - Master key 32-byte.
59
+ * @param recoveryKey - Recovery key 32-byte.
60
+ * @param aad - Additional authenticated data (opsional).
61
+ * @returns Envelope hasil wrap.
62
+ *
63
+ * @example
64
+ * const wrapped = await wrapMasterKeyWithRecoveryKey(masterKey, recoveryKey);
65
+ */
66
+ export async function wrapMasterKeyWithRecoveryKey(masterKey, recoveryKey, aad) {
67
+ assertByteLength("masterKey", masterKey, 32);
68
+ assertByteLength("recoveryKey", recoveryKey, 32);
69
+ return encryptWithKey(recoveryKey, masterKey, aad);
70
+ }
71
+ /**
72
+ * Buka master key menggunakan recovery key.
73
+ *
74
+ * @param recoveryKey - Recovery key 32-byte.
75
+ * @param wrapped - Envelope hasil wrap master key.
76
+ * @param aad - Additional authenticated data (opsional).
77
+ * @returns Bytes master key.
78
+ *
79
+ * @example
80
+ * const masterKey = await unwrapMasterKeyWithRecoveryKey(recoveryKey, wrapped);
81
+ */
82
+ export async function unwrapMasterKeyWithRecoveryKey(recoveryKey, wrapped, aad) {
83
+ assertByteLength("recoveryKey", recoveryKey, 32);
84
+ const masterKey = await decryptWithKey(recoveryKey, wrapped, aad);
85
+ assertByteLength("masterKey", masterKey, 32);
86
+ return masterKey;
87
+ }
88
+ /**
89
+ * Bungkus recovery key menggunakan master key.
90
+ *
91
+ * @param recoveryKey - Recovery key 32-byte.
92
+ * @param masterKey - Master key 32-byte.
93
+ * @param aad - Additional authenticated data (opsional).
94
+ * @returns Envelope hasil wrap.
95
+ *
96
+ * @example
97
+ * const wrapped = await wrapRecoveryKeyWithMasterKey(recoveryKey, masterKey);
98
+ */
99
+ export async function wrapRecoveryKeyWithMasterKey(recoveryKey, masterKey, aad) {
100
+ assertByteLength("recoveryKey", recoveryKey, 32);
101
+ assertByteLength("masterKey", masterKey, 32);
102
+ return encryptWithKey(masterKey, recoveryKey, aad);
103
+ }
104
+ /**
105
+ * Buka recovery key menggunakan master key.
106
+ *
107
+ * @param masterKey - Master key 32-byte.
108
+ * @param wrapped - Envelope hasil wrap recovery key.
109
+ * @param aad - Additional authenticated data (opsional).
110
+ * @returns Bytes recovery key.
111
+ *
112
+ * @example
113
+ * const recoveryKey = await unwrapRecoveryKeyWithMasterKey(masterKey, wrapped);
114
+ */
115
+ export async function unwrapRecoveryKeyWithMasterKey(masterKey, wrapped, aad) {
116
+ assertByteLength("masterKey", masterKey, 32);
117
+ const recoveryKey = await decryptWithKey(masterKey, wrapped, aad);
118
+ assertByteLength("recoveryKey", recoveryKey, 32);
119
+ return recoveryKey;
120
+ }
121
+ //# sourceMappingURL=recovery-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery-key.js","sourceRoot":"","sources":["../../src/crypto/recovery-key.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type { AeadEnvelopeV1, PasswordKdfParamsV1, PasswordWrappedKeyV1 } from "./types.js";
2
+ export { generateFileKey, wrapFileKeyWithMasterKey, unwrapFileKeyWithMasterKey, encryptFileData, decryptFileData, } from "./crypto/file-encryption.js";
3
+ export { generateMasterKey, generateMasterKeyWithPassword, wrapMasterKeyWithPassword, unwrapMasterKeyWithPassword, } from "./crypto/master-key.js";
4
+ export { generateRecoveryKey, wrapMasterKeyWithRecoveryKey, unwrapMasterKeyWithRecoveryKey, wrapRecoveryKeyWithMasterKey, unwrapRecoveryKeyWithMasterKey, } from "./crypto/recovery-key.js";
5
+ export type { PasswordKdfOptions } from "./crypto/password-kdf.js";
6
+ export { deriveKeyFromPassword, wrapKeyWithPassword, unwrapKeyWithPassword, } from "./crypto/password-kdf.js";
7
+ export { encodeBase64, decodeBase64 } from "./utils/encoding.js";
8
+ export { sodium, ready as sodiumReady, randombytesBuf, cryptoPwhash, cryptoPwhashSaltBytes, cryptoPwhashOpslimitModerate, cryptoPwhashMemlimitModerate, aeadXChaCha20Poly1305IetfEncrypt, aeadXChaCha20Poly1305IetfDecrypt, aeadXChaCha20Poly1305IetfNpubBytes, toBase64, fromBase64, base64VariantOriginal, fromString, toString, memcmp, } from "./sodium.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE5F,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,0BAA0B,EAC1B,eAAe,EACf,eAAe,GAChB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,mBAAmB,EACnB,4BAA4B,EAC5B,8BAA8B,EAC9B,4BAA4B,EAC5B,8BAA8B,GAC/B,MAAM,0BAA0B,CAAC;AAElC,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,EACL,MAAM,EACN,KAAK,IAAI,WAAW,EACpB,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,4BAA4B,EAC5B,4BAA4B,EAC5B,gCAAgC,EAChC,gCAAgC,EAChC,kCAAkC,EAClC,QAAQ,EACR,UAAU,EACV,qBAAqB,EACrB,UAAU,EACV,QAAQ,EACR,MAAM,GACP,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export { generateFileKey, wrapFileKeyWithMasterKey, unwrapFileKeyWithMasterKey, encryptFileData, decryptFileData, } from "./crypto/file-encryption.js";
2
+ export { generateMasterKey, generateMasterKeyWithPassword, wrapMasterKeyWithPassword, unwrapMasterKeyWithPassword, } from "./crypto/master-key.js";
3
+ export { generateRecoveryKey, wrapMasterKeyWithRecoveryKey, unwrapMasterKeyWithRecoveryKey, wrapRecoveryKeyWithMasterKey, unwrapRecoveryKeyWithMasterKey, } from "./crypto/recovery-key.js";
4
+ export { deriveKeyFromPassword, wrapKeyWithPassword, unwrapKeyWithPassword, } from "./crypto/password-kdf.js";
5
+ export { encodeBase64, decodeBase64 } from "./utils/encoding.js";
6
+ export { sodium, ready as sodiumReady, randombytesBuf, cryptoPwhash, cryptoPwhashSaltBytes, cryptoPwhashOpslimitModerate, cryptoPwhashMemlimitModerate, aeadXChaCha20Poly1305IetfEncrypt, aeadXChaCha20Poly1305IetfDecrypt, aeadXChaCha20Poly1305IetfNpubBytes, toBase64, fromBase64, base64VariantOriginal, fromString, toString, memcmp, } from "./sodium.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,0BAA0B,EAC1B,eAAe,EACf,eAAe,GAChB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,mBAAmB,EACnB,4BAA4B,EAC5B,8BAA8B,EAC9B,4BAA4B,EAC5B,8BAA8B,GAC/B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,EACL,MAAM,EACN,KAAK,IAAI,WAAW,EACpB,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,4BAA4B,EAC5B,4BAA4B,EAC5B,gCAAgC,EAChC,gCAAgC,EAChC,kCAAkC,EAClC,QAAQ,EACR,UAAU,EACV,qBAAqB,EACrB,UAAU,EACV,QAAQ,EACR,MAAM,GACP,MAAM,aAAa,CAAC"}
@@ -0,0 +1,115 @@
1
+ import sodium from "libsodium-wrappers-sumo";
2
+ /**
3
+ * Tunggu libsodium siap dipakai.
4
+ */
5
+ /**
6
+ * Panjang salt untuk KDF.
7
+ * Nilai di-set setelah `ready()`.
8
+ */
9
+ export declare let cryptoPwhashSaltBytes: number;
10
+ /**
11
+ * Default opslimit KDF (moderate).
12
+ * Nilai di-set setelah `ready()`.
13
+ */
14
+ export declare let cryptoPwhashOpslimitModerate: number;
15
+ /**
16
+ * Default memlimit KDF (moderate).
17
+ * Nilai di-set setelah `ready()`.
18
+ */
19
+ export declare let cryptoPwhashMemlimitModerate: number;
20
+ /**
21
+ * Panjang nonce AEAD XChaCha20-Poly1305.
22
+ * Nilai di-set setelah `ready()`.
23
+ */
24
+ export declare let aeadXChaCha20Poly1305IetfNpubBytes: number;
25
+ /**
26
+ * Variant base64 ORIGINAL (libsodium).
27
+ * Nilai di-set setelah `ready()`.
28
+ */
29
+ export declare let base64VariantOriginal: number;
30
+ /**
31
+ * Tunggu libsodium siap dipakai.
32
+ */
33
+ export declare function ready(): Promise<void>;
34
+ /**
35
+ * Generate bytes acak.
36
+ *
37
+ * @param size - Panjang output (bytes).
38
+ * @returns Bytes acak.
39
+ */
40
+ export declare function randombytesBuf(size: number): Uint8Array;
41
+ /**
42
+ * Derivasi key dari password (Argon2).
43
+ *
44
+ * @param outLen - Panjang output key (bytes).
45
+ * @param password - Password input.
46
+ * @param salt - Salt KDF.
47
+ * @param opslimit - Batas operasi KDF.
48
+ * @param memlimit - Batas memori KDF.
49
+ * @param alg - Algoritma KDF.
50
+ * @returns Key hasil derivasi.
51
+ */
52
+ export declare function cryptoPwhash(outLen: number, password: string, salt: Uint8Array, opslimit: number, memlimit: number, alg: number): Uint8Array;
53
+ /**
54
+ * Enkripsi AEAD XChaCha20-Poly1305 (IETF).
55
+ *
56
+ * @param message - Plaintext.
57
+ * @param aad - Additional authenticated data.
58
+ * @param secretNonce - Secret nonce (null untuk tidak dipakai).
59
+ * @param publicNonce - Public nonce.
60
+ * @param key - Key 32-byte.
61
+ * @returns Ciphertext + tag.
62
+ */
63
+ export declare function aeadXChaCha20Poly1305IetfEncrypt(message: Uint8Array, aad: Uint8Array | null, secretNonce: Uint8Array | null, publicNonce: Uint8Array, key: Uint8Array): Uint8Array;
64
+ /**
65
+ * Dekripsi AEAD XChaCha20-Poly1305 (IETF).
66
+ *
67
+ * @param secretNonce - Secret nonce (null untuk tidak dipakai).
68
+ * @param ciphertext - Ciphertext + tag.
69
+ * @param aad - Additional authenticated data.
70
+ * @param publicNonce - Public nonce.
71
+ * @param key - Key 32-byte.
72
+ * @returns Plaintext.
73
+ */
74
+ export declare function aeadXChaCha20Poly1305IetfDecrypt(secretNonce: Uint8Array | null, ciphertext: Uint8Array, aad: Uint8Array | null, publicNonce: Uint8Array, key: Uint8Array): Uint8Array;
75
+ /**
76
+ * Encode bytes ke base64 (variant default sodium).
77
+ *
78
+ * @param data - Bytes input.
79
+ * @returns String base64.
80
+ */
81
+ export declare function toBase64(data: Uint8Array): string;
82
+ /**
83
+ * Decode string base64 ke bytes (variant default sodium).
84
+ *
85
+ * @param data - String base64.
86
+ * @returns Bytes hasil decode.
87
+ */
88
+ export declare function fromBase64(data: string): Uint8Array;
89
+ /**
90
+ * Encode string ke bytes (UTF-8).
91
+ *
92
+ * @param data - String input.
93
+ * @returns Bytes UTF-8.
94
+ */
95
+ export declare function fromString(data: string): Uint8Array;
96
+ /**
97
+ * Decode bytes ke string (UTF-8).
98
+ *
99
+ * @param data - Bytes input.
100
+ * @returns String hasil decode.
101
+ */
102
+ export declare function toString(data: Uint8Array): string;
103
+ /**
104
+ * Bandingkan bytes secara aman (constant-time).
105
+ *
106
+ * @param a - Bytes pertama.
107
+ * @param b - Bytes kedua.
108
+ * @returns True jika sama.
109
+ */
110
+ export declare function memcmp(a: Uint8Array, b: Uint8Array): boolean;
111
+ /**
112
+ * Akses penuh ke instance libsodium.
113
+ */
114
+ export { sodium };
115
+ //# sourceMappingURL=sodium.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sodium.d.ts","sourceRoot":"","sources":["../src/sodium.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAE7C;;GAEG;AACH;;;GAGG;AACH,eAAO,IAAI,qBAAqB,QAAI,CAAC;AAErC;;;GAGG;AACH,eAAO,IAAI,4BAA4B,QAAI,CAAC;AAE5C;;;GAGG;AACH,eAAO,IAAI,4BAA4B,QAAI,CAAC;AAE5C;;;GAGG;AACH,eAAO,IAAI,kCAAkC,QAAI,CAAC;AAElD;;;GAGG;AACH,eAAO,IAAI,qBAAqB,QAAI,CAAC;AAErC;;GAEG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ3C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAEvD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,UAAU,CAEZ;AAED;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,UAAU,EACnB,GAAG,EAAE,UAAU,GAAG,IAAI,EACtB,WAAW,EAAE,UAAU,GAAG,IAAI,EAC9B,WAAW,EAAE,UAAU,EACvB,GAAG,EAAE,UAAU,GACd,UAAU,CAQZ;AAED;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,UAAU,GAAG,IAAI,EAC9B,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,UAAU,GAAG,IAAI,EACtB,WAAW,EAAE,UAAU,EACvB,GAAG,EAAE,UAAU,GACd,UAAU,CAQZ;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEjD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEjD;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAE5D;AAED;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,CAAC"}
package/dist/sodium.js ADDED
@@ -0,0 +1,141 @@
1
+ import sodium from "libsodium-wrappers-sumo";
2
+ /**
3
+ * Tunggu libsodium siap dipakai.
4
+ */
5
+ /**
6
+ * Panjang salt untuk KDF.
7
+ * Nilai di-set setelah `ready()`.
8
+ */
9
+ export let cryptoPwhashSaltBytes = 0;
10
+ /**
11
+ * Default opslimit KDF (moderate).
12
+ * Nilai di-set setelah `ready()`.
13
+ */
14
+ export let cryptoPwhashOpslimitModerate = 0;
15
+ /**
16
+ * Default memlimit KDF (moderate).
17
+ * Nilai di-set setelah `ready()`.
18
+ */
19
+ export let cryptoPwhashMemlimitModerate = 0;
20
+ /**
21
+ * Panjang nonce AEAD XChaCha20-Poly1305.
22
+ * Nilai di-set setelah `ready()`.
23
+ */
24
+ export let aeadXChaCha20Poly1305IetfNpubBytes = 0;
25
+ /**
26
+ * Variant base64 ORIGINAL (libsodium).
27
+ * Nilai di-set setelah `ready()`.
28
+ */
29
+ export let base64VariantOriginal = 0;
30
+ /**
31
+ * Tunggu libsodium siap dipakai.
32
+ */
33
+ export async function ready() {
34
+ await sodium.ready;
35
+ cryptoPwhashSaltBytes = sodium.crypto_pwhash_SALTBYTES;
36
+ cryptoPwhashOpslimitModerate = sodium.crypto_pwhash_OPSLIMIT_MODERATE;
37
+ cryptoPwhashMemlimitModerate = sodium.crypto_pwhash_MEMLIMIT_MODERATE;
38
+ aeadXChaCha20Poly1305IetfNpubBytes =
39
+ sodium.crypto_aead_xchacha20poly1305_ietf_NPUBBYTES;
40
+ base64VariantOriginal = sodium.base64_variants.ORIGINAL;
41
+ }
42
+ /**
43
+ * Generate bytes acak.
44
+ *
45
+ * @param size - Panjang output (bytes).
46
+ * @returns Bytes acak.
47
+ */
48
+ export function randombytesBuf(size) {
49
+ return sodium.randombytes_buf(size);
50
+ }
51
+ /**
52
+ * Derivasi key dari password (Argon2).
53
+ *
54
+ * @param outLen - Panjang output key (bytes).
55
+ * @param password - Password input.
56
+ * @param salt - Salt KDF.
57
+ * @param opslimit - Batas operasi KDF.
58
+ * @param memlimit - Batas memori KDF.
59
+ * @param alg - Algoritma KDF.
60
+ * @returns Key hasil derivasi.
61
+ */
62
+ export function cryptoPwhash(outLen, password, salt, opslimit, memlimit, alg) {
63
+ return sodium.crypto_pwhash(outLen, password, salt, opslimit, memlimit, alg);
64
+ }
65
+ /**
66
+ * Enkripsi AEAD XChaCha20-Poly1305 (IETF).
67
+ *
68
+ * @param message - Plaintext.
69
+ * @param aad - Additional authenticated data.
70
+ * @param secretNonce - Secret nonce (null untuk tidak dipakai).
71
+ * @param publicNonce - Public nonce.
72
+ * @param key - Key 32-byte.
73
+ * @returns Ciphertext + tag.
74
+ */
75
+ export function aeadXChaCha20Poly1305IetfEncrypt(message, aad, secretNonce, publicNonce, key) {
76
+ return sodium.crypto_aead_xchacha20poly1305_ietf_encrypt(message, aad, secretNonce, publicNonce, key);
77
+ }
78
+ /**
79
+ * Dekripsi AEAD XChaCha20-Poly1305 (IETF).
80
+ *
81
+ * @param secretNonce - Secret nonce (null untuk tidak dipakai).
82
+ * @param ciphertext - Ciphertext + tag.
83
+ * @param aad - Additional authenticated data.
84
+ * @param publicNonce - Public nonce.
85
+ * @param key - Key 32-byte.
86
+ * @returns Plaintext.
87
+ */
88
+ export function aeadXChaCha20Poly1305IetfDecrypt(secretNonce, ciphertext, aad, publicNonce, key) {
89
+ return sodium.crypto_aead_xchacha20poly1305_ietf_decrypt(secretNonce, ciphertext, aad, publicNonce, key);
90
+ }
91
+ /**
92
+ * Encode bytes ke base64 (variant default sodium).
93
+ *
94
+ * @param data - Bytes input.
95
+ * @returns String base64.
96
+ */
97
+ export function toBase64(data) {
98
+ return sodium.to_base64(data);
99
+ }
100
+ /**
101
+ * Decode string base64 ke bytes (variant default sodium).
102
+ *
103
+ * @param data - String base64.
104
+ * @returns Bytes hasil decode.
105
+ */
106
+ export function fromBase64(data) {
107
+ return sodium.from_base64(data);
108
+ }
109
+ /**
110
+ * Encode string ke bytes (UTF-8).
111
+ *
112
+ * @param data - String input.
113
+ * @returns Bytes UTF-8.
114
+ */
115
+ export function fromString(data) {
116
+ return sodium.from_string(data);
117
+ }
118
+ /**
119
+ * Decode bytes ke string (UTF-8).
120
+ *
121
+ * @param data - Bytes input.
122
+ * @returns String hasil decode.
123
+ */
124
+ export function toString(data) {
125
+ return sodium.to_string(data);
126
+ }
127
+ /**
128
+ * Bandingkan bytes secara aman (constant-time).
129
+ *
130
+ * @param a - Bytes pertama.
131
+ * @param b - Bytes kedua.
132
+ * @returns True jika sama.
133
+ */
134
+ export function memcmp(a, b) {
135
+ return sodium.memcmp(a, b);
136
+ }
137
+ /**
138
+ * Akses penuh ke instance libsodium.
139
+ */
140
+ export { sodium };
141
+ //# sourceMappingURL=sodium.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sodium.js","sourceRoot":"","sources":["../src/sodium.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAE7C;;GAEG;AACH;;;GAGG;AACH,MAAM,CAAC,IAAI,qBAAqB,GAAG,CAAC,CAAC;AAErC;;;GAGG;AACH,MAAM,CAAC,IAAI,4BAA4B,GAAG,CAAC,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,IAAI,4BAA4B,GAAG,CAAC,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,IAAI,kCAAkC,GAAG,CAAC,CAAC;AAElD;;;GAGG;AACH,MAAM,CAAC,IAAI,qBAAqB,GAAG,CAAC,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,MAAM,MAAM,CAAC,KAAK,CAAC;IACnB,qBAAqB,GAAG,MAAM,CAAC,uBAAuB,CAAC;IACvD,4BAA4B,GAAG,MAAM,CAAC,+BAA+B,CAAC;IACtE,4BAA4B,GAAG,MAAM,CAAC,+BAA+B,CAAC;IACtE,kCAAkC;QAChC,MAAM,CAAC,4CAA4C,CAAC;IACtD,qBAAqB,GAAG,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAc,EACd,QAAgB,EAChB,IAAgB,EAChB,QAAgB,EAChB,QAAgB,EAChB,GAAW;IAEX,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gCAAgC,CAC9C,OAAmB,EACnB,GAAsB,EACtB,WAA8B,EAC9B,WAAuB,EACvB,GAAe;IAEf,OAAO,MAAM,CAAC,0CAA0C,CACtD,OAAO,EACP,GAAG,EACH,WAAW,EACX,WAAW,EACX,GAAG,CACJ,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gCAAgC,CAC9C,WAA8B,EAC9B,UAAsB,EACtB,GAAsB,EACtB,WAAuB,EACvB,GAAe;IAEf,OAAO,MAAM,CAAC,0CAA0C,CACtD,WAAW,EACX,UAAU,EACV,GAAG,EACH,WAAW,EACX,GAAG,CACJ,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAgB;IACvC,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAgB;IACvC,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,CAAa,EAAE,CAAa;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,18 @@
1
+ export type AeadEnvelopeV1 = {
2
+ v: 1;
3
+ nonce: string;
4
+ ct: string;
5
+ };
6
+ export type PasswordKdfParamsV1 = {
7
+ v: 1;
8
+ salt: string;
9
+ opslimit: number;
10
+ memlimit: number;
11
+ };
12
+ export type PasswordWrappedKeyV1 = {
13
+ v: 1;
14
+ kdf: PasswordKdfParamsV1;
15
+ nonce: string;
16
+ ct: string;
17
+ };
18
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,EAAE,CAAC,CAAC;IACL,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,EAAE,CAAC,CAAC;IACL,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,CAAC,EAAE,CAAC,CAAC;IACL,GAAG,EAAE,mBAAmB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Validasi panjang buffer sesuai ekspektasi.
3
+ *
4
+ * @param name - Label untuk pesan error.
5
+ * @param u8 - Bytes input.
6
+ * @param len - Panjang yang diharapkan (bytes).
7
+ *
8
+ * @example
9
+ * assertByteLength("masterKey", key, 32);
10
+ */
11
+ export declare function assertByteLength(name: string, u8: Uint8Array, len: number): void;
12
+ //# sourceMappingURL=bytes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../../src/utils/bytes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,QAIzE"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Validasi panjang buffer sesuai ekspektasi.
3
+ *
4
+ * @param name - Label untuk pesan error.
5
+ * @param u8 - Bytes input.
6
+ * @param len - Panjang yang diharapkan (bytes).
7
+ *
8
+ * @example
9
+ * assertByteLength("masterKey", key, 32);
10
+ */
11
+ export function assertByteLength(name, u8, len) {
12
+ if (u8.length !== len) {
13
+ throw new Error(`${name} harus ${len} bytes, dapat ${u8.length}`);
14
+ }
15
+ }
16
+ //# sourceMappingURL=bytes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../src/utils/bytes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,EAAc,EAAE,GAAW;IACxE,IAAI,EAAE,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,UAAU,GAAG,iBAAiB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Encode bytes ke base64 (variant original).
3
+ *
4
+ * @param u8 - Bytes input.
5
+ * @returns String base64.
6
+ *
7
+ * @example
8
+ * const s = encodeBase64(new Uint8Array([1, 2, 3]));
9
+ */
10
+ export declare function encodeBase64(u8: Uint8Array): string;
11
+ /**
12
+ * Decode string base64 ke bytes (variant original).
13
+ *
14
+ * @param s - String base64.
15
+ * @returns Bytes hasil decode.
16
+ *
17
+ * @example
18
+ * const u8 = decodeBase64("AQID");
19
+ */
20
+ export declare function decodeBase64(s: string): Uint8Array;
21
+ //# sourceMappingURL=encoding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../src/utils/encoding.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,UAAU,GAAG,MAAM,CAEnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAElD"}
@@ -0,0 +1,27 @@
1
+ import sodium from "libsodium-wrappers-sumo";
2
+ // Shared low-level helpers for core crypto modules.
3
+ /**
4
+ * Encode bytes ke base64 (variant original).
5
+ *
6
+ * @param u8 - Bytes input.
7
+ * @returns String base64.
8
+ *
9
+ * @example
10
+ * const s = encodeBase64(new Uint8Array([1, 2, 3]));
11
+ */
12
+ export function encodeBase64(u8) {
13
+ return sodium.to_base64(u8, sodium.base64_variants.ORIGINAL);
14
+ }
15
+ /**
16
+ * Decode string base64 ke bytes (variant original).
17
+ *
18
+ * @param s - String base64.
19
+ * @returns Bytes hasil decode.
20
+ *
21
+ * @example
22
+ * const u8 = decodeBase64("AQID");
23
+ */
24
+ export function decodeBase64(s) {
25
+ return sodium.from_base64(s, sodium.base64_variants.ORIGINAL);
26
+ }
27
+ //# sourceMappingURL=encoding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../src/utils/encoding.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAE7C,oDAAoD;AACpD;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,EAAc;IACzC,OAAO,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAChE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@nexwage/crypto",
3
+ "version": "0.1.0",
4
+ "description": "Minimal crypto building blocks using libsodium (XChaCha20-Poly1305 + Argon2).",
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
+ "scripts": {
14
+ "test": "NODE_OPTIONS=--experimental-vm-modules jest --coverage",
15
+ "start": "tsx examples/basic-flow.ts",
16
+ "build": "tsc -p tsconfig.json"
17
+ },
18
+ "keywords": [],
19
+ "author": "",
20
+ "license": "ISC",
21
+ "type": "module",
22
+ "sideEffects": false,
23
+ "files": [
24
+ "dist",
25
+ "README.md"
26
+ ],
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "git+https://github.com/nexwage/crypto.git"
30
+ },
31
+ "bugs": {
32
+ "url": "https://github.com/nexwage/crypto.git/issues"
33
+ },
34
+ "homepage": "https://github.com/nexwage/crypto.git#readme",
35
+ "publishConfig": {
36
+ "access": "public"
37
+ },
38
+ "dependencies": {
39
+ "libsodium-wrappers-sumo": "^0.7.15"
40
+ },
41
+ "devDependencies": {
42
+ "@types/jest": "^29.5.14",
43
+ "@types/libsodium-wrappers": "^0.7.14",
44
+ "@types/libsodium-wrappers-sumo": "^0.7.8",
45
+ "@types/node": "^25.0.3",
46
+ "jest": "^29.7.0",
47
+ "ts-jest": "^29.2.5",
48
+ "tsx": "^4.21.0",
49
+ "typescript": "^5.9.3"
50
+ }
51
+ }