@jscrypto/classic 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 (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +89 -0
  3. package/dist/adapter/crypto-js.d.ts +19 -0
  4. package/dist/adapter/crypto-js.d.ts.map +1 -0
  5. package/dist/adapter/crypto-js.js +49 -0
  6. package/dist/adapter/crypto-js.js.map +1 -0
  7. package/dist/ciphers/aes.d.ts +4 -0
  8. package/dist/ciphers/aes.d.ts.map +1 -0
  9. package/dist/ciphers/aes.js +23 -0
  10. package/dist/ciphers/aes.js.map +1 -0
  11. package/dist/ciphers/des.d.ts +4 -0
  12. package/dist/ciphers/des.d.ts.map +1 -0
  13. package/dist/ciphers/des.js +23 -0
  14. package/dist/ciphers/des.js.map +1 -0
  15. package/dist/ciphers/rc4.d.ts +8 -0
  16. package/dist/ciphers/rc4.d.ts.map +1 -0
  17. package/dist/ciphers/rc4.js +98 -0
  18. package/dist/ciphers/rc4.js.map +1 -0
  19. package/dist/ciphers/triple-des.d.ts +4 -0
  20. package/dist/ciphers/triple-des.d.ts.map +1 -0
  21. package/dist/ciphers/triple-des.js +23 -0
  22. package/dist/ciphers/triple-des.js.map +1 -0
  23. package/dist/formats/openssl.d.ts +4 -0
  24. package/dist/formats/openssl.d.ts.map +1 -0
  25. package/dist/formats/openssl.js +34 -0
  26. package/dist/formats/openssl.js.map +1 -0
  27. package/dist/index.cjs +948 -0
  28. package/dist/index.cjs.map +7 -0
  29. package/dist/index.d.ts +22 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +22 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/index.mjs +892 -0
  34. package/dist/index.mjs.map +7 -0
  35. package/dist/jscrypto-classic.iife.js +8012 -0
  36. package/dist/jscrypto-classic.iife.js.map +7 -0
  37. package/dist/jscrypto-classic.iife.min.js +28 -0
  38. package/dist/jscrypto-classic.iife.min.js.map +7 -0
  39. package/dist/jscrypto-classic.umd.js +8023 -0
  40. package/dist/jscrypto-classic.umd.js.map +7 -0
  41. package/dist/jscrypto-classic.umd.min.js +39 -0
  42. package/dist/jscrypto-classic.umd.min.js.map +7 -0
  43. package/dist/kdfs/evpkdf.d.ts +11 -0
  44. package/dist/kdfs/evpkdf.d.ts.map +1 -0
  45. package/dist/kdfs/evpkdf.js +46 -0
  46. package/dist/kdfs/evpkdf.js.map +1 -0
  47. package/dist/kdfs/pbkdf2.d.ts +11 -0
  48. package/dist/kdfs/pbkdf2.d.ts.map +1 -0
  49. package/dist/kdfs/pbkdf2.js +44 -0
  50. package/dist/kdfs/pbkdf2.js.map +1 -0
  51. package/dist/modes/cbc.d.ts +3 -0
  52. package/dist/modes/cbc.d.ts.map +1 -0
  53. package/dist/modes/cbc.js +56 -0
  54. package/dist/modes/cbc.js.map +1 -0
  55. package/dist/modes/cfb.d.ts +3 -0
  56. package/dist/modes/cfb.d.ts.map +1 -0
  57. package/dist/modes/cfb.js +51 -0
  58. package/dist/modes/cfb.js.map +1 -0
  59. package/dist/modes/ctr.d.ts +3 -0
  60. package/dist/modes/ctr.d.ts.map +1 -0
  61. package/dist/modes/ctr.js +46 -0
  62. package/dist/modes/ctr.js.map +1 -0
  63. package/dist/modes/ecb.d.ts +3 -0
  64. package/dist/modes/ecb.d.ts.map +1 -0
  65. package/dist/modes/ecb.js +46 -0
  66. package/dist/modes/ecb.js.map +1 -0
  67. package/dist/modes/gcm.d.ts +3 -0
  68. package/dist/modes/gcm.d.ts.map +1 -0
  69. package/dist/modes/gcm.js +14 -0
  70. package/dist/modes/gcm.js.map +1 -0
  71. package/dist/modes/ofb.d.ts +3 -0
  72. package/dist/modes/ofb.d.ts.map +1 -0
  73. package/dist/modes/ofb.js +38 -0
  74. package/dist/modes/ofb.js.map +1 -0
  75. package/dist/paddings/ansi-x923.d.ts +3 -0
  76. package/dist/paddings/ansi-x923.d.ts.map +1 -0
  77. package/dist/paddings/ansi-x923.js +36 -0
  78. package/dist/paddings/ansi-x923.js.map +1 -0
  79. package/dist/paddings/iso10126.d.ts +3 -0
  80. package/dist/paddings/iso10126.d.ts.map +1 -0
  81. package/dist/paddings/iso10126.js +45 -0
  82. package/dist/paddings/iso10126.js.map +1 -0
  83. package/dist/paddings/iso97971.d.ts +3 -0
  84. package/dist/paddings/iso97971.d.ts.map +1 -0
  85. package/dist/paddings/iso97971.js +35 -0
  86. package/dist/paddings/iso97971.js.map +1 -0
  87. package/dist/paddings/none.d.ts +3 -0
  88. package/dist/paddings/none.d.ts.map +1 -0
  89. package/dist/paddings/none.js +17 -0
  90. package/dist/paddings/none.js.map +1 -0
  91. package/dist/paddings/pkcs7.d.ts +3 -0
  92. package/dist/paddings/pkcs7.d.ts.map +1 -0
  93. package/dist/paddings/pkcs7.js +27 -0
  94. package/dist/paddings/pkcs7.js.map +1 -0
  95. package/dist/paddings/zero.d.ts +3 -0
  96. package/dist/paddings/zero.d.ts.map +1 -0
  97. package/dist/paddings/zero.js +24 -0
  98. package/dist/paddings/zero.js.map +1 -0
  99. package/dist/preset.d.ts +5 -0
  100. package/dist/preset.d.ts.map +1 -0
  101. package/dist/preset.js +55 -0
  102. package/dist/preset.js.map +1 -0
  103. package/package.json +46 -0
@@ -0,0 +1,11 @@
1
+ import type { KdfComponent } from '@jscrypto/core';
2
+ export interface EvpKdfParams {
3
+ passphrase: Uint8Array | string;
4
+ salt: Uint8Array | string;
5
+ iterations?: number;
6
+ length: number;
7
+ hash?: string;
8
+ }
9
+ export declare const evpKdf: KdfComponent<'EvpKDF'>;
10
+ export declare function deriveEvpKdf(params: EvpKdfParams): Uint8Array;
11
+ //# sourceMappingURL=evpkdf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evpkdf.d.ts","sourceRoot":"","sources":["../../src/kdfs/evpkdf.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC;IAChC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,MAAM,EAAE,YAAY,CAAC,QAAQ,CAMzC,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAiB7D"}
@@ -0,0 +1,46 @@
1
+ import { bytesToWordArray, CryptoJS, wordArrayToBytes } from '../adapter/crypto-js.js';
2
+ export const evpKdf = {
3
+ kind: 'kdf',
4
+ name: 'EvpKDF',
5
+ derive(params) {
6
+ return deriveEvpKdf(params);
7
+ },
8
+ };
9
+ export function deriveEvpKdf(params) {
10
+ assertPositiveInteger(params.length, 'EvpKDF length');
11
+ if (params.iterations !== undefined) {
12
+ assertPositiveInteger(params.iterations, 'EvpKDF iterations');
13
+ }
14
+ const options = {
15
+ keySize: params.length / 4,
16
+ iterations: params.iterations ?? 1,
17
+ };
18
+ const hasher = getHasher(params.hash);
19
+ if (hasher) {
20
+ options.hasher = hasher;
21
+ }
22
+ const derived = CryptoJS.EvpKDF(toCryptoJsInput(params.passphrase), toCryptoJsInput(params.salt), options);
23
+ return wordArrayToBytes(derived);
24
+ }
25
+ function toCryptoJsInput(input) {
26
+ return typeof input === 'string' ? input : bytesToWordArray(input);
27
+ }
28
+ function getHasher(hash) {
29
+ if (!hash) {
30
+ return undefined;
31
+ }
32
+ const hasher = CryptoJS.algo[normalizeHashName(hash)];
33
+ if (!hasher) {
34
+ throw new Error(`Unsupported EvpKDF hash: ${hash}`);
35
+ }
36
+ return hasher;
37
+ }
38
+ function normalizeHashName(hash) {
39
+ return hash.replaceAll('-', '').toUpperCase();
40
+ }
41
+ function assertPositiveInteger(value, label) {
42
+ if (!Number.isInteger(value) || value <= 0) {
43
+ throw new RangeError(`${label} must be a positive integer.`);
44
+ }
45
+ }
46
+ //# sourceMappingURL=evpkdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evpkdf.js","sourceRoot":"","sources":["../../src/kdfs/evpkdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAWvF,MAAM,CAAC,MAAM,MAAM,GAA2B;IAC5C,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,QAAQ;IACd,MAAM,CAAC,MAAM;QACX,OAAO,YAAY,CAAC,MAAsB,CAAC,CAAC;IAC9C,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,qBAAqB,CAAC,MAAM,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,OAAO,GAA0B;QACrC,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC;QAC1B,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC;KACnC,CAAC;IACF,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3G,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAQD,SAAS,eAAe,CAAC,KAA0B;IACjD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,SAAS,CAAC,IAAwB;IACzC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAI,QAAQ,CAAC,IAAgC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACnF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAkC,CAAC;AAC5C,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa,EAAE,KAAa;IACzD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,UAAU,CAAC,GAAG,KAAK,8BAA8B,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { KdfComponent } from '@jscrypto/core';
2
+ export interface Pbkdf2Params {
3
+ passphrase: Uint8Array | string;
4
+ salt: Uint8Array | string;
5
+ iterations: number;
6
+ length: number;
7
+ hash?: string;
8
+ }
9
+ export declare const pbkdf2: KdfComponent<'PBKDF2'>;
10
+ export declare function derivePbkdf2(params: Pbkdf2Params): Uint8Array;
11
+ //# sourceMappingURL=pbkdf2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pbkdf2.d.ts","sourceRoot":"","sources":["../../src/kdfs/pbkdf2.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC;IAChC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,MAAM,EAAE,YAAY,CAAC,QAAQ,CAMzC,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAe7D"}
@@ -0,0 +1,44 @@
1
+ import { bytesToWordArray, CryptoJS, wordArrayToBytes } from '../adapter/crypto-js.js';
2
+ export const pbkdf2 = {
3
+ kind: 'kdf',
4
+ name: 'PBKDF2',
5
+ derive(params) {
6
+ return derivePbkdf2(params);
7
+ },
8
+ };
9
+ export function derivePbkdf2(params) {
10
+ assertPositiveInteger(params.iterations, 'PBKDF2 iterations');
11
+ assertPositiveInteger(params.length, 'PBKDF2 length');
12
+ const options = {
13
+ keySize: params.length / 4,
14
+ iterations: params.iterations,
15
+ };
16
+ const hasher = getHasher(params.hash);
17
+ if (hasher) {
18
+ options.hasher = hasher;
19
+ }
20
+ const derived = CryptoJS.PBKDF2(toCryptoJsInput(params.passphrase), toCryptoJsInput(params.salt), options);
21
+ return wordArrayToBytes(derived);
22
+ }
23
+ function toCryptoJsInput(input) {
24
+ return typeof input === 'string' ? input : bytesToWordArray(input);
25
+ }
26
+ function getHasher(hash) {
27
+ if (!hash) {
28
+ return undefined;
29
+ }
30
+ const hasher = CryptoJS.algo[normalizeHashName(hash)];
31
+ if (!hasher) {
32
+ throw new Error(`Unsupported PBKDF2 hash: ${hash}`);
33
+ }
34
+ return hasher;
35
+ }
36
+ function normalizeHashName(hash) {
37
+ return hash.replaceAll('-', '').toUpperCase();
38
+ }
39
+ function assertPositiveInteger(value, label) {
40
+ if (!Number.isInteger(value) || value <= 0) {
41
+ throw new RangeError(`${label} must be a positive integer.`);
42
+ }
43
+ }
44
+ //# sourceMappingURL=pbkdf2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pbkdf2.js","sourceRoot":"","sources":["../../src/kdfs/pbkdf2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAWvF,MAAM,CAAC,MAAM,MAAM,GAA2B;IAC5C,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,QAAQ;IACd,MAAM,CAAC,MAAM;QACX,OAAO,YAAY,CAAC,MAAsB,CAAC,CAAC;IAC9C,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,qBAAqB,CAAC,MAAM,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;IAC9D,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAEtD,MAAM,OAAO,GAA0B;QACrC,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC;QAC1B,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;IACF,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3G,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAQD,SAAS,eAAe,CAAC,KAA0B;IACjD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,SAAS,CAAC,IAAwB;IACzC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAI,QAAQ,CAAC,IAAgC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACnF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAqC,CAAC;AAC/C,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa,EAAE,KAAa;IACzD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,UAAU,CAAC,GAAG,KAAK,8BAA8B,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type ModeComponent } from '@jscrypto/core';
2
+ export declare const cbc: ModeComponent<'CBC'>;
3
+ //# sourceMappingURL=cbc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cbc.d.ts","sourceRoot":"","sources":["../../src/modes/cbc.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,aAAa,EAEnB,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,GAAG,EAAE,aAAa,CAAC,KAAK,CAYpC,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { assertBlockMultiple as assertCoreBlockMultiple, assertIv, xorBytes, } from '@jscrypto/core';
2
+ export const cbc = {
3
+ kind: 'mode',
4
+ name: 'CBC',
5
+ requiresPadding: true,
6
+ createEncryptor({ cipher, iv }) {
7
+ assertIv(cipher.blockSize, iv, 'CBC');
8
+ return createCbcEncryptor(cipher, iv);
9
+ },
10
+ createDecryptor({ cipher, iv }) {
11
+ assertIv(cipher.blockSize, iv, 'CBC');
12
+ return createCbcDecryptor(cipher, iv);
13
+ },
14
+ };
15
+ function createCbcEncryptor(cipher, iv) {
16
+ let previous = iv;
17
+ return {
18
+ process(input) {
19
+ assertBlockMultiple(cipher.blockSize, input);
20
+ const output = new Uint8Array(input.length);
21
+ for (let offset = 0; offset < input.length; offset += cipher.blockSize) {
22
+ const block = xorBytes(input.subarray(offset, offset + cipher.blockSize), previous);
23
+ const encrypted = cipher.encryptBlock(block);
24
+ output.set(encrypted, offset);
25
+ previous = encrypted;
26
+ }
27
+ return output;
28
+ },
29
+ finalize(input = new Uint8Array()) {
30
+ return input.length === 0 ? new Uint8Array() : this.process(input);
31
+ },
32
+ };
33
+ }
34
+ function createCbcDecryptor(cipher, iv) {
35
+ let previous = iv;
36
+ return {
37
+ process(input) {
38
+ assertBlockMultiple(cipher.blockSize, input);
39
+ const output = new Uint8Array(input.length);
40
+ for (let offset = 0; offset < input.length; offset += cipher.blockSize) {
41
+ const block = input.subarray(offset, offset + cipher.blockSize);
42
+ const decrypted = cipher.decryptBlock(block);
43
+ output.set(xorBytes(decrypted, previous), offset);
44
+ previous = block.slice();
45
+ }
46
+ return output;
47
+ },
48
+ finalize(input = new Uint8Array()) {
49
+ return input.length === 0 ? new Uint8Array() : this.process(input);
50
+ },
51
+ };
52
+ }
53
+ function assertBlockMultiple(blockSize, input) {
54
+ assertCoreBlockMultiple(input, blockSize, 'CBC');
55
+ }
56
+ //# sourceMappingURL=cbc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cbc.js","sourceRoot":"","sources":["../../src/modes/cbc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type ModeComponent } from '@jscrypto/core';
2
+ export declare const cfb: ModeComponent<'CFB'>;
3
+ //# sourceMappingURL=cfb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cfb.d.ts","sourceRoot":"","sources":["../../src/modes/cfb.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,aAAa,EAAkB,MAAM,gBAAgB,CAAC;AAEhG,eAAO,MAAM,GAAG,EAAE,aAAa,CAAC,KAAK,CAYpC,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { assertIv } from '@jscrypto/core';
2
+ export const cfb = {
3
+ kind: 'mode',
4
+ name: 'CFB',
5
+ requiresPadding: false,
6
+ createEncryptor({ cipher, iv }) {
7
+ assertIv(cipher.blockSize, iv, 'CFB');
8
+ return createCfbEncryptor(cipher, iv);
9
+ },
10
+ createDecryptor({ cipher, iv }) {
11
+ assertIv(cipher.blockSize, iv, 'CFB');
12
+ return createCfbDecryptor(cipher, iv);
13
+ },
14
+ };
15
+ function createCfbEncryptor(cipher, iv) {
16
+ return createCfbTransform(cipher, iv, true);
17
+ }
18
+ function createCfbDecryptor(cipher, iv) {
19
+ return createCfbTransform(cipher, iv, false);
20
+ }
21
+ function createCfbTransform(cipher, iv, encrypting) {
22
+ let feedback = iv.slice();
23
+ let nextFeedback = new Uint8Array(cipher.blockSize);
24
+ let keystream = new Uint8Array(cipher.blockSize);
25
+ let position = 0;
26
+ return {
27
+ process(input) {
28
+ const output = new Uint8Array(input.length);
29
+ for (let i = 0; i < input.length; i++) {
30
+ if (position === 0) {
31
+ keystream = cipher.encryptBlock(feedback);
32
+ }
33
+ const inputByte = input[i];
34
+ const outputByte = inputByte ^ keystream[position];
35
+ output[i] = outputByte;
36
+ nextFeedback[position] = encrypting ? outputByte : inputByte;
37
+ position++;
38
+ if (position === cipher.blockSize) {
39
+ feedback = nextFeedback;
40
+ nextFeedback = new Uint8Array(cipher.blockSize);
41
+ position = 0;
42
+ }
43
+ }
44
+ return output;
45
+ },
46
+ finalize(input = new Uint8Array()) {
47
+ return input.length === 0 ? new Uint8Array() : this.process(input);
48
+ },
49
+ };
50
+ }
51
+ //# sourceMappingURL=cfb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cfb.js","sourceRoot":"","sources":["../../src/modes/cfb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAwD,MAAM,gBAAgB,CAAC;AAEhG,MAAM,CAAC,MAAM,GAAG,GAAyB;IACvC,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,KAAK;IACX,eAAe,EAAE,KAAK;IACtB,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5B,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACtC,OAAO,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5B,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACtC,OAAO,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;CACF,CAAC;AAEF,SAAS,kBAAkB,CAAC,MAAmB,EAAE,EAAc;IAC7D,OAAO,kBAAkB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAmB,EAAE,EAAc;IAC7D,OAAO,kBAAkB,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAmB,EAAE,EAAc,EAAE,UAAmB;IAClF,IAAI,QAAQ,GAAe,EAAE,CAAC,KAAK,EAAE,CAAC;IACtC,IAAI,YAAY,GAAe,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChE,IAAI,SAAS,GAAe,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7D,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,OAAO;QACL,OAAO,CAAC,KAAK;YACX,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACnB,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAC5C,CAAC;gBAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACnD,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;gBACvB,YAAY,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC7D,QAAQ,EAAE,CAAC;gBAEX,IAAI,QAAQ,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;oBAClC,QAAQ,GAAG,YAAY,CAAC;oBACxB,YAAY,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAChD,QAAQ,GAAG,CAAC,CAAC;gBACf,CAAC;YACH,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,QAAQ,CAAC,KAAK,GAAG,IAAI,UAAU,EAAE;YAC/B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrE,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type ModeComponent } from '@jscrypto/core';
2
+ export declare const ctr: ModeComponent<'CTR'>;
3
+ //# sourceMappingURL=ctr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctr.d.ts","sourceRoot":"","sources":["../../src/modes/ctr.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,aAAa,EAAkB,MAAM,gBAAgB,CAAC;AAEhG,eAAO,MAAM,GAAG,EAAE,aAAa,CAAC,KAAK,CAYpC,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { assertIv } from '@jscrypto/core';
2
+ export const ctr = {
3
+ kind: 'mode',
4
+ name: 'CTR',
5
+ requiresPadding: false,
6
+ createEncryptor({ cipher, iv }) {
7
+ assertIv(cipher.blockSize, iv, 'CTR');
8
+ return createCtrTransform(cipher, iv);
9
+ },
10
+ createDecryptor({ cipher, iv }) {
11
+ assertIv(cipher.blockSize, iv, 'CTR');
12
+ return createCtrTransform(cipher, iv);
13
+ },
14
+ };
15
+ function createCtrTransform(cipher, iv) {
16
+ const counter = iv.slice();
17
+ let keystream = new Uint8Array(cipher.blockSize);
18
+ let position = cipher.blockSize;
19
+ return {
20
+ process(input) {
21
+ const output = new Uint8Array(input.length);
22
+ for (let i = 0; i < input.length; i++) {
23
+ if (position === cipher.blockSize) {
24
+ keystream = cipher.encryptBlock(counter);
25
+ incrementCounter(counter);
26
+ position = 0;
27
+ }
28
+ output[i] = input[i] ^ keystream[position];
29
+ position++;
30
+ }
31
+ return output;
32
+ },
33
+ finalize(input = new Uint8Array()) {
34
+ return input.length === 0 ? new Uint8Array() : this.process(input);
35
+ },
36
+ };
37
+ }
38
+ function incrementCounter(counter) {
39
+ for (let i = counter.length - 1; i >= 0; i--) {
40
+ counter[i] = (counter[i] + 1) & 0xff;
41
+ if (counter[i] !== 0) {
42
+ return;
43
+ }
44
+ }
45
+ }
46
+ //# sourceMappingURL=ctr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctr.js","sourceRoot":"","sources":["../../src/modes/ctr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAwD,MAAM,gBAAgB,CAAC;AAEhG,MAAM,CAAC,MAAM,GAAG,GAAyB;IACvC,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,KAAK;IACX,eAAe,EAAE,KAAK;IACtB,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5B,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACtC,OAAO,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5B,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACtC,OAAO,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;CACF,CAAC;AAEF,SAAS,kBAAkB,CAAC,MAAmB,EAAE,EAAc;IAC7D,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;IAC3B,IAAI,SAAS,GAAe,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7D,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;IAEhC,OAAO;QACL,OAAO,CAAC,KAAK;YACX,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,QAAQ,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;oBAClC,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACzC,gBAAgB,CAAC,OAAO,CAAC,CAAC;oBAC1B,QAAQ,GAAG,CAAC,CAAC;gBACf,CAAC;gBAED,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAC3C,QAAQ,EAAE,CAAC;YACb,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,QAAQ,CAAC,KAAK,GAAG,IAAI,UAAU,EAAE;YAC/B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAmB;IAC3C,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;QACrC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type ModeComponent } from '@jscrypto/core';
2
+ export declare const ecb: ModeComponent<'ECB'>;
3
+ //# sourceMappingURL=ecb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecb.d.ts","sourceRoot":"","sources":["../../src/modes/ecb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoE,KAAK,aAAa,EAAkB,MAAM,gBAAgB,CAAC;AAEtI,eAAO,MAAM,GAAG,EAAE,aAAa,CAAC,KAAK,CAUpC,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { assertBlockMultiple as assertCoreBlockMultiple } from '@jscrypto/core';
2
+ export const ecb = {
3
+ kind: 'mode',
4
+ name: 'ECB',
5
+ requiresPadding: true,
6
+ createEncryptor({ cipher }) {
7
+ return createEcbEncryptor(cipher);
8
+ },
9
+ createDecryptor({ cipher }) {
10
+ return createEcbDecryptor(cipher);
11
+ },
12
+ };
13
+ function createEcbEncryptor(cipher) {
14
+ return {
15
+ process(input) {
16
+ assertBlockMultiple(cipher.blockSize, input);
17
+ const output = new Uint8Array(input.length);
18
+ for (let offset = 0; offset < input.length; offset += cipher.blockSize) {
19
+ output.set(cipher.encryptBlock(input.subarray(offset, offset + cipher.blockSize)), offset);
20
+ }
21
+ return output;
22
+ },
23
+ finalize(input = new Uint8Array()) {
24
+ return input.length === 0 ? new Uint8Array() : this.process(input);
25
+ },
26
+ };
27
+ }
28
+ function createEcbDecryptor(cipher) {
29
+ return {
30
+ process(input) {
31
+ assertBlockMultiple(cipher.blockSize, input);
32
+ const output = new Uint8Array(input.length);
33
+ for (let offset = 0; offset < input.length; offset += cipher.blockSize) {
34
+ output.set(cipher.decryptBlock(input.subarray(offset, offset + cipher.blockSize)), offset);
35
+ }
36
+ return output;
37
+ },
38
+ finalize(input = new Uint8Array()) {
39
+ return input.length === 0 ? new Uint8Array() : this.process(input);
40
+ },
41
+ };
42
+ }
43
+ function assertBlockMultiple(blockSize, input) {
44
+ assertCoreBlockMultiple(input, blockSize, 'ECB');
45
+ }
46
+ //# sourceMappingURL=ecb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecb.js","sourceRoot":"","sources":["../../src/modes/ecb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,IAAI,uBAAuB,EAAwD,MAAM,gBAAgB,CAAC;AAEtI,MAAM,CAAC,MAAM,GAAG,GAAyB;IACvC,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,KAAK;IACX,eAAe,EAAE,IAAI;IACrB,eAAe,CAAC,EAAE,MAAM,EAAE;QACxB,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IACD,eAAe,CAAC,EAAE,MAAM,EAAE;QACxB,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;CACF,CAAC;AAEF,SAAS,kBAAkB,CAAC,MAAmB;IAC7C,OAAO;QACL,OAAO,CAAC,KAAK;YACX,mBAAmB,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAE5C,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACvE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC7F,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,QAAQ,CAAC,KAAK,GAAG,IAAI,UAAU,EAAE;YAC/B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAmB;IAC7C,OAAO;QACL,OAAO,CAAC,KAAK;YACX,mBAAmB,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAE5C,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACvE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC7F,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,QAAQ,CAAC,KAAK,GAAG,IAAI,UAAU,EAAE;YAC/B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAiB,EAAE,KAAiB;IAC/D,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ModeComponent } from '@jscrypto/core';
2
+ export declare const gcm: ModeComponent<'GCM'>;
3
+ //# sourceMappingURL=gcm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcm.d.ts","sourceRoot":"","sources":["../../src/modes/gcm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,eAAO,MAAM,GAAG,EAAE,aAAa,CAAC,KAAK,CAYpC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export const gcm = {
2
+ kind: 'mode',
3
+ name: 'GCM',
4
+ aead: true,
5
+ requiredBlockSize: 16,
6
+ requiresPadding: false,
7
+ createEncryptor() {
8
+ throw new Error('GCM mode is not implemented yet.');
9
+ },
10
+ createDecryptor() {
11
+ throw new Error('GCM mode is not implemented yet.');
12
+ },
13
+ };
14
+ //# sourceMappingURL=gcm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcm.js","sourceRoot":"","sources":["../../src/modes/gcm.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,GAAG,GAAyB;IACvC,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,IAAI;IACV,iBAAiB,EAAE,EAAE;IACrB,eAAe,EAAE,KAAK;IACtB,eAAe;QACb,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,eAAe;QACb,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type ModeComponent } from '@jscrypto/core';
2
+ export declare const ofb: ModeComponent<'OFB'>;
3
+ //# sourceMappingURL=ofb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ofb.d.ts","sourceRoot":"","sources":["../../src/modes/ofb.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,aAAa,EAAkB,MAAM,gBAAgB,CAAC;AAEhG,eAAO,MAAM,GAAG,EAAE,aAAa,CAAC,KAAK,CAYpC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { assertIv } from '@jscrypto/core';
2
+ export const ofb = {
3
+ kind: 'mode',
4
+ name: 'OFB',
5
+ requiresPadding: false,
6
+ createEncryptor({ cipher, iv }) {
7
+ assertIv(cipher.blockSize, iv, 'OFB');
8
+ return createOfbTransform(cipher, iv);
9
+ },
10
+ createDecryptor({ cipher, iv }) {
11
+ assertIv(cipher.blockSize, iv, 'OFB');
12
+ return createOfbTransform(cipher, iv);
13
+ },
14
+ };
15
+ function createOfbTransform(cipher, iv) {
16
+ let feedback = iv.slice();
17
+ let keystream = new Uint8Array(cipher.blockSize);
18
+ let position = cipher.blockSize;
19
+ return {
20
+ process(input) {
21
+ const output = new Uint8Array(input.length);
22
+ for (let i = 0; i < input.length; i++) {
23
+ if (position === cipher.blockSize) {
24
+ feedback = cipher.encryptBlock(feedback);
25
+ keystream = feedback;
26
+ position = 0;
27
+ }
28
+ output[i] = input[i] ^ keystream[position];
29
+ position++;
30
+ }
31
+ return output;
32
+ },
33
+ finalize(input = new Uint8Array()) {
34
+ return input.length === 0 ? new Uint8Array() : this.process(input);
35
+ },
36
+ };
37
+ }
38
+ //# sourceMappingURL=ofb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ofb.js","sourceRoot":"","sources":["../../src/modes/ofb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAwD,MAAM,gBAAgB,CAAC;AAEhG,MAAM,CAAC,MAAM,GAAG,GAAyB;IACvC,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,KAAK;IACX,eAAe,EAAE,KAAK;IACtB,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5B,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACtC,OAAO,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5B,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACtC,OAAO,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;CACF,CAAC;AAEF,SAAS,kBAAkB,CAAC,MAAmB,EAAE,EAAc;IAC7D,IAAI,QAAQ,GAAe,EAAE,CAAC,KAAK,EAAE,CAAC;IACtC,IAAI,SAAS,GAAe,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7D,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;IAEhC,OAAO;QACL,OAAO,CAAC,KAAK;YACX,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,QAAQ,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;oBAClC,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;oBACzC,SAAS,GAAG,QAAQ,CAAC;oBACrB,QAAQ,GAAG,CAAC,CAAC;gBACf,CAAC;gBAED,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAC3C,QAAQ,EAAE,CAAC;YACb,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,QAAQ,CAAC,KAAK,GAAG,IAAI,UAAU,EAAE;YAC/B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrE,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type PaddingComponent } from '@jscrypto/core';
2
+ export declare const ansiX923: PaddingComponent<'AnsiX923'>;
3
+ //# sourceMappingURL=ansi-x923.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ansi-x923.d.ts","sourceRoot":"","sources":["../../src/paddings/ansi-x923.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CA4BjD,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { assertBlockSize as assertCoreBlockSize, assertPaddedInput as assertCorePaddedInput, getBlockPaddingLength, } from '@jscrypto/core';
2
+ export const ansiX923 = {
3
+ kind: 'padding',
4
+ name: 'AnsiX923',
5
+ pad(input, blockSize) {
6
+ assertBlockSize(blockSize);
7
+ const paddingLength = getPaddingLength(input.length, blockSize);
8
+ const output = new Uint8Array(input.length + paddingLength);
9
+ output.set(input);
10
+ output[output.length - 1] = paddingLength;
11
+ return output;
12
+ },
13
+ unpad(input, blockSize) {
14
+ assertPaddedInput(input, blockSize);
15
+ const paddingLength = input[input.length - 1];
16
+ if (paddingLength === 0 || paddingLength > blockSize || paddingLength > input.length) {
17
+ throw new Error('Invalid ANSI X9.23 padding.');
18
+ }
19
+ for (let i = input.length - paddingLength; i < input.length - 1; i++) {
20
+ if (input[i] !== 0) {
21
+ throw new Error('Invalid ANSI X9.23 padding.');
22
+ }
23
+ }
24
+ return input.slice(0, input.length - paddingLength);
25
+ },
26
+ };
27
+ function assertBlockSize(blockSize) {
28
+ assertCoreBlockSize(blockSize, { max: 255 });
29
+ }
30
+ function assertPaddedInput(input, blockSize) {
31
+ assertCorePaddedInput(input, blockSize, 'ANSI X9.23', { max: 255 });
32
+ }
33
+ function getPaddingLength(inputLength, blockSize) {
34
+ return getBlockPaddingLength(inputLength, blockSize);
35
+ }
36
+ //# sourceMappingURL=ansi-x923.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ansi-x923.js","sourceRoot":"","sources":["../../src/paddings/ansi-x923.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,IAAI,mBAAmB,EACtC,iBAAiB,IAAI,qBAAqB,EAC1C,qBAAqB,GAEtB,MAAM,gBAAgB,CAAC;AAExB,MAAM,CAAC,MAAM,QAAQ,GAAiC;IACpD,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,UAAU;IAEhB,GAAG,CAAC,KAAK,EAAE,SAAS;QAClB,eAAe,CAAC,SAAS,CAAC,CAAC;QAC3B,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,KAAK,EAAE,SAAS;QACpB,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACpC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9C,IAAI,aAAa,KAAK,CAAC,IAAI,aAAa,GAAG,SAAS,IAAI,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACrF,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACrE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;IACtD,CAAC;CACF,CAAC;AAEF,SAAS,eAAe,CAAC,SAAiB;IACxC,mBAAmB,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAiB,EAAE,SAAiB;IAC7D,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAmB,EAAE,SAAiB;IAC9D,OAAO,qBAAqB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type PaddingComponent } from '@jscrypto/core';
2
+ export declare const iso10126: PaddingComponent<'Iso10126'>;
3
+ //# sourceMappingURL=iso10126.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iso10126.d.ts","sourceRoot":"","sources":["../../src/paddings/iso10126.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAsBjD,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { assertBlockSize as assertCoreBlockSize, assertPaddedInput as assertCorePaddedInput, getBlockPaddingLength, } from '@jscrypto/core';
2
+ export const iso10126 = {
3
+ kind: 'padding',
4
+ name: 'Iso10126',
5
+ pad(input, blockSize) {
6
+ assertBlockSize(blockSize);
7
+ const paddingLength = getPaddingLength(input.length, blockSize);
8
+ const output = new Uint8Array(input.length + paddingLength);
9
+ output.set(input);
10
+ fillRandom(output.subarray(input.length, output.length - 1));
11
+ output[output.length - 1] = paddingLength;
12
+ return output;
13
+ },
14
+ unpad(input, blockSize) {
15
+ assertPaddedInput(input, blockSize);
16
+ const paddingLength = input[input.length - 1];
17
+ if (paddingLength === 0 || paddingLength > blockSize || paddingLength > input.length) {
18
+ throw new Error('Invalid ISO 10126 padding.');
19
+ }
20
+ return input.slice(0, input.length - paddingLength);
21
+ },
22
+ };
23
+ function assertBlockSize(blockSize) {
24
+ assertCoreBlockSize(blockSize, { max: 255 });
25
+ }
26
+ function assertPaddedInput(input, blockSize) {
27
+ assertCorePaddedInput(input, blockSize, 'ISO 10126', { max: 255 });
28
+ }
29
+ function getPaddingLength(inputLength, blockSize) {
30
+ return getBlockPaddingLength(inputLength, blockSize);
31
+ }
32
+ function fillRandom(bytes) {
33
+ if (bytes.length === 0) {
34
+ return;
35
+ }
36
+ const crypto = globalThis;
37
+ crypto.crypto?.getRandomValues(bytes);
38
+ if (bytes.some((byte) => byte !== 0)) {
39
+ return;
40
+ }
41
+ for (let i = 0; i < bytes.length; i++) {
42
+ bytes[i] = Math.floor(Math.random() * 256);
43
+ }
44
+ }
45
+ //# sourceMappingURL=iso10126.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iso10126.js","sourceRoot":"","sources":["../../src/paddings/iso10126.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,IAAI,mBAAmB,EACtC,iBAAiB,IAAI,qBAAqB,EAC1C,qBAAqB,GAEtB,MAAM,gBAAgB,CAAC;AAExB,MAAM,CAAC,MAAM,QAAQ,GAAiC;IACpD,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,UAAU;IAEhB,GAAG,CAAC,KAAK,EAAE,SAAS;QAClB,eAAe,CAAC,SAAS,CAAC,CAAC;QAC3B,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,KAAK,EAAE,SAAS;QACpB,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACpC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9C,IAAI,aAAa,KAAK,CAAC,IAAI,aAAa,GAAG,SAAS,IAAI,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACrF,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;IACtD,CAAC;CACF,CAAC;AAEF,SAAS,eAAe,CAAC,SAAiB;IACxC,mBAAmB,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAiB,EAAE,SAAiB;IAC7D,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAmB,EAAE,SAAiB;IAC9D,OAAO,qBAAqB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,UAAU,CAAC,KAAiB;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,UAId,CAAC;IACF,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;QACrC,OAAO;IACT,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type PaddingComponent } from '@jscrypto/core';
2
+ export declare const iso97971: PaddingComponent<'Iso97971'>;
3
+ //# sourceMappingURL=iso97971.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iso97971.d.ts","sourceRoot":"","sources":["../../src/paddings/iso97971.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CA2BjD,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { assertBlockSize as assertCoreBlockSize, assertPaddedInput as assertCorePaddedInput, } from '@jscrypto/core';
2
+ export const iso97971 = {
3
+ kind: 'padding',
4
+ name: 'Iso97971',
5
+ pad(input, blockSize) {
6
+ assertBlockSize(blockSize);
7
+ const paddingLength = getPaddingLength(input.length, blockSize);
8
+ const output = new Uint8Array(input.length + paddingLength);
9
+ output.set(input);
10
+ output[input.length] = 0x80;
11
+ return output;
12
+ },
13
+ unpad(input, blockSize) {
14
+ assertPaddedInput(input, blockSize);
15
+ let index = input.length - 1;
16
+ while (index >= 0 && input[index] === 0) {
17
+ index--;
18
+ }
19
+ if (index < 0 || input[index] !== 0x80) {
20
+ throw new Error('Invalid ISO/IEC 9797-1 padding.');
21
+ }
22
+ return input.slice(0, index);
23
+ },
24
+ };
25
+ function assertBlockSize(blockSize) {
26
+ assertCoreBlockSize(blockSize);
27
+ }
28
+ function assertPaddedInput(input, blockSize) {
29
+ assertCorePaddedInput(input, blockSize, 'ISO/IEC 9797-1');
30
+ }
31
+ function getPaddingLength(inputLength, blockSize) {
32
+ const remainder = (inputLength + 1) % blockSize;
33
+ return 1 + (remainder === 0 ? 0 : blockSize - remainder);
34
+ }
35
+ //# sourceMappingURL=iso97971.js.map