NavicatKeygen.hpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #pragma once
  2. #include <openssl/des.h>
  3. #include <random>
  4. #include "TString.hpp"
  5. class NavicatKeygen {
  6. public:
  7. enum class Language {
  8. English,
  9. SimplifiedChinese,
  10. TraditionalChinese,
  11. Japanese,
  12. Polish,
  13. Spanish,
  14. French,
  15. German,
  16. Korean,
  17. Russian,
  18. Portuguese
  19. };
  20. enum class Product {
  21. DataModeler,
  22. Premium,
  23. MySQL,
  24. PostgreSQL,
  25. Oracle,
  26. SQLServer,
  27. SQLite,
  28. MariaDB,
  29. MongoDB,
  30. ReportViewer
  31. };
  32. private:
  33. std::random_device _rand_dev;
  34. std::default_random_engine _rand_eng;
  35. std::uniform_int_distribution<int> _rand;
  36. uint8_t _data[10];
  37. void DoEncrypt() noexcept;
  38. public:
  39. NavicatKeygen();
  40. void SetLanguageSignature(Language Value) noexcept;
  41. void SetLanguageSignature(uint8_t Value0, uint8_t Value1) noexcept;
  42. void SetProductSignature(Product Value) noexcept;
  43. void SetProductSignature(uint8_t Value) noexcept;
  44. void SetVersion(uint8_t VersionNumber) noexcept;
  45. void Generate() noexcept;
  46. TString GetSerialNumber(bool NoDash = false) const;
  47. };