Skip to content

Commit be5b297

Browse files
committed
Remove urlsafe-base64 dependency
Use built-in methods to decode and encode base64. Fixes #68.
1 parent d97a7a8 commit be5b297

9 files changed

+33
-51
lines changed

nodejs/README.md

+2-3
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,10 @@ content-encoding](https://tools.ietf.org/html/rfc8188)
88
```js
99
var ece = require('http_ece');
1010
var crypto = require('crypto')
11-
var base64 = require('base64url');
1211

1312
var parameters = {
14-
key: base64.encode(crypto.randomBytes(16)),
15-
salt: base64.encode(crypto.randomBytes(16))
13+
key: crypto.randomBytes(16).toString('base64url'),
14+
salt: crypto.randomBytes(16).toString('base64url')
1615
};
1716
var encrypted = ece.encrypt(data, parameters);
1817

nodejs/decrypt-dh.js

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
'use strict';
22

3-
var base64 = require('urlsafe-base64');
43
var crypto = require('crypto');
54
var ece = require('./ece.js');
65

@@ -16,8 +15,8 @@ var receiver = crypto.createECDH('prime256v1');
1615
// 2. it barfs when you try to access the public key, even after you set it
1716
// This hack squelches the complaints at the cost of a few wasted cycles
1817
receiver.generateKeys();
19-
receiver.setPublicKey(base64.decode(process.argv[4]));
20-
receiver.setPrivateKey(base64.decode(process.argv[3]));
18+
receiver.setPublicKey(Buffer.from(process.argv[4], 'base64url'));
19+
receiver.setPrivateKey(Buffer.from(process.argv[3], 'base64url'));
2120
var keymap = {};
2221

2322
var params = {
@@ -35,7 +34,7 @@ if (process.argv.length > 7) {
3534
keymap[params.keyid] = receiver;
3635

3736
console.log("Params: " + JSON.stringify(params, null, 2));
38-
var result = ece.decrypt(base64.decode(process.argv[5]), params);
37+
var result = ece.decrypt(Buffer.from(process.argv[5], 'base64url'), params);
3938

40-
console.log(base64.encode(result));
39+
console.log(result.toString('base64url'));
4140
console.log(result.toString('utf-8'));

nodejs/decrypt.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
'use strict';
22

3-
var base64 = require('urlsafe-base64');
43
var crypto = require('crypto');
54
var ece = require('./ece.js');
65

@@ -23,7 +22,7 @@ if (process.argv.length > 4) {
2322
}
2423

2524
console.log("Params: " + JSON.stringify(params, null, 2));
26-
var result = ece.decrypt(base64.decode(process.argv[3]), params);
25+
var result = ece.decrypt(Buffer.from(process.argv[3], 'base64url'), params);
2726

28-
console.log(base64.encode(result));
27+
console.log(result.toString('base64url'));
2928
console.log(result.toString('utf-8'));

nodejs/ece.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616

1717
var crypto = require('crypto');
18-
var base64 = require('urlsafe-base64');
1918

2019
var AES_GCM = 'aes-128-gcm';
2120
var PAD_SIZE = { 'aes128gcm': 1, 'aesgcm': 2 };
@@ -29,7 +28,7 @@ var MODE_DECRYPT = 'decrypt';
2928
var keylog;
3029
if (process.env.ECE_KEYLOG === '1') {
3130
keylog = function(m, k) {
32-
console.warn(m + ' [' + k.length + ']: ' + base64.encode(k));
31+
console.warn(m + ' [' + k.length + ']: ' + k.toString('base64url'));
3332
return k;
3433
};
3534
} else {
@@ -39,7 +38,7 @@ if (process.env.ECE_KEYLOG === '1') {
3938
/* Optionally base64 decode something. */
4039
function decode(b) {
4140
if (typeof b === 'string') {
42-
return base64.decode(b);
41+
return Buffer.from(b, 'base64url');
4342
}
4443
return b;
4544
}

nodejs/encrypt-dh.js

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
'use strict';
22

3-
var base64 = require('urlsafe-base64');
43
var crypto = require('crypto');
54
var ece = require('./ece.js');
65

@@ -27,18 +26,18 @@ if (process.argv.length > 5) {
2726
var sender = crypto.createECDH('prime256v1');
2827
sender.generateKeys();
2928
if (params.senderPrivate) {
30-
sender.setPrivateKey(base64.decode(params.senderPrivate));
29+
sender.setPrivateKey(Buffer.from(params.senderPrivate, 'base64url'));
3130
} else {
32-
params.senderPrivate = base64.encode(sender.getPrivateKey());
31+
params.senderPrivate = sender.getPrivateKey().toString('base64url');
3332
}
3433
if (params.senderPublic) {
35-
sender.setPublicKey(base64.decode(params.senderPublic));
34+
sender.setPublicKey(Buffer.from(params.senderPublic, 'base64url'));
3635
} else {
37-
params.senderPublic = base64.encode(sender.getPublicKey());
36+
params.senderPublic = sender.getPublicKey().toString('base64url');
3837
}
3938
params.privateKey = sender;
4039

4140
console.log("Params: " + JSON.stringify(params, null, 2));
42-
var result = ece.encrypt(base64.decode(process.argv[4]), params);
41+
var result = ece.encrypt(Buffer.from(process.argv[4], 'base64url'), params);
4342

44-
console.log("Encrypted Message: " + base64.encode(result));
43+
console.log("Encrypted Message: " + result.toString('base64url'));

nodejs/encrypt.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
'use strict';
22

3-
var base64 = require('urlsafe-base64');
43
var crypto = require('crypto');
54
var ece = require('./ece.js');
65

@@ -23,6 +22,6 @@ if (process.argv.length > 4) {
2322
}
2423

2524
console.log("Params: " + JSON.stringify(params, null, 2));
26-
var result = ece.encrypt(base64.decode(process.argv[3]), params);
25+
var result = ece.encrypt(Buffer.from(process.argv[3], 'base64url'), params);
2726

28-
console.log("Encrypted Message: " + base64.encode(result));
27+
console.log("Encrypted Message: " + result.toString('base64url'));

nodejs/package-lock.json

-8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nodejs/package.json

-3
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,5 @@
2323
},
2424
"engines": {
2525
"node": ">=16"
26-
},
27-
"dependencies": {
28-
"urlsafe-base64": "~1.0.0"
2926
}
3027
}

nodejs/test.js

+15-16
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
var crypto = require('crypto');
44
var ece = require('./ece.js');
5-
var base64 = require('urlsafe-base64');
65
var assert = require('assert');
76

87
function usage() {
@@ -57,11 +56,11 @@ function filterTests(fullList) {
5756

5857
function logbuf(msg, buf) {
5958
if (typeof buf === 'string') {
60-
buf = base64.decode(buf);
59+
buf = Buffer.from(buf, 'base64url');
6160
}
6261
log(msg + ': [' + buf.length + ']');
6362
for (var i = 0; i < buf.length; i += 48) {
64-
log(' ' + base64.encode(buf.slice(i, i + 48)));
63+
log(' ' + buf.slice(i, i + 48).toString('base64url'));
6564
}
6665
}
6766

@@ -71,7 +70,7 @@ function reallySaveDump(data){
7170
var r = {};
7271
Object.keys(d).forEach(function(k) {
7372
if (Buffer.isBuffer(d[k])) {
74-
r[k] = base64.encode(d[k]);
73+
r[k] = d[k].toString('base64url');
7574
} else if (d[k] instanceof Object) {
7675
r[k] = dumpFix(d[k]);
7776
} else {
@@ -306,12 +305,12 @@ function useDH(version) {
306305
// keyData is used for cross library verification dumps
307306
var keyData = {
308307
sender: {
309-
private: base64.encode(ephemeralKey.getPrivateKey()),
310-
public: base64.encode(ephemeralKey.getPublicKey())
308+
private: ephemeralKey.getPrivateKey().toString('base64url'),
309+
public: ephemeralKey.getPublicKey().toString('base64url')
311310
},
312311
receiver: {
313-
private: base64.encode(staticKey.getPrivateKey()),
314-
public: base64.encode(staticKey.getPublicKey())
312+
private: staticKey.getPrivateKey().toString('base64url'),
313+
public: staticKey.getPublicKey().toString('base64url')
315314
}
316315
};
317316
encryptDecrypt(input, encryptParams, decryptParams, keyData);
@@ -323,30 +322,30 @@ function checkExamples(version) {
323322
{
324323
args: {
325324
version: 'aes128gcm',
326-
key: base64.decode('yqdlZ-tYemfogSmv7Ws5PQ'),
325+
key: Buffer.from('yqdlZ-tYemfogSmv7Ws5PQ', 'base64url'),
327326
keyid: '',
328-
salt: base64.decode('I1BsxtFttlv3u_Oo94xnmw'),
327+
salt: Buffer.from('I1BsxtFttlv3u_Oo94xnmw', 'base64url'),
329328
rs: 4096
330329
},
331330
plaintext: Buffer.from('I am the walrus'),
332-
ciphertext: base64.decode('I1BsxtFttlv3u_Oo94xnmwAAEAAA-NAV' +
331+
ciphertext: Buffer.from('I1BsxtFttlv3u_Oo94xnmwAAEAAA-NAV' +
333332
'ub2qFgBEuQKRapoZu-IxkIva3MEB1PD-' +
334-
'ly8Thjg'),
333+
'ly8Thjg', 'base64url'),
335334
},
336335
{
337336
args: {
338337
version: 'aes128gcm',
339-
key: base64.decode('BO3ZVPxUlnLORbVGMpbT1Q'),
338+
key: Buffer.from('BO3ZVPxUlnLORbVGMpbT1Q', 'base64url'),
340339
keyid: 'a1',
341-
salt: base64.decode('uNCkWiNYzKTnBN9ji3-qWA'),
340+
salt: Buffer.from('uNCkWiNYzKTnBN9ji3-qWA', 'base64url'),
342341
rs: 25,
343342
pad: 1
344343
},
345344
plaintext: Buffer.from('I am the walrus'),
346-
ciphertext: base64.decode('uNCkWiNYzKTnBN9ji3-qWAAAABkCYTHO' +
345+
ciphertext: Buffer.from('uNCkWiNYzKTnBN9ji3-qWAAAABkCYTHO' +
347346
'G8chz_gnvgOqdGYovxyjuqRyJFjEDyoF' +
348347
'1Fvkj6hQPdPHI51OEUKEpgz3SsLWIqS_' +
349-
'uA')
348+
'uA', 'base64url')
350349
}
351350
].filter(function(v) {
352351
return v.args.version === version;

0 commit comments

Comments
 (0)