1 |
|
2 |
|
3 |
|
4 |
|
5 | import * as webcrypto from 'lib0/webcrypto'
|
6 | export { exportKeyJwk, exportKeyRaw } from './common.js'
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 | const defaultUsages = ['sign', 'verify']
|
16 |
|
17 | const defaultSignAlgorithm = {
|
18 | name: 'ECDSA',
|
19 | hash: 'SHA-384'
|
20 | }
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | export const sign = (key, data) =>
|
32 | webcrypto.subtle.sign(
|
33 | defaultSignAlgorithm,
|
34 | key,
|
35 | data
|
36 | ).then(signature => new Uint8Array(signature))
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 | export const verify = (key, signature, data) =>
|
49 | webcrypto.subtle.verify(
|
50 | defaultSignAlgorithm,
|
51 | key,
|
52 | signature,
|
53 | data
|
54 | )
|
55 |
|
56 | const defaultKeyAlgorithm = {
|
57 | name: 'ECDSA',
|
58 | namedCurve: 'P-384'
|
59 | }
|
60 |
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 | export const generateKeyPair = ({ extractable = false, usages = defaultUsages } = {}) =>
|
68 | webcrypto.subtle.generateKey(
|
69 | defaultKeyAlgorithm,
|
70 | extractable,
|
71 | usages
|
72 | )
|
73 |
|
74 |
|
75 |
|
76 |
|
77 |
|
78 |
|
79 |
|
80 | export const importKeyJwk = (jwk, { extractable = false, usages } = {}) => {
|
81 | if (usages == null) {
|
82 |
|
83 | usages = jwk.key_ops || defaultUsages
|
84 | }
|
85 | return webcrypto.subtle.importKey('jwk', jwk, defaultKeyAlgorithm, extractable, (usages))
|
86 | }
|
87 |
|
88 |
|
89 |
|
90 |
|
91 |
|
92 |
|
93 |
|
94 |
|
95 |
|
96 | export const importKeyRaw = (raw, { extractable = false, usages = defaultUsages } = {}) =>
|
97 | webcrypto.subtle.importKey('raw', raw, defaultKeyAlgorithm, extractable, usages)
|