@jscrypto/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +42 -0
- package/dist/blocks.d.ts +9 -0
- package/dist/blocks.d.ts.map +1 -0
- package/dist/blocks.js +34 -0
- package/dist/blocks.js.map +1 -0
- package/dist/bytes.d.ts +5 -0
- package/dist/bytes.d.ts.map +1 -0
- package/dist/bytes.js +36 -0
- package/dist/bytes.js.map +1 -0
- package/dist/component.d.ts +67 -0
- package/dist/component.d.ts.map +1 -0
- package/dist/component.js +2 -0
- package/dist/component.js.map +1 -0
- package/dist/errors.d.ts +10 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +17 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.cjs +590 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +552 -0
- package/dist/index.mjs.map +7 -0
- package/dist/jscrypto-core.iife.js +576 -0
- package/dist/jscrypto-core.iife.js.map +7 -0
- package/dist/jscrypto-core.iife.min.js +7 -0
- package/dist/jscrypto-core.iife.min.js.map +7 -0
- package/dist/jscrypto-core.umd.js +587 -0
- package/dist/jscrypto-core.umd.js.map +7 -0
- package/dist/jscrypto-core.umd.min.js +18 -0
- package/dist/jscrypto-core.umd.min.js.map +7 -0
- package/dist/passphrase.d.ts +31 -0
- package/dist/passphrase.d.ts.map +1 -0
- package/dist/passphrase.js +222 -0
- package/dist/passphrase.js.map +1 -0
- package/dist/registry.d.ts +28 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +73 -0
- package/dist/registry.js.map +1 -0
- package/dist/transform.d.ts +13 -0
- package/dist/transform.d.ts.map +1 -0
- package/dist/transform.js +133 -0
- package/dist/transform.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { concatBytes } from './bytes.js';
|
|
2
|
+
export function createEncryptor(registry, options) {
|
|
3
|
+
const cipher = registry.get('cipher', options.cipher);
|
|
4
|
+
if (cipher.type === 'stream') {
|
|
5
|
+
return createStreamEncryptor(cipher.createEncryptor({
|
|
6
|
+
key: options.key,
|
|
7
|
+
options,
|
|
8
|
+
}));
|
|
9
|
+
}
|
|
10
|
+
const { mode, padding } = resolveBlockOptions(registry, options);
|
|
11
|
+
const blockCipher = cipher.create(options.key);
|
|
12
|
+
const modeEncryptor = mode.createEncryptor({
|
|
13
|
+
cipher: blockCipher,
|
|
14
|
+
iv: options.iv,
|
|
15
|
+
});
|
|
16
|
+
if (mode.requiresPadding === false) {
|
|
17
|
+
return createStreamEncryptor(modeEncryptor);
|
|
18
|
+
}
|
|
19
|
+
let finalized = false;
|
|
20
|
+
let pending = new Uint8Array();
|
|
21
|
+
return {
|
|
22
|
+
process(input) {
|
|
23
|
+
assertNotFinalized(finalized);
|
|
24
|
+
const data = concatBytes(pending, input);
|
|
25
|
+
const processLength = data.length - (data.length % blockCipher.blockSize);
|
|
26
|
+
pending = data.slice(processLength);
|
|
27
|
+
return processLength === 0 ? new Uint8Array() : modeEncryptor.process(data.subarray(0, processLength));
|
|
28
|
+
},
|
|
29
|
+
finalize(input = new Uint8Array()) {
|
|
30
|
+
assertNotFinalized(finalized);
|
|
31
|
+
const processed = input.length === 0 ? new Uint8Array() : this.process(input);
|
|
32
|
+
finalized = true;
|
|
33
|
+
const finalBlock = padding.pad(pending, blockCipher.blockSize);
|
|
34
|
+
pending = new Uint8Array();
|
|
35
|
+
return concatBytes(processed, modeEncryptor.finalize(finalBlock));
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function createDecryptor(registry, options) {
|
|
40
|
+
const cipher = registry.get('cipher', options.cipher);
|
|
41
|
+
if (cipher.type === 'stream') {
|
|
42
|
+
return createStreamDecryptor(cipher.createDecryptor({
|
|
43
|
+
key: options.key,
|
|
44
|
+
options,
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
const { mode, padding } = resolveBlockOptions(registry, options);
|
|
48
|
+
const blockCipher = cipher.create(options.key);
|
|
49
|
+
const modeDecryptor = mode.createDecryptor({
|
|
50
|
+
cipher: blockCipher,
|
|
51
|
+
iv: options.iv,
|
|
52
|
+
});
|
|
53
|
+
if (mode.requiresPadding === false) {
|
|
54
|
+
return createStreamDecryptor(modeDecryptor);
|
|
55
|
+
}
|
|
56
|
+
let finalized = false;
|
|
57
|
+
let pending = new Uint8Array();
|
|
58
|
+
let plaintextPending = new Uint8Array();
|
|
59
|
+
return {
|
|
60
|
+
process(input) {
|
|
61
|
+
assertNotFinalized(finalized);
|
|
62
|
+
const data = concatBytes(pending, input);
|
|
63
|
+
const processLength = data.length - (data.length % blockCipher.blockSize);
|
|
64
|
+
pending = data.slice(processLength);
|
|
65
|
+
if (processLength === 0) {
|
|
66
|
+
return new Uint8Array();
|
|
67
|
+
}
|
|
68
|
+
const decrypted = modeDecryptor.process(data.subarray(0, processLength));
|
|
69
|
+
const output = plaintextPending;
|
|
70
|
+
plaintextPending = decrypted;
|
|
71
|
+
return output;
|
|
72
|
+
},
|
|
73
|
+
finalize(input = new Uint8Array()) {
|
|
74
|
+
assertNotFinalized(finalized);
|
|
75
|
+
const processed = input.length === 0 ? new Uint8Array() : this.process(input);
|
|
76
|
+
finalized = true;
|
|
77
|
+
if (pending.length !== 0) {
|
|
78
|
+
padding.unpad(pending, blockCipher.blockSize);
|
|
79
|
+
}
|
|
80
|
+
const finalPlaintext = padding.unpad(plaintextPending, blockCipher.blockSize);
|
|
81
|
+
pending = new Uint8Array();
|
|
82
|
+
plaintextPending = new Uint8Array();
|
|
83
|
+
return concatBytes(processed, finalPlaintext, modeDecryptor.finalize());
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function createStreamEncryptor(modeEncryptor) {
|
|
88
|
+
let finalized = false;
|
|
89
|
+
return {
|
|
90
|
+
process(input) {
|
|
91
|
+
assertNotFinalized(finalized);
|
|
92
|
+
return modeEncryptor.process(input);
|
|
93
|
+
},
|
|
94
|
+
finalize(input = new Uint8Array()) {
|
|
95
|
+
assertNotFinalized(finalized);
|
|
96
|
+
finalized = true;
|
|
97
|
+
return concatBytes(input.length === 0 ? new Uint8Array() : modeEncryptor.process(input), modeEncryptor.finalize());
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function createStreamDecryptor(modeDecryptor) {
|
|
102
|
+
let finalized = false;
|
|
103
|
+
return {
|
|
104
|
+
process(input) {
|
|
105
|
+
assertNotFinalized(finalized);
|
|
106
|
+
return modeDecryptor.process(input);
|
|
107
|
+
},
|
|
108
|
+
finalize(input = new Uint8Array()) {
|
|
109
|
+
assertNotFinalized(finalized);
|
|
110
|
+
finalized = true;
|
|
111
|
+
return concatBytes(input.length === 0 ? new Uint8Array() : modeDecryptor.process(input), modeDecryptor.finalize());
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function resolveBlockOptions(registry, options) {
|
|
116
|
+
if (!options.mode) {
|
|
117
|
+
throw new Error(`${options.cipher} block cipher requires a mode.`);
|
|
118
|
+
}
|
|
119
|
+
if (!options.padding) {
|
|
120
|
+
throw new Error(`${options.cipher} block cipher requires padding.`);
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
cipher: registry.get('cipher', options.cipher),
|
|
124
|
+
mode: registry.get('mode', options.mode),
|
|
125
|
+
padding: registry.get('padding', options.padding),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function assertNotFinalized(finalized) {
|
|
129
|
+
if (finalized) {
|
|
130
|
+
throw new Error('Transform is already finalized.');
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jscrypto/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Core registry, types, and utilities for @jscrypto components.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.mjs",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.mjs",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
},
|
|
15
|
+
"./browser": "./dist/jscrypto-core.iife.min.js",
|
|
16
|
+
"./umd": "./dist/jscrypto-core.umd.min.js"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"README.md",
|
|
21
|
+
"LICENSE"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc -b",
|
|
25
|
+
"typecheck": "tsc -b --pretty false"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"crypto",
|
|
29
|
+
"cryptography",
|
|
30
|
+
"cipher",
|
|
31
|
+
"registry",
|
|
32
|
+
"framework"
|
|
33
|
+
],
|
|
34
|
+
"author": "Chen, Yi-Cyuan <emn178@gmail.com>",
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public"
|
|
37
|
+
},
|
|
38
|
+
"sideEffects": false,
|
|
39
|
+
"license": "MIT"
|
|
40
|
+
}
|