lib0 0.2.64 → 0.2.66

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 (51) hide show
  1. package/coverage/tmp/coverage-29418-1678525324823-0.json +1 -0
  2. package/crypto/aes-gcm.d.ts +10 -0
  3. package/crypto/aes-gcm.d.ts.map +1 -0
  4. package/crypto/aes-gcm.js +124 -0
  5. package/crypto/ecdsa.d.ts +13 -0
  6. package/crypto/ecdsa.d.ts.map +1 -0
  7. package/crypto/ecdsa.js +93 -0
  8. package/crypto/rsa-oaep.d.ts +13 -0
  9. package/crypto/rsa-oaep.d.ts.map +1 -0
  10. package/crypto/rsa-oaep.js +84 -0
  11. package/crypto.test.d.ts +2 -0
  12. package/crypto.test.d.ts.map +1 -1
  13. package/dist/crypto/aes-gcm.d.ts +10 -0
  14. package/dist/crypto/aes-gcm.d.ts.map +1 -0
  15. package/dist/crypto/ecdsa.d.ts +13 -0
  16. package/dist/crypto/ecdsa.d.ts.map +1 -0
  17. package/dist/crypto/rsa-oaep.d.ts +13 -0
  18. package/dist/crypto/rsa-oaep.d.ts.map +1 -0
  19. package/dist/crypto.test.d.ts +2 -0
  20. package/dist/crypto.test.d.ts.map +1 -1
  21. package/dist/index.cjs +1 -1
  22. package/dist/{indexeddb-1f25af34.cjs → indexeddb-38ee46bd.cjs} +1 -4
  23. package/dist/indexeddb-38ee46bd.cjs.map +1 -0
  24. package/dist/indexeddb.cjs +1 -1
  25. package/dist/indexeddb.d.ts.map +1 -1
  26. package/dist/indexeddb.test.d.ts +1 -0
  27. package/dist/indexeddb.test.d.ts.map +1 -1
  28. package/dist/testing.cjs +15 -0
  29. package/dist/testing.cjs.map +1 -1
  30. package/dist/testing.d.ts +1 -0
  31. package/dist/testing.d.ts.map +1 -1
  32. package/dist/testing.test.d.ts.map +1 -1
  33. package/indexeddb.d.ts.map +1 -1
  34. package/indexeddb.js +0 -3
  35. package/indexeddb.test.d.ts +1 -0
  36. package/indexeddb.test.d.ts.map +1 -1
  37. package/package.json +18 -6
  38. package/test.html +3 -1
  39. package/testing.d.ts +1 -0
  40. package/testing.d.ts.map +1 -1
  41. package/testing.js +14 -0
  42. package/testing.test.d.ts.map +1 -1
  43. package/coverage/tmp/coverage-17397-1678220559587-0.json +0 -1
  44. package/crypto.d.ts +0 -22
  45. package/crypto.d.ts.map +0 -1
  46. package/crypto.js +0 -186
  47. package/dist/crypto.cjs +0 -232
  48. package/dist/crypto.cjs.map +0 -1
  49. package/dist/crypto.d.ts +0 -22
  50. package/dist/crypto.d.ts.map +0 -1
  51. package/dist/indexeddb-1f25af34.cjs.map +0 -1
package/crypto.d.ts DELETED
@@ -1,22 +0,0 @@
1
- export function deriveSymmetricKey(secret: string | Uint8Array, salt: string | Uint8Array, { extractable, usages }?: {
2
- extractable?: boolean | undefined;
3
- usages?: ("decrypt" | "encrypt" | "sign" | "verify")[] | undefined;
4
- }): PromiseLike<CryptoKey>;
5
- export function generateAsymmetricKey({ extractable, usages }?: {
6
- extractable?: boolean | undefined;
7
- usages?: ("decrypt" | "encrypt" | "sign" | "verify")[] | undefined;
8
- }): Promise<CryptoKeyPair>;
9
- export function exportKey(key: CryptoKey): Promise<JsonWebKey>;
10
- export function importSymmetricKey(jwk: any, { extractable, usages }?: {
11
- extractable?: boolean | undefined;
12
- usages?: ("decrypt" | "encrypt" | "sign" | "verify")[] | undefined;
13
- }): Promise<CryptoKey>;
14
- export function importAsymmetricKey(jwk: any, { extractable, usages }?: {
15
- extractable?: boolean | undefined;
16
- usages?: ("decrypt" | "encrypt" | "sign" | "verify")[] | undefined;
17
- }): Promise<CryptoKey>;
18
- export function encrypt(data: Uint8Array, key: CryptoKey): PromiseLike<Uint8Array>;
19
- export function decrypt(data: Uint8Array, key: CryptoKey): PromiseLike<Uint8Array>;
20
- export function sign(data: Uint8Array, privateKey: CryptoKey): PromiseLike<Uint8Array>;
21
- export function verify(signature: Uint8Array, data: Uint8Array, publicKey: CryptoKey): PromiseLike<boolean>;
22
- //# sourceMappingURL=crypto.d.ts.map
package/crypto.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["crypto.js"],"names":[],"mappings":"AA0BO,2CAPI,MAAM,GAAG,UAAU,QACnB,MAAM,GAAG,UAAU;IAEJ,WAAW;IACwB,MAAM;IACvD,YAAY,SAAS,CAAC,CA4BjC;AAQM;IAHmB,WAAW;IACwB,MAAM;2BAUhE;AAMI,+BAFI,SAAS,uBAEkD;AAS/D,wCALI,GAAG;IAEY,WAAW;IACwB,MAAM;uBAGI;AAUhE,yCALI,GAAG;IAEY,WAAW;IACwB,MAAM;uBAGkC;AAW9F,8BAJI,UAAU,OACV,SAAS,GACR,YAAY,UAAU,CAAC,CAkBlC;AAWM,8BAJI,UAAU,OACV,SAAS,GACR,YAAY,UAAU,CAAC,CAclC;AAWM,2BAJI,UAAU,cACV,SAAS,GACR,YAAY,UAAU,CAAC,CAUa;AAYzC,kCALI,UAAU,QACV,UAAU,aACV,SAAS,GACR,YAAY,OAAO,CAAC,CAW7B"}
package/crypto.js DELETED
@@ -1,186 +0,0 @@
1
- /* eslint-env browser */
2
-
3
- import * as encoding from './encoding.js'
4
- import * as decoding from './decoding.js'
5
- import * as string from './string.js'
6
- import * as webcrypto from 'lib0/webcrypto'
7
-
8
- /**
9
- * @param {string | Uint8Array} data
10
- * @return {Uint8Array}
11
- */
12
- /* c8 ignore next */
13
- const toBinary = data => typeof data === 'string' ? string.encodeUtf8(data) : data
14
-
15
- /**
16
- * @experimental The API is not final!
17
- *
18
- * Derive an symmetric key using the Password-Based-Key-Derivation-Function-2.
19
- *
20
- * @param {string | Uint8Array} secret
21
- * @param {string | Uint8Array} salt
22
- * @param {Object} opts
23
- * @param {boolean} [opts.extractable]
24
- * @param {Array<'sign'|'verify'|'encrypt'|'decrypt'>} [opts.usages]
25
- * @return {PromiseLike<CryptoKey>}
26
- */
27
- export const deriveSymmetricKey = (secret, salt, { extractable = false, usages = ['encrypt', 'decrypt'] } = {}) => {
28
- const binSecret = toBinary(secret)
29
- const binSalt = toBinary(salt)
30
- return webcrypto.subtle.importKey(
31
- 'raw',
32
- binSecret,
33
- 'PBKDF2',
34
- false,
35
- ['deriveKey']
36
- ).then(keyMaterial =>
37
- webcrypto.subtle.deriveKey(
38
- {
39
- name: 'PBKDF2',
40
- salt: binSalt, // NIST recommends at least 64 bits
41
- iterations: 600000, // OWASP recommends 600k iterations
42
- hash: 'SHA-256'
43
- },
44
- keyMaterial,
45
- {
46
- name: 'AES-GCM',
47
- length: 256
48
- },
49
- extractable,
50
- usages
51
- )
52
- )
53
- }
54
-
55
- /* c8 ignore next */
56
- /**
57
- * @param {Object} opts
58
- * @param {boolean} [opts.extractable]
59
- * @param {Array<'sign'|'verify'|'encrypt'|'decrypt'>} [opts.usages]
60
- */
61
- export const generateAsymmetricKey = ({ extractable = false, usages = ['sign', 'verify'] } = {}) =>
62
- webcrypto.subtle.generateKey(
63
- {
64
- name: 'ECDSA',
65
- namedCurve: 'P-384'
66
- },
67
- extractable,
68
- usages
69
- )
70
-
71
- /* c8 ignore next */
72
- /**
73
- * @param {CryptoKey} key - Symmetric or Asymmetric key
74
- */
75
- export const exportKey = key => webcrypto.subtle.exportKey('jwk', key)
76
-
77
- /* c8 ignore start */
78
- /**
79
- * @param {any} jwk
80
- * @param {Object} opts
81
- * @param {boolean} [opts.extractable]
82
- * @param {Array<'sign'|'verify'|'encrypt'|'decrypt'>} [opts.usages]
83
- */
84
- export const importSymmetricKey = (jwk, { extractable = false, usages = ['encrypt', 'decrypt'] } = {}) =>
85
- webcrypto.subtle.importKey('jwk', jwk, 'PBKDF2', extractable, usages)
86
- /* c8 ignore stop */
87
-
88
- /* c8 ignore next */
89
- /**
90
- * @param {any} jwk
91
- * @param {Object} opts
92
- * @param {boolean} [opts.extractable]
93
- * @param {Array<'sign'|'verify'|'encrypt'|'decrypt'>} [opts.usages]
94
- */
95
- export const importAsymmetricKey = (jwk, { extractable = false, usages = ['encrypt', 'decrypt'] } = {}) =>
96
- webcrypto.subtle.importKey('jwk', jwk, { name: 'ECDSA', namedCurve: 'P-384' }, extractable, usages)
97
-
98
- /**
99
- * @experimental The API is not final!
100
- *
101
- * Encrypt some data using AES-GCM method.
102
- *
103
- * @param {Uint8Array} data data to be encrypted
104
- * @param {CryptoKey} key
105
- * @return {PromiseLike<Uint8Array>} encrypted, base64 encoded message
106
- */
107
- export const encrypt = (data, key) => {
108
- const iv = webcrypto.getRandomValues(new Uint8Array(16)) // 92bit is enough. 128bit is recommended if space is not an issue.
109
- return webcrypto.subtle.encrypt(
110
- {
111
- name: 'AES-GCM',
112
- iv
113
- },
114
- key,
115
- data
116
- ).then(cipher => {
117
- const encryptedDataEncoder = encoding.createEncoder()
118
- // iv may be sent in the clear to the other peers
119
- encoding.writeUint8Array(encryptedDataEncoder, iv)
120
- encoding.writeVarUint8Array(encryptedDataEncoder, new Uint8Array(cipher))
121
- return encoding.toUint8Array(encryptedDataEncoder)
122
- })
123
- }
124
-
125
- /**
126
- * @experimental The API is not final!
127
- *
128
- * Decrypt some data using AES-GCM method.
129
- *
130
- * @param {Uint8Array} data
131
- * @param {CryptoKey} key
132
- * @return {PromiseLike<Uint8Array>} decrypted buffer
133
- */
134
- export const decrypt = (data, key) => {
135
- const dataDecoder = decoding.createDecoder(data)
136
- const iv = decoding.readUint8Array(dataDecoder, 16)
137
- const cipher = decoding.readVarUint8Array(dataDecoder)
138
- return webcrypto.subtle.decrypt(
139
- {
140
- name: 'AES-GCM',
141
- iv
142
- },
143
- key,
144
- cipher
145
- ).then(data => new Uint8Array(data))
146
- }
147
-
148
- /**
149
- * @experimental The API is not final!
150
- *
151
- * Sign a message
152
- *
153
- * @param {Uint8Array} data
154
- * @param {CryptoKey} privateKey
155
- * @return {PromiseLike<Uint8Array>} signature
156
- */
157
- export const sign = (data, privateKey) =>
158
- webcrypto.subtle.sign(
159
- {
160
- name: 'ECDSA',
161
- hash: { name: 'SHA-384' }
162
- },
163
- privateKey,
164
- data
165
- ).then(signature => new Uint8Array(signature))
166
-
167
- /**
168
- * @experimental The API is not final!
169
- *
170
- * Sign a message
171
- *
172
- * @param {Uint8Array} signature
173
- * @param {Uint8Array} data
174
- * @param {CryptoKey} publicKey
175
- * @return {PromiseLike<boolean>} signature
176
- */
177
- export const verify = (signature, data, publicKey) =>
178
- webcrypto.subtle.verify(
179
- {
180
- name: 'ECDSA',
181
- hash: { name: 'SHA-384' }
182
- },
183
- publicKey,
184
- signature,
185
- data
186
- )
package/dist/crypto.cjs DELETED
@@ -1,232 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var encoding = require('./buffer-9b566988.cjs');
6
- var string = require('./string-b1bee84b.cjs');
7
- var webcrypto = require('lib0/webcrypto');
8
- require('./environment-01c0e75b.cjs');
9
- require('./map-9a5915e4.cjs');
10
- require('./conditions-f5c0c102.cjs');
11
- require('./storage.cjs');
12
- require('./function-35e8ddea.cjs');
13
- require('./array-a1682de6.cjs');
14
- require('./set-0f209abb.cjs');
15
- require('./object-aad630ed.cjs');
16
- require('./binary-ac8e39e2.cjs');
17
- require('./math-08e068f9.cjs');
18
- require('./number-f97e141a.cjs');
19
- require('./error-8582d695.cjs');
20
-
21
- function _interopNamespace(e) {
22
- if (e && e.__esModule) return e;
23
- var n = Object.create(null);
24
- if (e) {
25
- Object.keys(e).forEach(function (k) {
26
- if (k !== 'default') {
27
- var d = Object.getOwnPropertyDescriptor(e, k);
28
- Object.defineProperty(n, k, d.get ? d : {
29
- enumerable: true,
30
- get: function () { return e[k]; }
31
- });
32
- }
33
- });
34
- }
35
- n["default"] = e;
36
- return Object.freeze(n);
37
- }
38
-
39
- var webcrypto__namespace = /*#__PURE__*/_interopNamespace(webcrypto);
40
-
41
- /* eslint-env browser */
42
-
43
- /**
44
- * @param {string | Uint8Array} data
45
- * @return {Uint8Array}
46
- */
47
- /* c8 ignore next */
48
- const toBinary = data => typeof data === 'string' ? string.encodeUtf8(data) : data;
49
-
50
- /**
51
- * @experimental The API is not final!
52
- *
53
- * Derive an symmetric key using the Password-Based-Key-Derivation-Function-2.
54
- *
55
- * @param {string | Uint8Array} secret
56
- * @param {string | Uint8Array} salt
57
- * @param {Object} opts
58
- * @param {boolean} [opts.extractable]
59
- * @param {Array<'sign'|'verify'|'encrypt'|'decrypt'>} [opts.usages]
60
- * @return {PromiseLike<CryptoKey>}
61
- */
62
- const deriveSymmetricKey = (secret, salt, { extractable = false, usages = ['encrypt', 'decrypt'] } = {}) => {
63
- const binSecret = toBinary(secret);
64
- const binSalt = toBinary(salt);
65
- return webcrypto__namespace.subtle.importKey(
66
- 'raw',
67
- binSecret,
68
- 'PBKDF2',
69
- false,
70
- ['deriveKey']
71
- ).then(keyMaterial =>
72
- webcrypto__namespace.subtle.deriveKey(
73
- {
74
- name: 'PBKDF2',
75
- salt: binSalt, // NIST recommends at least 64 bits
76
- iterations: 600000, // OWASP recommends 600k iterations
77
- hash: 'SHA-256'
78
- },
79
- keyMaterial,
80
- {
81
- name: 'AES-GCM',
82
- length: 256
83
- },
84
- extractable,
85
- usages
86
- )
87
- )
88
- };
89
-
90
- /* c8 ignore next */
91
- /**
92
- * @param {Object} opts
93
- * @param {boolean} [opts.extractable]
94
- * @param {Array<'sign'|'verify'|'encrypt'|'decrypt'>} [opts.usages]
95
- */
96
- const generateAsymmetricKey = ({ extractable = false, usages = ['sign', 'verify'] } = {}) =>
97
- webcrypto__namespace.subtle.generateKey(
98
- {
99
- name: 'ECDSA',
100
- namedCurve: 'P-384'
101
- },
102
- extractable,
103
- usages
104
- );
105
-
106
- /* c8 ignore next */
107
- /**
108
- * @param {CryptoKey} key - Symmetric or Asymmetric key
109
- */
110
- const exportKey = key => webcrypto__namespace.subtle.exportKey('jwk', key);
111
-
112
- /* c8 ignore start */
113
- /**
114
- * @param {any} jwk
115
- * @param {Object} opts
116
- * @param {boolean} [opts.extractable]
117
- * @param {Array<'sign'|'verify'|'encrypt'|'decrypt'>} [opts.usages]
118
- */
119
- const importSymmetricKey = (jwk, { extractable = false, usages = ['encrypt', 'decrypt'] } = {}) =>
120
- webcrypto__namespace.subtle.importKey('jwk', jwk, 'PBKDF2', extractable, usages);
121
- /* c8 ignore stop */
122
-
123
- /* c8 ignore next */
124
- /**
125
- * @param {any} jwk
126
- * @param {Object} opts
127
- * @param {boolean} [opts.extractable]
128
- * @param {Array<'sign'|'verify'|'encrypt'|'decrypt'>} [opts.usages]
129
- */
130
- const importAsymmetricKey = (jwk, { extractable = false, usages = ['encrypt', 'decrypt'] } = {}) =>
131
- webcrypto__namespace.subtle.importKey('jwk', jwk, { name: 'ECDSA', namedCurve: 'P-384' }, extractable, usages);
132
-
133
- /**
134
- * @experimental The API is not final!
135
- *
136
- * Encrypt some data using AES-GCM method.
137
- *
138
- * @param {Uint8Array} data data to be encrypted
139
- * @param {CryptoKey} key
140
- * @return {PromiseLike<Uint8Array>} encrypted, base64 encoded message
141
- */
142
- const encrypt = (data, key) => {
143
- const iv = webcrypto__namespace.getRandomValues(new Uint8Array(16)); // 92bit is enough. 128bit is recommended if space is not an issue.
144
- return webcrypto__namespace.subtle.encrypt(
145
- {
146
- name: 'AES-GCM',
147
- iv
148
- },
149
- key,
150
- data
151
- ).then(cipher => {
152
- const encryptedDataEncoder = encoding.createEncoder();
153
- // iv may be sent in the clear to the other peers
154
- encoding.writeUint8Array(encryptedDataEncoder, iv);
155
- encoding.writeVarUint8Array(encryptedDataEncoder, new Uint8Array(cipher));
156
- return encoding.toUint8Array(encryptedDataEncoder)
157
- })
158
- };
159
-
160
- /**
161
- * @experimental The API is not final!
162
- *
163
- * Decrypt some data using AES-GCM method.
164
- *
165
- * @param {Uint8Array} data
166
- * @param {CryptoKey} key
167
- * @return {PromiseLike<Uint8Array>} decrypted buffer
168
- */
169
- const decrypt = (data, key) => {
170
- const dataDecoder = encoding.createDecoder(data);
171
- const iv = encoding.readUint8Array(dataDecoder, 16);
172
- const cipher = encoding.readVarUint8Array(dataDecoder);
173
- return webcrypto__namespace.subtle.decrypt(
174
- {
175
- name: 'AES-GCM',
176
- iv
177
- },
178
- key,
179
- cipher
180
- ).then(data => new Uint8Array(data))
181
- };
182
-
183
- /**
184
- * @experimental The API is not final!
185
- *
186
- * Sign a message
187
- *
188
- * @param {Uint8Array} data
189
- * @param {CryptoKey} privateKey
190
- * @return {PromiseLike<Uint8Array>} signature
191
- */
192
- const sign = (data, privateKey) =>
193
- webcrypto__namespace.subtle.sign(
194
- {
195
- name: 'ECDSA',
196
- hash: { name: 'SHA-384' }
197
- },
198
- privateKey,
199
- data
200
- ).then(signature => new Uint8Array(signature));
201
-
202
- /**
203
- * @experimental The API is not final!
204
- *
205
- * Sign a message
206
- *
207
- * @param {Uint8Array} signature
208
- * @param {Uint8Array} data
209
- * @param {CryptoKey} publicKey
210
- * @return {PromiseLike<boolean>} signature
211
- */
212
- const verify = (signature, data, publicKey) =>
213
- webcrypto__namespace.subtle.verify(
214
- {
215
- name: 'ECDSA',
216
- hash: { name: 'SHA-384' }
217
- },
218
- publicKey,
219
- signature,
220
- data
221
- );
222
-
223
- exports.decrypt = decrypt;
224
- exports.deriveSymmetricKey = deriveSymmetricKey;
225
- exports.encrypt = encrypt;
226
- exports.exportKey = exportKey;
227
- exports.generateAsymmetricKey = generateAsymmetricKey;
228
- exports.importAsymmetricKey = importAsymmetricKey;
229
- exports.importSymmetricKey = importSymmetricKey;
230
- exports.sign = sign;
231
- exports.verify = verify;
232
- //# sourceMappingURL=crypto.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crypto.cjs","sources":["../crypto.js"],"sourcesContent":["/* eslint-env browser */\n\nimport * as encoding from './encoding.js'\nimport * as decoding from './decoding.js'\nimport * as string from './string.js'\nimport * as webcrypto from 'lib0/webcrypto'\n\n/**\n * @param {string | Uint8Array} data\n * @return {Uint8Array}\n */\n/* c8 ignore next */\nconst toBinary = data => typeof data === 'string' ? string.encodeUtf8(data) : data\n\n/**\n * @experimental The API is not final!\n *\n * Derive an symmetric key using the Password-Based-Key-Derivation-Function-2.\n *\n * @param {string | Uint8Array} secret\n * @param {string | Uint8Array} salt\n * @param {Object} opts\n * @param {boolean} [opts.extractable]\n * @param {Array<'sign'|'verify'|'encrypt'|'decrypt'>} [opts.usages]\n * @return {PromiseLike<CryptoKey>}\n */\nexport const deriveSymmetricKey = (secret, salt, { extractable = false, usages = ['encrypt', 'decrypt'] } = {}) => {\n const binSecret = toBinary(secret)\n const binSalt = toBinary(salt)\n return webcrypto.subtle.importKey(\n 'raw',\n binSecret,\n 'PBKDF2',\n false,\n ['deriveKey']\n ).then(keyMaterial =>\n webcrypto.subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: binSalt, // NIST recommends at least 64 bits\n iterations: 600000, // OWASP recommends 600k iterations\n hash: 'SHA-256'\n },\n keyMaterial,\n {\n name: 'AES-GCM',\n length: 256\n },\n extractable,\n usages\n )\n )\n}\n\n/* c8 ignore next */\n/**\n * @param {Object} opts\n * @param {boolean} [opts.extractable]\n * @param {Array<'sign'|'verify'|'encrypt'|'decrypt'>} [opts.usages]\n */\nexport const generateAsymmetricKey = ({ extractable = false, usages = ['sign', 'verify'] } = {}) =>\n webcrypto.subtle.generateKey(\n {\n name: 'ECDSA',\n namedCurve: 'P-384'\n },\n extractable,\n usages\n )\n\n/* c8 ignore next */\n/**\n * @param {CryptoKey} key - Symmetric or Asymmetric key\n */\nexport const exportKey = key => webcrypto.subtle.exportKey('jwk', key)\n\n/* c8 ignore start */\n/**\n * @param {any} jwk\n * @param {Object} opts\n * @param {boolean} [opts.extractable]\n * @param {Array<'sign'|'verify'|'encrypt'|'decrypt'>} [opts.usages]\n */\nexport const importSymmetricKey = (jwk, { extractable = false, usages = ['encrypt', 'decrypt'] } = {}) =>\n webcrypto.subtle.importKey('jwk', jwk, 'PBKDF2', extractable, usages)\n/* c8 ignore stop */\n\n/* c8 ignore next */\n/**\n * @param {any} jwk\n * @param {Object} opts\n * @param {boolean} [opts.extractable]\n * @param {Array<'sign'|'verify'|'encrypt'|'decrypt'>} [opts.usages]\n */\nexport const importAsymmetricKey = (jwk, { extractable = false, usages = ['encrypt', 'decrypt'] } = {}) =>\n webcrypto.subtle.importKey('jwk', jwk, { name: 'ECDSA', namedCurve: 'P-384' }, extractable, usages)\n\n/**\n * @experimental The API is not final!\n *\n * Encrypt some data using AES-GCM method.\n *\n * @param {Uint8Array} data data to be encrypted\n * @param {CryptoKey} key\n * @return {PromiseLike<Uint8Array>} encrypted, base64 encoded message\n */\nexport const encrypt = (data, key) => {\n const iv = webcrypto.getRandomValues(new Uint8Array(16)) // 92bit is enough. 128bit is recommended if space is not an issue.\n return webcrypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv\n },\n key,\n data\n ).then(cipher => {\n const encryptedDataEncoder = encoding.createEncoder()\n // iv may be sent in the clear to the other peers\n encoding.writeUint8Array(encryptedDataEncoder, iv)\n encoding.writeVarUint8Array(encryptedDataEncoder, new Uint8Array(cipher))\n return encoding.toUint8Array(encryptedDataEncoder)\n })\n}\n\n/**\n * @experimental The API is not final!\n *\n * Decrypt some data using AES-GCM method.\n *\n * @param {Uint8Array} data\n * @param {CryptoKey} key\n * @return {PromiseLike<Uint8Array>} decrypted buffer\n */\nexport const decrypt = (data, key) => {\n const dataDecoder = decoding.createDecoder(data)\n const iv = decoding.readUint8Array(dataDecoder, 16)\n const cipher = decoding.readVarUint8Array(dataDecoder)\n return webcrypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv\n },\n key,\n cipher\n ).then(data => new Uint8Array(data))\n}\n\n/**\n * @experimental The API is not final!\n *\n * Sign a message\n *\n * @param {Uint8Array} data\n * @param {CryptoKey} privateKey\n * @return {PromiseLike<Uint8Array>} signature\n */\nexport const sign = (data, privateKey) =>\n webcrypto.subtle.sign(\n {\n name: 'ECDSA',\n hash: { name: 'SHA-384' }\n },\n privateKey,\n data\n ).then(signature => new Uint8Array(signature))\n\n/**\n * @experimental The API is not final!\n *\n * Sign a message\n *\n * @param {Uint8Array} signature\n * @param {Uint8Array} data\n * @param {CryptoKey} publicKey\n * @return {PromiseLike<boolean>} signature\n */\nexport const verify = (signature, data, publicKey) =>\n webcrypto.subtle.verify(\n {\n name: 'ECDSA',\n hash: { name: 'SHA-384' }\n },\n publicKey,\n signature,\n data\n )\n"],"names":["string.encodeUtf8","webcrypto","encoding.createEncoder","encoding.writeUint8Array","encoding.writeVarUint8Array","encoding.toUint8Array","decoding.createDecoder","decoding.readUint8Array","decoding.readVarUint8Array"],"mappings":"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"}
package/dist/crypto.d.ts DELETED
@@ -1,22 +0,0 @@
1
- export function deriveSymmetricKey(secret: string | Uint8Array, salt: string | Uint8Array, { extractable, usages }?: {
2
- extractable?: boolean | undefined;
3
- usages?: ("decrypt" | "encrypt" | "sign" | "verify")[] | undefined;
4
- }): PromiseLike<CryptoKey>;
5
- export function generateAsymmetricKey({ extractable, usages }?: {
6
- extractable?: boolean | undefined;
7
- usages?: ("decrypt" | "encrypt" | "sign" | "verify")[] | undefined;
8
- }): Promise<CryptoKeyPair>;
9
- export function exportKey(key: CryptoKey): Promise<JsonWebKey>;
10
- export function importSymmetricKey(jwk: any, { extractable, usages }?: {
11
- extractable?: boolean | undefined;
12
- usages?: ("decrypt" | "encrypt" | "sign" | "verify")[] | undefined;
13
- }): Promise<CryptoKey>;
14
- export function importAsymmetricKey(jwk: any, { extractable, usages }?: {
15
- extractable?: boolean | undefined;
16
- usages?: ("decrypt" | "encrypt" | "sign" | "verify")[] | undefined;
17
- }): Promise<CryptoKey>;
18
- export function encrypt(data: Uint8Array, key: CryptoKey): PromiseLike<Uint8Array>;
19
- export function decrypt(data: Uint8Array, key: CryptoKey): PromiseLike<Uint8Array>;
20
- export function sign(data: Uint8Array, privateKey: CryptoKey): PromiseLike<Uint8Array>;
21
- export function verify(signature: Uint8Array, data: Uint8Array, publicKey: CryptoKey): PromiseLike<boolean>;
22
- //# sourceMappingURL=crypto.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../crypto.js"],"names":[],"mappings":"AA0BO,2CAPI,MAAM,GAAG,UAAU,QACnB,MAAM,GAAG,UAAU;IAEJ,WAAW;IACwB,MAAM;IACvD,YAAY,SAAS,CAAC,CA4BjC;AAQM;IAHmB,WAAW;IACwB,MAAM;2BAUhE;AAMI,+BAFI,SAAS,uBAEkD;AAS/D,wCALI,GAAG;IAEY,WAAW;IACwB,MAAM;uBAGI;AAUhE,yCALI,GAAG;IAEY,WAAW;IACwB,MAAM;uBAGkC;AAW9F,8BAJI,UAAU,OACV,SAAS,GACR,YAAY,UAAU,CAAC,CAkBlC;AAWM,8BAJI,UAAU,OACV,SAAS,GACR,YAAY,UAAU,CAAC,CAclC;AAWM,2BAJI,UAAU,cACV,SAAS,GACR,YAAY,UAAU,CAAC,CAUa;AAYzC,kCALI,UAAU,QACV,UAAU,aACV,SAAS,GACR,YAAY,OAAO,CAAC,CAW7B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexeddb-1f25af34.cjs","sources":["../indexeddb.js"],"sourcesContent":["/* eslint-env browser */\n\n/**\n * Helpers to work with IndexedDB.\n *\n * @module indexeddb\n */\n\nimport * as promise from './promise.js'\nimport * as error from './error.js'\n\n/* c8 ignore start */\n\n/**\n * IDB Request to Promise transformer\n *\n * @param {IDBRequest} request\n * @return {Promise<any>}\n */\nexport const rtop = request => promise.create((resolve, reject) => {\n // @ts-ignore\n request.onerror = event => reject(new Error(event.target.error))\n // @ts-ignore\n request.onblocked = () => location.reload()\n // @ts-ignore\n request.onsuccess = event => resolve(event.target.result)\n})\n\n/**\n * @param {string} name\n * @param {function(IDBDatabase):any} initDB Called when the database is first created\n * @return {Promise<IDBDatabase>}\n */\nexport const openDB = (name, initDB) => promise.create((resolve, reject) => {\n const request = indexedDB.open(name)\n /**\n * @param {any} event\n */\n request.onupgradeneeded = event => initDB(event.target.result)\n /**\n * @param {any} event\n */\n request.onerror = event => reject(error.create(event.target.error))\n request.onblocked = () => location.reload()\n /**\n * @param {any} event\n */\n request.onsuccess = event => {\n /**\n * @type {IDBDatabase}\n */\n const db = event.target.result\n db.onversionchange = () => { db.close() }\n if (typeof addEventListener !== 'undefined') {\n addEventListener('unload', () => db.close())\n }\n resolve(db)\n }\n})\n\n/**\n * @param {string} name\n */\nexport const deleteDB = name => rtop(indexedDB.deleteDatabase(name))\n\n/**\n * @param {IDBDatabase} db\n * @param {Array<Array<string>|Array<string|IDBObjectStoreParameters|undefined>>} definitions\n */\nexport const createStores = (db, definitions) => definitions.forEach(d =>\n // @ts-ignore\n db.createObjectStore.apply(db, d)\n)\n\n/**\n * @param {IDBDatabase} db\n * @param {Array<string>} stores\n * @param {\"readwrite\"|\"readonly\"} [access]\n * @return {Array<IDBObjectStore>}\n */\nexport const transact = (db, stores, access = 'readwrite') => {\n const transaction = db.transaction(stores, access)\n return stores.map(store => getStore(transaction, store))\n}\n\n/**\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange} [range]\n * @return {Promise<number>}\n */\nexport const count = (store, range) =>\n rtop(store.count(range))\n\n/**\n * @param {IDBObjectStore} store\n * @param {String | number | ArrayBuffer | Date | Array<any> } key\n * @return {Promise<String | number | ArrayBuffer | Date | Array<any>>}\n */\nexport const get = (store, key) =>\n rtop(store.get(key))\n\n/**\n * @param {IDBObjectStore} store\n * @param {String | number | ArrayBuffer | Date | IDBKeyRange | Array<any> } key\n */\nexport const del = (store, key) =>\n rtop(store.delete(key))\n\n/**\n * @param {IDBObjectStore} store\n * @param {String | number | ArrayBuffer | Date | boolean} item\n * @param {String | number | ArrayBuffer | Date | Array<any>} [key]\n */\nexport const put = (store, item, key) =>\n rtop(store.put(item, key))\n\n/**\n * @param {IDBObjectStore} store\n * @param {String | number | ArrayBuffer | Date | boolean} item\n * @param {String | number | ArrayBuffer | Date | Array<any>} key\n * @return {Promise<any>}\n */\nexport const add = (store, item, key) =>\n rtop(store.add(item, key))\n\n/**\n * @param {IDBObjectStore} store\n * @param {String | number | ArrayBuffer | Date} item\n * @return {Promise<number>} Returns the generated key\n */\nexport const addAutoKey = (store, item) =>\n rtop(store.add(item))\n\n/**\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange} [range]\n * @param {number} [limit]\n * @return {Promise<Array<any>>}\n */\nexport const getAll = (store, range, limit) =>\n rtop(store.getAll(range, limit))\n\n/**\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange} [range]\n * @param {number} [limit]\n * @return {Promise<Array<any>>}\n */\nexport const getAllKeys = (store, range, limit) =>\n rtop(store.getAllKeys(range, limit))\n\n/**\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange|null} query\n * @param {'next'|'prev'|'nextunique'|'prevunique'} direction\n * @return {Promise<any>}\n */\nexport const queryFirst = (store, query, direction) => {\n /**\n * @type {any}\n */\n let first = null\n return iterateKeys(store, query, key => {\n first = key\n return false\n }, direction).then(() => first)\n}\n\n/**\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange?} [range]\n * @return {Promise<any>}\n */\nexport const getLastKey = (store, range = null) => queryFirst(store, range, 'prev')\n\n/**\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange?} [range]\n * @return {Promise<any>}\n */\nexport const getFirstKey = (store, range = null) => queryFirst(store, range, 'next')\n\n/**\n * @typedef KeyValuePair\n * @type {Object}\n * @property {any} k key\n * @property {any} v Value\n */\n\n/**\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange} [range]\n * @param {number} [limit]\n * @return {Promise<Array<KeyValuePair>>}\n */\nexport const getAllKeysValues = (store, range, limit) =>\n // @ts-ignore\n promise.all([getAllKeys(store, range, limit), getAll(store, range, limit)]).then(([ks, vs]) => ks.map((k, i) => ({ k, v: vs[i] })))\n\n/**\n * @param {any} request\n * @param {function(IDBCursorWithValue):void|boolean|Promise<void|boolean>} f\n * @return {Promise<void>}\n */\nconst iterateOnRequest = (request, f) => promise.create((resolve, reject) => {\n request.onerror = reject\n /**\n * @param {any} event\n */\n request.onsuccess = async event => {\n const cursor = event.target.result\n if (cursor === null || (await f(cursor)) === false) {\n return resolve()\n }\n cursor.continue()\n }\n})\n\n/**\n * Iterate on keys and values\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange|null} keyrange\n * @param {function(any,any):void|boolean|Promise<void|boolean>} f Callback that receives (value, key)\n * @param {'next'|'prev'|'nextunique'|'prevunique'} direction\n */\nexport const iterate = (store, keyrange, f, direction = 'next') =>\n iterateOnRequest(store.openCursor(keyrange, direction), cursor => f(cursor.value, cursor.key))\n\n/**\n * Iterate on the keys (no values)\n *\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange|null} keyrange\n * @param {function(any):void|boolean|Promise<void|boolean>} f callback that receives the key\n * @param {'next'|'prev'|'nextunique'|'prevunique'} direction\n */\nexport const iterateKeys = (store, keyrange, f, direction = 'next') =>\n iterateOnRequest(store.openKeyCursor(keyrange, direction), cursor => f(cursor.key))\n\n/**\n * Open store from transaction\n * @param {IDBTransaction} t\n * @param {String} store\n * @returns {IDBObjectStore}\n */\nexport const getStore = (t, store) => t.objectStore(store)\n\n/**\n * @param {any} lower\n * @param {any} upper\n * @param {boolean} lowerOpen\n * @param {boolean} upperOpen\n */\nexport const createIDBKeyRangeBound = (lower, upper, lowerOpen, upperOpen) => IDBKeyRange.bound(lower, upper, lowerOpen, upperOpen)\n\n/**\n * @param {any} upper\n * @param {boolean} upperOpen\n */\nexport const createIDBKeyRangeUpperBound = (upper, upperOpen) => IDBKeyRange.upperBound(upper, upperOpen)\n\n/**\n * @param {any} lower\n * @param {boolean} lowerOpen\n */\nexport const createIDBKeyRangeLowerBound = (lower, lowerOpen) => IDBKeyRange.lowerBound(lower, lowerOpen)\n\n/* c8 ignore stop */\n"],"names":["promise.create","error.create","promise.all"],"mappings":"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"}