|
|
- /**
- * 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;
- };
|