Skip to content

Commit 8ea6129

Browse files
committed
fix: add smart pointer headers and vector ToNativeArrayBuffer overload
1 parent e714b55 commit 8ea6129

3 files changed

Lines changed: 31 additions & 25 deletions

File tree

packages/react-native-quick-crypto/cpp/dh/HybridDiffieHellman.hpp

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <memory>
4+
#include <openssl/dh.h>
45
#include <openssl/evp.h>
56
#include <string>
67
#include <vector>
@@ -12,15 +13,12 @@ namespace margelo::nitro::crypto {
1213
using namespace facebook;
1314
using margelo::nitro::ArrayBuffer;
1415

16+
using EVP_PKEY_ptr = std::unique_ptr<EVP_PKEY, decltype(&EVP_PKEY_free)>;
17+
1518
class HybridDiffieHellman : public HybridDiffieHellmanSpec {
1619
public:
17-
HybridDiffieHellman() : HybridObject("DiffieHellman") {}
18-
virtual ~HybridDiffieHellman() {
19-
if (_pkey) {
20-
EVP_PKEY_free(_pkey);
21-
_pkey = nullptr;
22-
}
23-
}
20+
HybridDiffieHellman() : HybridObject("DiffieHellman"), _pkey(nullptr, EVP_PKEY_free) {}
21+
virtual ~HybridDiffieHellman() = default;
2422

2523
void init(const std::shared_ptr<ArrayBuffer>& prime, const std::shared_ptr<ArrayBuffer>& generator) override;
2624
void initWithSize(double primeLength, double generator) override;
@@ -34,9 +32,10 @@ class HybridDiffieHellman : public HybridDiffieHellmanSpec {
3432
void setPrivateKey(const std::shared_ptr<ArrayBuffer>& privateKey) override;
3533

3634
private:
37-
EVP_PKEY* _pkey = nullptr;
35+
EVP_PKEY_ptr _pkey;
3836

39-
void ensureInitialized();
37+
void ensureInitialized() const;
38+
const DH* getDH() const;
4039
};
4140

4241
} // namespace margelo::nitro::crypto

packages/react-native-quick-crypto/cpp/ecdh/HybridECDH.hpp

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
#include <memory>
44
#include <openssl/ec.h>
55
#include <openssl/evp.h>
6-
76
#include <string>
87
#include <vector>
98

@@ -14,19 +13,13 @@ namespace margelo::nitro::crypto {
1413
using namespace facebook;
1514
using margelo::nitro::ArrayBuffer;
1615

16+
using EVP_PKEY_ptr = std::unique_ptr<EVP_PKEY, decltype(&EVP_PKEY_free)>;
17+
using EC_GROUP_ptr = std::unique_ptr<EC_GROUP, decltype(&EC_GROUP_free)>;
18+
1719
class HybridECDH : public HybridECDHSpec {
1820
public:
19-
HybridECDH() : HybridObject("ECDH") {}
20-
virtual ~HybridECDH() {
21-
if (_pkey) {
22-
EVP_PKEY_free(_pkey);
23-
_pkey = nullptr;
24-
}
25-
if (_group) {
26-
EC_GROUP_free(_group);
27-
_group = nullptr;
28-
}
29-
}
21+
HybridECDH() : HybridObject("ECDH"), _pkey(nullptr, EVP_PKEY_free), _group(nullptr, EC_GROUP_free) {}
22+
virtual ~HybridECDH() = default;
3023

3124
void init(const std::string& curveName) override;
3225
std::shared_ptr<ArrayBuffer> generateKeys() override;
@@ -37,13 +30,13 @@ class HybridECDH : public HybridECDHSpec {
3730
void setPublicKey(const std::shared_ptr<ArrayBuffer>& publicKey) override;
3831

3932
private:
40-
EVP_PKEY* _pkey = nullptr;
41-
EC_GROUP* _group = nullptr;
33+
EVP_PKEY_ptr _pkey;
34+
EC_GROUP_ptr _group;
4235
std::string _curveName;
4336
int _curveNid = 0;
4437

45-
void ensureInitialized();
46-
int getCurveNid(const std::string& name);
38+
void ensureInitialized() const;
39+
static int getCurveNid(const std::string& name);
4740
};
4841

4942
} // namespace margelo::nitro::crypto

packages/react-native-quick-crypto/cpp/utils/QuickCryptoUtils.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <limits>
66
#include <openssl/err.h>
77
#include <string>
8+
#include <vector>
89

910
#include "Macros.hpp"
1011
#include <NitroModules/ArrayBuffer.hpp>
@@ -44,6 +45,19 @@ inline std::shared_ptr<margelo::nitro::NativeArrayBuffer> ToNativeArrayBuffer(st
4445
return std::make_shared<margelo::nitro::NativeArrayBuffer>(data, size, [=]() { delete[] data; });
4546
}
4647

48+
inline std::shared_ptr<margelo::nitro::NativeArrayBuffer> ToNativeArrayBuffer(const std::vector<uint8_t>& vec) {
49+
size_t size = vec.size();
50+
uint8_t* data = new uint8_t[size];
51+
memcpy(data, vec.data(), size);
52+
return std::make_shared<margelo::nitro::NativeArrayBuffer>(data, size, [=]() { delete[] data; });
53+
}
54+
55+
inline std::shared_ptr<margelo::nitro::NativeArrayBuffer> ToNativeArrayBuffer(const uint8_t* ptr, size_t size) {
56+
uint8_t* data = new uint8_t[size];
57+
memcpy(data, ptr, size);
58+
return std::make_shared<margelo::nitro::NativeArrayBuffer>(data, size, [=]() { delete[] data; });
59+
}
60+
4761
inline bool CheckIsUint32(double value) {
4862
return (value >= std::numeric_limits<uint32_t>::lowest() && value <= std::numeric_limits<uint32_t>::max());
4963
}

0 commit comments

Comments
 (0)