react-native-quick-crypto 1.0.9 → 1.0.11
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 +9 -2
- package/README.md +13 -9
- package/android/CMakeLists.txt +13 -0
- package/cpp/argon2/HybridArgon2.cpp +103 -0
- package/cpp/argon2/HybridArgon2.hpp +32 -0
- package/cpp/certificate/HybridCertificate.cpp +42 -0
- package/cpp/certificate/HybridCertificate.hpp +16 -0
- package/cpp/cipher/HybridCipher.cpp +58 -0
- package/cpp/cipher/HybridCipher.hpp +4 -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/HybridDhKeyPair.cpp +179 -0
- package/cpp/dh/HybridDhKeyPair.hpp +37 -0
- package/cpp/dh/HybridDiffieHellman.cpp +10 -0
- package/cpp/dh/HybridDiffieHellman.hpp +1 -0
- package/cpp/dsa/HybridDsaKeyPair.cpp +128 -0
- package/cpp/dsa/HybridDsaKeyPair.hpp +32 -0
- package/cpp/ec/HybridEcKeyPair.cpp +21 -0
- package/cpp/ec/HybridEcKeyPair.hpp +1 -0
- package/cpp/ecdh/HybridECDH.cpp +35 -0
- package/cpp/ecdh/HybridECDH.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 +131 -1
- package/cpp/keys/HybridKeyObjectHandle.hpp +5 -1
- package/cpp/prime/HybridPrime.cpp +81 -0
- package/cpp/prime/HybridPrime.hpp +20 -0
- 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/argon2.js +39 -0
- package/lib/commonjs/argon2.js.map +1 -0
- package/lib/commonjs/certificate.js +35 -0
- package/lib/commonjs/certificate.js.map +1 -0
- package/lib/commonjs/cipher.js +8 -0
- package/lib/commonjs/cipher.js.map +1 -1
- package/lib/commonjs/dhKeyPair.js +109 -0
- package/lib/commonjs/dhKeyPair.js.map +1 -0
- package/lib/commonjs/diffie-hellman.js +4 -1
- package/lib/commonjs/diffie-hellman.js.map +1 -1
- package/lib/commonjs/dsa.js +92 -0
- package/lib/commonjs/dsa.js.map +1 -0
- package/lib/commonjs/ec.js +20 -25
- package/lib/commonjs/ec.js.map +1 -1
- package/lib/commonjs/ecdh.js +37 -0
- package/lib/commonjs/ecdh.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 +46 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/keys/classes.js +18 -12
- package/lib/commonjs/keys/classes.js.map +1 -1
- package/lib/commonjs/keys/generateKeyPair.js +11 -0
- package/lib/commonjs/keys/generateKeyPair.js.map +1 -1
- package/lib/commonjs/prime.js +84 -0
- package/lib/commonjs/prime.js.map +1 -0
- package/lib/commonjs/specs/argon2.nitro.js +6 -0
- package/lib/commonjs/specs/argon2.nitro.js.map +1 -0
- package/lib/commonjs/specs/certificate.nitro.js +6 -0
- package/lib/commonjs/specs/certificate.nitro.js.map +1 -0
- package/lib/commonjs/specs/dhKeyPair.nitro.js +6 -0
- package/lib/commonjs/specs/dhKeyPair.nitro.js.map +1 -0
- package/lib/commonjs/specs/dsaKeyPair.nitro.js +6 -0
- package/lib/commonjs/specs/dsaKeyPair.nitro.js.map +1 -0
- package/lib/commonjs/specs/prime.nitro.js +6 -0
- package/lib/commonjs/specs/prime.nitro.js.map +1 -0
- package/lib/commonjs/subtle.js +181 -39
- package/lib/commonjs/subtle.js.map +1 -1
- package/lib/commonjs/utils/types.js.map +1 -1
- package/lib/module/argon2.js +34 -0
- package/lib/module/argon2.js.map +1 -0
- package/lib/module/certificate.js +30 -0
- package/lib/module/certificate.js.map +1 -0
- package/lib/module/cipher.js +7 -0
- package/lib/module/cipher.js.map +1 -1
- package/lib/module/dhKeyPair.js +102 -0
- package/lib/module/dhKeyPair.js.map +1 -0
- package/lib/module/diffie-hellman.js +4 -0
- package/lib/module/diffie-hellman.js.map +1 -1
- package/lib/module/dsa.js +85 -0
- package/lib/module/dsa.js.map +1 -0
- package/lib/module/ec.js +19 -25
- package/lib/module/ec.js.map +1 -1
- package/lib/module/ecdh.js +37 -0
- package/lib/module/ecdh.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 +12 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/keys/classes.js +18 -12
- package/lib/module/keys/classes.js.map +1 -1
- package/lib/module/keys/generateKeyPair.js +11 -0
- package/lib/module/keys/generateKeyPair.js.map +1 -1
- package/lib/module/prime.js +77 -0
- package/lib/module/prime.js.map +1 -0
- package/lib/module/specs/argon2.nitro.js +4 -0
- package/lib/module/specs/argon2.nitro.js.map +1 -0
- package/lib/module/specs/certificate.nitro.js +4 -0
- package/lib/module/specs/certificate.nitro.js.map +1 -0
- package/lib/module/specs/dhKeyPair.nitro.js +4 -0
- package/lib/module/specs/dhKeyPair.nitro.js.map +1 -0
- package/lib/module/specs/dsaKeyPair.nitro.js +4 -0
- package/lib/module/specs/dsaKeyPair.nitro.js.map +1 -0
- package/lib/module/specs/prime.nitro.js +4 -0
- package/lib/module/specs/prime.nitro.js.map +1 -0
- package/lib/module/subtle.js +183 -42
- 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/argon2.d.ts +16 -0
- package/lib/typescript/argon2.d.ts.map +1 -0
- package/lib/typescript/certificate.d.ts +8 -0
- package/lib/typescript/certificate.d.ts.map +1 -0
- package/lib/typescript/cipher.d.ts +12 -0
- package/lib/typescript/cipher.d.ts.map +1 -1
- package/lib/typescript/dhKeyPair.d.ts +19 -0
- package/lib/typescript/dhKeyPair.d.ts.map +1 -0
- package/lib/typescript/diffie-hellman.d.ts +2 -0
- package/lib/typescript/diffie-hellman.d.ts.map +1 -1
- package/lib/typescript/dsa.d.ts +19 -0
- package/lib/typescript/dsa.d.ts.map +1 -0
- package/lib/typescript/ec.d.ts +1 -0
- package/lib/typescript/ec.d.ts.map +1 -1
- package/lib/typescript/ecdh.d.ts +3 -0
- package/lib/typescript/ecdh.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 +22 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/keys/classes.d.ts +4 -0
- package/lib/typescript/keys/classes.d.ts.map +1 -1
- package/lib/typescript/keys/generateKeyPair.d.ts.map +1 -1
- package/lib/typescript/prime.d.ts +19 -0
- package/lib/typescript/prime.d.ts.map +1 -0
- package/lib/typescript/specs/argon2.nitro.d.ts +9 -0
- package/lib/typescript/specs/argon2.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/certificate.nitro.d.ts +10 -0
- package/lib/typescript/specs/certificate.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/cipher.nitro.d.ts +9 -0
- package/lib/typescript/specs/cipher.nitro.d.ts.map +1 -1
- package/lib/typescript/specs/dhKeyPair.nitro.d.ts +14 -0
- package/lib/typescript/specs/dhKeyPair.nitro.d.ts.map +1 -0
- 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/dsaKeyPair.nitro.d.ts +13 -0
- package/lib/typescript/specs/dsaKeyPair.nitro.d.ts.map +1 -0
- 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/ecdh.nitro.d.ts +1 -0
- package/lib/typescript/specs/ecdh.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/specs/prime.nitro.d.ts +11 -0
- package/lib/typescript/specs/prime.nitro.d.ts.map +1 -0
- package/lib/typescript/subtle.d.ts +2 -0
- package/lib/typescript/subtle.d.ts.map +1 -1
- package/lib/typescript/utils/types.d.ts +24 -7
- package/lib/typescript/utils/types.d.ts.map +1 -1
- package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +13 -5
- package/nitrogen/generated/android/QuickCrypto+autolinking.gradle +1 -1
- package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +104 -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 +104 -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++/CipherInfo.hpp +104 -0
- package/nitrogen/generated/shared/c++/HybridArgon2Spec.cpp +22 -0
- package/nitrogen/generated/shared/c++/HybridArgon2Spec.hpp +66 -0
- package/nitrogen/generated/shared/c++/HybridBlake3Spec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridBlake3Spec.hpp +1 -3
- package/nitrogen/generated/shared/c++/HybridCertificateSpec.cpp +23 -0
- package/nitrogen/generated/shared/c++/HybridCertificateSpec.hpp +64 -0
- 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 +2 -1
- package/nitrogen/generated/shared/c++/HybridCipherSpec.hpp +5 -3
- package/nitrogen/generated/shared/c++/HybridDhKeyPairSpec.cpp +27 -0
- package/nitrogen/generated/shared/c++/HybridDhKeyPairSpec.hpp +69 -0
- package/nitrogen/generated/shared/c++/HybridDiffieHellmanSpec.cpp +2 -1
- package/nitrogen/generated/shared/c++/HybridDiffieHellmanSpec.hpp +3 -3
- package/nitrogen/generated/shared/c++/HybridDsaKeyPairSpec.cpp +26 -0
- package/nitrogen/generated/shared/c++/HybridDsaKeyPairSpec.hpp +68 -0
- package/nitrogen/generated/shared/c++/HybridECDHSpec.cpp +2 -1
- package/nitrogen/generated/shared/c++/HybridECDHSpec.hpp +3 -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++/HybridPrimeSpec.cpp +24 -0
- package/nitrogen/generated/shared/c++/HybridPrimeSpec.hpp +67 -0
- 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 +1 -1
- package/src/argon2.ts +83 -0
- package/src/certificate.ts +41 -0
- package/src/cipher.ts +24 -0
- package/src/dhKeyPair.ts +156 -0
- package/src/diffie-hellman.ts +6 -0
- package/src/dsa.ts +129 -0
- package/src/ec.ts +23 -19
- package/src/ecdh.ts +59 -0
- package/src/ed.ts +1 -2
- package/src/hash.ts +11 -0
- package/src/index.ts +12 -0
- package/src/keys/classes.ts +26 -8
- package/src/keys/generateKeyPair.ts +14 -0
- package/src/prime.ts +134 -0
- package/src/specs/argon2.nitro.ts +29 -0
- package/src/specs/certificate.nitro.ts +8 -0
- package/src/specs/cipher.nitro.ts +14 -0
- package/src/specs/dhKeyPair.nitro.ts +14 -0
- package/src/specs/diffie-hellman.nitro.ts +1 -0
- package/src/specs/dsaKeyPair.nitro.ts +13 -0
- package/src/specs/ecKeyPair.nitro.ts +2 -0
- package/src/specs/ecdh.nitro.ts +1 -0
- package/src/specs/keyObjectHandle.nitro.ts +2 -0
- package/src/specs/prime.nitro.ts +18 -0
- package/src/subtle.ts +400 -42
- package/src/utils/types.ts +39 -5
- 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
|