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.
		
		
		
		
		
			
		
			
				
					
					
						
							55 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							55 lines
						
					
					
						
							1.8 KiB
						
					
					
				var test = require('tape') | 
						|
var crypto = require('crypto') | 
						|
var desModes = require('browserify-des/modes') | 
						|
var aesModes = require('browserify-aes/modes') | 
						|
var ourCrypto = require('./browser') | 
						|
 | 
						|
function runIvTest (mode, keyLen, ivLen) { | 
						|
  test('mode: ' + mode, function (t) { | 
						|
    var i = 0 | 
						|
    while (++i < 10) { | 
						|
      run(i) | 
						|
    } | 
						|
    function run (i) { | 
						|
      t.test('run: ' + i, function (t) { | 
						|
        t.plan(2) | 
						|
        var key = crypto.randomBytes(keyLen) | 
						|
        var iv = crypto.randomBytes(ivLen) | 
						|
        var text = crypto.randomBytes(200) | 
						|
        var ourEncrypt | 
						|
        try { | 
						|
          ourEncrypt = ourCrypto.createCipheriv(mode, key, iv) | 
						|
        } catch (e) { | 
						|
          t.notOk(e, e.stack) | 
						|
        } | 
						|
        var nodeEncrypt | 
						|
        try { | 
						|
          nodeEncrypt = crypto.createCipheriv(mode, key, iv) | 
						|
        } catch (e) { | 
						|
          t.notOk(e, e.stack) | 
						|
        } | 
						|
        var ourCipherText = Buffer.concat([ourEncrypt.update(text), ourEncrypt.final()]) | 
						|
        var authTag | 
						|
        if (mode.slice(-3) === 'gcm') { | 
						|
          authTag = ourEncrypt.getAuthTag() | 
						|
        } | 
						|
        var nodeCipherText = Buffer.concat([nodeEncrypt.update(text), nodeEncrypt.final()]) | 
						|
        t.equals(nodeCipherText.toString('hex'), ourCipherText.toString('hex')) | 
						|
        var ourDecrypt = ourCrypto.createDecipheriv(mode, key, iv) | 
						|
        if (mode.slice(-3) === 'gcm') { | 
						|
          ourDecrypt.setAuthTag(authTag) | 
						|
        } | 
						|
        var plainText = Buffer.concat([ourDecrypt.update(ourCipherText), ourDecrypt.final()]) | 
						|
        t.equals(text.toString('hex'), plainText.toString('hex')) | 
						|
      }) | 
						|
    } | 
						|
  }) | 
						|
} | 
						|
Object.keys(aesModes).forEach(function (modeName) { | 
						|
  var mode = aesModes[modeName] | 
						|
  runIvTest(modeName, mode.key / 8, mode.iv) | 
						|
}) | 
						|
Object.keys(desModes).forEach(function (modeName) { | 
						|
  var mode = desModes[modeName] | 
						|
  runIvTest(modeName, mode.key, mode.iv) | 
						|
})
 | 
						|
 |