Skip to content

Commit 2dc07f9

Browse files
save file
1 parent 7910542 commit 2dc07f9

1 file changed

Lines changed: 63 additions & 48 deletions

File tree

  • blog/26-04-26/x509-certificates-in-js---encrypt-decrypt-data/ex

blog/26-04-26/x509-certificates-in-js---encrypt-decrypt-data/ex/x509-nodejs.js

Lines changed: 63 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,46 +2,36 @@
22
(async()=>{
33

44

5-
var crypto = require('node:crypto');
5+
var crypto = require('node:crypto');
66

7-
var {key,cert} = setup();
7+
var {key,cert} = setup();
88

9-
var secret = 'my-super-secret-token';
10-
var blob = new Blob([secret]);
119

12-
var blob = await encrypt(blob,cert);
13-
var b64 = await blob_b64(blob);
14-
console.log('Encrypted (base64):',b64);
10+
var secret = 'my-super-secret-token';
11+
var blob = new Blob([secret]);
12+
13+
14+
var encrypted_blob = await encrypt(blob,cert);
15+
var b64 = await blob_b64(blob);
16+
console.log('Encrypted :',b64);
1517

16-
var recovered = await decrypt(blob,key);
17-
var txt = await recovered.text();
18-
console.log('Recovered:',txt);
18+
var encrypted_blob = b64_blob(b64);
19+
var blob = await decrypt(blob,key);
20+
var txt = await blob.text();
21+
console.log('Decrypted :',txt);
1922

2023

24+
//:
25+
26+
27+
async function encrypt(blob,cert){
2128
// Encrypt with public key from X.509 cert
22-
async function encrypt(source,cert){
23-
24-
var buffer;
25-
26-
var type = datatype(source);
27-
switch(type){
28-
29-
case 'string' : buffer = Buffer.from(source,'utf8');
30-
break;
31-
32-
case 'blob' : const arrayBuffer = await source.arrayBuffer();
33-
buffer = Buffer.from(arrayBuffer);
34-
break;
35-
36-
case 'uint8array' : buffer = source;
37-
break;
38-
39-
}//switch
40-
29+
var buffer = await blob_buffer(blob);
4130

4231
var key = cert;
4332
var padding = crypto.constants.RSA_PKCS1_OAEP_PADDING;
4433
var oaepHash = 'sha256';
34+
4535
var params = {key,padding,oaepHash};
4636
const encrypted = crypto.publicEncrypt(params,buffer);
4737

@@ -50,29 +40,15 @@
5040

5141
}//encrypt
5242

53-
// Decrypt with private key
54-
async function decrypt(source,key){
5543

56-
var buffer;
57-
58-
var type = datatype(source);
59-
switch(type){
60-
61-
case 'string' : buffer = Buffer.from(base64,'base64');
62-
break;
63-
64-
case 'blob' : const arrayBuffer = await source.arrayBuffer();
65-
buffer = Buffer.from(arrayBuffer);
66-
break;
67-
68-
case 'uint8array' : buffer = source;
69-
break;
70-
71-
}//switch
44+
async function decrypt(blob,key){
45+
// Decrypt with private key
46+
var buffer = await blob_buffer(blob);
7247

7348
var key = key
7449
var padding = crypto.constants.RSA_PKCS1_OAEP_PADDING;
7550
var oaepHash = 'sha256';
51+
7652
var params = {key,padding,oaepHash};
7753
var decrypted = crypto.privateDecrypt(params,buffer);
7854

@@ -84,8 +60,18 @@
8460

8561

8662

63+
//:
64+
65+
66+
67+
async function blob_buf(blob){
68+
69+
var arrayBuffer = await blob.arrayBuffer();
70+
var buffer = Buffer.from(arrayBuffer);
71+
return buffer;
72+
73+
}//blob_buf
8774

88-
function datatype(v){return v.toString().slice(8,-1).toLowerCase()}
8975

9076
async function blob_b64(blob){
9177

@@ -97,6 +83,35 @@
9783
}//blob_b64
9884

9985

86+
87+
88+
89+
async function blob_b64(blob){
90+
91+
var buf = await blob.arrayBuffer();
92+
var bytes = new Uint8Array(buf);
93+
var bin = bytes.reduce((acc,byte)=>acc+=String.fromCharCode(byte),'');
94+
var b64 = btoa(bin);
95+
return b64;
96+
97+
}//blob_b64
98+
99+
100+
function b64_blob(b64){
101+
102+
var bin = atob(b64);
103+
var bytes = [...bin].map(c=>c.charCodeAt(0));
104+
var buf = new Uint8Array(bytes);
105+
var blob = new Blob([buf]);
106+
return blob;
107+
108+
}//b64_blob
109+
110+
111+
112+
//:
113+
114+
100115
function setup(){
101116

102117
var key = `

0 commit comments

Comments
 (0)