AusweisApp2
Randomizer.h
gehe zur Dokumentation dieser Datei
1 
7 #pragma once
8 
9 #include <QList>
10 #include <QUuid>
11 
12 #include <random>
13 
14 class test_Randomizer;
15 
16 namespace governikus
17 {
18 
20 {
21  Q_DISABLE_COPY(Randomizer)
22  friend class ::test_Randomizer;
23 
24  private:
25  template<typename T = std::mt19937_64::result_type, typename U = uchar> struct UniversalBuffer
26  {
27  U data[sizeof(T)] = {};
28 
29  T get()
30  {
31 #if __cpp_lib_bit_cast >= 201806
32  return std::bit_cast<T>(data);
33 
34 #else
35  T number;
36  memcpy(&number, &data, sizeof(T));
37  return number;
38 
39 #endif
40  }
41 
42 
43  void set(T pNumber)
44  {
45  memcpy(&data, &pNumber, sizeof(T));
46  }
47 
48 
49  static_assert(sizeof(T) == sizeof(data));
50  };
51 
52  std::mt19937_64 mGenerator;
53  bool mSecureRandom;
54 
55  template<typename T> static QList<T> getEntropy();
56  template<typename T> static QList<T> getEntropyWin();
57  template<typename T> static QList<T> getEntropyUnixoid();
58  template<typename T> static QList<T> getEntropyApple();
59 
60  protected:
61  Randomizer();
62  ~Randomizer() = default;
63 
64  public:
66 
67  [[nodiscard]] std::mt19937_64& getGenerator();
68  [[nodiscard]] bool isSecureRandom() const;
69 
70  [[nodiscard]] QUuid createUuid();
71 
72 };
73 
74 } // namespace governikus
Definition: Randomizer.h:20
static Randomizer & getInstance()
Randomizer()
Definition: Randomizer.cpp:142
QUuid createUuid()
Definition: Randomizer.cpp:171
bool isSecureRandom() const
Definition: Randomizer.cpp:165
std::mt19937_64 & getGenerator()
Definition: Randomizer.cpp:159
#define T(v)
Definition: http_parser.cpp:237
Implementation of GeneralAuthenticate response APDUs.
Definition: CommandApdu.h:16