Guest User

Untitled

a guest
Nov 23rd, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.70 KB | None | 0 0
  1. // randomNumberGenerators.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <chrono>
  6. #include <iostream>
  7. #include <iomanip>
  8. #include <random>
  9. #include "random.h"
  10.  
  11. int main()
  12. {
  13. uint64_t seed64 = std::chrono::system_clock::now().time_since_epoch().count();
  14. std::mt19937_64 generator(seed64);
  15.  
  16. // Scenario #1 - LCG seeded from LCG gives same results
  17. uint32_t seed32 = uint32_t(generator() & 0xFFFFFFFF);
  18. std::cout << "LCG#1 created with seed " << std::setw(10) << seed32 << std::endl;
  19. auto lcg1 = new LCG(seed32);
  20. seed32 = (*lcg1)();
  21. std::cout << "LCG#2 created with seed " << std::setw(10) << seed32 << std::endl;
  22. auto lcg2 = new LCG(seed32);
  23.  
  24. for (size_t i = 0; i < 16; ++i) {
  25. std::cout << std::setw(10) << (*lcg1)() << ", " << std::setw(10) << (*lcg2)() << std::endl;
  26. }
  27. std::cout << std::endl;
  28.  
  29. // Scenario #2 - PSEUDO_DES seeded from monotonically increasing seeds (correlated)
  30. seed64 = generator();
  31. uint32_t hi = uint32_t(seed64 >> 32);
  32. uint32_t lo = uint32_t(seed64 & 0xFFFFFFFF);
  33. std::cout << "PDES#1 created with seed " << std::setw(10) << hi << '-' << std::setw(10) << lo << std::endl;
  34. auto pdes1 = new PSEUDO_DES(hi, lo);
  35. seed64 += 1;
  36. hi = uint32_t(seed64 >> 32);
  37. lo = uint32_t(seed64 & 0xFFFFFFFF);
  38. std::cout << "PDES#2 created with seed " << std::setw(10) << hi << '-' << std::setw(10) << lo << std::endl;
  39. auto pdes2 = new PSEUDO_DES(hi, lo);
  40.  
  41. for (size_t i = 0; i < 16; ++i) {
  42. std::cout << std::setw(10) << (*pdes1)() << ", " << std::setw(10) << (*pdes2)() << std::endl;
  43. }
  44. std::cout << std::endl;
  45.  
  46. // Scenario #3 - AES_COUNTER seeded from monotonically increasing seeds (not obviously correlated)
  47. seed64 = generator();
  48. hi = uint32_t(seed64 >> 32);
  49. lo = uint32_t(seed64 & 0xFFFFFFFF);
  50. std::cout << "AES#1 created with seed " << std::setw(10) << hi << '-' << std::setw(10) << lo << std::endl;
  51. auto aes1 = new AES_COUNTER(hi, lo);
  52. seed64 += 1;
  53. hi = uint32_t(seed64 >> 32);
  54. lo = uint32_t(seed64 & 0xFFFFFFFF);
  55. std::cout << "AES#2 created with seed " << std::setw(10) << hi << '-' << std::setw(10) << lo << std::endl;
  56. auto aes2 = new AES_COUNTER(hi, lo);
  57.  
  58. for (size_t i = 0; i < 16; ++i) {
  59. std::cout << std::setw(10) << (*aes1)() << ", " << std::setw(10) << (*aes2)() << std::endl;
  60. }
  61. std::cout << std::endl;
  62.  
  63. // Scenario #4 - PSEUDO_DES seeded from PSEUDO_DES output (not obviously correlated)
  64. hi = (*pdes1)();
  65. lo = (*pdes1)();
  66. std::cout << "PDES#3 created with seed " << std::setw(10) << hi << '-' << std::setw(10) << lo << std::endl;
  67. auto pdes3 = new PSEUDO_DES(hi, lo);
  68. seed64 += 1;
  69. hi = (*pdes1)();
  70. lo = (*pdes1)();
  71. std::cout << "PDES#4 created with seed " << std::setw(10) << hi << '-' << std::setw(10) << lo << std::endl;
  72. auto pdes4 = new PSEUDO_DES(hi, lo);
  73.  
  74. for (size_t i = 0; i < 16; ++i) {
  75. std::cout << std::setw(10) << (*pdes3)() << ", " << std::setw(10) << (*pdes4)() << std::endl;
  76. }
  77. std::cout << std::endl;
  78.  
  79. // Scenario #5 - AES_COUNTER sseded from AES_COUNTER output (not obviously correlated)
  80. hi = (*aes1)();
  81. lo = (*aes1)();
  82. std::cout << "AES#3 created with seed " << std::setw(10) << hi << '-' << std::setw(10) << lo << std::endl;
  83. auto aes3 = new AES_COUNTER(hi, lo);
  84. seed64 += 1;
  85. hi = (*aes1)();
  86. lo = (*aes1)();
  87. std::cout << "AES#4 created with seed " << std::setw(10) << hi << '-' << std::setw(10) << lo << std::endl;
  88. auto aes4 = new AES_COUNTER(hi, lo);
  89.  
  90. for (size_t i = 0; i < 16; ++i) {
  91. std::cout << std::setw(10) << (*aes3)() << ", " << std::setw(10) << (*aes4)() << std::endl;
  92. }
  93. std::cout << std::endl;
  94.  
  95. return 0;
  96. }
Add Comment
Please, Sign In to add comment