@sswroom/sswr 1.6.12 → 1.6.13
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/Changelog +3 -0
- package/crypto.d.ts +27 -0
- package/crypto.js +149 -0
- package/package.json +1 -1
- package/text.js +8 -0
package/Changelog
CHANGED
package/crypto.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export abstract class ICrypto
|
|
2
|
+
{
|
|
3
|
+
abstract encrypt(inBuff: ArrayBuffer): Promise<ArrayBuffer | null>;
|
|
4
|
+
abstract decrypt(inBuff: ArrayBuffer): Promise<ArrayBuffer | null>;
|
|
5
|
+
|
|
6
|
+
abstract getEncBlockSize(): number;
|
|
7
|
+
abstract getDecBlockSize(): number;
|
|
8
|
+
|
|
9
|
+
static keyToBuffer(key: string, nBytes: number): ArrayBuffer;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export class AES256GCM extends ICrypto
|
|
13
|
+
{
|
|
14
|
+
constructor(key: ArrayBuffer, iv: ArrayBuffer);
|
|
15
|
+
|
|
16
|
+
encrypt(inBuff: ArrayBuffer): Promise<ArrayBuffer | null>;
|
|
17
|
+
decrypt(inBuff: ArrayBuffer): Promise<ArrayBuffer | null>;
|
|
18
|
+
|
|
19
|
+
getEncBlockSize(): number;
|
|
20
|
+
getDecBlockSize(): number;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 12 byte length
|
|
24
|
+
* @param iv Initial Vector
|
|
25
|
+
*/
|
|
26
|
+
setIV(iv: ArrayBuffer): void;
|
|
27
|
+
}
|
package/crypto.js
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
export class ICrypto
|
|
2
|
+
{
|
|
3
|
+
/**
|
|
4
|
+
* @param {ArrayBuffer} inBuff
|
|
5
|
+
* @returns {Promise<ArrayBuffer|null>}
|
|
6
|
+
*/
|
|
7
|
+
async encrypt(inBuff)
|
|
8
|
+
{
|
|
9
|
+
throw new Error("ICrypto.encrypt must be inherited");
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @param {ArrayBuffer} inBuff
|
|
14
|
+
* @returns {Promise<ArrayBuffer|null>}
|
|
15
|
+
*/
|
|
16
|
+
async decrypt(inBuff)
|
|
17
|
+
{
|
|
18
|
+
throw new Error("ICrypto.decrypt must be inherited");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @returns {number}
|
|
23
|
+
*/
|
|
24
|
+
getEncBlockSize() /**
|
|
25
|
+
* @returns {number}
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
{
|
|
29
|
+
throw new Error("ICrypto.getEncBlockSize must be inherited");
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @returns {number}
|
|
34
|
+
*/
|
|
35
|
+
getDecBlockSize()
|
|
36
|
+
{
|
|
37
|
+
throw new Error("ICrypto.getDecBlockSize must be inherited");
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @param {string} key
|
|
43
|
+
* @param {number} nBytes
|
|
44
|
+
* @returns {Uint8Array}
|
|
45
|
+
*/
|
|
46
|
+
static keyToBuffer(key, nBytes)
|
|
47
|
+
{
|
|
48
|
+
let enc = new TextEncoder();
|
|
49
|
+
let arr = enc.encode(key);
|
|
50
|
+
if (arr.length >= nBytes)
|
|
51
|
+
{
|
|
52
|
+
return arr.subarray(0, nBytes);
|
|
53
|
+
}
|
|
54
|
+
else
|
|
55
|
+
{
|
|
56
|
+
let ret = new Uint8Array(nBytes);
|
|
57
|
+
let i = 0;
|
|
58
|
+
let j = arr.length;
|
|
59
|
+
let k = 0;
|
|
60
|
+
while (i < nBytes)
|
|
61
|
+
{
|
|
62
|
+
if (k >= j)
|
|
63
|
+
{
|
|
64
|
+
ret[i] = 0x7f;
|
|
65
|
+
k = 0;
|
|
66
|
+
}
|
|
67
|
+
else
|
|
68
|
+
{
|
|
69
|
+
ret[i] = arr[k];
|
|
70
|
+
k++;
|
|
71
|
+
}
|
|
72
|
+
i++;
|
|
73
|
+
}
|
|
74
|
+
return ret;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export class AES256GCM extends ICrypto
|
|
80
|
+
{
|
|
81
|
+
/**
|
|
82
|
+
* @param {ArrayBuffer} key
|
|
83
|
+
* @param {ArrayBuffer} iv
|
|
84
|
+
*/
|
|
85
|
+
constructor(key, iv)
|
|
86
|
+
{
|
|
87
|
+
super();
|
|
88
|
+
if (key.byteLength != 32)
|
|
89
|
+
{
|
|
90
|
+
throw new Error("key must be 32 bytes long");
|
|
91
|
+
}
|
|
92
|
+
this.key = key;
|
|
93
|
+
this.setIV(iv);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* @param {ArrayBuffer} inBuff
|
|
98
|
+
*/
|
|
99
|
+
async encrypt(inBuff)
|
|
100
|
+
{
|
|
101
|
+
if (window.crypto.subtle == null)
|
|
102
|
+
{
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
let key = await window.crypto.subtle.importKey("raw", this.key, {name: "AES-GCM"}, false, ["encrypt", "decrypt"]);
|
|
106
|
+
return await window.crypto.subtle.encrypt( {
|
|
107
|
+
name: "AES-GCM",
|
|
108
|
+
iv: this.iv
|
|
109
|
+
}, key, inBuff);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* @param {ArrayBuffer} inBuff
|
|
114
|
+
*/
|
|
115
|
+
async decrypt(inBuff)
|
|
116
|
+
{
|
|
117
|
+
if (window.crypto.subtle == null)
|
|
118
|
+
{
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
let key = await window.crypto.subtle.importKey("raw", this.key, {name: "AES-GCM"}, false, ["encrypt", "decrypt"]);
|
|
122
|
+
return await window.crypto.subtle.decrypt( {
|
|
123
|
+
name: "AES-GCM",
|
|
124
|
+
iv: this.iv
|
|
125
|
+
}, key, inBuff);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
getEncBlockSize()
|
|
129
|
+
{
|
|
130
|
+
return 16;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
getDecBlockSize()
|
|
134
|
+
{
|
|
135
|
+
return 16;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* @param {ArrayBuffer} iv
|
|
140
|
+
*/
|
|
141
|
+
setIV(iv)
|
|
142
|
+
{
|
|
143
|
+
if (iv.byteLength != 12)
|
|
144
|
+
{
|
|
145
|
+
throw new Error("iv must be 12 bytes long");
|
|
146
|
+
}
|
|
147
|
+
this.iv = iv;
|
|
148
|
+
}
|
|
149
|
+
}
|
package/package.json
CHANGED
package/text.js
CHANGED
|
@@ -625,12 +625,20 @@ export class UTF8TextBinEnc extends TextBinEnc
|
|
|
625
625
|
super("UTF-8 Text");
|
|
626
626
|
}
|
|
627
627
|
|
|
628
|
+
/**
|
|
629
|
+
* @param {Uint8Array} buff
|
|
630
|
+
* @returns {string}
|
|
631
|
+
*/
|
|
628
632
|
encodeBin(buff)
|
|
629
633
|
{
|
|
630
634
|
let enc = new TextDecoder();
|
|
631
635
|
return enc.decode(buff);
|
|
632
636
|
}
|
|
633
637
|
|
|
638
|
+
/**
|
|
639
|
+
* @param {string} str
|
|
640
|
+
* @returns {Uint8Array}
|
|
641
|
+
*/
|
|
634
642
|
decodeBin(str)
|
|
635
643
|
{
|
|
636
644
|
let enc = new TextEncoder();
|