-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathindex.js
86 lines (73 loc) · 2.22 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import {
generateKeyPair,
FlattenedSign,
flattenedVerify,
exportSPKI,
importSPKI,
exportPKCS8,
importPKCS8
} from 'jose'
const algos = ['PS256', 'RS256']
const signverify = async (algo) => {
let keyPair,
publicKey,
privateKey,
keys,
jws
try {
keyPair = await generateKeyPair(algo);
} catch (error) {
console.log('Error creating key-pairs for algo %s', algo, error);
}
try {
publicKey = await exportSPKI(keyPair.publicKey);
console.log(algo, publicKey);
} catch (error) {
console.log('Error exporting publicKey for algo %s', algo, error);
}
try {
privateKey = await exportPKCS8(keyPair.privateKey);
console.log(algo, privateKey);
} catch (error) {
console.log('Error exporting privateKey for algo %s', algo, error);
}
const payload = 'detached payload example'
try {
keys = {
publicKey: await importSPKI(publicKey, algo),
privateKey: await importPKCS8(privateKey, algo)
}
} catch (error) {
console.log('Error importing Keys for algo : %s', algo, error);
}
try {
jws = await new FlattenedSign(new TextEncoder().encode(payload))
.setProtectedHeader({ alg: algo, b64: false, crit: ['b64'] })
.sign(keys.privateKey)
console.log('jws:', jws)
} catch (error) {
console.log('Error signing privateKey for algo %s', algo, error);
}
let result = {}
try {
result.unencoded = await flattenedVerify({ ...jws, payload: payload }, keys.publicKey)
console.log('Cleartext (unencoded) for algo %s', algo, result.unencoded)
} catch (error) {
console.log('Error flattenedVerify (unencoded) for algo %s', algo, error.code)
}
try {
result.encoded = await flattenedVerify({ ...jws, payload: new TextEncoder().encode(payload) }, keys.publicKey)
console.log('Cleartext (encoded) for algo %s', algo, result.encoded)
} catch (error) {
console.log('Error flattenedVerify (encoded) for algo %s', algo, error.code)
}
return result
}
algos.forEach(algo => {
console.log('Call signverify for algo %s', algo)
signverify(algo)
.then(result => console.log('After signverify for algo %s', algo, result))
.catch(error => {
console.log('Error after signverify for algo %s', algo, error)
})
})