Skip to content

Commit

Permalink
#15 need to support Buffers as arguments to signer
Browse files Browse the repository at this point in the history
Reviewed by: Cody Peter Mello <[email protected]>
  • Loading branch information
Alex Wilson committed Apr 20, 2018
1 parent 3f35614 commit 0d945d3
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 2 deletions.
8 changes: 7 additions & 1 deletion lib/keypair.js
Original file line number Diff line number Diff line change
Expand Up @@ -129,10 +129,16 @@ SDCKeyPair.prototype.createSign = function (opts) {
var self = this;
var cache = this.skp_kr.getSignatureCache();
function sign(data, cb) {
mod_assert.string(data, 'data');
if (Buffer.isBuffer(data)) {
mod_assert.buffer(data, 'data');
} else {
mod_assert.string(data, 'data');
}
mod_assert.func(cb, 'callback');

var ck = { key: key, data: data };
if (Buffer.isBuffer(data))
ck.data = data.toString('base64');
if (cache.get(ck, cb))
return;
cache.registerPending(ck);
Expand Down
8 changes: 7 additions & 1 deletion lib/kr-agent.js
Original file line number Diff line number Diff line change
Expand Up @@ -125,10 +125,16 @@ AgentKeyPair.prototype.createSign = function (opts) {
var cache = this.skp_kr.getSignatureCache();

function sign(data, cb) {
mod_assert.string(data, 'data');
if (Buffer.isBuffer(data)) {
mod_assert.buffer(data, 'data');
} else {
mod_assert.string(data, 'data');
}
mod_assert.func(cb, 'callback');

var ck = { key: pub, data: data };
if (Buffer.isBuffer(data))
ck.data = data.toString('base64');
if (cache.get(ck, cb))
return;
cache.registerPending(ck);
Expand Down
29 changes: 29 additions & 0 deletions test/agent-keys.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ var ID_RSA_FP = 'SHA256:29GY+6bxcBkcNNUzTnEcTdTv1W3d3PN/OxyplcYSoX4';
var ID_RSA_MD5 = 'fa:56:a1:6b:cc:04:97:fe:e2:98:54:c4:2e:0d:26:c6';
var ID_DSA_FP = 'SHA256:WI2QyT/UuJ4LaPylGynx244f6k+xqVHYOyxg1cfnL0I';
var ID_DSA_MD5 = 'a6:e6:68:d3:28:2b:0a:a0:12:54:da:c4:c0:22:8d:ba';
var ID_ECDSA_FP = 'SHA256:ezilZp/ZHJuMF8i9jyMGuxRdFCu4rzGYLQmfSOhrolE';
var ID_ECDSA_MD5 = '00:74:32:ae:0a:24:3c:7a:e7:07:b8:ee:91:c4:c7:27';

var SIG_RSA_SHA1 = 'parChQDdkj8wFY75IUW/W7KN9q5FFTPYfcAf+W7PmN8yxnRJB884NHYNT' +
'hl/TjZB2s0vt+kkfX3nldi54heTKbDKFwCOoDmVWQ2oE2ZrJPPFiUHReUAIRvwD0V/q7' +
Expand Down Expand Up @@ -118,6 +120,33 @@ test('agentsigner dsa', function (t) {
});
});

test('agentsigner ecdsa + buffer', function (t) {
t.ok(agent);
agent.addKey(path.join(testDir, 'id_ecdsa'), function (err) {
t.error(err);

var sign = auth.sshAgentSigner({
keyId: ID_ECDSA_FP,
user: 'foo'
});
t.ok(sign);
var buf = crypto.randomBytes(32);
sign(buf, function (err, sigData) {
t.error(err);
t.strictEqual(sigData.keyId, ID_ECDSA_MD5);
t.strictEqual(sigData.algorithm, 'ecdsa-sha256');
t.strictEqual(sigData.user, 'foo');

var v = crypto.createVerify('sha256');
v.update(buf);
var keyData = fs.readFileSync(path.join(testDir, 'id_ecdsa.pem'));
t.ok(v.verify(keyData, sigData.signature, 'base64'));

t.end();
});
});
});

test('clisigner with only agent', function (t) {
delete (process.env['HOME']);
delete (process.env['USERPROFILE']);
Expand Down
5 changes: 5 additions & 0 deletions test/id_ecdsa
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEILqER39h6YL9+r7hX1GMrcNIQSl0W+Vx2oSl0ATdYIzfoAoGCCqGSM49
AwEHoUQDQgAEUj7spG/UFi/olOKP0qlaBnbb2u3In4h96cMiVNHBuPzk3Ts7KdXD
c85fUPoTnN47zHc7dpQJ7c1YclAx/RA2AA==
-----END EC PRIVATE KEY-----
4 changes: 4 additions & 0 deletions test/id_ecdsa.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUj7spG/UFi/olOKP0qlaBnbb2u3I
n4h96cMiVNHBuPzk3Ts7KdXDc85fUPoTnN47zHc7dpQJ7c1YclAx/RA2AA==
-----END PUBLIC KEY-----

0 comments on commit 0d945d3

Please sign in to comment.