code: function yubikey__genSignatureSync(params) {
      var buf = new Buffer(this.secretKey, 'base64').toString('binary');
      var hmac = crypto.createHmac('sha1', buf);
      return hmac.update(this._querify(params)).digest('base64');
    }
docs: /*
  From the Yubico documentation:
  
  The protocol uses HMAC-SHA-1 signatures. The HMAC key to use is the client
  API key.
  
  Generate the signature over the parameters in the message. Each message
  contains a set of key/value pairs, and the signature is always over the
  entire set (excluding the signature itself), and sorted in alphabetical
  order of the keys. More precisely, to generate a message signature do:
  
  1. Alphabetically sort the set of key/value pairs by key order.
  
  2. Construct a single line with each ordered key/value pair concatenated
  using '&', and each key and value contatenated with '='. Do not add any
  linebreaks. Do not add whitespace. For example: a=2&b=1&c=3.
  
  3. Apply the HMAC-SHA-1 algorithm on the line as an octet string using the
  API key as key.
  
  4. Base 64 encode the resulting value according to RFC 4648, for example,
  t2ZMtKeValdA+H0jVpj3LIichn4=.
  
  5. Append the value under key 'h' to the message.