yubico
Version:
Node library for validating Yubico One Time Passwords (OTPs) based on the validation protocol version 2.0.
82 lines (64 loc) • 3.25 kB
JavaScript
var assert = require('assert');
var Yubico = require('../lib/yubico').Yubico;
var OTP = require('../lib/otp').OTP;
exports['test otp class'] = function(beforeExit) {
var otp = new OTP('vvegvftndfilcrfhrbggkfrbbijegfbgfgttjbtdtcnt');
assert.equal(otp.get_otp(), 'vvegvftndfilcrfhrbggkfrbbijegfbgfgttjbtdtcnt');
assert.equal(otp.get_device_id(), 'vvegvftndfil');
};
exports['test _parse_parameters_from_response'] = function(beforeExit) {
var response = 'h=ckbn7gh0C/qsTciVqcxpQ8yOqWY=\n' +
't=2010-12-30T14:30:12Z0264\n' +
'otp=vvegefendfulhrrihgvibljnnnbikjhnbrtfjlkltvvg\n' +
'nonce=UlVyeUFvU1lVM3FLT0tIeHczWUJpN0\n' +
'sl=75\n' +
'timestamp=10222212\n' +
'sessioncounter=1563\n' +
'sessionuse=3\n' +
'status=OK\n';
var signature = 'ckbn7gh0C/qsTciVqcxpQ8yOqWY=';
var query_string = 't=2010-12-30T14:30:12Z0264&otp=vvegefendfulhrrihgvibljnnnbikjhnbrtfjlkltvvg&nonce=UlVyeUFvU1lVM3FLT0tIeHczWUJpN0&sl=75×tamp=10222212&sessioncounter=1563&sessionuse=3&status=OK';
var yubico = new Yubico('1234');
var result = yubico._parse_parameters_from_response(response);
assert.equal(signature, result[0]);
assert.equal(query_string, result[1]);
};
exports['test _query_string_to_object'] = function(beforeExit) {
var query_string = 't=2010-12-30T14:30:12Z0264&otp=vvegefendfulhrrihgvibljnnnbikjhnbrtfjlkltvvg&nonce=UlVyeUFvU1lVM3FLT0tIeHczWUJpN0&sl=75×tamp=10222212&sessioncounter=1563&sessionuse=3&status=OK';
var obj = {
't': '2010-12-30T14:30:12Z0264',
'otp': 'vvegefendfulhrrihgvibljnnnbikjhnbrtfjlkltvvg',
'nonce': 'UlVyeUFvU1lVM3FLT0tIeHczWUJpN0',
'sl': '75',
'timestamp': '10222212',
'sessioncounter': '1563',
'sessionuse': '3',
'status': 'OK'
};
var yubico = new Yubico('1234');
var result = yubico._query_string_to_object(query_string);
assert.deepEqual(obj, result);
};
exports['test _generate_message_signature'] = function(beforeExit) {
var query_string = 'foo=bar&bar=baz';
var key = 'key1234';
var signature = 'NDzpNpiUsBXWYtLS+F+BmATz+w4=';
var yubico = new Yubico('1234');
var result = yubico._generate_message_signature(query_string, key);
assert.equal(signature, result);
};
exports['test _generate_query_string'] = function(beforeExit) {
var otp = 'vvegefendfulhrrihgvibljnnnbikjhnbrtfjlkltvvg';
var nonce = 'UlVyeUFvU1lVM3FLT0tIeHczWUJpN0';
var timestamp = true;
var sl = 50;
var timeout = 15;
var query_string = 'id=1234&otp=vvegefendfulhrrihgvibljnnnbikjhnbrtfjlkltvvg&nonce=UlVyeUFvU1lVM3FLT0tIeHczWUJpN0×tamp=1&sl=50&timeout=15';
var yubico1 = new Yubico('1234');
var yubico2 = new Yubico('1234', 'key1234');
var signature = yubico2._generate_message_signature(query_string, yubico2._key);
var result1 = yubico1._generate_query_string(otp, nonce, timestamp, sl, timeout);
var result2 = yubico2._generate_query_string(otp, nonce, timestamp, sl, timeout);
assert.equal(query_string, result1);
assert.equal(query_string + '&h=' + signature, result2);
};