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