| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | /** * Javascript implementation of mask generation function MGF1. * * @author Stefan Siegl * @author Dave Longley * * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de> * Copyright (c) 2014 Digital Bazaar, Inc. */var forge = require('./forge');require('./util');forge.mgf = forge.mgf || {};var mgf1 = module.exports = forge.mgf.mgf1 = forge.mgf1 = forge.mgf1 || {};/** * Creates a MGF1 mask generation function object. * * @param md the message digest API to use (eg: forge.md.sha1.create()). * * @return a mask generation function object. */mgf1.create = function(md) {  var mgf = {    /**     * Generate mask of specified length.     *     * @param {String} seed The seed for mask generation.     * @param maskLen Number of bytes to generate.     * @return {String} The generated mask.     */    generate: function(seed, maskLen) {      /* 2. Let T be the empty octet string. */      var t = new forge.util.ByteBuffer();      /* 3. For counter from 0 to ceil(maskLen / hLen), do the following: */      var len = Math.ceil(maskLen / md.digestLength);      for(var i = 0; i < len; i++) {        /* a. Convert counter to an octet string C of length 4 octets */        var c = new forge.util.ByteBuffer();        c.putInt32(i);        /* b. Concatenate the hash of the seed mgfSeed and C to the octet         * string T: */        md.start();        md.update(seed + c.getBytes());        t.putBuffer(md.digest());      }      /* Output the leading maskLen octets of T as the octet string mask. */      t.truncate(t.length() - maskLen);      return t.getBytes();    }  };  return mgf;};
 |