Skip to content

Commit 3c9718d

Browse files
committed
sign: dont convert input buffers to utf8 strings
binary payloads would get mangled due to the unnecessary string conversion, which should go the other way around Fixes: #50
1 parent 88e4d47 commit 3c9718d

2 files changed

Lines changed: 22 additions & 3 deletions

File tree

lib/sign-stream.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ var base64url = require('base64url');
33
var DataStream = require('./data-stream');
44
var jwa = require('jwa');
55
var Stream = require('stream');
6-
var toString = require('./tostring');
6+
var toBuffer = require('./to-buffer');
77
var util = require('util');
88

99
function jwsSecuredInput(header, payload, encoding) {
1010
encoding = encoding || 'utf8';
11-
var encodedHeader = base64url(toString(header), 'binary');
12-
var encodedPayload = base64url(toString(payload), encoding);
11+
var encodedHeader = base64url(toBuffer(header));
12+
var encodedPayload = base64url(toBuffer(payload, encoding));
1313
return util.format('%s.%s', encodedHeader, encodedPayload);
1414
}
1515

lib/to-buffer.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
'use strict';
2+
3+
var Buffer = require('safe-buffer').Buffer;
4+
5+
module.exports = function toBuffer(val, encoding) {
6+
if (Buffer.isBuffer(val)) {
7+
return val;
8+
}
9+
if (typeof val === 'string') {
10+
return Buffer.from(val, encoding || 'utf8');
11+
}
12+
if (typeof val === 'number') {
13+
// This won't work for very large or very small numbers, but is consistent
14+
// with previous behaviour at least
15+
val = val.toString();
16+
return Buffer.from(val, 'utf8');
17+
}
18+
return Buffer.from(JSON.stringify(val), 'utf8');
19+
};

0 commit comments

Comments
 (0)