test.js 2.05 KB
"use strict";

// ./test.js
var assert = require("assert")
  , Keygrip = require("./")
  , keylist, keys, hash, index

describe('keygrip(keys)', function () {
  it('should throw if keys are missing or empty', function () {
    // keygrip takes an array of keys. If missing or empty, it will throw.
    assert.throws(function() {
      keys = new Keygrip(/* empty list */);
    }, /must be provided/);
  })
})

describe('keygrip([key])', function () {
  it('should sign a string', function () {
    // Randomly generated key - don't use this for something real. Don't be that person.
    keys = new Keygrip(['06ae66fdc6c2faf5a401b70e0bf885cb']);

    // .sign returns the hash for the first key
    // all hashes are SHA1 HMACs in url-safe base64
    hash = keys.sign("bieberschnitzel")
    assert.ok(/^[\w\-]{27}$/.test(hash))
  })
})

describe('keygrip([keys...])', function () {
  it('should sign a string', function () {
    // but we're going to use our list.
    // (note that the 'new' operator is optional)
    keylist = ["SEKRIT3", "SEKRIT2", "SEKRIT1"] // keylist will be modified in place, so don't reuse
    keys = Keygrip(keylist)
    testKeygripInstance(keys);
  })

  it('should sign a string with a different algorithm and encoding', function () {
    // now pass in a different hmac algorithm and encoding
    keylist = ["Newest", "AnotherKey", "Oldest"]
    keys = Keygrip(keylist, "sha256", "hex")
    testKeygripInstance(keys);
  })
})

function testKeygripInstance(keys) {
	hash = keys.sign("bieberschnitzel")

	// .index returns the index of the first matching key
	index = keys.index("bieberschnitzel", hash)
	assert.equal(index, 0)

	// .verify returns the a boolean indicating a matched key
	var matched = keys.verify("bieberschnitzel", hash)
	assert.ok(matched)

	index = keys.index("bieberschnitzel", "o_O")
	assert.equal(index, -1)

	// rotate a new key in, and an old key out
	keylist.unshift("SEKRIT4")
	keylist.pop()

	// if index > 0, it's time to re-sign
	index = keys.index("bieberschnitzel", hash)
	assert.equal(index, 1)
	hash = keys.sign("bieberschnitzel")
}