@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 CHANGED
@@ -1,3 +1,6 @@
1
+ 1.6.13
2
+ -Added crypto.ICrypto, crypto.AES256GCM
3
+
1
4
  1.6.12
2
5
  -Added dummy/i18next.js
3
6
  -Added web.getButtonElement, getDivElement, getSpanElement
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sswroom/sswr",
3
- "version": "1.6.12",
3
+ "version": "1.6.13",
4
4
  "description": "Libraries made by sswroom",
5
5
  "main": "sswr.js",
6
6
  "scripts": {
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();