dh.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. 'use strict';
  2. var test = require('tape');
  3. var cryptoB = require('../../');
  4. var crypto = require('crypto');
  5. var satisfies = require('semver').satisfies;
  6. test('diffie-hellman mod groups', function (t) {
  7. [
  8. 'modp1',
  9. 'modp2',
  10. 'modp5',
  11. 'modp14',
  12. 'modp15',
  13. 'modp16'
  14. ].forEach(function (mod) {
  15. t.test(mod, function (st) {
  16. st.plan(3);
  17. var dh1 = cryptoB.getDiffieHellman(mod);
  18. var p1 = dh1.getPrime().toString('hex');
  19. dh1.generateKeys();
  20. var dh2 = crypto.getDiffieHellman(mod);
  21. var p2 = dh2.getPrime().toString('hex');
  22. dh2.generateKeys();
  23. st.equals(p1, p2, 'equal primes');
  24. var pubk1 = dh1.getPublicKey();
  25. var pubk2 = dh2.getPublicKey();
  26. st.notEquals(pubk1, pubk2, 'diff public keys');
  27. var pub1 = dh1.computeSecret(pubk2).toString('hex');
  28. var pub2 = dh2.computeSecret(pubk1).toString('hex');
  29. st.equals(pub1, pub2, 'equal secrets');
  30. });
  31. });
  32. });
  33. test('diffie-hellman key lengths', function (t) {
  34. [
  35. 64,
  36. 65,
  37. 192,
  38. 512,
  39. 1024
  40. ].forEach(function (len) {
  41. var modulusTooSmall = satisfies(process.version, '>= 17') && len < 512;
  42. t.test(String(len), { skip: modulusTooSmall && 'node 17+ requires a length >= 512' }, function (st) {
  43. var dh2 = cryptoB.createDiffieHellman(len);
  44. var prime2 = dh2.getPrime();
  45. var p2 = prime2.toString('hex');
  46. var dh1 = crypto.createDiffieHellman(prime2);
  47. var p1 = dh1.getPrime().toString('hex');
  48. dh1.generateKeys();
  49. dh2.generateKeys();
  50. st.equals(p1, p2, 'equal primes');
  51. var pubk1 = dh1.getPublicKey();
  52. var pubk2 = dh2.getPublicKey();
  53. st.notEquals(pubk1, pubk2, 'diff public keys');
  54. var pub1 = dh1.computeSecret(pubk2).toString('hex');
  55. var pub2 = dh2.computeSecret(dh1.getPublicKey()).toString('hex');
  56. st.equals(pub1, pub2, 'equal secrets');
  57. st.end();
  58. });
  59. });
  60. });