From c9d9cfe5b7f6d0d3c986bad3dd1960dce46b0750 Mon Sep 17 00:00:00 2001 From: Volodymyr Kozieiev Date: Sat, 23 Dec 2017 15:51:31 +0200 Subject: [PATCH] Added randomBytes() function --- rnrandombytesdesktop.cpp | 32 +++++++++++++++++++++++++++----- rnrandombytesdesktop.h | 8 +++++--- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/rnrandombytesdesktop.cpp b/rnrandombytesdesktop.cpp index 1227d59..f8a8616 100644 --- a/rnrandombytesdesktop.cpp +++ b/rnrandombytesdesktop.cpp @@ -16,13 +16,13 @@ #include "rnrandombytesdesktop.h" #include #include +#include #include #include #include #include #include - namespace { struct RegisterQMLMetaType { RegisterQMLMetaType() { @@ -35,18 +35,35 @@ class RNRandomBytesPrivate { public: RNRandomBytesPrivate() { - qsrand(QDateTime::currentDateTime().currentMSecsSinceEpoch()); - while (seed.size() < 4096) { - seed.append(QChar(qrand())); - } + 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; +} + +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"; } @@ -58,3 +75,8 @@ QList RNRandomBytes::methodsToExport() { QVariantMap RNRandomBytes::constantsToExport() { return QVariantMap{{"seed", d_ptr->seed}}; } + +void RNRandomBytes::setBridge(Bridge* bridge) { + Q_D(RNRandomBytes); + d->bridge = bridge; +} diff --git a/rnrandombytesdesktop.h b/rnrandombytesdesktop.h index f86fc5c..4eea244 100644 --- a/rnrandombytesdesktop.h +++ b/rnrandombytesdesktop.h @@ -34,9 +34,11 @@ public: Q_INVOKABLE RNRandomBytes(QObject* parent = 0); ~RNRandomBytes(); - QString moduleName() override; - QList methodsToExport() override; - QVariantMap constantsToExport() override; + Q_INVOKABLE void randomBytes(int length, double funcId); + virtual QString moduleName() override; + virtual QList methodsToExport() override; + virtual QVariantMap constantsToExport() override; + virtual void setBridge(Bridge* bridge) override; private: QScopedPointer d_ptr;