50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
(function () {
 | 
						|
  'use strict';
 | 
						|
 | 
						|
  // getProofOfSecret(salt, secret, iter)
 | 
						|
  function getProofOfSecret(nodeObj) {
 | 
						|
    // TODO test correctness
 | 
						|
    console.info('TODO test correctness of getProofOfSecret');
 | 
						|
    var d = $q.defer();
 | 
						|
    var kdf = {
 | 
						|
      node: nodeObj.node
 | 
						|
    , type: nodeObj.type
 | 
						|
    , kdf: 'PBKDF2'
 | 
						|
    , algo: 'SHA-256'
 | 
						|
    };
 | 
						|
 | 
						|
    // generate a password-based 16-byte key
 | 
						|
    // note an optional message digest can be passed as the final parameter
 | 
						|
    if (nodeObj.salt) {
 | 
						|
      kdf.salt = Unibabel.bufferToBinaryString(Unibabel.hexToBuffer(nodeObj.salt));
 | 
						|
    } else {
 | 
						|
      // uses binary string
 | 
						|
      kdf.salt = forge.random.getBytesSync(32);
 | 
						|
    }
 | 
						|
    kdf.iter = nodeObj.iter || Math.floor(Math.random() * 1000) + 1000;
 | 
						|
    kdf.byteLen = nodeObj.byteLen || 16;
 | 
						|
 | 
						|
    console.log('kdf.salt', kdf.salt);
 | 
						|
 | 
						|
    // kdf.proof = forge.pkcs5.pbkdf2(nodeObj.secret, kdf.salt, kdf.iter, kdf.byteLen);
 | 
						|
 | 
						|
    // generate key asynchronously
 | 
						|
    // note an optional message digest can be passed before the callback
 | 
						|
    forge.pkcs5.pbkdf2(nodeObj.secret, kdf.salt, kdf.iter, kdf.byteLen, 'sha256', function(err, derivedKey) {
 | 
						|
      // do something w/derivedKey
 | 
						|
      if (err) {
 | 
						|
        d.reject(err);
 | 
						|
        return;
 | 
						|
      }
 | 
						|
 | 
						|
      kdf.salt = Unibabel.bufferToHex(Unibabel.binaryStringToBuffer(kdf.salt));
 | 
						|
      kdf.proof = Unibabel.bufferToHex(Unibabel.binaryStringToBuffer(derivedKey));
 | 
						|
      console.log('kdf', kdf);
 | 
						|
      d.resolve(kdf);
 | 
						|
    });
 | 
						|
 | 
						|
    return d.promise;
 | 
						|
  }
 | 
						|
 | 
						|
}());
 |