ede-test.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. 'use strict';
  2. var assert = require('assert');
  3. var crypto = require('crypto');
  4. var Buffer = require('buffer').Buffer;
  5. var des = require('../');
  6. var fixtures = require('./fixtures');
  7. var bin = fixtures.bin;
  8. describe('DES-EDE-CBC', function() {
  9. var CBC = des.CBC.instantiate(des.EDE);
  10. describe('encryption/decryption', function() {
  11. var vectors = [
  12. {
  13. key: new Array(4).join('133457799bbcdff1'),
  14. iv: '0102030405060708',
  15. input: '0123456789abcdef'
  16. },
  17. {
  18. key: new Array(4).join('0000000000000000'),
  19. iv: 'ffffffffffffffff',
  20. input: '0000000000000000'
  21. },
  22. {
  23. key: new Array(4).join('a3a3a3a3b3b3b3b3'),
  24. iv: 'cdcdcdcdcdcdcdcd',
  25. input: 'cccccccccccccccc'
  26. },
  27. {
  28. key: new Array(4).join('deadbeefabbadead'),
  29. iv: 'a0da0da0da0da0da',
  30. input: '0102030405060708090a'
  31. },
  32. {
  33. key: 'aabbccddeeff0011' + '1111222233334444' + 'ffffeeeeddddcccc',
  34. iv: 'fefefefefefefefe',
  35. input: '0102030405060708090a0102030405060708090a0102030405060708090a' +
  36. '0102030405060708090a0102030405060607080a0102030405060708090a'
  37. }
  38. ];
  39. vectors.forEach(function(vec, i) {
  40. it('should encrypt vector ' + i, function() {
  41. var key = Buffer.from(vec.key, 'hex');
  42. var iv = Buffer.from(vec.iv, 'hex');
  43. var input = Buffer.from(vec.input, 'hex');
  44. var enc = CBC.create({
  45. type: 'encrypt',
  46. key: key,
  47. iv: iv
  48. });
  49. var out = Buffer.from(enc.update(input).concat(enc.final()));
  50. var cipher = crypto.createCipheriv('des-ede3-cbc', key, iv);
  51. var expected = Buffer.concat([ cipher.update(input), cipher.final() ]);
  52. assert.deepEqual(out, expected);
  53. var dec = CBC.create({
  54. type: 'decrypt',
  55. key: key,
  56. iv: iv
  57. });
  58. assert.deepEqual(Buffer.from(dec.update(out).concat(dec.final())),
  59. input);
  60. });
  61. });
  62. vectors.forEach(function(vec, i) {
  63. it('should decrypt without unpadding vector ' + i, function() {
  64. var key = Buffer.from(vec.key, 'hex');
  65. var iv = Buffer.from(vec.iv, 'hex');
  66. var input = Buffer.from(vec.input, 'hex');
  67. var enc = CBC.create({
  68. type: 'encrypt',
  69. key: key,
  70. iv: iv,
  71. });
  72. var out = Buffer.from(enc.update(input).concat(enc.final()));
  73. var cipher = crypto.createCipheriv('des-ede3-cbc', key, iv);
  74. var expected = Buffer.concat([ cipher.update(input), cipher.final() ]);
  75. assert.deepEqual(out, expected);
  76. var dec = CBC.create({
  77. type: 'decrypt',
  78. key: key,
  79. iv: iv,
  80. padding: false
  81. });
  82. var decipher = crypto.createDecipheriv('des-ede3-cbc', key, iv);
  83. decipher.setAutoPadding(false);
  84. expected = Buffer.concat([ decipher.update(out), decipher.final() ]);
  85. assert.deepEqual(Buffer.from(dec.update(out).concat(dec.final())),
  86. Buffer.from(expected));
  87. });
  88. });
  89. });
  90. });