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.
Files changed (292) hide show
  1. package/QuickCrypto.podspec +9 -2
  2. package/README.md +13 -9
  3. package/android/CMakeLists.txt +13 -0
  4. package/cpp/argon2/HybridArgon2.cpp +103 -0
  5. package/cpp/argon2/HybridArgon2.hpp +32 -0
  6. package/cpp/certificate/HybridCertificate.cpp +42 -0
  7. package/cpp/certificate/HybridCertificate.hpp +16 -0
  8. package/cpp/cipher/HybridCipher.cpp +58 -0
  9. package/cpp/cipher/HybridCipher.hpp +4 -0
  10. package/cpp/cipher/HybridCipherFactory.hpp +15 -1
  11. package/cpp/cipher/OCBCipher.cpp +4 -4
  12. package/cpp/cipher/XChaCha20Poly1305Cipher.cpp +161 -0
  13. package/cpp/cipher/XChaCha20Poly1305Cipher.hpp +43 -0
  14. package/cpp/cipher/XSalsa20Poly1305Cipher.cpp +145 -0
  15. package/cpp/cipher/XSalsa20Poly1305Cipher.hpp +42 -0
  16. package/cpp/dh/HybridDhKeyPair.cpp +179 -0
  17. package/cpp/dh/HybridDhKeyPair.hpp +37 -0
  18. package/cpp/dh/HybridDiffieHellman.cpp +10 -0
  19. package/cpp/dh/HybridDiffieHellman.hpp +1 -0
  20. package/cpp/dsa/HybridDsaKeyPair.cpp +128 -0
  21. package/cpp/dsa/HybridDsaKeyPair.hpp +32 -0
  22. package/cpp/ec/HybridEcKeyPair.cpp +21 -0
  23. package/cpp/ec/HybridEcKeyPair.hpp +1 -0
  24. package/cpp/ecdh/HybridECDH.cpp +35 -0
  25. package/cpp/ecdh/HybridECDH.hpp +1 -0
  26. package/cpp/hash/HybridHash.cpp +1 -1
  27. package/cpp/hash/HybridHash.hpp +1 -1
  28. package/cpp/hmac/HybridHmac.cpp +1 -1
  29. package/cpp/hmac/HybridHmac.hpp +1 -1
  30. package/cpp/keys/HybridKeyObjectHandle.cpp +131 -1
  31. package/cpp/keys/HybridKeyObjectHandle.hpp +5 -1
  32. package/cpp/prime/HybridPrime.cpp +81 -0
  33. package/cpp/prime/HybridPrime.hpp +20 -0
  34. package/deps/ncrypto/.bazelrc +0 -1
  35. package/deps/ncrypto/.bazelversion +1 -1
  36. package/deps/ncrypto/.github/workflows/commitlint.yml +16 -0
  37. package/deps/ncrypto/.github/workflows/linter.yml +2 -2
  38. package/deps/ncrypto/.github/workflows/release-please.yml +16 -0
  39. package/deps/ncrypto/.github/workflows/ubuntu.yml +82 -0
  40. package/deps/ncrypto/.release-please-manifest.json +3 -0
  41. package/deps/ncrypto/BUILD.bazel +9 -1
  42. package/deps/ncrypto/CHANGELOG.md +37 -0
  43. package/deps/ncrypto/CMakeLists.txt +35 -11
  44. package/deps/ncrypto/MODULE.bazel +16 -1
  45. package/deps/ncrypto/MODULE.bazel.lock +299 -118
  46. package/deps/ncrypto/cmake/ncrypto-flags.cmake +1 -0
  47. package/deps/ncrypto/include/ncrypto/aead.h +137 -0
  48. package/deps/ncrypto/include/ncrypto/version.h +14 -0
  49. package/deps/ncrypto/include/ncrypto.h +85 -230
  50. package/deps/ncrypto/ncrypto.pc.in +10 -0
  51. package/deps/ncrypto/release-please-config.json +11 -0
  52. package/deps/ncrypto/src/CMakeLists.txt +31 -6
  53. package/deps/ncrypto/src/aead.cpp +302 -0
  54. package/deps/ncrypto/src/ncrypto.cpp +274 -556
  55. package/deps/ncrypto/tests/BUILD.bazel +2 -0
  56. package/deps/ncrypto/tests/basic.cpp +772 -2
  57. package/deps/ncrypto/tools/run-clang-format.sh +5 -5
  58. package/lib/commonjs/argon2.js +39 -0
  59. package/lib/commonjs/argon2.js.map +1 -0
  60. package/lib/commonjs/certificate.js +35 -0
  61. package/lib/commonjs/certificate.js.map +1 -0
  62. package/lib/commonjs/cipher.js +8 -0
  63. package/lib/commonjs/cipher.js.map +1 -1
  64. package/lib/commonjs/dhKeyPair.js +109 -0
  65. package/lib/commonjs/dhKeyPair.js.map +1 -0
  66. package/lib/commonjs/diffie-hellman.js +4 -1
  67. package/lib/commonjs/diffie-hellman.js.map +1 -1
  68. package/lib/commonjs/dsa.js +92 -0
  69. package/lib/commonjs/dsa.js.map +1 -0
  70. package/lib/commonjs/ec.js +20 -25
  71. package/lib/commonjs/ec.js.map +1 -1
  72. package/lib/commonjs/ecdh.js +37 -0
  73. package/lib/commonjs/ecdh.js.map +1 -1
  74. package/lib/commonjs/ed.js +1 -2
  75. package/lib/commonjs/ed.js.map +1 -1
  76. package/lib/commonjs/hash.js +7 -0
  77. package/lib/commonjs/hash.js.map +1 -1
  78. package/lib/commonjs/index.js +46 -1
  79. package/lib/commonjs/index.js.map +1 -1
  80. package/lib/commonjs/keys/classes.js +18 -12
  81. package/lib/commonjs/keys/classes.js.map +1 -1
  82. package/lib/commonjs/keys/generateKeyPair.js +11 -0
  83. package/lib/commonjs/keys/generateKeyPair.js.map +1 -1
  84. package/lib/commonjs/prime.js +84 -0
  85. package/lib/commonjs/prime.js.map +1 -0
  86. package/lib/commonjs/specs/argon2.nitro.js +6 -0
  87. package/lib/commonjs/specs/argon2.nitro.js.map +1 -0
  88. package/lib/commonjs/specs/certificate.nitro.js +6 -0
  89. package/lib/commonjs/specs/certificate.nitro.js.map +1 -0
  90. package/lib/commonjs/specs/dhKeyPair.nitro.js +6 -0
  91. package/lib/commonjs/specs/dhKeyPair.nitro.js.map +1 -0
  92. package/lib/commonjs/specs/dsaKeyPair.nitro.js +6 -0
  93. package/lib/commonjs/specs/dsaKeyPair.nitro.js.map +1 -0
  94. package/lib/commonjs/specs/prime.nitro.js +6 -0
  95. package/lib/commonjs/specs/prime.nitro.js.map +1 -0
  96. package/lib/commonjs/subtle.js +181 -39
  97. package/lib/commonjs/subtle.js.map +1 -1
  98. package/lib/commonjs/utils/types.js.map +1 -1
  99. package/lib/module/argon2.js +34 -0
  100. package/lib/module/argon2.js.map +1 -0
  101. package/lib/module/certificate.js +30 -0
  102. package/lib/module/certificate.js.map +1 -0
  103. package/lib/module/cipher.js +7 -0
  104. package/lib/module/cipher.js.map +1 -1
  105. package/lib/module/dhKeyPair.js +102 -0
  106. package/lib/module/dhKeyPair.js.map +1 -0
  107. package/lib/module/diffie-hellman.js +4 -0
  108. package/lib/module/diffie-hellman.js.map +1 -1
  109. package/lib/module/dsa.js +85 -0
  110. package/lib/module/dsa.js.map +1 -0
  111. package/lib/module/ec.js +19 -25
  112. package/lib/module/ec.js.map +1 -1
  113. package/lib/module/ecdh.js +37 -0
  114. package/lib/module/ecdh.js.map +1 -1
  115. package/lib/module/ed.js +1 -2
  116. package/lib/module/ed.js.map +1 -1
  117. package/lib/module/hash.js +6 -0
  118. package/lib/module/hash.js.map +1 -1
  119. package/lib/module/index.js +12 -0
  120. package/lib/module/index.js.map +1 -1
  121. package/lib/module/keys/classes.js +18 -12
  122. package/lib/module/keys/classes.js.map +1 -1
  123. package/lib/module/keys/generateKeyPair.js +11 -0
  124. package/lib/module/keys/generateKeyPair.js.map +1 -1
  125. package/lib/module/prime.js +77 -0
  126. package/lib/module/prime.js.map +1 -0
  127. package/lib/module/specs/argon2.nitro.js +4 -0
  128. package/lib/module/specs/argon2.nitro.js.map +1 -0
  129. package/lib/module/specs/certificate.nitro.js +4 -0
  130. package/lib/module/specs/certificate.nitro.js.map +1 -0
  131. package/lib/module/specs/dhKeyPair.nitro.js +4 -0
  132. package/lib/module/specs/dhKeyPair.nitro.js.map +1 -0
  133. package/lib/module/specs/dsaKeyPair.nitro.js +4 -0
  134. package/lib/module/specs/dsaKeyPair.nitro.js.map +1 -0
  135. package/lib/module/specs/prime.nitro.js +4 -0
  136. package/lib/module/specs/prime.nitro.js.map +1 -0
  137. package/lib/module/subtle.js +183 -42
  138. package/lib/module/subtle.js.map +1 -1
  139. package/lib/module/utils/types.js.map +1 -1
  140. package/lib/tsconfig.tsbuildinfo +1 -1
  141. package/lib/typescript/argon2.d.ts +16 -0
  142. package/lib/typescript/argon2.d.ts.map +1 -0
  143. package/lib/typescript/certificate.d.ts +8 -0
  144. package/lib/typescript/certificate.d.ts.map +1 -0
  145. package/lib/typescript/cipher.d.ts +12 -0
  146. package/lib/typescript/cipher.d.ts.map +1 -1
  147. package/lib/typescript/dhKeyPair.d.ts +19 -0
  148. package/lib/typescript/dhKeyPair.d.ts.map +1 -0
  149. package/lib/typescript/diffie-hellman.d.ts +2 -0
  150. package/lib/typescript/diffie-hellman.d.ts.map +1 -1
  151. package/lib/typescript/dsa.d.ts +19 -0
  152. package/lib/typescript/dsa.d.ts.map +1 -0
  153. package/lib/typescript/ec.d.ts +1 -0
  154. package/lib/typescript/ec.d.ts.map +1 -1
  155. package/lib/typescript/ecdh.d.ts +3 -0
  156. package/lib/typescript/ecdh.d.ts.map +1 -1
  157. package/lib/typescript/ed.d.ts.map +1 -1
  158. package/lib/typescript/hash.d.ts +2 -0
  159. package/lib/typescript/hash.d.ts.map +1 -1
  160. package/lib/typescript/index.d.ts +22 -0
  161. package/lib/typescript/index.d.ts.map +1 -1
  162. package/lib/typescript/keys/classes.d.ts +4 -0
  163. package/lib/typescript/keys/classes.d.ts.map +1 -1
  164. package/lib/typescript/keys/generateKeyPair.d.ts.map +1 -1
  165. package/lib/typescript/prime.d.ts +19 -0
  166. package/lib/typescript/prime.d.ts.map +1 -0
  167. package/lib/typescript/specs/argon2.nitro.d.ts +9 -0
  168. package/lib/typescript/specs/argon2.nitro.d.ts.map +1 -0
  169. package/lib/typescript/specs/certificate.nitro.d.ts +10 -0
  170. package/lib/typescript/specs/certificate.nitro.d.ts.map +1 -0
  171. package/lib/typescript/specs/cipher.nitro.d.ts +9 -0
  172. package/lib/typescript/specs/cipher.nitro.d.ts.map +1 -1
  173. package/lib/typescript/specs/dhKeyPair.nitro.d.ts +14 -0
  174. package/lib/typescript/specs/dhKeyPair.nitro.d.ts.map +1 -0
  175. package/lib/typescript/specs/diffie-hellman.nitro.d.ts +1 -0
  176. package/lib/typescript/specs/diffie-hellman.nitro.d.ts.map +1 -1
  177. package/lib/typescript/specs/dsaKeyPair.nitro.d.ts +13 -0
  178. package/lib/typescript/specs/dsaKeyPair.nitro.d.ts.map +1 -0
  179. package/lib/typescript/specs/ecKeyPair.nitro.d.ts +1 -0
  180. package/lib/typescript/specs/ecKeyPair.nitro.d.ts.map +1 -1
  181. package/lib/typescript/specs/ecdh.nitro.d.ts +1 -0
  182. package/lib/typescript/specs/ecdh.nitro.d.ts.map +1 -1
  183. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts +2 -0
  184. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts.map +1 -1
  185. package/lib/typescript/specs/prime.nitro.d.ts +11 -0
  186. package/lib/typescript/specs/prime.nitro.d.ts.map +1 -0
  187. package/lib/typescript/subtle.d.ts +2 -0
  188. package/lib/typescript/subtle.d.ts.map +1 -1
  189. package/lib/typescript/utils/types.d.ts +24 -7
  190. package/lib/typescript/utils/types.d.ts.map +1 -1
  191. package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +13 -5
  192. package/nitrogen/generated/android/QuickCrypto+autolinking.gradle +1 -1
  193. package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +104 -54
  194. package/nitrogen/generated/android/QuickCryptoOnLoad.hpp +1 -1
  195. package/nitrogen/generated/android/kotlin/com/margelo/nitro/crypto/QuickCryptoOnLoad.kt +1 -1
  196. package/nitrogen/generated/ios/QuickCrypto+autolinking.rb +2 -2
  197. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.cpp +1 -1
  198. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.hpp +1 -1
  199. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Umbrella.hpp +1 -1
  200. package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +104 -54
  201. package/nitrogen/generated/ios/QuickCryptoAutolinking.swift +5 -1
  202. package/nitrogen/generated/shared/c++/AsymmetricKeyType.hpp +1 -1
  203. package/nitrogen/generated/shared/c++/CipherArgs.hpp +34 -19
  204. package/nitrogen/generated/shared/c++/CipherInfo.hpp +104 -0
  205. package/nitrogen/generated/shared/c++/HybridArgon2Spec.cpp +22 -0
  206. package/nitrogen/generated/shared/c++/HybridArgon2Spec.hpp +66 -0
  207. package/nitrogen/generated/shared/c++/HybridBlake3Spec.cpp +1 -1
  208. package/nitrogen/generated/shared/c++/HybridBlake3Spec.hpp +1 -3
  209. package/nitrogen/generated/shared/c++/HybridCertificateSpec.cpp +23 -0
  210. package/nitrogen/generated/shared/c++/HybridCertificateSpec.hpp +64 -0
  211. package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.cpp +1 -1
  212. package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.hpp +1 -1
  213. package/nitrogen/generated/shared/c++/HybridCipherSpec.cpp +2 -1
  214. package/nitrogen/generated/shared/c++/HybridCipherSpec.hpp +5 -3
  215. package/nitrogen/generated/shared/c++/HybridDhKeyPairSpec.cpp +27 -0
  216. package/nitrogen/generated/shared/c++/HybridDhKeyPairSpec.hpp +69 -0
  217. package/nitrogen/generated/shared/c++/HybridDiffieHellmanSpec.cpp +2 -1
  218. package/nitrogen/generated/shared/c++/HybridDiffieHellmanSpec.hpp +3 -3
  219. package/nitrogen/generated/shared/c++/HybridDsaKeyPairSpec.cpp +26 -0
  220. package/nitrogen/generated/shared/c++/HybridDsaKeyPairSpec.hpp +68 -0
  221. package/nitrogen/generated/shared/c++/HybridECDHSpec.cpp +2 -1
  222. package/nitrogen/generated/shared/c++/HybridECDHSpec.hpp +3 -3
  223. package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.cpp +2 -1
  224. package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.hpp +2 -3
  225. package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.cpp +1 -1
  226. package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.hpp +2 -3
  227. package/nitrogen/generated/shared/c++/HybridHashSpec.cpp +1 -1
  228. package/nitrogen/generated/shared/c++/HybridHashSpec.hpp +2 -4
  229. package/nitrogen/generated/shared/c++/HybridHkdfSpec.cpp +1 -1
  230. package/nitrogen/generated/shared/c++/HybridHkdfSpec.hpp +2 -3
  231. package/nitrogen/generated/shared/c++/HybridHmacSpec.cpp +1 -1
  232. package/nitrogen/generated/shared/c++/HybridHmacSpec.hpp +3 -4
  233. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.cpp +3 -1
  234. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.hpp +8 -4
  235. package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.cpp +1 -1
  236. package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.hpp +2 -3
  237. package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.cpp +1 -1
  238. package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.hpp +2 -3
  239. package/nitrogen/generated/shared/c++/HybridPrimeSpec.cpp +24 -0
  240. package/nitrogen/generated/shared/c++/HybridPrimeSpec.hpp +67 -0
  241. package/nitrogen/generated/shared/c++/HybridRandomSpec.cpp +1 -1
  242. package/nitrogen/generated/shared/c++/HybridRandomSpec.hpp +2 -3
  243. package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.cpp +1 -1
  244. package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.hpp +1 -3
  245. package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.cpp +1 -1
  246. package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.hpp +1 -3
  247. package/nitrogen/generated/shared/c++/HybridScryptSpec.cpp +1 -1
  248. package/nitrogen/generated/shared/c++/HybridScryptSpec.hpp +2 -3
  249. package/nitrogen/generated/shared/c++/HybridSignHandleSpec.cpp +1 -1
  250. package/nitrogen/generated/shared/c++/HybridSignHandleSpec.hpp +1 -3
  251. package/nitrogen/generated/shared/c++/HybridUtilsSpec.cpp +1 -1
  252. package/nitrogen/generated/shared/c++/HybridUtilsSpec.hpp +2 -3
  253. package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.cpp +1 -1
  254. package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.hpp +1 -3
  255. package/nitrogen/generated/shared/c++/JWK.hpp +84 -68
  256. package/nitrogen/generated/shared/c++/JWKkty.hpp +5 -1
  257. package/nitrogen/generated/shared/c++/JWKuse.hpp +1 -1
  258. package/nitrogen/generated/shared/c++/KFormatType.hpp +1 -1
  259. package/nitrogen/generated/shared/c++/KeyDetail.hpp +39 -23
  260. package/nitrogen/generated/shared/c++/KeyEncoding.hpp +1 -1
  261. package/nitrogen/generated/shared/c++/KeyObject.hpp +21 -5
  262. package/nitrogen/generated/shared/c++/KeyType.hpp +1 -1
  263. package/nitrogen/generated/shared/c++/KeyUsage.hpp +1 -1
  264. package/nitrogen/generated/shared/c++/NamedCurve.hpp +1 -1
  265. package/package.json +1 -1
  266. package/src/argon2.ts +83 -0
  267. package/src/certificate.ts +41 -0
  268. package/src/cipher.ts +24 -0
  269. package/src/dhKeyPair.ts +156 -0
  270. package/src/diffie-hellman.ts +6 -0
  271. package/src/dsa.ts +129 -0
  272. package/src/ec.ts +23 -19
  273. package/src/ecdh.ts +59 -0
  274. package/src/ed.ts +1 -2
  275. package/src/hash.ts +11 -0
  276. package/src/index.ts +12 -0
  277. package/src/keys/classes.ts +26 -8
  278. package/src/keys/generateKeyPair.ts +14 -0
  279. package/src/prime.ts +134 -0
  280. package/src/specs/argon2.nitro.ts +29 -0
  281. package/src/specs/certificate.nitro.ts +8 -0
  282. package/src/specs/cipher.nitro.ts +14 -0
  283. package/src/specs/dhKeyPair.nitro.ts +14 -0
  284. package/src/specs/diffie-hellman.nitro.ts +1 -0
  285. package/src/specs/dsaKeyPair.nitro.ts +13 -0
  286. package/src/specs/ecKeyPair.nitro.ts +2 -0
  287. package/src/specs/ecdh.nitro.ts +1 -0
  288. package/src/specs/keyObjectHandle.nitro.ts +2 -0
  289. package/src/specs/prime.nitro.ts +18 -0
  290. package/src/subtle.ts +400 -42
  291. package/src/utils/types.ts +39 -5
  292. 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