@tonysamperi/krypto 1.0.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/LICENCE +21 -0
- package/README.md +119 -0
- package/dist/cjs/algo/aes.class.d.cts +16 -0
- package/dist/cjs/algo/des.class.d.cts +19 -0
- package/dist/cjs/algo/index.d.cts +7 -0
- package/dist/cjs/algo/md5.class.d.cts +13 -0
- package/dist/cjs/algo/sha1.class.d.cts +9 -0
- package/dist/cjs/algo/sha256.class.d.cts +9 -0
- package/dist/cjs/algo/sha512.class.d.cts +9 -0
- package/dist/cjs/algo/triple-des.class.d.cts +16 -0
- package/dist/cjs/enc/base64.class.d.cts +31 -0
- package/dist/cjs/enc/encoder.model.d.cts +6 -0
- package/dist/cjs/enc/hex.class.d.cts +27 -0
- package/dist/cjs/enc/index.d.cts +6 -0
- package/dist/cjs/enc/latin1.class.d.cts +27 -0
- package/dist/cjs/enc/utf16.class.d.cts +28 -0
- package/dist/cjs/enc/utf8.class.d.cts +28 -0
- package/dist/cjs/format/formatter.interface.d.cts +5 -0
- package/dist/cjs/format/open-ssl.class.d.cts +27 -0
- package/dist/cjs/helpers/aes.helper.d.cts +2 -0
- package/dist/cjs/helpers/des.helper.d.cts +2 -0
- package/dist/cjs/helpers/index.d.cts +7 -0
- package/dist/cjs/helpers/md5.helper.d.cts +2 -0
- package/dist/cjs/helpers/sha1.helper.d.cts +2 -0
- package/dist/cjs/helpers/sha256.helper.d.cts +2 -0
- package/dist/cjs/helpers/sha512.helper.d.cts +2 -0
- package/dist/cjs/helpers/triple-des.helper.d.cts +2 -0
- package/dist/cjs/index.cjs +1 -0
- package/dist/cjs/index.d.cts +7 -0
- package/dist/cjs/kdf/evpkdf.class.d.cts +42 -0
- package/dist/cjs/kdf/index.d.cts +3 -0
- package/dist/cjs/kdf/kdf.model.d.cts +7 -0
- package/dist/cjs/kdf/open-ssl-kdf.class.d.cts +21 -0
- package/dist/cjs/kdf/pbkdf2.class.d.cts +18 -0
- package/dist/cjs/lib/block-cipher.class.d.cts +13 -0
- package/dist/cjs/lib/buffered-block-algorithm-config.interface.d.cts +13 -0
- package/dist/cjs/lib/buffered-block-algorithm.class.d.cts +54 -0
- package/dist/cjs/lib/cipher-helper.class.d.cts +10 -0
- package/dist/cjs/lib/cipher-params.class.d.cts +53 -0
- package/dist/cjs/lib/cipher.class.d.cts +112 -0
- package/dist/cjs/lib/hasher-constructor.type.d.cts +3 -0
- package/dist/cjs/lib/hasher-helper.type.d.cts +3 -0
- package/dist/cjs/lib/hasher.class.d.cts +58 -0
- package/dist/cjs/lib/hmac.class.d.cts +11 -0
- package/dist/cjs/lib/index.d.cts +8 -0
- package/dist/cjs/lib/password-based-cipher.class.d.cts +54 -0
- package/dist/cjs/lib/serializable-cipher.class.d.cts +73 -0
- package/dist/cjs/lib/word-array.class.d.cts +75 -0
- package/dist/cjs/lib/x64-word-array.class.d.cts +10 -0
- package/dist/cjs/lib/x64-word.class.d.cts +14 -0
- package/dist/cjs/mode/block-cipher-mode-algorithm.class.d.cts +20 -0
- package/dist/cjs/mode/block-cipher-mode.class.d.cts +28 -0
- package/dist/cjs/mode/cbc/cbc-decryptor.class.d.cts +17 -0
- package/dist/cjs/mode/cbc/cbc-encryptor.class.d.cts +17 -0
- package/dist/cjs/mode/cbc/cbc.class.d.cts +10 -0
- package/dist/cjs/mode/ctr/ctr-decryptor.class.d.cts +3 -0
- package/dist/cjs/mode/ctr/ctr-encryptor.class.d.cts +16 -0
- package/dist/cjs/mode/ctr/ctr.class.d.cts +10 -0
- package/dist/cjs/mode/ecb/ecb-decryptor.class.d.cts +14 -0
- package/dist/cjs/mode/ecb/ecb-encryptor.class.d.cts +14 -0
- package/dist/cjs/mode/ecb/ecb.class.d.cts +10 -0
- package/dist/cjs/mode/index.d.cts +11 -0
- package/dist/cjs/pad/index.d.cts +4 -0
- package/dist/cjs/pad/no-padding.class.d.cts +25 -0
- package/dist/cjs/pad/padding.model.d.cts +6 -0
- package/dist/cjs/pad/pkcs7.class.d.cts +25 -0
- package/dist/cjs/pad/zero-padding.class.d.cts +25 -0
- package/dist/esm/algo/aes.class.d.ts +16 -0
- package/dist/esm/algo/aes.class.js +138 -0
- package/dist/esm/algo/des.class.d.ts +19 -0
- package/dist/esm/algo/des.class.js +733 -0
- package/dist/esm/algo/index.d.ts +7 -0
- package/dist/esm/algo/index.js +7 -0
- package/dist/esm/algo/md5.class.d.ts +13 -0
- package/dist/esm/algo/md5.class.js +137 -0
- package/dist/esm/algo/sha1.class.d.ts +9 -0
- package/dist/esm/algo/sha1.class.js +66 -0
- package/dist/esm/algo/sha256.class.d.ts +9 -0
- package/dist/esm/algo/sha256.class.js +96 -0
- package/dist/esm/algo/sha512.class.d.ts +9 -0
- package/dist/esm/algo/sha512.class.js +221 -0
- package/dist/esm/algo/triple-des.class.d.ts +16 -0
- package/dist/esm/algo/triple-des.class.js +37 -0
- package/dist/esm/enc/base64.class.d.ts +31 -0
- package/dist/esm/enc/base64.class.js +80 -0
- package/dist/esm/enc/encoder.model.d.ts +6 -0
- package/dist/esm/enc/encoder.model.js +5 -0
- package/dist/esm/enc/hex.class.d.ts +27 -0
- package/dist/esm/enc/hex.class.js +45 -0
- package/dist/esm/enc/index.d.ts +6 -0
- package/dist/esm/enc/index.js +6 -0
- package/dist/esm/enc/latin1.class.d.ts +27 -0
- package/dist/esm/enc/latin1.class.js +44 -0
- package/dist/esm/enc/utf16.class.d.ts +28 -0
- package/dist/esm/enc/utf16.class.js +46 -0
- package/dist/esm/enc/utf8.class.d.ts +28 -0
- package/dist/esm/enc/utf8.class.js +39 -0
- package/dist/esm/format/formatter.interface.d.ts +5 -0
- package/dist/esm/format/formatter.interface.js +0 -0
- package/dist/esm/format/open-ssl.class.d.ts +27 -0
- package/dist/esm/format/open-ssl.class.js +57 -0
- package/dist/esm/helpers/aes.helper.d.ts +2 -0
- package/dist/esm/helpers/aes.helper.js +6 -0
- package/dist/esm/helpers/des.helper.d.ts +2 -0
- package/dist/esm/helpers/des.helper.js +6 -0
- package/dist/esm/helpers/index.d.ts +7 -0
- package/dist/esm/helpers/index.js +16 -0
- package/dist/esm/helpers/md5.helper.d.ts +2 -0
- package/dist/esm/helpers/md5.helper.js +6 -0
- package/dist/esm/helpers/sha1.helper.d.ts +2 -0
- package/dist/esm/helpers/sha1.helper.js +6 -0
- package/dist/esm/helpers/sha256.helper.d.ts +2 -0
- package/dist/esm/helpers/sha256.helper.js +6 -0
- package/dist/esm/helpers/sha512.helper.d.ts +2 -0
- package/dist/esm/helpers/sha512.helper.js +6 -0
- package/dist/esm/helpers/triple-des.helper.d.ts +2 -0
- package/dist/esm/helpers/triple-des.helper.js +6 -0
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.js +43 -0
- package/dist/esm/kdf/evpkdf.class.d.ts +42 -0
- package/dist/esm/kdf/evpkdf.class.js +59 -0
- package/dist/esm/kdf/index.d.ts +3 -0
- package/dist/esm/kdf/index.js +3 -0
- package/dist/esm/kdf/kdf.model.d.ts +7 -0
- package/dist/esm/kdf/kdf.model.js +5 -0
- package/dist/esm/kdf/open-ssl-kdf.class.d.ts +21 -0
- package/dist/esm/kdf/open-ssl-kdf.class.js +32 -0
- package/dist/esm/kdf/pbkdf2.class.d.ts +18 -0
- package/dist/esm/kdf/pbkdf2.class.js +43 -0
- package/dist/esm/lib/block-cipher.class.d.ts +13 -0
- package/dist/esm/lib/block-cipher.class.js +55 -0
- package/dist/esm/lib/buffered-block-algorithm-config.interface.d.ts +13 -0
- package/dist/esm/lib/buffered-block-algorithm-config.interface.js +0 -0
- package/dist/esm/lib/buffered-block-algorithm.class.d.ts +54 -0
- package/dist/esm/lib/buffered-block-algorithm.class.js +99 -0
- package/dist/esm/lib/cipher-helper.class.d.ts +10 -0
- package/dist/esm/lib/cipher-helper.class.js +24 -0
- package/dist/esm/lib/cipher-params.class.d.ts +53 -0
- package/dist/esm/lib/cipher-params.class.js +89 -0
- package/dist/esm/lib/cipher.class.d.ts +112 -0
- package/dist/esm/lib/cipher.class.js +112 -0
- package/dist/esm/lib/hasher-constructor.type.d.ts +3 -0
- package/dist/esm/lib/hasher-constructor.type.js +0 -0
- package/dist/esm/lib/hasher-helper.type.d.ts +3 -0
- package/dist/esm/lib/hasher-helper.type.js +0 -0
- package/dist/esm/lib/hasher.class.d.ts +58 -0
- package/dist/esm/lib/hasher.class.js +77 -0
- package/dist/esm/lib/hmac.class.d.ts +11 -0
- package/dist/esm/lib/hmac.class.js +39 -0
- package/dist/esm/lib/index.d.ts +8 -0
- package/dist/esm/lib/index.js +18 -0
- package/dist/esm/lib/password-based-cipher.class.d.ts +54 -0
- package/dist/esm/lib/password-based-cipher.class.js +92 -0
- package/dist/esm/lib/serializable-cipher.class.d.ts +73 -0
- package/dist/esm/lib/serializable-cipher.class.js +108 -0
- package/dist/esm/lib/word-array.class.d.ts +75 -0
- package/dist/esm/lib/word-array.class.js +123 -0
- package/dist/esm/lib/x64-word-array.class.d.ts +10 -0
- package/dist/esm/lib/x64-word-array.class.js +25 -0
- package/dist/esm/lib/x64-word.class.d.ts +14 -0
- package/dist/esm/lib/x64-word.class.js +47 -0
- package/dist/esm/mode/block-cipher-mode-algorithm.class.d.ts +20 -0
- package/dist/esm/mode/block-cipher-mode-algorithm.class.js +22 -0
- package/dist/esm/mode/block-cipher-mode.class.d.ts +28 -0
- package/dist/esm/mode/block-cipher-mode.class.js +36 -0
- package/dist/esm/mode/cbc/cbc-decryptor.class.d.ts +17 -0
- package/dist/esm/mode/cbc/cbc-decryptor.class.js +40 -0
- package/dist/esm/mode/cbc/cbc-encryptor.class.d.ts +17 -0
- package/dist/esm/mode/cbc/cbc-encryptor.class.js +39 -0
- package/dist/esm/mode/cbc/cbc.class.d.ts +10 -0
- package/dist/esm/mode/cbc/cbc.class.js +10 -0
- package/dist/esm/mode/ctr/ctr-decryptor.class.d.ts +3 -0
- package/dist/esm/mode/ctr/ctr-decryptor.class.js +6 -0
- package/dist/esm/mode/ctr/ctr-encryptor.class.d.ts +16 -0
- package/dist/esm/mode/ctr/ctr-encryptor.class.js +33 -0
- package/dist/esm/mode/ctr/ctr.class.d.ts +10 -0
- package/dist/esm/mode/ctr/ctr.class.js +10 -0
- package/dist/esm/mode/ecb/ecb-decryptor.class.d.ts +14 -0
- package/dist/esm/mode/ecb/ecb-decryptor.class.js +19 -0
- package/dist/esm/mode/ecb/ecb-encryptor.class.d.ts +14 -0
- package/dist/esm/mode/ecb/ecb-encryptor.class.js +19 -0
- package/dist/esm/mode/ecb/ecb.class.d.ts +10 -0
- package/dist/esm/mode/ecb/ecb.class.js +10 -0
- package/dist/esm/mode/index.d.ts +11 -0
- package/dist/esm/mode/index.js +24 -0
- package/dist/esm/pad/index.d.ts +4 -0
- package/dist/esm/pad/index.js +8 -0
- package/dist/esm/pad/no-padding.class.d.ts +25 -0
- package/dist/esm/pad/no-padding.class.js +28 -0
- package/dist/esm/pad/padding.model.d.ts +6 -0
- package/dist/esm/pad/padding.model.js +5 -0
- package/dist/esm/pad/pkcs7.class.d.ts +25 -0
- package/dist/esm/pad/pkcs7.class.js +40 -0
- package/dist/esm/pad/zero-padding.class.d.ts +25 -0
- package/dist/esm/pad/zero-padding.class.js +38 -0
- package/package.json +82 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BlockCipher } from "../lib/block-cipher.class.cjs";
|
|
2
|
+
import { BlockCipherModeAlgorithm } from "./block-cipher-mode-algorithm.class.cjs";
|
|
3
|
+
export declare abstract class BlockCipherMode {
|
|
4
|
+
static Decryptor: any;
|
|
5
|
+
static Encryptor: any;
|
|
6
|
+
/**
|
|
7
|
+
* Creates this mode for decryption.
|
|
8
|
+
*
|
|
9
|
+
* @param cipher A block cipher instance.
|
|
10
|
+
* @param iv The IV words.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
*
|
|
14
|
+
* const mode = CBC.createDecryptor(cipher, iv.words);
|
|
15
|
+
*/
|
|
16
|
+
static createDecryptor(cipher: BlockCipher, iv: number[]): BlockCipherModeAlgorithm;
|
|
17
|
+
/**
|
|
18
|
+
* Creates this mode for encryption.
|
|
19
|
+
*
|
|
20
|
+
* @param cipher A block cipher instance.
|
|
21
|
+
* @param iv The IV words.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
*
|
|
25
|
+
* var mode = CBC.createEncryptor(cipher, iv.words);
|
|
26
|
+
*/
|
|
27
|
+
static createEncryptor(cipher: BlockCipher, iv: number[]): BlockCipherModeAlgorithm;
|
|
28
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BlockCipherModeAlgorithm } from "../block-cipher-mode-algorithm.class.cjs";
|
|
2
|
+
export declare class CBCDecryptor extends BlockCipherModeAlgorithm {
|
|
3
|
+
get prevBlock(): number[];
|
|
4
|
+
protected _prevBlock: number[] | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* Processes the data block at offset.
|
|
7
|
+
*
|
|
8
|
+
* @param words The data words to operate on.
|
|
9
|
+
* @param offset The offset where the block starts.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
*
|
|
13
|
+
* mode.processBlock(data.words, offset);
|
|
14
|
+
*/
|
|
15
|
+
processBlock(words: number[], offset: number): void;
|
|
16
|
+
xorBlock(words: number[], offset: number, blockSize: number): void;
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BlockCipherModeAlgorithm } from "../block-cipher-mode-algorithm.class.cjs";
|
|
2
|
+
export declare class CBCEncryptor extends BlockCipherModeAlgorithm {
|
|
3
|
+
get prevBlock(): number[];
|
|
4
|
+
protected _prevBlock: number[] | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* Processes the data block at offset.
|
|
7
|
+
*
|
|
8
|
+
* @param words The data words to operate on.
|
|
9
|
+
* @param offset The offset where the block starts.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
*
|
|
13
|
+
* mode.processBlock(data.words, offset);
|
|
14
|
+
*/
|
|
15
|
+
processBlock(words: number[], offset: number): void;
|
|
16
|
+
xorBlock(words: number[], offset: number, blockSize: number): void;
|
|
17
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BlockCipherMode } from "../block-cipher-mode.class.cjs";
|
|
2
|
+
import { CBCEncryptor } from "./cbc-encryptor.class.cjs";
|
|
3
|
+
import { CBCDecryptor } from "./cbc-decryptor.class.cjs";
|
|
4
|
+
/**
|
|
5
|
+
* Cipher Block Chaining mode.
|
|
6
|
+
*/
|
|
7
|
+
export declare abstract class CBC extends BlockCipherMode {
|
|
8
|
+
static Decryptor: typeof CBCDecryptor;
|
|
9
|
+
static Encryptor: typeof CBCEncryptor;
|
|
10
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BlockCipherModeAlgorithm } from "../block-cipher-mode-algorithm.class.cjs";
|
|
2
|
+
export declare class CTREncryptor extends BlockCipherModeAlgorithm {
|
|
3
|
+
protected _counter: number[];
|
|
4
|
+
protected _prevBlock: number[] | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* Processes the data block at offset.
|
|
7
|
+
*
|
|
8
|
+
* @param words The data words to operate on.
|
|
9
|
+
* @param offset The offset where the block starts.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
*
|
|
13
|
+
* mode.processBlock(data.words, offset);
|
|
14
|
+
*/
|
|
15
|
+
processBlock(words: number[], offset: number): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BlockCipherMode } from "../block-cipher-mode.class.cjs";
|
|
2
|
+
import { CTREncryptor } from "./ctr-encryptor.class.cjs";
|
|
3
|
+
import { CTRDecryptor } from "./ctr-decryptor.class.cjs";
|
|
4
|
+
/**
|
|
5
|
+
* Counter mode.
|
|
6
|
+
*/
|
|
7
|
+
export declare abstract class CTR extends BlockCipherMode {
|
|
8
|
+
static Decryptor: typeof CTRDecryptor;
|
|
9
|
+
static Encryptor: typeof CTREncryptor;
|
|
10
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BlockCipherModeAlgorithm } from "../block-cipher-mode-algorithm.class.cjs";
|
|
2
|
+
export declare class ECBDecryptor extends BlockCipherModeAlgorithm {
|
|
3
|
+
/**
|
|
4
|
+
* Processes the data block at offset.
|
|
5
|
+
*
|
|
6
|
+
* @param words The data words to operate on.
|
|
7
|
+
* @param offset The offset where the block starts.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
*
|
|
11
|
+
* mode.processBlock(data.words, offset);
|
|
12
|
+
*/
|
|
13
|
+
processBlock(words: number[], offset: number): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BlockCipherModeAlgorithm } from "../block-cipher-mode-algorithm.class.cjs";
|
|
2
|
+
export declare class ECBEncryptor extends BlockCipherModeAlgorithm {
|
|
3
|
+
/**
|
|
4
|
+
* Processes the data block at offset.
|
|
5
|
+
*
|
|
6
|
+
* @param words The data words to operate on.
|
|
7
|
+
* @param offset The offset where the block starts.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
*
|
|
11
|
+
* mode.processBlock(data.words, offset);
|
|
12
|
+
*/
|
|
13
|
+
processBlock(words: number[], offset: number): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BlockCipherMode } from "../block-cipher-mode.class.cjs";
|
|
2
|
+
import { ECBEncryptor } from "./ecb-encryptor.class.cjs";
|
|
3
|
+
import { ECBDecryptor } from "./ecb-decryptor.class.cjs";
|
|
4
|
+
/**
|
|
5
|
+
* Cipher Block Chaining mode.
|
|
6
|
+
*/
|
|
7
|
+
export declare abstract class ECB extends BlockCipherMode {
|
|
8
|
+
static Decryptor: typeof ECBDecryptor;
|
|
9
|
+
static Encryptor: typeof ECBEncryptor;
|
|
10
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { BlockCipherMode } from "./block-cipher-mode.class.cjs";
|
|
2
|
+
export { BlockCipherModeAlgorithm } from "./block-cipher-mode-algorithm.class.cjs";
|
|
3
|
+
export { CBC } from "./cbc/cbc.class.cjs";
|
|
4
|
+
export { CBCDecryptor } from "./cbc/cbc-decryptor.class.cjs";
|
|
5
|
+
export { CBCEncryptor } from "./cbc/cbc-encryptor.class.cjs";
|
|
6
|
+
export { CTR } from "./ctr/ctr.class.cjs";
|
|
7
|
+
export { CTRDecryptor } from "./ctr/ctr-decryptor.class.cjs";
|
|
8
|
+
export { CTREncryptor } from "./ctr/ctr-encryptor.class.cjs";
|
|
9
|
+
export { ECB } from "./ecb/ecb.class.cjs";
|
|
10
|
+
export { ECBDecryptor } from "./ecb/ecb-decryptor.class.cjs";
|
|
11
|
+
export { ECBEncryptor } from "./ecb/ecb-encryptor.class.cjs";
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { WordArray } from "../lib/word-array.class.cjs";
|
|
2
|
+
import { AbstractPadding } from "./padding.model.cjs";
|
|
3
|
+
export declare class NoPadding implements AbstractPadding {
|
|
4
|
+
/**
|
|
5
|
+
* Doesn't pad the data provided.
|
|
6
|
+
*
|
|
7
|
+
* @param _data_ The data to pad.
|
|
8
|
+
* @param _blockSize_ The multiple that the data should be padded to.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
*
|
|
12
|
+
* NoPadding.pad(wordArray, 4);
|
|
13
|
+
*/
|
|
14
|
+
static pad(_data_: WordArray, _blockSize_: number): void;
|
|
15
|
+
/**
|
|
16
|
+
* Doesn't un-pad the data provided.
|
|
17
|
+
*
|
|
18
|
+
* @param _data_ The data to un-pad.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
*
|
|
22
|
+
* NoPadding.unpad(wordArray);
|
|
23
|
+
*/
|
|
24
|
+
static unpad(_data_: WordArray): void;
|
|
25
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { WordArray } from "../lib/word-array.class.cjs";
|
|
2
|
+
import { AbstractPadding } from "./padding.model.cjs";
|
|
3
|
+
export declare class PKCS7 implements AbstractPadding {
|
|
4
|
+
/**
|
|
5
|
+
* Pads data using the algorithm defined in PKCS #5/7.
|
|
6
|
+
*
|
|
7
|
+
* @param data The data to pad.
|
|
8
|
+
* @param blockSize The multiple that the data should be padded to.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
*
|
|
12
|
+
* PKCS7.pad(wordArray, 4);
|
|
13
|
+
*/
|
|
14
|
+
static pad(data: WordArray, blockSize: number): void;
|
|
15
|
+
/**
|
|
16
|
+
* Unpads data that had been padded using the algorithm defined in PKCS #5/7.
|
|
17
|
+
*
|
|
18
|
+
* @param data The data to unpad.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
*
|
|
22
|
+
* PKCS7.unpad(wordArray);
|
|
23
|
+
*/
|
|
24
|
+
static unpad(data: WordArray): void;
|
|
25
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { WordArray } from "../lib/word-array.class.cjs";
|
|
2
|
+
import { AbstractPadding } from "./padding.model.cjs";
|
|
3
|
+
export declare class ZeroPadding implements AbstractPadding {
|
|
4
|
+
/**
|
|
5
|
+
* Pads data using Zero padding algo
|
|
6
|
+
*
|
|
7
|
+
* @param data The data to pad.
|
|
8
|
+
* @param blockSize The multiple that the data should be padded to.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
*
|
|
12
|
+
* ZeroPadding.pad(wordArray, 4);
|
|
13
|
+
*/
|
|
14
|
+
static pad(data: WordArray, blockSize: number): void;
|
|
15
|
+
/**
|
|
16
|
+
* Unpads data using Zero padding algo
|
|
17
|
+
*
|
|
18
|
+
* @param data The data to un-pad.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
*
|
|
22
|
+
* ZeroPadding.unpad(wordArray);
|
|
23
|
+
*/
|
|
24
|
+
static unpad(data: WordArray): void;
|
|
25
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BlockCipher } from "../lib/block-cipher.class.js";
|
|
2
|
+
import { WordArray } from "../lib/word-array.class.js";
|
|
3
|
+
import { BufferedBlockAlgorithmConfig } from "../lib/buffered-block-algorithm-config.interface.js";
|
|
4
|
+
export declare class AES extends BlockCipher {
|
|
5
|
+
static keySize: number;
|
|
6
|
+
protected _invKeySchedule: number[];
|
|
7
|
+
protected _key: WordArray;
|
|
8
|
+
protected _keyPriorReset: WordArray;
|
|
9
|
+
protected _keySchedule: number[];
|
|
10
|
+
protected _nRounds: number;
|
|
11
|
+
constructor(xformMode: number, key: WordArray, cfg?: BufferedBlockAlgorithmConfig);
|
|
12
|
+
decryptBlock(m: number[], offset: number): void;
|
|
13
|
+
encryptBlock(m: number[], offset: number): void;
|
|
14
|
+
reset(): void;
|
|
15
|
+
protected _doCryptBlock(m: number[], offset: number, keySchedule: number[], subMix0: number[], subMix1: number[], subMix2: number[], subMix3: number[], sbox: number[]): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { BlockCipher } from "../lib/block-cipher.class.js";
|
|
2
|
+
const SBOX = [];
|
|
3
|
+
const INV_SBOX = [];
|
|
4
|
+
const SUB_MIX_0 = [];
|
|
5
|
+
const SUB_MIX_1 = [];
|
|
6
|
+
const SUB_MIX_2 = [];
|
|
7
|
+
const SUB_MIX_3 = [];
|
|
8
|
+
const INV_SUB_MIX_0 = [];
|
|
9
|
+
const INV_SUB_MIX_1 = [];
|
|
10
|
+
const INV_SUB_MIX_2 = [];
|
|
11
|
+
const INV_SUB_MIX_3 = [];
|
|
12
|
+
(function() {
|
|
13
|
+
const d = [];
|
|
14
|
+
for (let i = 0; i < 256; i++) {
|
|
15
|
+
if (i < 128) {
|
|
16
|
+
d[i] = i << 1;
|
|
17
|
+
} else {
|
|
18
|
+
d[i] = i << 1 ^ 283;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
let x = 0;
|
|
22
|
+
let xi = 0;
|
|
23
|
+
for (let i = 0; i < 256; i++) {
|
|
24
|
+
let sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;
|
|
25
|
+
sx = sx >>> 8 ^ sx & 255 ^ 99;
|
|
26
|
+
SBOX[x] = sx;
|
|
27
|
+
INV_SBOX[sx] = x;
|
|
28
|
+
const x2 = d[x];
|
|
29
|
+
const x4 = d[x2];
|
|
30
|
+
const x8 = d[x4];
|
|
31
|
+
let t = d[sx] * 257 ^ sx * 16843008;
|
|
32
|
+
SUB_MIX_0[x] = t << 24 | t >>> 8;
|
|
33
|
+
SUB_MIX_1[x] = t << 16 | t >>> 16;
|
|
34
|
+
SUB_MIX_2[x] = t << 8 | t >>> 24;
|
|
35
|
+
SUB_MIX_3[x] = t;
|
|
36
|
+
t = x8 * 16843009 ^ x4 * 65537 ^ x2 * 257 ^ x * 16843008;
|
|
37
|
+
INV_SUB_MIX_0[sx] = t << 24 | t >>> 8;
|
|
38
|
+
INV_SUB_MIX_1[sx] = t << 16 | t >>> 16;
|
|
39
|
+
INV_SUB_MIX_2[sx] = t << 8 | t >>> 24;
|
|
40
|
+
INV_SUB_MIX_3[sx] = t;
|
|
41
|
+
if (!x) {
|
|
42
|
+
x = xi = 1;
|
|
43
|
+
} else {
|
|
44
|
+
x = x2 ^ d[d[d[x8 ^ x2]]];
|
|
45
|
+
xi ^= d[d[xi]];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
})();
|
|
49
|
+
const RCON = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54];
|
|
50
|
+
class AES extends BlockCipher {
|
|
51
|
+
constructor(xformMode, key, cfg) {
|
|
52
|
+
super(xformMode, key, cfg);
|
|
53
|
+
super.reset();
|
|
54
|
+
}
|
|
55
|
+
decryptBlock(m, offset) {
|
|
56
|
+
let t = m[offset + 1];
|
|
57
|
+
m[offset + 1] = m[offset + 3];
|
|
58
|
+
m[offset + 3] = t;
|
|
59
|
+
this._doCryptBlock(m, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);
|
|
60
|
+
t = m[offset + 1];
|
|
61
|
+
m[offset + 1] = m[offset + 3];
|
|
62
|
+
m[offset + 3] = t;
|
|
63
|
+
}
|
|
64
|
+
encryptBlock(m, offset) {
|
|
65
|
+
this._doCryptBlock(m, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);
|
|
66
|
+
}
|
|
67
|
+
reset() {
|
|
68
|
+
super.reset();
|
|
69
|
+
if (this._nRounds && this._keyPriorReset === this._key) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const key = this._keyPriorReset = this._key;
|
|
73
|
+
const keyWords = key.words;
|
|
74
|
+
const keySize = key.sigBytes / 4;
|
|
75
|
+
const nRounds = this._nRounds = keySize + 6;
|
|
76
|
+
const ksRows = (nRounds + 1) * 4;
|
|
77
|
+
const keySchedule = this._keySchedule = [];
|
|
78
|
+
for (let ksRow = 0; ksRow < ksRows; ksRow++) {
|
|
79
|
+
if (ksRow < keySize) {
|
|
80
|
+
keySchedule[ksRow] = keyWords[ksRow];
|
|
81
|
+
} else {
|
|
82
|
+
let t = keySchedule[ksRow - 1];
|
|
83
|
+
if (!(ksRow % keySize)) {
|
|
84
|
+
t = t << 8 | t >>> 24;
|
|
85
|
+
t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 255] << 16 | SBOX[t >>> 8 & 255] << 8 | SBOX[t & 255];
|
|
86
|
+
t ^= RCON[ksRow / keySize | 0] << 24;
|
|
87
|
+
} else if (keySize > 6 && ksRow % keySize === 4) {
|
|
88
|
+
t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 255] << 16 | SBOX[t >>> 8 & 255] << 8 | SBOX[t & 255];
|
|
89
|
+
}
|
|
90
|
+
keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
this._invKeySchedule = [];
|
|
94
|
+
for (let invKsRow = 0; invKsRow < ksRows; invKsRow++) {
|
|
95
|
+
const ksRow = ksRows - invKsRow;
|
|
96
|
+
let t;
|
|
97
|
+
if (invKsRow % 4) {
|
|
98
|
+
t = keySchedule[ksRow];
|
|
99
|
+
} else {
|
|
100
|
+
t = keySchedule[ksRow - 4];
|
|
101
|
+
}
|
|
102
|
+
if (invKsRow < 4 || ksRow <= 4) {
|
|
103
|
+
this._invKeySchedule[invKsRow] = t;
|
|
104
|
+
} else {
|
|
105
|
+
this._invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[t >>> 16 & 255]] ^ INV_SUB_MIX_2[SBOX[t >>> 8 & 255]] ^ INV_SUB_MIX_3[SBOX[t & 255]];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
_doCryptBlock(m, offset, keySchedule, subMix0, subMix1, subMix2, subMix3, sbox) {
|
|
110
|
+
let s0 = m[offset] ^ keySchedule[0];
|
|
111
|
+
let s1 = m[offset + 1] ^ keySchedule[1];
|
|
112
|
+
let s2 = m[offset + 2] ^ keySchedule[2];
|
|
113
|
+
let s3 = m[offset + 3] ^ keySchedule[3];
|
|
114
|
+
let ksRow = 4;
|
|
115
|
+
for (let round = 1; round < this._nRounds; round++) {
|
|
116
|
+
const t0 = subMix0[s0 >>> 24] ^ subMix1[s1 >>> 16 & 255] ^ subMix2[s2 >>> 8 & 255] ^ subMix3[s3 & 255] ^ keySchedule[ksRow++];
|
|
117
|
+
const t1 = subMix0[s1 >>> 24] ^ subMix1[s2 >>> 16 & 255] ^ subMix2[s3 >>> 8 & 255] ^ subMix3[s0 & 255] ^ keySchedule[ksRow++];
|
|
118
|
+
const t2 = subMix0[s2 >>> 24] ^ subMix1[s3 >>> 16 & 255] ^ subMix2[s0 >>> 8 & 255] ^ subMix3[s1 & 255] ^ keySchedule[ksRow++];
|
|
119
|
+
const t3 = subMix0[s3 >>> 24] ^ subMix1[s0 >>> 16 & 255] ^ subMix2[s1 >>> 8 & 255] ^ subMix3[s2 & 255] ^ keySchedule[ksRow++];
|
|
120
|
+
s0 = t0;
|
|
121
|
+
s1 = t1;
|
|
122
|
+
s2 = t2;
|
|
123
|
+
s3 = t3;
|
|
124
|
+
}
|
|
125
|
+
const t0g = (sbox[s0 >>> 24] << 24 | sbox[s1 >>> 16 & 255] << 16 | sbox[s2 >>> 8 & 255] << 8 | sbox[s3 & 255]) ^ keySchedule[ksRow++];
|
|
126
|
+
const t1g = (sbox[s1 >>> 24] << 24 | sbox[s2 >>> 16 & 255] << 16 | sbox[s3 >>> 8 & 255] << 8 | sbox[s0 & 255]) ^ keySchedule[ksRow++];
|
|
127
|
+
const t2g = (sbox[s2 >>> 24] << 24 | sbox[s3 >>> 16 & 255] << 16 | sbox[s0 >>> 8 & 255] << 8 | sbox[s1 & 255]) ^ keySchedule[ksRow++];
|
|
128
|
+
const t3g = (sbox[s3 >>> 24] << 24 | sbox[s0 >>> 16 & 255] << 16 | sbox[s1 >>> 8 & 255] << 8 | sbox[s2 & 255]) ^ keySchedule[ksRow++];
|
|
129
|
+
m[offset] = t0g;
|
|
130
|
+
m[offset + 1] = t1g;
|
|
131
|
+
m[offset + 2] = t2g;
|
|
132
|
+
m[offset + 3] = t3g;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
AES.keySize = 256 / 32;
|
|
136
|
+
export {
|
|
137
|
+
AES
|
|
138
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BlockCipher } from "../lib/block-cipher.class.js";
|
|
2
|
+
import { WordArray } from "../lib/word-array.class.js";
|
|
3
|
+
import { BufferedBlockAlgorithmConfig } from "../lib/buffered-block-algorithm-config.interface.js";
|
|
4
|
+
export declare class DES extends BlockCipher {
|
|
5
|
+
static blockSize: number;
|
|
6
|
+
static ivSize: number;
|
|
7
|
+
static keySize: number;
|
|
8
|
+
protected _invSubKeys: number[][];
|
|
9
|
+
protected _lBlock: number;
|
|
10
|
+
protected _rBlock: number;
|
|
11
|
+
protected _subKeys: number[][];
|
|
12
|
+
constructor(xformMode: number, key: WordArray, cfg?: BufferedBlockAlgorithmConfig);
|
|
13
|
+
decryptBlock(m: number[], offset: number): void;
|
|
14
|
+
encryptBlock(m: number[], offset: number): void;
|
|
15
|
+
reset(): void;
|
|
16
|
+
protected _doCryptBlock(m: number[], offset: number, subKeys: number[][]): void;
|
|
17
|
+
protected _exchangeLR(offset: number, mask: number): void;
|
|
18
|
+
protected _exchangeRL(offset: number, mask: number): void;
|
|
19
|
+
}
|