You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							58 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							58 lines
						
					
					
						
							1.6 KiB
						
					
					
				/**
 | 
						|
 * 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;
 | 
						|
};
 |