This repository has been archived by the owner on Dec 3, 2021. It is now read-only.
forked from mvayngrib/react-native-randombytes
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathrnrandombytesdesktop.cpp
82 lines (67 loc) · 1.97 KB
/
rnrandombytesdesktop.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/**
* Copyright (C) 2016, Canonical Ltd.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* Author: Justin McPherson <[email protected]>
*
*/
#include <memory>
#include "bridge.h"
#include "rnrandombytesdesktop.h"
#include <QCryptographicHash>
#include <QDateTime>
#include <QDebug>
#include <QMap>
#include <QNetworkDiskCache>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QQuickImageProvider>
namespace {
struct RegisterQMLMetaType {
RegisterQMLMetaType() {
qRegisterMetaType<RNRandomBytes*>();
}
} registerMetaType;
} // namespace
class RNRandomBytesPrivate {
public:
RNRandomBytesPrivate() {
seed = generateRandomBytes(4096);
}
QString generateRandomBytes(int size);
QString seed;
Bridge* bridge = nullptr;
};
RNRandomBytes::RNRandomBytes(QObject* parent) : QObject(parent), d_ptr(new RNRandomBytesPrivate) {}
RNRandomBytes::~RNRandomBytes() {}
QString RNRandomBytesPrivate::generateRandomBytes(int size) {
QString randomString;
qsrand(QDateTime::currentDateTime().currentMSecsSinceEpoch());
while (randomString.size() < size) {
randomString.append(QChar(qrand()));
}
return randomString.toUtf8().toBase64();
}
void RNRandomBytes::randomBytes(int length, double funcId) {
Q_D(RNRandomBytes);
if (d->bridge) {
d->bridge->invokePromiseCallback(funcId, QVariantList{"", d->generateRandomBytes(length)});
}
}
QString RNRandomBytes::moduleName() {
return "RNRandomBytes";
}
QList<ModuleMethod*> RNRandomBytes::methodsToExport() {
return QList<ModuleMethod*>{};
}
QVariantMap RNRandomBytes::constantsToExport() {
return QVariantMap{{"seed", d_ptr->seed}};
}
void RNRandomBytes::setBridge(Bridge* bridge) {
Q_D(RNRandomBytes);
d->bridge = bridge;
}