|
2 | 2 | (async()=>{ |
3 | 3 |
|
4 | 4 |
|
5 | | - var crypto = require('node:crypto'); |
| 5 | + var crypto = require('node:crypto'); |
6 | 6 |
|
7 | | - var {key,cert} = setup(); |
| 7 | + var {key,cert} = setup(); |
8 | 8 |
|
9 | | - var secret = 'my-super-secret-token'; |
10 | | - var blob = new Blob([secret]); |
11 | 9 |
|
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); |
15 | 17 |
|
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); |
19 | 22 |
|
20 | 23 |
|
| 24 | + //: |
| 25 | + |
| 26 | + |
| 27 | + async function encrypt(blob,cert){ |
21 | 28 | // 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); |
41 | 30 |
|
42 | 31 | var key = cert; |
43 | 32 | var padding = crypto.constants.RSA_PKCS1_OAEP_PADDING; |
44 | 33 | var oaepHash = 'sha256'; |
| 34 | + |
45 | 35 | var params = {key,padding,oaepHash}; |
46 | 36 | const encrypted = crypto.publicEncrypt(params,buffer); |
47 | 37 |
|
|
50 | 40 |
|
51 | 41 | }//encrypt |
52 | 42 |
|
53 | | - // Decrypt with private key |
54 | | - async function decrypt(source,key){ |
55 | 43 |
|
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); |
72 | 47 |
|
73 | 48 | var key = key |
74 | 49 | var padding = crypto.constants.RSA_PKCS1_OAEP_PADDING; |
75 | 50 | var oaepHash = 'sha256'; |
| 51 | + |
76 | 52 | var params = {key,padding,oaepHash}; |
77 | 53 | var decrypted = crypto.privateDecrypt(params,buffer); |
78 | 54 |
|
|
84 | 60 |
|
85 | 61 |
|
86 | 62 |
|
| 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 |
87 | 74 |
|
88 | | - function datatype(v){return v.toString().slice(8,-1).toLowerCase()} |
89 | 75 |
|
90 | 76 | async function blob_b64(blob){ |
91 | 77 |
|
|
97 | 83 | }//blob_b64 |
98 | 84 |
|
99 | 85 |
|
| 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 | + |
100 | 115 | function setup(){ |
101 | 116 |
|
102 | 117 | var key = ` |
|
0 commit comments