react-native-quick-crypto 1.0.8 → 1.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/QuickCrypto.podspec +56 -6
- package/README.md +17 -11
- package/android/CMakeLists.txt +4 -0
- package/android/build.gradle +3 -0
- package/cpp/cipher/HybridCipherFactory.hpp +15 -1
- package/cpp/cipher/OCBCipher.cpp +4 -4
- package/cpp/cipher/XChaCha20Poly1305Cipher.cpp +161 -0
- package/cpp/cipher/XChaCha20Poly1305Cipher.hpp +43 -0
- package/cpp/cipher/XSalsa20Poly1305Cipher.cpp +145 -0
- package/cpp/cipher/XSalsa20Poly1305Cipher.hpp +42 -0
- package/cpp/dh/HybridDiffieHellman.cpp +10 -0
- package/cpp/dh/HybridDiffieHellman.hpp +1 -0
- package/cpp/ec/HybridEcKeyPair.cpp +21 -0
- package/cpp/ec/HybridEcKeyPair.hpp +1 -0
- package/cpp/hash/HybridHash.cpp +1 -1
- package/cpp/hash/HybridHash.hpp +1 -1
- package/cpp/hmac/HybridHmac.cpp +1 -1
- package/cpp/hmac/HybridHmac.hpp +1 -1
- package/cpp/keys/HybridKeyObjectHandle.cpp +112 -1
- package/cpp/keys/HybridKeyObjectHandle.hpp +5 -1
- package/deps/ncrypto/.bazelrc +0 -1
- package/deps/ncrypto/.bazelversion +1 -1
- package/deps/ncrypto/.github/workflows/commitlint.yml +16 -0
- package/deps/ncrypto/.github/workflows/linter.yml +2 -2
- package/deps/ncrypto/.github/workflows/release-please.yml +16 -0
- package/deps/ncrypto/.github/workflows/ubuntu.yml +82 -0
- package/deps/ncrypto/.release-please-manifest.json +3 -0
- package/deps/ncrypto/BUILD.bazel +9 -1
- package/deps/ncrypto/CHANGELOG.md +37 -0
- package/deps/ncrypto/CMakeLists.txt +35 -11
- package/deps/ncrypto/MODULE.bazel +16 -1
- package/deps/ncrypto/MODULE.bazel.lock +299 -118
- package/deps/ncrypto/cmake/ncrypto-flags.cmake +1 -0
- package/deps/ncrypto/include/ncrypto/aead.h +137 -0
- package/deps/ncrypto/include/ncrypto/version.h +14 -0
- package/deps/ncrypto/include/ncrypto.h +85 -230
- package/deps/ncrypto/ncrypto.pc.in +10 -0
- package/deps/ncrypto/release-please-config.json +11 -0
- package/deps/ncrypto/src/CMakeLists.txt +31 -6
- package/deps/ncrypto/src/aead.cpp +302 -0
- package/deps/ncrypto/src/ncrypto.cpp +274 -556
- package/deps/ncrypto/tests/BUILD.bazel +2 -0
- package/deps/ncrypto/tests/basic.cpp +772 -2
- package/deps/ncrypto/tools/run-clang-format.sh +5 -5
- package/lib/commonjs/diffie-hellman.js +4 -1
- package/lib/commonjs/diffie-hellman.js.map +1 -1
- package/lib/commonjs/ec.js +20 -25
- package/lib/commonjs/ec.js.map +1 -1
- package/lib/commonjs/ed.js +1 -2
- package/lib/commonjs/ed.js.map +1 -1
- package/lib/commonjs/hash.js +7 -0
- package/lib/commonjs/hash.js.map +1 -1
- package/lib/commonjs/index.js +24 -2
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/keys/classes.js +9 -5
- package/lib/commonjs/keys/classes.js.map +1 -1
- package/lib/commonjs/subtle.js +82 -31
- package/lib/commonjs/subtle.js.map +1 -1
- package/lib/commonjs/utils/types.js.map +1 -1
- package/lib/module/diffie-hellman.js +4 -0
- package/lib/module/diffie-hellman.js.map +1 -1
- package/lib/module/ec.js +19 -25
- package/lib/module/ec.js.map +1 -1
- package/lib/module/ed.js +1 -2
- package/lib/module/ed.js.map +1 -1
- package/lib/module/hash.js +6 -0
- package/lib/module/hash.js.map +1 -1
- package/lib/module/index.js +10 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/keys/classes.js +9 -5
- package/lib/module/keys/classes.js.map +1 -1
- package/lib/module/subtle.js +83 -32
- package/lib/module/subtle.js.map +1 -1
- package/lib/module/utils/types.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/typescript/diffie-hellman.d.ts +2 -0
- package/lib/typescript/diffie-hellman.d.ts.map +1 -1
- package/lib/typescript/ec.d.ts +1 -0
- package/lib/typescript/ec.d.ts.map +1 -1
- package/lib/typescript/ed.d.ts.map +1 -1
- package/lib/typescript/hash.d.ts +2 -0
- package/lib/typescript/hash.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +7 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/keys/classes.d.ts +2 -0
- package/lib/typescript/keys/classes.d.ts.map +1 -1
- package/lib/typescript/specs/diffie-hellman.nitro.d.ts +1 -0
- package/lib/typescript/specs/diffie-hellman.nitro.d.ts.map +1 -1
- package/lib/typescript/specs/ecKeyPair.nitro.d.ts +1 -0
- package/lib/typescript/specs/ecKeyPair.nitro.d.ts.map +1 -1
- package/lib/typescript/specs/keyObjectHandle.nitro.d.ts +2 -0
- package/lib/typescript/specs/keyObjectHandle.nitro.d.ts.map +1 -1
- package/lib/typescript/subtle.d.ts.map +1 -1
- package/lib/typescript/utils/types.d.ts +12 -5
- package/lib/typescript/utils/types.d.ts.map +1 -1
- package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +8 -5
- package/nitrogen/generated/android/QuickCrypto+autolinking.gradle +1 -1
- package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +54 -54
- package/nitrogen/generated/android/QuickCryptoOnLoad.hpp +1 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/crypto/QuickCryptoOnLoad.kt +1 -1
- package/nitrogen/generated/ios/QuickCrypto+autolinking.rb +2 -2
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.cpp +1 -1
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.hpp +1 -1
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Umbrella.hpp +1 -1
- package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +54 -54
- package/nitrogen/generated/ios/QuickCryptoAutolinking.swift +5 -1
- package/nitrogen/generated/shared/c++/AsymmetricKeyType.hpp +1 -1
- package/nitrogen/generated/shared/c++/CipherArgs.hpp +34 -19
- package/nitrogen/generated/shared/c++/HybridBlake3Spec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridBlake3Spec.hpp +1 -3
- package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.hpp +1 -1
- package/nitrogen/generated/shared/c++/HybridCipherSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridCipherSpec.hpp +1 -3
- package/nitrogen/generated/shared/c++/HybridDiffieHellmanSpec.cpp +2 -1
- package/nitrogen/generated/shared/c++/HybridDiffieHellmanSpec.hpp +3 -3
- package/nitrogen/generated/shared/c++/HybridECDHSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridECDHSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.cpp +2 -1
- package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridHashSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridHashSpec.hpp +2 -4
- package/nitrogen/generated/shared/c++/HybridHkdfSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridHkdfSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridHmacSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridHmacSpec.hpp +3 -4
- package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.cpp +3 -1
- package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.hpp +8 -4
- package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridRandomSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridRandomSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.hpp +1 -3
- package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.hpp +1 -3
- package/nitrogen/generated/shared/c++/HybridScryptSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridScryptSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridSignHandleSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridSignHandleSpec.hpp +1 -3
- package/nitrogen/generated/shared/c++/HybridUtilsSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridUtilsSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.hpp +1 -3
- package/nitrogen/generated/shared/c++/JWK.hpp +84 -68
- package/nitrogen/generated/shared/c++/JWKkty.hpp +5 -1
- package/nitrogen/generated/shared/c++/JWKuse.hpp +1 -1
- package/nitrogen/generated/shared/c++/KFormatType.hpp +1 -1
- package/nitrogen/generated/shared/c++/KeyDetail.hpp +39 -23
- package/nitrogen/generated/shared/c++/KeyEncoding.hpp +1 -1
- package/nitrogen/generated/shared/c++/KeyObject.hpp +21 -5
- package/nitrogen/generated/shared/c++/KeyType.hpp +1 -1
- package/nitrogen/generated/shared/c++/KeyUsage.hpp +1 -1
- package/nitrogen/generated/shared/c++/NamedCurve.hpp +1 -1
- package/package.json +10 -7
- package/src/diffie-hellman.ts +6 -0
- package/src/ec.ts +23 -19
- package/src/ed.ts +1 -2
- package/src/hash.ts +11 -0
- package/src/index.ts +9 -0
- package/src/keys/classes.ts +10 -3
- package/src/specs/diffie-hellman.nitro.ts +1 -0
- package/src/specs/ecKeyPair.nitro.ts +2 -0
- package/src/specs/keyObjectHandle.nitro.ts +2 -0
- package/src/subtle.ts +131 -32
- package/src/utils/types.ts +18 -3
- package/deps/ncrypto/WORKSPACE +0 -15
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// AEAD (Authenticated Encryption with Associated Data)
|
|
3
|
+
#include "ncrypto.h"
|
|
4
|
+
|
|
5
|
+
#ifdef OPENSSL_IS_BORINGSSL
|
|
6
|
+
#include "ncrypto/aead.h"
|
|
7
|
+
|
|
8
|
+
namespace ncrypto {
|
|
9
|
+
|
|
10
|
+
const Aead Aead::FromName(std::string_view name) {
|
|
11
|
+
for (const auto& [construct, info] : aeadIndex) {
|
|
12
|
+
if (EqualNoCase(info.name, name)) {
|
|
13
|
+
return Aead(&info, construct());
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return Aead();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const Aead Aead::FromCtx(std::string_view name, const AeadCtxPointer& ctx) {
|
|
21
|
+
for (const auto& [_, info] : aeadIndex) {
|
|
22
|
+
if (info.name == name) {
|
|
23
|
+
return Aead(&info, EVP_AEAD_CTX_aead(ctx.get()));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return Aead();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
int Aead::getMode() const {
|
|
31
|
+
if (!aead_) return -1;
|
|
32
|
+
|
|
33
|
+
return info_->mode;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
std::string_view Aead::getModeLabel() const {
|
|
37
|
+
if (!aead_) return {};
|
|
38
|
+
switch (getMode()) {
|
|
39
|
+
case EVP_CIPH_CCM_MODE:
|
|
40
|
+
return "ccm";
|
|
41
|
+
case EVP_CIPH_CTR_MODE:
|
|
42
|
+
return "ctr";
|
|
43
|
+
case EVP_CIPH_GCM_MODE:
|
|
44
|
+
return "gcm";
|
|
45
|
+
case EVP_CIPH_STREAM_CIPHER:
|
|
46
|
+
return "stream";
|
|
47
|
+
}
|
|
48
|
+
return "{unknown}";
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
int Aead::getNonceLength() const {
|
|
52
|
+
if (!aead_) return 0;
|
|
53
|
+
return EVP_AEAD_nonce_length(aead_);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
int Aead::getKeyLength() const {
|
|
57
|
+
if (!aead_) return 0;
|
|
58
|
+
return EVP_AEAD_key_length(aead_);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
int Aead::getMaxOverhead() const {
|
|
62
|
+
if (!aead_) return 0;
|
|
63
|
+
return EVP_AEAD_max_overhead(aead_);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
int Aead::getMaxTagLength() const {
|
|
67
|
+
if (!aead_) return 0;
|
|
68
|
+
return EVP_AEAD_max_tag_len(aead_);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
int Aead::getBlockSize() const {
|
|
72
|
+
if (!aead_) return 0;
|
|
73
|
+
|
|
74
|
+
// EVP_CIPHER_CTX_block_size returns the block size, in bytes, of the cipher
|
|
75
|
+
// underlying |ctx|, or one if the cipher is a stream cipher.
|
|
76
|
+
return 1;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
std::string_view Aead::getName() const {
|
|
80
|
+
if (!aead_) return "";
|
|
81
|
+
|
|
82
|
+
return info_->name;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
int Aead::getNid() const {
|
|
86
|
+
if (!aead_) return 0;
|
|
87
|
+
|
|
88
|
+
return info_->nid;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const Aead Aead::FromConstructor(Aead::AeadConstructor construct) {
|
|
92
|
+
return Aead(&aeadIndex.at(construct), construct());
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const std::unordered_map<Aead::AeadConstructor, Aead::AeadInfo>
|
|
96
|
+
Aead::aeadIndex = {
|
|
97
|
+
{EVP_aead_aes_128_gcm,
|
|
98
|
+
{.name = LN_aes_128_gcm,
|
|
99
|
+
.mode = EVP_CIPH_GCM_MODE,
|
|
100
|
+
.nid = NID_aes_128_gcm}},
|
|
101
|
+
{EVP_aead_aes_192_gcm,
|
|
102
|
+
{.name = LN_aes_192_gcm,
|
|
103
|
+
.mode = EVP_CIPH_GCM_MODE,
|
|
104
|
+
.nid = NID_aes_192_gcm}},
|
|
105
|
+
{EVP_aead_aes_256_gcm,
|
|
106
|
+
{.name = LN_aes_256_gcm,
|
|
107
|
+
.mode = EVP_CIPH_GCM_MODE,
|
|
108
|
+
.nid = NID_aes_256_gcm}},
|
|
109
|
+
{EVP_aead_chacha20_poly1305,
|
|
110
|
+
{.name = LN_chacha20_poly1305,
|
|
111
|
+
.mode = EVP_CIPH_STREAM_CIPHER,
|
|
112
|
+
.nid = NID_chacha20_poly1305}},
|
|
113
|
+
{EVP_aead_xchacha20_poly1305,
|
|
114
|
+
{
|
|
115
|
+
.name = "xchacha20-poly1305",
|
|
116
|
+
.mode = EVP_CIPH_STREAM_CIPHER,
|
|
117
|
+
}},
|
|
118
|
+
{EVP_aead_aes_128_ctr_hmac_sha256,
|
|
119
|
+
{
|
|
120
|
+
.name = "aes-128-ctr-hmac-sha256",
|
|
121
|
+
.mode = EVP_CIPH_CTR_MODE,
|
|
122
|
+
}},
|
|
123
|
+
{EVP_aead_aes_256_ctr_hmac_sha256,
|
|
124
|
+
{
|
|
125
|
+
.name = "aes-256-ctr-hmac-sha256",
|
|
126
|
+
.mode = EVP_CIPH_CTR_MODE,
|
|
127
|
+
}},
|
|
128
|
+
{EVP_aead_aes_128_gcm_siv,
|
|
129
|
+
{
|
|
130
|
+
.name = "aes-128-gcm-siv",
|
|
131
|
+
.mode = EVP_CIPH_GCM_MODE,
|
|
132
|
+
}},
|
|
133
|
+
{EVP_aead_aes_256_gcm_siv,
|
|
134
|
+
{
|
|
135
|
+
.name = "aes-256-gcm-siv",
|
|
136
|
+
.mode = EVP_CIPH_GCM_MODE,
|
|
137
|
+
}},
|
|
138
|
+
{EVP_aead_aes_128_gcm_randnonce,
|
|
139
|
+
{
|
|
140
|
+
.name = "aes-128-gcm-randnonce",
|
|
141
|
+
.mode = EVP_CIPH_GCM_MODE,
|
|
142
|
+
}},
|
|
143
|
+
{EVP_aead_aes_256_gcm_randnonce,
|
|
144
|
+
{
|
|
145
|
+
.name = "aes-256-gcm-randnonce",
|
|
146
|
+
.mode = EVP_CIPH_GCM_MODE,
|
|
147
|
+
}},
|
|
148
|
+
{EVP_aead_aes_128_ccm_bluetooth,
|
|
149
|
+
{
|
|
150
|
+
.name = "aes-128-ccm-bluetooth",
|
|
151
|
+
.mode = EVP_CIPH_CCM_MODE,
|
|
152
|
+
}},
|
|
153
|
+
{EVP_aead_aes_128_ccm_bluetooth_8,
|
|
154
|
+
{
|
|
155
|
+
.name = "aes-128-ccm-bluetooth-8",
|
|
156
|
+
.mode = EVP_CIPH_CCM_MODE,
|
|
157
|
+
}},
|
|
158
|
+
{EVP_aead_aes_128_ccm_matter,
|
|
159
|
+
{
|
|
160
|
+
.name = "aes-128-ccm-matter",
|
|
161
|
+
.mode = EVP_CIPH_CCM_MODE,
|
|
162
|
+
}},
|
|
163
|
+
{EVP_aead_aes_128_eax,
|
|
164
|
+
{.name = "aes-128-eax",
|
|
165
|
+
// BoringSSL does not define a mode constant for EAX. Using STREAM
|
|
166
|
+
// arbitrarily
|
|
167
|
+
.mode = EVP_CIPH_STREAM_CIPHER}},
|
|
168
|
+
{EVP_aead_aes_256_eax,
|
|
169
|
+
{.name = "aes-256-eax",
|
|
170
|
+
// BoringSSL does not define a mode constant for EAX. Using STREAM
|
|
171
|
+
// arbitrarily
|
|
172
|
+
.mode = EVP_CIPH_STREAM_CIPHER}},
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
void Aead::ForEach(AeadNameCallback callback) {
|
|
176
|
+
for (const auto& [_, info] : aeadIndex) {
|
|
177
|
+
callback(info.name);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const Aead Aead::EMPTY = Aead();
|
|
182
|
+
const Aead Aead::AES_128_GCM = Aead::FromConstructor(EVP_aead_aes_128_gcm);
|
|
183
|
+
const Aead Aead::AES_192_GCM = Aead::FromConstructor(EVP_aead_aes_192_gcm);
|
|
184
|
+
const Aead Aead::AES_256_GCM = Aead::FromConstructor(EVP_aead_aes_256_gcm);
|
|
185
|
+
const Aead Aead::CHACHA20_POLY1305 =
|
|
186
|
+
Aead::FromConstructor(EVP_aead_chacha20_poly1305);
|
|
187
|
+
const Aead Aead::XCHACHA20_POLY1305 =
|
|
188
|
+
Aead::FromConstructor(EVP_aead_xchacha20_poly1305);
|
|
189
|
+
const Aead Aead::AES_128_CTR_HMAC_SHA256 =
|
|
190
|
+
Aead::FromConstructor(EVP_aead_aes_128_ctr_hmac_sha256);
|
|
191
|
+
const Aead Aead::AES_256_CTR_HMAC_SHA256 =
|
|
192
|
+
Aead::FromConstructor(EVP_aead_aes_256_ctr_hmac_sha256);
|
|
193
|
+
const Aead Aead::AES_128_GCM_SIV =
|
|
194
|
+
Aead::FromConstructor(EVP_aead_aes_128_gcm_siv);
|
|
195
|
+
const Aead Aead::AES_256_GCM_SIV =
|
|
196
|
+
Aead::FromConstructor(EVP_aead_aes_256_gcm_siv);
|
|
197
|
+
const Aead Aead::AES_128_GCM_RANDNONCE =
|
|
198
|
+
Aead::FromConstructor(EVP_aead_aes_128_gcm_randnonce);
|
|
199
|
+
const Aead Aead::AES_256_GCM_RANDNONCE =
|
|
200
|
+
Aead::FromConstructor(EVP_aead_aes_256_gcm_randnonce);
|
|
201
|
+
const Aead Aead::AES_128_CCM_BLUETOOTH =
|
|
202
|
+
Aead::FromConstructor(EVP_aead_aes_128_ccm_bluetooth);
|
|
203
|
+
const Aead Aead::AES_128_CCM_BLUETOOTH_8 =
|
|
204
|
+
Aead::FromConstructor(EVP_aead_aes_128_ccm_bluetooth_8);
|
|
205
|
+
const Aead Aead::AES_128_CCM_MATTER =
|
|
206
|
+
Aead::FromConstructor(EVP_aead_aes_128_ccm_matter);
|
|
207
|
+
const Aead Aead::AES_128_EAX = Aead::FromConstructor(EVP_aead_aes_128_eax);
|
|
208
|
+
const Aead Aead::AES_256_EAX = Aead::FromConstructor(EVP_aead_aes_256_eax);
|
|
209
|
+
|
|
210
|
+
AeadCtxPointer AeadCtxPointer::New(const Aead& aead,
|
|
211
|
+
bool encrypt,
|
|
212
|
+
const unsigned char* key,
|
|
213
|
+
size_t keyLen,
|
|
214
|
+
size_t tagLen) {
|
|
215
|
+
// Note: In the EVP_AEAD API new always calls init
|
|
216
|
+
auto ret = AeadCtxPointer(EVP_AEAD_CTX_new(aead.get(), key, keyLen, tagLen));
|
|
217
|
+
|
|
218
|
+
if (!ret) {
|
|
219
|
+
return {};
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
return ret;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
AeadCtxPointer::AeadCtxPointer(EVP_AEAD_CTX* ctx) : ctx_(ctx) {}
|
|
226
|
+
|
|
227
|
+
AeadCtxPointer::AeadCtxPointer(AeadCtxPointer&& other) noexcept
|
|
228
|
+
: ctx_(other.release()) {}
|
|
229
|
+
|
|
230
|
+
AeadCtxPointer& AeadCtxPointer::operator=(AeadCtxPointer&& other) noexcept {
|
|
231
|
+
if (this == &other) return *this;
|
|
232
|
+
this->~AeadCtxPointer();
|
|
233
|
+
return *new (this) AeadCtxPointer(std::move(other));
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
AeadCtxPointer::~AeadCtxPointer() {
|
|
237
|
+
reset();
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
void AeadCtxPointer::reset(EVP_AEAD_CTX* ctx) {
|
|
241
|
+
ctx_.reset(ctx);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
EVP_AEAD_CTX* AeadCtxPointer::release() {
|
|
245
|
+
return ctx_.release();
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
bool AeadCtxPointer::init(const Aead& aead,
|
|
249
|
+
bool encrypt,
|
|
250
|
+
const unsigned char* key,
|
|
251
|
+
size_t keyLen,
|
|
252
|
+
size_t tagLen) {
|
|
253
|
+
return EVP_AEAD_CTX_init_with_direction(
|
|
254
|
+
ctx_.get(),
|
|
255
|
+
aead,
|
|
256
|
+
key,
|
|
257
|
+
keyLen,
|
|
258
|
+
tagLen,
|
|
259
|
+
encrypt ? evp_aead_seal : evp_aead_open);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
bool AeadCtxPointer::encrypt(const Buffer<const unsigned char>& in,
|
|
263
|
+
Buffer<unsigned char>& out,
|
|
264
|
+
Buffer<unsigned char>& tag,
|
|
265
|
+
const Buffer<const unsigned char>& nonce,
|
|
266
|
+
const Buffer<const unsigned char>& aad) {
|
|
267
|
+
if (!ctx_) return false;
|
|
268
|
+
return EVP_AEAD_CTX_seal_scatter(ctx_.get(),
|
|
269
|
+
out.data,
|
|
270
|
+
tag.data,
|
|
271
|
+
&tag.len,
|
|
272
|
+
tag.len,
|
|
273
|
+
nonce.data,
|
|
274
|
+
nonce.len,
|
|
275
|
+
in.data,
|
|
276
|
+
in.len,
|
|
277
|
+
nullptr /* extra_in */,
|
|
278
|
+
0 /* extra_in_len */,
|
|
279
|
+
aad.data,
|
|
280
|
+
aad.len) == 1;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
bool AeadCtxPointer::decrypt(const Buffer<const unsigned char>& in,
|
|
284
|
+
Buffer<unsigned char>& out,
|
|
285
|
+
const Buffer<const unsigned char>& tag,
|
|
286
|
+
const Buffer<const unsigned char>& nonce,
|
|
287
|
+
const Buffer<const unsigned char>& aad) {
|
|
288
|
+
if (!ctx_) return false;
|
|
289
|
+
|
|
290
|
+
return EVP_AEAD_CTX_open_gather(ctx_.get(),
|
|
291
|
+
out.data,
|
|
292
|
+
nonce.data,
|
|
293
|
+
nonce.len,
|
|
294
|
+
in.data,
|
|
295
|
+
in.len,
|
|
296
|
+
tag.data,
|
|
297
|
+
tag.len,
|
|
298
|
+
aad.data,
|
|
299
|
+
aad.len) == 1;
|
|
300
|
+
}
|
|
301
|
+
} // namespace ncrypto
|
|
302
|
+
#endif
|