56 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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)
 | |
| })
 |