-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconvert.js
More file actions
89 lines (72 loc) · 2.36 KB
/
convert.js
File metadata and controls
89 lines (72 loc) · 2.36 KB
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
87
88
89
let WebCrypto;
if(typeof window != 'undefined' && typeof window.crypto != 'undefined'){
WebCrypto = window.crypto;
}
else{
let { Crypto } = require("@peculiar/webcrypto");
WebCrypto = new Crypto();
}
export class Convert {
constructor(){
}
stringToArrayBuffer(string,format){
if(typeof(format) == 'undefined'){
format='utf8';
}
let encryptedSecretBuffer = string;
let encryptedSecretBinaryString = Buffer.from(encryptedSecretBuffer, format).toString('binary');
let encryptedSecretArrayBuffer = new Uint8Array(encryptedSecretBinaryString.length)
for (var i = 0; i < encryptedSecretBinaryString.length; i++) {
encryptedSecretArrayBuffer[i] = encryptedSecretBinaryString.charCodeAt(i)
}
return encryptedSecretArrayBuffer;
}
bufferToArrayBuffer(buf) {
var ab = new ArrayBuffer(buf.length);
var view = new Uint8Array(ab);
for (var i = 0; i < buf.length; ++i) {
view[i] = buf[i];
}
return ab;
}
async importKey(alg,format,keyenc,key){
if(format == 'jwk'){
key = JSON.parse(Buffer.from(key,keyenc).toString('utf8'));
}
//else if(format == 'pkcs8'){
// key = Buffer.from(key,keyenc).toString('base64');
// }
else{
let keyBuf = Buffer.from(key,keyenc);
key = this.bufferToArrayBuffer(keyBuf);
}
let action;
if(alg == "RSA-OAEP" && format == 'pkcs8'){
action = ["decrypt"];
}
else if(alg == "RSA-OAEP" && format == 'spki'){
action = ["encrypt"];
}
else if(alg == "ECDSA" && format == 'jwk'){
action = key['key_ops'];
}
let keyConfig = { //these are the algorithm options
name: alg,
hash: {name: "SHA-512"}, //can be "SHA-1", "SHA-256", "SHA-384", or "SHA-512"
}
if(alg == "ECDSA"){
keyConfig['namedCurve'] = "P-521";
}
// console.log(key);
// console.log(key);
let importedKey = await WebCrypto.subtle.importKey(
format, //can be "jwk" (public or private), "spki" (public only), or "pkcs8" (private only)
key,
keyConfig,
true, //whether the key is extractable (i.e. can be used in exportKey)
action //"encrypt" or "wrapKey" for public key import or
//"decrypt" or "unwrapKey" for private key imports
);
return importedKey;
}
}