react-native-quick-crypto 1.1.0 → 1.1.2
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 +1 -0
- package/android/CMakeLists.txt +4 -0
- package/android/build.gradle +5 -1
- package/cpp/argon2/HybridArgon2.cpp +10 -3
- package/cpp/blake3/HybridBlake3.cpp +5 -3
- package/cpp/cipher/CCMCipher.cpp +35 -26
- package/cpp/cipher/CCMCipher.hpp +2 -4
- package/cpp/cipher/ChaCha20Cipher.cpp +19 -27
- package/cpp/cipher/ChaCha20Cipher.hpp +2 -4
- package/cpp/cipher/ChaCha20Poly1305Cipher.cpp +41 -36
- package/cpp/cipher/ChaCha20Poly1305Cipher.hpp +2 -4
- package/cpp/cipher/GCMCipher.cpp +17 -20
- package/cpp/cipher/HybridCipher.cpp +44 -47
- package/cpp/cipher/HybridCipher.hpp +17 -1
- package/cpp/cipher/HybridRsaCipher.cpp +93 -56
- package/cpp/cipher/OCBCipher.cpp +5 -5
- package/cpp/cipher/XChaCha20Poly1305Cipher.cpp +27 -32
- package/cpp/cipher/XSalsa20Cipher.cpp +78 -16
- package/cpp/cipher/XSalsa20Cipher.hpp +25 -3
- package/cpp/cipher/XSalsa20Poly1305Cipher.cpp +32 -41
- package/cpp/dh/HybridDiffieHellman.cpp +29 -0
- package/cpp/ec/HybridEcKeyPair.cpp +35 -33
- package/cpp/ec/HybridEcKeyPair.hpp +3 -7
- package/cpp/ecdh/HybridECDH.cpp +23 -0
- package/cpp/ed25519/HybridEdKeyPair.cpp +73 -117
- package/cpp/ed25519/HybridEdKeyPair.hpp +5 -9
- package/cpp/hash/HybridHash.cpp +5 -7
- package/cpp/hkdf/HybridHkdf.cpp +6 -4
- package/cpp/hmac/HybridHmac.cpp +4 -6
- package/cpp/keys/HybridKeyObjectHandle.cpp +630 -2
- package/cpp/keys/HybridKeyObjectHandle.hpp +21 -1
- package/cpp/kmac/HybridKmac.cpp +4 -4
- package/cpp/mldsa/HybridMlDsaKeyPair.cpp +37 -49
- package/cpp/mlkem/HybridMlKemKeyPair.cpp +39 -43
- package/cpp/pbkdf2/HybridPbkdf2.cpp +7 -8
- package/cpp/rsa/HybridRsaKeyPair.cpp +5 -8
- package/cpp/rsa/HybridRsaKeyPair.hpp +4 -7
- package/cpp/scrypt/HybridScrypt.cpp +6 -4
- package/cpp/sign/HybridSignHandle.cpp +47 -72
- package/cpp/sign/HybridVerifyHandle.cpp +47 -67
- package/cpp/slhdsa/HybridSlhDsaKeyPair.cpp +245 -0
- package/cpp/slhdsa/HybridSlhDsaKeyPair.hpp +48 -0
- package/cpp/turboshake/HybridTurboShake.cpp +379 -0
- package/cpp/turboshake/HybridTurboShake.hpp +28 -0
- package/cpp/utils/HybridUtils.cpp +195 -43
- package/cpp/utils/HybridUtils.hpp +9 -2
- package/cpp/utils/QuickCryptoUtils.hpp +72 -0
- package/deps/blake3/README.md +6 -7
- package/deps/blake3/c/blake3.c +3 -2
- package/deps/blake3/c/blake3.h +2 -2
- package/deps/blake3/c/blake3_dispatch.c +2 -2
- package/deps/blake3/c/blake3_impl.h +1 -1
- package/deps/blake3/c/blake3_neon.c +5 -4
- package/deps/ncrypto/include/ncrypto/version.h +2 -2
- package/deps/ncrypto/include/ncrypto.h +9 -2
- package/deps/ncrypto/src/ncrypto.cpp +130 -35
- package/lib/commonjs/argon2.js +51 -2
- package/lib/commonjs/argon2.js.map +1 -1
- package/lib/commonjs/cipher.js +109 -11
- package/lib/commonjs/cipher.js.map +1 -1
- package/lib/commonjs/dhKeyPair.js +3 -0
- package/lib/commonjs/dhKeyPair.js.map +1 -1
- package/lib/commonjs/dsa.js +11 -2
- package/lib/commonjs/dsa.js.map +1 -1
- package/lib/commonjs/ec.js +37 -30
- package/lib/commonjs/ec.js.map +1 -1
- package/lib/commonjs/ed.js +60 -6
- package/lib/commonjs/ed.js.map +1 -1
- package/lib/commonjs/hash.js +67 -10
- package/lib/commonjs/hash.js.map +1 -1
- package/lib/commonjs/hkdf.js +33 -6
- package/lib/commonjs/hkdf.js.map +1 -1
- package/lib/commonjs/hmac.js +15 -5
- package/lib/commonjs/hmac.js.map +1 -1
- package/lib/commonjs/keys/classes.js +33 -7
- package/lib/commonjs/keys/classes.js.map +1 -1
- package/lib/commonjs/keys/generateKeyPair.js +85 -4
- package/lib/commonjs/keys/generateKeyPair.js.map +1 -1
- package/lib/commonjs/keys/index.js +50 -2
- package/lib/commonjs/keys/index.js.map +1 -1
- package/lib/commonjs/keys/publicCipher.js +10 -4
- package/lib/commonjs/keys/publicCipher.js.map +1 -1
- package/lib/commonjs/keys/signVerify.js +9 -2
- package/lib/commonjs/keys/signVerify.js.map +1 -1
- package/lib/commonjs/keys/utils.js +59 -1
- package/lib/commonjs/keys/utils.js.map +1 -1
- package/lib/commonjs/random.js +74 -11
- package/lib/commonjs/random.js.map +1 -1
- package/lib/commonjs/rsa.js +15 -5
- package/lib/commonjs/rsa.js.map +1 -1
- package/lib/commonjs/scrypt.js +47 -6
- package/lib/commonjs/scrypt.js.map +1 -1
- package/lib/commonjs/slhdsa.js +70 -0
- package/lib/commonjs/slhdsa.js.map +1 -0
- package/lib/commonjs/specs/slhDsaKeyPair.nitro.js +6 -0
- package/lib/commonjs/specs/slhDsaKeyPair.nitro.js.map +1 -0
- package/lib/commonjs/specs/turboshake.nitro.js +6 -0
- package/lib/commonjs/specs/turboshake.nitro.js.map +1 -0
- package/lib/commonjs/subtle.js +975 -253
- package/lib/commonjs/subtle.js.map +1 -1
- package/lib/commonjs/utils/cipher.js +18 -7
- package/lib/commonjs/utils/cipher.js.map +1 -1
- package/lib/commonjs/utils/conversion.js +86 -28
- package/lib/commonjs/utils/conversion.js.map +1 -1
- package/lib/commonjs/utils/errors.js +63 -4
- package/lib/commonjs/utils/errors.js.map +1 -1
- package/lib/commonjs/utils/timingSafeEqual.js +7 -2
- package/lib/commonjs/utils/timingSafeEqual.js.map +1 -1
- package/lib/commonjs/utils/types.js.map +1 -1
- package/lib/commonjs/utils/validation.js +46 -0
- package/lib/commonjs/utils/validation.js.map +1 -1
- package/lib/commonjs/x509certificate.js +6 -6
- package/lib/commonjs/x509certificate.js.map +1 -1
- package/lib/module/argon2.js +51 -2
- package/lib/module/argon2.js.map +1 -1
- package/lib/module/cipher.js +109 -11
- package/lib/module/cipher.js.map +1 -1
- package/lib/module/dhKeyPair.js +3 -0
- package/lib/module/dhKeyPair.js.map +1 -1
- package/lib/module/dsa.js +11 -2
- package/lib/module/dsa.js.map +1 -1
- package/lib/module/ec.js +38 -31
- package/lib/module/ec.js.map +1 -1
- package/lib/module/ed.js +61 -7
- package/lib/module/ed.js.map +1 -1
- package/lib/module/hash.js +67 -10
- package/lib/module/hash.js.map +1 -1
- package/lib/module/hkdf.js +33 -6
- package/lib/module/hkdf.js.map +1 -1
- package/lib/module/hmac.js +15 -5
- package/lib/module/hmac.js.map +1 -1
- package/lib/module/keys/classes.js +31 -5
- package/lib/module/keys/classes.js.map +1 -1
- package/lib/module/keys/generateKeyPair.js +86 -5
- package/lib/module/keys/generateKeyPair.js.map +1 -1
- package/lib/module/keys/index.js +50 -2
- package/lib/module/keys/index.js.map +1 -1
- package/lib/module/keys/publicCipher.js +10 -4
- package/lib/module/keys/publicCipher.js.map +1 -1
- package/lib/module/keys/signVerify.js +9 -2
- package/lib/module/keys/signVerify.js.map +1 -1
- package/lib/module/keys/utils.js +57 -1
- package/lib/module/keys/utils.js.map +1 -1
- package/lib/module/random.js +74 -12
- package/lib/module/random.js.map +1 -1
- package/lib/module/rsa.js +14 -4
- package/lib/module/rsa.js.map +1 -1
- package/lib/module/scrypt.js +47 -6
- package/lib/module/scrypt.js.map +1 -1
- package/lib/module/slhdsa.js +64 -0
- package/lib/module/slhdsa.js.map +1 -0
- package/lib/module/specs/slhDsaKeyPair.nitro.js +4 -0
- package/lib/module/specs/slhDsaKeyPair.nitro.js.map +1 -0
- package/lib/module/specs/turboshake.nitro.js +4 -0
- package/lib/module/specs/turboshake.nitro.js.map +1 -0
- package/lib/module/subtle.js +976 -254
- package/lib/module/subtle.js.map +1 -1
- package/lib/module/utils/cipher.js +18 -7
- package/lib/module/utils/cipher.js.map +1 -1
- package/lib/module/utils/conversion.js +84 -28
- package/lib/module/utils/conversion.js.map +1 -1
- package/lib/module/utils/errors.js +61 -4
- package/lib/module/utils/errors.js.map +1 -1
- package/lib/module/utils/timingSafeEqual.js +8 -3
- package/lib/module/utils/timingSafeEqual.js.map +1 -1
- package/lib/module/utils/types.js.map +1 -1
- package/lib/module/utils/validation.js +44 -0
- package/lib/module/utils/validation.js.map +1 -1
- package/lib/module/x509certificate.js +6 -6
- package/lib/module/x509certificate.js.map +1 -1
- package/lib/typescript/argon2.d.ts.map +1 -1
- package/lib/typescript/cipher.d.ts +2 -2
- package/lib/typescript/cipher.d.ts.map +1 -1
- package/lib/typescript/dhKeyPair.d.ts.map +1 -1
- package/lib/typescript/dsa.d.ts.map +1 -1
- 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 -2
- package/lib/typescript/hash.d.ts.map +1 -1
- package/lib/typescript/hkdf.d.ts.map +1 -1
- package/lib/typescript/hmac.d.ts +2 -2
- package/lib/typescript/hmac.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +13 -8
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/keys/classes.d.ts +10 -1
- package/lib/typescript/keys/classes.d.ts.map +1 -1
- package/lib/typescript/keys/generateKeyPair.d.ts +12 -1
- package/lib/typescript/keys/generateKeyPair.d.ts.map +1 -1
- package/lib/typescript/keys/index.d.ts +3 -1
- package/lib/typescript/keys/index.d.ts.map +1 -1
- package/lib/typescript/keys/publicCipher.d.ts.map +1 -1
- package/lib/typescript/keys/signVerify.d.ts.map +1 -1
- package/lib/typescript/keys/utils.d.ts +21 -4
- package/lib/typescript/keys/utils.d.ts.map +1 -1
- package/lib/typescript/random.d.ts +5 -1
- package/lib/typescript/random.d.ts.map +1 -1
- package/lib/typescript/rsa.d.ts.map +1 -1
- package/lib/typescript/scrypt.d.ts.map +1 -1
- package/lib/typescript/slhdsa.d.ts +19 -0
- package/lib/typescript/slhdsa.d.ts.map +1 -0
- package/lib/typescript/specs/keyObjectHandle.nitro.d.ts +9 -0
- package/lib/typescript/specs/keyObjectHandle.nitro.d.ts.map +1 -1
- package/lib/typescript/specs/slhDsaKeyPair.nitro.d.ts +16 -0
- package/lib/typescript/specs/slhDsaKeyPair.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/turboshake.nitro.d.ts +11 -0
- package/lib/typescript/specs/turboshake.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/utils.nitro.d.ts +0 -2
- package/lib/typescript/specs/utils.nitro.d.ts.map +1 -1
- package/lib/typescript/subtle.d.ts +3 -2
- package/lib/typescript/subtle.d.ts.map +1 -1
- package/lib/typescript/utils/cipher.d.ts +13 -1
- package/lib/typescript/utils/cipher.d.ts.map +1 -1
- package/lib/typescript/utils/conversion.d.ts +13 -9
- package/lib/typescript/utils/conversion.d.ts.map +1 -1
- package/lib/typescript/utils/errors.d.ts +12 -0
- package/lib/typescript/utils/errors.d.ts.map +1 -1
- package/lib/typescript/utils/timingSafeEqual.d.ts.map +1 -1
- package/lib/typescript/utils/types.d.ts +32 -15
- package/lib/typescript/utils/types.d.ts.map +1 -1
- package/lib/typescript/utils/validation.d.ts +3 -1
- package/lib/typescript/utils/validation.d.ts.map +1 -1
- package/lib/typescript/x509certificate.d.ts.map +1 -1
- package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +2 -0
- package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +20 -0
- package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +20 -0
- package/nitrogen/generated/shared/c++/AsymmetricKeyType.hpp +48 -0
- package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.cpp +9 -0
- package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.hpp +9 -0
- package/nitrogen/generated/shared/c++/HybridSlhDsaKeyPairSpec.cpp +29 -0
- package/nitrogen/generated/shared/c++/HybridSlhDsaKeyPairSpec.hpp +72 -0
- package/nitrogen/generated/shared/c++/HybridTurboShakeSpec.cpp +22 -0
- package/nitrogen/generated/shared/c++/HybridTurboShakeSpec.hpp +70 -0
- package/nitrogen/generated/shared/c++/HybridUtilsSpec.cpp +0 -2
- package/nitrogen/generated/shared/c++/HybridUtilsSpec.hpp +0 -3
- package/nitrogen/generated/shared/c++/JWK.hpp +9 -1
- package/nitrogen/generated/shared/c++/JWKkty.hpp +4 -0
- package/nitrogen/generated/shared/c++/KangarooTwelveVariant.hpp +76 -0
- package/nitrogen/generated/shared/c++/TurboShakeVariant.hpp +76 -0
- package/package.json +38 -7
- package/src/argon2.ts +80 -2
- package/src/cipher.ts +139 -15
- package/src/dhKeyPair.ts +8 -0
- package/src/dsa.ts +19 -2
- package/src/ec.ts +52 -29
- package/src/ed.ts +95 -16
- package/src/hash.ts +125 -12
- package/src/hkdf.ts +44 -6
- package/src/hmac.ts +17 -7
- package/src/keys/classes.ts +46 -5
- package/src/keys/generateKeyPair.ts +151 -5
- package/src/keys/index.ts +73 -3
- package/src/keys/publicCipher.ts +10 -4
- package/src/keys/signVerify.ts +13 -2
- package/src/keys/utils.ts +78 -5
- package/src/random.ts +104 -11
- package/src/rsa.ts +26 -4
- package/src/scrypt.ts +73 -6
- package/src/slhdsa.ts +146 -0
- package/src/specs/keyObjectHandle.nitro.ts +17 -0
- package/src/specs/slhDsaKeyPair.nitro.ts +29 -0
- package/src/specs/turboshake.nitro.ts +21 -0
- package/src/specs/utils.nitro.ts +0 -2
- package/src/subtle.ts +1246 -333
- package/src/utils/cipher.ts +30 -8
- package/src/utils/conversion.ts +129 -40
- package/src/utils/errors.ts +72 -4
- package/src/utils/timingSafeEqual.ts +8 -3
- package/src/utils/types.ts +80 -15
- package/src/utils/validation.ts +70 -1
- package/src/x509certificate.ts +5 -6
- package/deps/blake3/.cargo/config.toml +0 -2
- package/deps/blake3/.git-blame-ignore-revs +0 -2
- package/deps/blake3/.github/workflows/build_b3sum.py +0 -38
- package/deps/blake3/.github/workflows/ci.yml +0 -491
- package/deps/blake3/.github/workflows/tag.yml +0 -43
- package/deps/blake3/.github/workflows/upload_github_release_asset.py +0 -73
- package/deps/blake3/CONTRIBUTING.md +0 -31
- package/deps/blake3/Cargo.toml +0 -135
- package/deps/blake3/b3sum/Cargo.lock +0 -513
- package/deps/blake3/b3sum/Cargo.toml +0 -26
- package/deps/blake3/b3sum/README.md +0 -72
- package/deps/blake3/b3sum/src/main.rs +0 -564
- package/deps/blake3/b3sum/src/unit_tests.rs +0 -235
- package/deps/blake3/b3sum/tests/cli_tests.rs +0 -680
- package/deps/blake3/b3sum/what_does_check_do.md +0 -176
- package/deps/blake3/benches/bench.rs +0 -623
- package/deps/blake3/build.rs +0 -389
- package/deps/blake3/c/CMakeLists.txt +0 -383
- package/deps/blake3/c/CMakePresets.json +0 -73
- package/deps/blake3/c/Makefile.testing +0 -82
- package/deps/blake3/c/blake3-config.cmake.in +0 -14
- package/deps/blake3/c/blake3_avx2.c +0 -326
- package/deps/blake3/c/blake3_avx2_x86-64_unix.S +0 -1815
- package/deps/blake3/c/blake3_avx2_x86-64_windows_gnu.S +0 -1817
- package/deps/blake3/c/blake3_avx2_x86-64_windows_msvc.asm +0 -1828
- package/deps/blake3/c/blake3_avx512.c +0 -1388
- package/deps/blake3/c/blake3_avx512_x86-64_unix.S +0 -4824
- package/deps/blake3/c/blake3_avx512_x86-64_windows_gnu.S +0 -2615
- package/deps/blake3/c/blake3_avx512_x86-64_windows_msvc.asm +0 -2634
- package/deps/blake3/c/blake3_c_rust_bindings/Cargo.toml +0 -32
- package/deps/blake3/c/blake3_c_rust_bindings/README.md +0 -4
- package/deps/blake3/c/blake3_c_rust_bindings/benches/bench.rs +0 -477
- package/deps/blake3/c/blake3_c_rust_bindings/build.rs +0 -253
- package/deps/blake3/c/blake3_c_rust_bindings/cross_test.sh +0 -31
- package/deps/blake3/c/blake3_c_rust_bindings/src/lib.rs +0 -333
- package/deps/blake3/c/blake3_c_rust_bindings/src/test.rs +0 -696
- package/deps/blake3/c/blake3_sse2.c +0 -566
- package/deps/blake3/c/blake3_sse2_x86-64_unix.S +0 -2291
- package/deps/blake3/c/blake3_sse2_x86-64_windows_gnu.S +0 -2332
- package/deps/blake3/c/blake3_sse2_x86-64_windows_msvc.asm +0 -2350
- package/deps/blake3/c/blake3_sse41.c +0 -560
- package/deps/blake3/c/blake3_sse41_x86-64_unix.S +0 -2028
- package/deps/blake3/c/blake3_sse41_x86-64_windows_gnu.S +0 -2069
- package/deps/blake3/c/blake3_sse41_x86-64_windows_msvc.asm +0 -2089
- package/deps/blake3/c/blake3_tbb.cpp +0 -37
- package/deps/blake3/c/dependencies/CMakeLists.txt +0 -3
- package/deps/blake3/c/dependencies/tbb/CMakeLists.txt +0 -28
- package/deps/blake3/c/example.c +0 -36
- package/deps/blake3/c/example_tbb.c +0 -57
- package/deps/blake3/c/libblake3.pc.in +0 -12
- package/deps/blake3/c/main.c +0 -166
- package/deps/blake3/c/test.py +0 -97
- package/deps/blake3/media/B3.svg +0 -70
- package/deps/blake3/media/BLAKE3.svg +0 -85
- package/deps/blake3/media/speed.svg +0 -1474
- package/deps/blake3/reference_impl/Cargo.toml +0 -8
- package/deps/blake3/reference_impl/README.md +0 -14
- package/deps/blake3/reference_impl/reference_impl.rs +0 -374
- package/deps/blake3/src/ffi_avx2.rs +0 -65
- package/deps/blake3/src/ffi_avx512.rs +0 -169
- package/deps/blake3/src/ffi_neon.rs +0 -82
- package/deps/blake3/src/ffi_sse2.rs +0 -126
- package/deps/blake3/src/ffi_sse41.rs +0 -126
- package/deps/blake3/src/guts.rs +0 -60
- package/deps/blake3/src/hazmat.rs +0 -704
- package/deps/blake3/src/io.rs +0 -64
- package/deps/blake3/src/join.rs +0 -92
- package/deps/blake3/src/lib.rs +0 -1835
- package/deps/blake3/src/platform.rs +0 -587
- package/deps/blake3/src/portable.rs +0 -198
- package/deps/blake3/src/rust_avx2.rs +0 -474
- package/deps/blake3/src/rust_sse2.rs +0 -775
- package/deps/blake3/src/rust_sse41.rs +0 -766
- package/deps/blake3/src/test.rs +0 -1049
- package/deps/blake3/src/traits.rs +0 -227
- package/deps/blake3/src/wasm32_simd.rs +0 -794
- package/deps/blake3/test_vectors/Cargo.toml +0 -19
- package/deps/blake3/test_vectors/cross_test.sh +0 -25
- package/deps/blake3/test_vectors/src/bin/generate.rs +0 -4
- package/deps/blake3/test_vectors/src/lib.rs +0 -350
- package/deps/blake3/test_vectors/test_vectors.json +0 -217
- package/deps/blake3/tools/compiler_version/Cargo.toml +0 -7
- package/deps/blake3/tools/compiler_version/build.rs +0 -6
- package/deps/blake3/tools/compiler_version/src/main.rs +0 -27
- package/deps/blake3/tools/instruction_set_support/Cargo.toml +0 -6
- package/deps/blake3/tools/instruction_set_support/src/main.rs +0 -10
- package/deps/blake3/tools/release.md +0 -16
- package/deps/ncrypto/.bazelignore +0 -4
- package/deps/ncrypto/.bazelrc +0 -1
- package/deps/ncrypto/.bazelversion +0 -1
- package/deps/ncrypto/.clang-format +0 -111
- package/deps/ncrypto/.github/workflows/bazel.yml +0 -58
- package/deps/ncrypto/.github/workflows/commitlint.yml +0 -16
- package/deps/ncrypto/.github/workflows/linter.yml +0 -38
- package/deps/ncrypto/.github/workflows/macos.yml +0 -43
- package/deps/ncrypto/.github/workflows/release-please.yml +0 -16
- package/deps/ncrypto/.github/workflows/ubuntu.yml +0 -128
- package/deps/ncrypto/.github/workflows/visual-studio.yml +0 -49
- package/deps/ncrypto/.python-version +0 -1
- package/deps/ncrypto/.release-please-manifest.json +0 -3
- package/deps/ncrypto/BUILD.bazel +0 -44
- package/deps/ncrypto/CHANGELOG.md +0 -37
- package/deps/ncrypto/CMakeLists.txt +0 -79
- package/deps/ncrypto/MODULE.bazel +0 -16
- package/deps/ncrypto/MODULE.bazel.lock +0 -461
- package/deps/ncrypto/cmake/CPM.cmake +0 -1225
- package/deps/ncrypto/cmake/ncrypto-flags.cmake +0 -17
- package/deps/ncrypto/ncrypto.pc.in +0 -10
- package/deps/ncrypto/patches/0001-Expose-libdecrepit-so-NodeJS-can-use-it-for-ncrypto.patch +0 -28
- package/deps/ncrypto/pyproject.toml +0 -38
- package/deps/ncrypto/release-please-config.json +0 -11
- package/deps/ncrypto/src/CMakeLists.txt +0 -40
- package/deps/ncrypto/tests/BUILD.bazel +0 -11
- package/deps/ncrypto/tests/CMakeLists.txt +0 -7
- package/deps/ncrypto/tests/basic.cpp +0 -856
- package/deps/ncrypto/tools/run-clang-format.sh +0 -42
- package/deps/simdutf/.clang-format +0 -4
- package/deps/simdutf/.github/ISSUE_TEMPLATE/bug_report.md +0 -62
- package/deps/simdutf/.github/ISSUE_TEMPLATE/config.yml +0 -1
- package/deps/simdutf/.github/ISSUE_TEMPLATE/feature_request.md +0 -35
- package/deps/simdutf/.github/ISSUE_TEMPLATE/standard-issue-template.md +0 -29
- package/deps/simdutf/.github/pull_request_template.md +0 -51
- package/deps/simdutf/.github/workflows/aarch64.yml +0 -39
- package/deps/simdutf/.github/workflows/alpine.yml +0 -27
- package/deps/simdutf/.github/workflows/amalgamation_demos.yml +0 -34
- package/deps/simdutf/.github/workflows/armv7.yml +0 -32
- package/deps/simdutf/.github/workflows/atomic_fuzz.yml +0 -25
- package/deps/simdutf/.github/workflows/cifuzz.yml +0 -37
- package/deps/simdutf/.github/workflows/clangformat.yml +0 -36
- package/deps/simdutf/.github/workflows/debian-latestcxxstandards.yml +0 -40
- package/deps/simdutf/.github/workflows/debian.yml +0 -33
- package/deps/simdutf/.github/workflows/documentation.yml +0 -36
- package/deps/simdutf/.github/workflows/emscripten.yml +0 -19
- package/deps/simdutf/.github/workflows/loongarch64-gcc-14.2.yml +0 -39
- package/deps/simdutf/.github/workflows/macos-latest.yml +0 -29
- package/deps/simdutf/.github/workflows/msys2-clang.yml +0 -48
- package/deps/simdutf/.github/workflows/msys2.yml +0 -50
- package/deps/simdutf/.github/workflows/ppc64le.yml +0 -29
- package/deps/simdutf/.github/workflows/rvv-1024-clang-18.yml +0 -35
- package/deps/simdutf/.github/workflows/rvv-128-clang-17.yml +0 -35
- package/deps/simdutf/.github/workflows/rvv-256-gcc-14.yml +0 -31
- package/deps/simdutf/.github/workflows/s390x.yml +0 -29
- package/deps/simdutf/.github/workflows/selective-amalgamation.yml +0 -29
- package/deps/simdutf/.github/workflows/typos.yml +0 -19
- package/deps/simdutf/.github/workflows/ubuntu22-cxx20.yml +0 -30
- package/deps/simdutf/.github/workflows/ubuntu22.yml +0 -32
- package/deps/simdutf/.github/workflows/ubuntu22_gcc12.yml +0 -27
- package/deps/simdutf/.github/workflows/ubuntu22sani.yml +0 -29
- package/deps/simdutf/.github/workflows/ubuntu24-cxxstandards.yml +0 -34
- package/deps/simdutf/.github/workflows/ubuntu24-unsignedchar.yml +0 -34
- package/deps/simdutf/.github/workflows/ubuntu24.yml +0 -32
- package/deps/simdutf/.github/workflows/ubuntu24sani.yml +0 -36
- package/deps/simdutf/.github/workflows/ubuntu24sani_clang.yml +0 -29
- package/deps/simdutf/.github/workflows/vs17-arm-ci.yml +0 -21
- package/deps/simdutf/.github/workflows/vs17-ci-cxx20.yml +0 -41
- package/deps/simdutf/.github/workflows/vs17-ci.yml +0 -41
- package/deps/simdutf/.github/workflows/vs17-clang-ci.yml +0 -41
- package/deps/simdutf/.github/workflows/vs17-cxxstandards.yml +0 -36
- package/deps/simdutf/AI_USAGE_POLICY.md +0 -56
- package/deps/simdutf/AUTHORS +0 -6
- package/deps/simdutf/CMakeLists.txt +0 -231
- package/deps/simdutf/CONTRIBUTING.md +0 -214
- package/deps/simdutf/CONTRIBUTORS +0 -1
- package/deps/simdutf/Doxyfile +0 -2584
- package/deps/simdutf/Makefile.crosscompile +0 -54
- package/deps/simdutf/README-RVV.md +0 -16
- package/deps/simdutf/SECURITY.md +0 -8
- package/deps/simdutf/benchmarks/CMakeLists.txt +0 -101
- package/deps/simdutf/benchmarks/alignment.cpp +0 -150
- package/deps/simdutf/benchmarks/base64/CMakeLists.txt +0 -30
- package/deps/simdutf/benchmarks/base64/benchmark_base64.cpp +0 -875
- package/deps/simdutf/benchmarks/base64/libbase64_spaces.h +0 -49
- package/deps/simdutf/benchmarks/base64/node_base64.h +0 -227
- package/deps/simdutf/benchmarks/base64/openssl3_base64.h +0 -334
- package/deps/simdutf/benchmarks/benchmark.cpp +0 -65
- package/deps/simdutf/benchmarks/benchmark_to_well_formed_utf16.cpp +0 -347
- package/deps/simdutf/benchmarks/competition/.clang-format-ignore +0 -5
- package/deps/simdutf/benchmarks/competition/CppCon2018/utf_utils.cpp +0 -1276
- package/deps/simdutf/benchmarks/competition/CppCon2018/utf_utils.h +0 -595
- package/deps/simdutf/benchmarks/competition/README.md +0 -7
- package/deps/simdutf/benchmarks/competition/hoehrmann/hoehrmann.h +0 -91
- package/deps/simdutf/benchmarks/competition/inoue2008/inoue_utf8_to_utf16.h +0 -444
- package/deps/simdutf/benchmarks/competition/inoue2008/inoue_utf8_to_utf16_tables.h +0 -13183
- package/deps/simdutf/benchmarks/competition/inoue2008/script.py +0 -73
- package/deps/simdutf/benchmarks/competition/llvm/ConvertUTF.cpp +0 -738
- package/deps/simdutf/benchmarks/competition/llvm/ConvertUTF.h +0 -293
- package/deps/simdutf/benchmarks/competition/u8u16/COPYRIGHT +0 -8
- package/deps/simdutf/benchmarks/competition/u8u16/Makefile +0 -44
- package/deps/simdutf/benchmarks/competition/u8u16/OSL3.0.txt +0 -169
- package/deps/simdutf/benchmarks/competition/u8u16/Profiling/BOM_Profiler.h +0 -148
- package/deps/simdutf/benchmarks/competition/u8u16/Profiling/i386_timer.h +0 -45
- package/deps/simdutf/benchmarks/competition/u8u16/Profiling/ppc_timer.c +0 -34
- package/deps/simdutf/benchmarks/competition/u8u16/README +0 -56
- package/deps/simdutf/benchmarks/competition/u8u16/config/config_defs.h +0 -43
- package/deps/simdutf/benchmarks/competition/u8u16/config/g4_config.h +0 -27
- package/deps/simdutf/benchmarks/competition/u8u16/config/mmx_config.h +0 -16
- package/deps/simdutf/benchmarks/competition/u8u16/config/p4_config.h +0 -18
- package/deps/simdutf/benchmarks/competition/u8u16/config/p4_ideal_config.h +0 -16
- package/deps/simdutf/benchmarks/competition/u8u16/config/spu_config.h +0 -28
- package/deps/simdutf/benchmarks/competition/u8u16/config/ssse3_config.h +0 -20
- package/deps/simdutf/benchmarks/competition/u8u16/iconv_u8u16.c +0 -2
- package/deps/simdutf/benchmarks/competition/u8u16/lib/altivec_simd.h +0 -440
- package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_basic_ops.py +0 -121
- package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_half_operand_versions.py +0 -158
- package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_test.py +0 -270
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd.h +0 -141
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_basic.h +0 -216
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_built_in.h +0 -119
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_modified.h +0 -2430
- package/deps/simdutf/benchmarks/competition/u8u16/lib/outline.txt +0 -39
- package/deps/simdutf/benchmarks/competition/u8u16/lib/spu_simd.h +0 -421
- package/deps/simdutf/benchmarks/competition/u8u16/lib/sse_simd.h +0 -836
- package/deps/simdutf/benchmarks/competition/u8u16/lib/stdint.h +0 -222
- package/deps/simdutf/benchmarks/competition/u8u16/libu8u16_BE.c +0 -4
- package/deps/simdutf/benchmarks/competition/u8u16/libu8u16_LE.c +0 -5
- package/deps/simdutf/benchmarks/competition/u8u16/proto/u8u16.py +0 -390
- package/deps/simdutf/benchmarks/competition/u8u16/src/Makefile +0 -18
- package/deps/simdutf/benchmarks/competition/u8u16/src/bytelex.h +0 -448
- package/deps/simdutf/benchmarks/competition/u8u16/src/charsets/ASCII_EBCDIC.h +0 -284
- package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.c +0 -1975
- package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.pdf +0 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.w +0 -2263
- package/deps/simdutf/benchmarks/competition/u8u16/src/multiliteral.h +0 -239
- package/deps/simdutf/benchmarks/competition/u8u16/src/u8u16.c +0 -232
- package/deps/simdutf/benchmarks/competition/u8u16/src/x8x16.c +0 -194
- package/deps/simdutf/benchmarks/competition/u8u16/src/xml_error.c +0 -193
- package/deps/simdutf/benchmarks/competition/u8u16/src/xml_error.h +0 -167
- package/deps/simdutf/benchmarks/competition/u8u16/src/xmldecl.c +0 -288
- package/deps/simdutf/benchmarks/competition/u8u16/src/xmldecl.h +0 -117
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_g4.c +0 -2
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_mmx.c +0 -2
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_p4.c +0 -3
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_p4_ideal.c +0 -2
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_spu.c +0 -2
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_ssse3.c +0 -3
- package/deps/simdutf/benchmarks/competition/u8u16/x8x16_p4.c +0 -2
- package/deps/simdutf/benchmarks/competition/utf8lut/LICENSE +0 -23
- package/deps/simdutf/benchmarks/competition/utf8lut/data/test_minimal.txt +0 -44
- package/deps/simdutf/benchmarks/competition/utf8lut/readme.md +0 -106
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_clang_corr_tests.cmd +0 -11
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_clang_corr_tests.sh +0 -13
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_corr_tests.sh +0 -13
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_example.sh +0 -13
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_file_conv.sh +0 -14
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_iconv_lib.sh +0 -11
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_iconv_sample.sh +0 -8
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_corr_tests.cmd +0 -12
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_example.cmd +0 -13
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_file_conv.cmd +0 -14
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_iconv_lib.cmd +0 -11
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_iconv_sample.cmd +0 -8
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_corr_tests.cmd +0 -11
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_example.cmd +0 -12
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_file_conv.cmd +0 -13
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_iconv_lib.cmd +0 -10
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_iconv_sample.cmd +0 -9
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/html_table.py +0 -25
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/measure.py +0 -94
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/resize.py +0 -20
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/wipe_all.cmd +0 -2
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/wipe_interm.cmd +0 -1
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/CustomMemcpy.h +0 -75
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/PerfDefs.h +0 -47
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/Timing.cpp +0 -17
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/Timing.h +0 -76
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/AllProcessors.cpp +0 -35
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BaseBufferProcessor.cpp +0 -117
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BaseBufferProcessor.h +0 -210
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BufferDecoder.h +0 -158
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BufferEncoder.h +0 -104
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/ProcessorPlugins.h +0 -334
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/ProcessorSelector.h +0 -186
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderLut.cpp +0 -140
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderLut.h +0 -42
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderProcess.h +0 -100
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/Dfa.h +0 -57
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderLut.cpp +0 -85
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderLut.h +0 -27
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderProcess.h +0 -126
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/ProcessTrivial.h +0 -108
- package/deps/simdutf/benchmarks/competition/utf8lut/src/iconv/iconv.cpp +0 -139
- package/deps/simdutf/benchmarks/competition/utf8lut/src/iconv/iconv.h +0 -74
- package/deps/simdutf/benchmarks/competition/utf8lut/src/message/MessageConverter.cpp +0 -65
- package/deps/simdutf/benchmarks/competition/utf8lut/src/message/MessageConverter.h +0 -91
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/CorrectnessTests.cpp +0 -772
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/Example.cpp +0 -12
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/FileConverter.cpp +0 -486
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/iconv_sample.c +0 -162
- package/deps/simdutf/benchmarks/competition/utf8lut/src/utf8lut.h +0 -15
- package/deps/simdutf/benchmarks/competition/utf8sse4/fromutf8-sse.cpp +0 -292
- package/deps/simdutf/benchmarks/competition/utfcpp/LICENSE +0 -23
- package/deps/simdutf/benchmarks/competition/utfcpp/README.md +0 -1503
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/checked.h +0 -335
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/core.h +0 -338
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/cpp11.h +0 -103
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/cpp17.h +0 -103
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/unchecked.h +0 -274
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8.h +0 -34
- package/deps/simdutf/benchmarks/dataset/README.md +0 -155
- package/deps/simdutf/benchmarks/dataset/emoji.txt +0 -204
- package/deps/simdutf/benchmarks/dataset/scripts/utf8type.py +0 -40
- package/deps/simdutf/benchmarks/dataset/wikipedia_mars/Makefile +0 -80
- package/deps/simdutf/benchmarks/dataset/wikipedia_mars/convert_to_utf6.py +0 -20
- package/deps/simdutf/benchmarks/find/CMakeLists.txt +0 -6
- package/deps/simdutf/benchmarks/find/findbenchmark.cpp +0 -63
- package/deps/simdutf/benchmarks/find/findbenchmarker.h +0 -46
- package/deps/simdutf/benchmarks/shortbench.cpp +0 -555
- package/deps/simdutf/benchmarks/src/CMakeLists.txt +0 -52
- package/deps/simdutf/benchmarks/src/apple_arm_events.h +0 -1104
- package/deps/simdutf/benchmarks/src/benchmark.cpp +0 -3899
- package/deps/simdutf/benchmarks/src/benchmark.h +0 -317
- package/deps/simdutf/benchmarks/src/benchmark_base.cpp +0 -144
- package/deps/simdutf/benchmarks/src/benchmark_base.h +0 -98
- package/deps/simdutf/benchmarks/src/cmdline.cpp +0 -176
- package/deps/simdutf/benchmarks/src/cmdline.h +0 -35
- package/deps/simdutf/benchmarks/src/event_counter.h +0 -162
- package/deps/simdutf/benchmarks/src/linux-perf-events.h +0 -104
- package/deps/simdutf/benchmarks/stream.cpp +0 -209
- package/deps/simdutf/benchmarks/threaded.cpp +0 -123
- package/deps/simdutf/cmake/CPM.cmake +0 -1363
- package/deps/simdutf/cmake/JoinPaths.cmake +0 -23
- package/deps/simdutf/cmake/add_cpp_test.cmake +0 -68
- package/deps/simdutf/cmake/simdutf-config.cmake.in +0 -2
- package/deps/simdutf/cmake/simdutf-flags.cmake +0 -26
- package/deps/simdutf/cmake/toolchains-ci/riscv64-linux-gnu.cmake +0 -4
- package/deps/simdutf/cmake/toolchains-dev/README.md +0 -32
- package/deps/simdutf/cmake/toolchains-dev/aarch64.cmake +0 -14
- package/deps/simdutf/cmake/toolchains-dev/loongarch64.cmake +0 -22
- package/deps/simdutf/cmake/toolchains-dev/powerpc64.cmake +0 -16
- package/deps/simdutf/cmake/toolchains-dev/powerpc64le.cmake +0 -16
- package/deps/simdutf/cmake/toolchains-dev/riscv64.cmake +0 -16
- package/deps/simdutf/cmake/toolchains-dev/rvv-spike.cmake +0 -38
- package/deps/simdutf/doc/avx512.png +0 -0
- package/deps/simdutf/doc/logo.png +0 -0
- package/deps/simdutf/doc/logo.svg +0 -165
- package/deps/simdutf/doc/node2023.png +0 -0
- package/deps/simdutf/doc/shortinput.md +0 -78
- package/deps/simdutf/doc/utf16utf8.png +0 -0
- package/deps/simdutf/doc/utf8utf16.png +0 -0
- package/deps/simdutf/doc/widelogo.png +0 -0
- package/deps/simdutf/doxygen.py +0 -50
- package/deps/simdutf/fuzz/.clang-format +0 -9
- package/deps/simdutf/fuzz/CMakeLists.txt +0 -45
- package/deps/simdutf/fuzz/README.md +0 -168
- package/deps/simdutf/fuzz/atomic_base64.cpp +0 -448
- package/deps/simdutf/fuzz/base64.cpp +0 -278
- package/deps/simdutf/fuzz/build.sh +0 -83
- package/deps/simdutf/fuzz/conversion.cpp +0 -669
- package/deps/simdutf/fuzz/helpers/.clang-format-ignore +0 -1
- package/deps/simdutf/fuzz/helpers/common.h +0 -135
- package/deps/simdutf/fuzz/helpers/nameof.hpp +0 -1258
- package/deps/simdutf/fuzz/main.cpp +0 -72
- package/deps/simdutf/fuzz/minimize_and_cleanse.sh +0 -87
- package/deps/simdutf/fuzz/misc.cpp +0 -216
- package/deps/simdutf/fuzz/random_fuzz.sh +0 -154
- package/deps/simdutf/fuzz/roundtrip.cpp +0 -588
- package/deps/simdutf/fuzz/safe_conversion.cpp +0 -104
- package/deps/simdutf/riscv/Dockerfile +0 -16
- package/deps/simdutf/riscv/README.md +0 -24
- package/deps/simdutf/riscv/remove-docker-station +0 -8
- package/deps/simdutf/riscv/run-docker-station +0 -31
- package/deps/simdutf/scripts/.flake8 +0 -2
- package/deps/simdutf/scripts/Makefile +0 -2
- package/deps/simdutf/scripts/README_ADD_FUNCTION.md +0 -49
- package/deps/simdutf/scripts/add_function.py +0 -330
- package/deps/simdutf/scripts/amalgamation_tests.py +0 -156
- package/deps/simdutf/scripts/base64/Makefile +0 -2
- package/deps/simdutf/scripts/base64/README.md +0 -2
- package/deps/simdutf/scripts/base64/avx512.py +0 -76
- package/deps/simdutf/scripts/base64/neon_decode.py +0 -143
- package/deps/simdutf/scripts/base64/neon_generate_lut.py +0 -101
- package/deps/simdutf/scripts/base64/sse.py +0 -252
- package/deps/simdutf/scripts/base64/sseregular.py +0 -160
- package/deps/simdutf/scripts/base64/sseurl.py +0 -283
- package/deps/simdutf/scripts/base64/table.py +0 -59
- package/deps/simdutf/scripts/base64bench_print.py +0 -145
- package/deps/simdutf/scripts/benchmark-all.py +0 -119
- package/deps/simdutf/scripts/benchmark_print.py +0 -324
- package/deps/simdutf/scripts/check_feature_macros.py +0 -156
- package/deps/simdutf/scripts/check_typos.sh +0 -13
- package/deps/simdutf/scripts/clang_format.sh +0 -35
- package/deps/simdutf/scripts/clang_format_docker.sh +0 -38
- package/deps/simdutf/scripts/common.py +0 -24
- package/deps/simdutf/scripts/compilation_benchmark.py +0 -55
- package/deps/simdutf/scripts/compile_many_variations.sh +0 -64
- package/deps/simdutf/scripts/create_latex_table.py +0 -62
- package/deps/simdutf/scripts/docker/Dockerfile +0 -14
- package/deps/simdutf/scripts/docker/Makefile +0 -9
- package/deps/simdutf/scripts/docker/README.md +0 -30
- package/deps/simdutf/scripts/docker/llvm.gpg +0 -0
- package/deps/simdutf/scripts/ppc64_convert_utf16_to_utf8.py +0 -155
- package/deps/simdutf/scripts/prepare_doxygen.sh +0 -21
- package/deps/simdutf/scripts/release.py +0 -197
- package/deps/simdutf/scripts/shortinputplots.py +0 -97
- package/deps/simdutf/scripts/sse_convert_utf16_to_utf8.py +0 -422
- package/deps/simdutf/scripts/sse_convert_utf32_to_utf16.py +0 -105
- package/deps/simdutf/scripts/sse_utf8_utf16_decode.py +0 -186
- package/deps/simdutf/scripts/sse_validate_utf16le_proof.py +0 -137
- package/deps/simdutf/scripts/sse_validate_utf16le_testcases.py +0 -129
- package/deps/simdutf/scripts/table.py +0 -207
- package/deps/simdutf/scripts/tests/new.txt +0 -33
- package/deps/simdutf/scripts/tests/old.txt +0 -33
- package/deps/simdutf/scripts/tests/results.txt +0 -272
- package/deps/simdutf/simdutf.pc.in +0 -11
- package/deps/simdutf/singleheader/.flake8 +0 -2
- package/deps/simdutf/singleheader/CMakeLists.txt +0 -64
- package/deps/simdutf/singleheader/README-dev.md +0 -81
- package/deps/simdutf/singleheader/README.md +0 -19
- package/deps/simdutf/singleheader/amalgamate.py +0 -513
- package/deps/simdutf/singleheader/amalgamation_demo.c +0 -59
- package/deps/simdutf/singleheader/amalgamation_demo.cpp +0 -54
- package/deps/simdutf/singleheader/test-features.py +0 -262
- package/deps/simdutf/src/CMakeLists.txt +0 -78
- package/deps/simdutf/tests/CMakeLists.txt +0 -483
- package/deps/simdutf/tests/atomic_base64_tests.cpp +0 -2845
- package/deps/simdutf/tests/base64_tests.cpp +0 -3617
- package/deps/simdutf/tests/basic_fuzzer.cpp +0 -805
- package/deps/simdutf/tests/bele_tests.cpp +0 -182
- package/deps/simdutf/tests/constexpr_base64_tests.cpp +0 -387
- package/deps/simdutf/tests/convert_latin1_to_utf16be_tests.cpp +0 -52
- package/deps/simdutf/tests/convert_latin1_to_utf16le_tests.cpp +0 -80
- package/deps/simdutf/tests/convert_latin1_to_utf32_tests.cpp +0 -66
- package/deps/simdutf/tests/convert_latin1_to_utf8_tests.cpp +0 -120
- package/deps/simdutf/tests/convert_utf16_to_utf8_safe_tests.cpp +0 -203
- package/deps/simdutf/tests/convert_utf16_to_utf8_with_replacement_tests.cpp +0 -276
- package/deps/simdutf/tests/convert_utf16be_to_latin1_tests.cpp +0 -109
- package/deps/simdutf/tests/convert_utf16be_to_latin1_tests_with_errors.cpp +0 -136
- package/deps/simdutf/tests/convert_utf16be_to_utf32_tests.cpp +0 -193
- package/deps/simdutf/tests/convert_utf16be_to_utf32_with_errors_tests.cpp +0 -381
- package/deps/simdutf/tests/convert_utf16be_to_utf8_tests.cpp +0 -259
- package/deps/simdutf/tests/convert_utf16be_to_utf8_with_errors_tests.cpp +0 -266
- package/deps/simdutf/tests/convert_utf16le_to_latin1_tests.cpp +0 -148
- package/deps/simdutf/tests/convert_utf16le_to_latin1_tests_with_errors.cpp +0 -176
- package/deps/simdutf/tests/convert_utf16le_to_utf32_tests.cpp +0 -213
- package/deps/simdutf/tests/convert_utf16le_to_utf32_with_errors_tests.cpp +0 -318
- package/deps/simdutf/tests/convert_utf16le_to_utf8_tests.cpp +0 -343
- package/deps/simdutf/tests/convert_utf16le_to_utf8_with_errors_tests.cpp +0 -271
- package/deps/simdutf/tests/convert_utf32_to_latin1_tests.cpp +0 -111
- package/deps/simdutf/tests/convert_utf32_to_latin1_with_errors_tests.cpp +0 -96
- package/deps/simdutf/tests/convert_utf32_to_utf16be_tests.cpp +0 -148
- package/deps/simdutf/tests/convert_utf32_to_utf16be_with_errors_tests.cpp +0 -192
- package/deps/simdutf/tests/convert_utf32_to_utf16le_tests.cpp +0 -166
- package/deps/simdutf/tests/convert_utf32_to_utf16le_with_errors_tests.cpp +0 -215
- package/deps/simdutf/tests/convert_utf32_to_utf8_tests.cpp +0 -181
- package/deps/simdutf/tests/convert_utf32_to_utf8_with_errors_tests.cpp +0 -261
- package/deps/simdutf/tests/convert_utf8_to_latin1_tests.cpp +0 -516
- package/deps/simdutf/tests/convert_utf8_to_latin1_with_errors_tests.cpp +0 -579
- package/deps/simdutf/tests/convert_utf8_to_utf16be_tests.cpp +0 -412
- package/deps/simdutf/tests/convert_utf8_to_utf16be_with_errors_tests.cpp +0 -480
- package/deps/simdutf/tests/convert_utf8_to_utf16le_tests.cpp +0 -671
- package/deps/simdutf/tests/convert_utf8_to_utf16le_with_errors_tests.cpp +0 -455
- package/deps/simdutf/tests/convert_utf8_to_utf32_tests.cpp +0 -1204
- package/deps/simdutf/tests/convert_utf8_to_utf32_with_errors_tests.cpp +0 -337
- package/deps/simdutf/tests/convert_valid_utf16be_to_latin1_tests.cpp +0 -37
- package/deps/simdutf/tests/convert_valid_utf16be_to_utf32_tests.cpp +0 -97
- package/deps/simdutf/tests/convert_valid_utf16be_to_utf8_tests.cpp +0 -126
- package/deps/simdutf/tests/convert_valid_utf16le_to_latin1_tests.cpp +0 -71
- package/deps/simdutf/tests/convert_valid_utf16le_to_utf32_tests.cpp +0 -122
- package/deps/simdutf/tests/convert_valid_utf16le_to_utf8_tests.cpp +0 -244
- package/deps/simdutf/tests/convert_valid_utf32_to_latin1_tests.cpp +0 -49
- package/deps/simdutf/tests/convert_valid_utf32_to_utf16be_tests.cpp +0 -92
- package/deps/simdutf/tests/convert_valid_utf32_to_utf16le_tests.cpp +0 -114
- package/deps/simdutf/tests/convert_valid_utf32_to_utf8_tests.cpp +0 -109
- package/deps/simdutf/tests/convert_valid_utf8_to_latin1_tests.cpp +0 -84
- package/deps/simdutf/tests/convert_valid_utf8_to_utf16be_tests.cpp +0 -124
- package/deps/simdutf/tests/convert_valid_utf8_to_utf16le_tests.cpp +0 -221
- package/deps/simdutf/tests/convert_valid_utf8_to_utf32_tests.cpp +0 -155
- package/deps/simdutf/tests/count_utf16be.cpp +0 -64
- package/deps/simdutf/tests/count_utf16le.cpp +0 -61
- package/deps/simdutf/tests/count_utf8.cpp +0 -87
- package/deps/simdutf/tests/detect_encodings_tests.cpp +0 -312
- package/deps/simdutf/tests/embed/valid_utf8.txt +0 -1
- package/deps/simdutf/tests/embed_tests.cpp +0 -22
- package/deps/simdutf/tests/find_tests.cpp +0 -77
- package/deps/simdutf/tests/fixed_string_tests.cpp +0 -153
- package/deps/simdutf/tests/helpers/CMakeLists.txt +0 -25
- package/deps/simdutf/tests/helpers/compiletime_conversions.h +0 -222
- package/deps/simdutf/tests/helpers/fixed_string.h +0 -267
- package/deps/simdutf/tests/helpers/random_int.cpp +0 -30
- package/deps/simdutf/tests/helpers/random_int.h +0 -39
- package/deps/simdutf/tests/helpers/random_utf16.cpp +0 -123
- package/deps/simdutf/tests/helpers/random_utf16.h +0 -52
- package/deps/simdutf/tests/helpers/random_utf32.cpp +0 -41
- package/deps/simdutf/tests/helpers/random_utf32.h +0 -40
- package/deps/simdutf/tests/helpers/random_utf8.cpp +0 -93
- package/deps/simdutf/tests/helpers/random_utf8.h +0 -36
- package/deps/simdutf/tests/helpers/test.cpp +0 -231
- package/deps/simdutf/tests/helpers/test.h +0 -193
- package/deps/simdutf/tests/helpers/transcode_test_base.cpp +0 -1257
- package/deps/simdutf/tests/helpers/transcode_test_base.h +0 -683
- package/deps/simdutf/tests/helpers/utf16.h +0 -27
- package/deps/simdutf/tests/installation_tests/find/CMakeLists.txt +0 -43
- package/deps/simdutf/tests/installation_tests/from_fetch/CMakeLists.txt +0 -47
- package/deps/simdutf/tests/internal_tests.cpp +0 -27
- package/deps/simdutf/tests/null_safety_tests.cpp +0 -94
- package/deps/simdutf/tests/random_fuzzer.cpp +0 -779
- package/deps/simdutf/tests/readme_tests.cpp +0 -274
- package/deps/simdutf/tests/reference/CMakeLists.txt +0 -23
- package/deps/simdutf/tests/reference/decode_utf16.h +0 -81
- package/deps/simdutf/tests/reference/decode_utf32.h +0 -47
- package/deps/simdutf/tests/reference/encode_latin1.cpp +0 -1
- package/deps/simdutf/tests/reference/encode_latin1.h +0 -32
- package/deps/simdutf/tests/reference/encode_utf16.cpp +0 -49
- package/deps/simdutf/tests/reference/encode_utf16.h +0 -20
- package/deps/simdutf/tests/reference/encode_utf32.cpp +0 -1
- package/deps/simdutf/tests/reference/encode_utf32.h +0 -36
- package/deps/simdutf/tests/reference/encode_utf8.cpp +0 -1
- package/deps/simdutf/tests/reference/encode_utf8.h +0 -40
- package/deps/simdutf/tests/reference/validate_utf16.cpp +0 -60
- package/deps/simdutf/tests/reference/validate_utf16.h +0 -14
- package/deps/simdutf/tests/reference/validate_utf16_to_latin1.cpp +0 -35
- package/deps/simdutf/tests/reference/validate_utf16_to_latin1.h +0 -13
- package/deps/simdutf/tests/reference/validate_utf32.cpp +0 -27
- package/deps/simdutf/tests/reference/validate_utf32.h +0 -12
- package/deps/simdutf/tests/reference/validate_utf32_to_latin1.cpp +0 -27
- package/deps/simdutf/tests/reference/validate_utf32_to_latin1.h +0 -12
- package/deps/simdutf/tests/reference/validate_utf8.cpp +0 -82
- package/deps/simdutf/tests/reference/validate_utf8.h +0 -11
- package/deps/simdutf/tests/reference/validate_utf8_to_latin1.cpp +0 -43
- package/deps/simdutf/tests/reference/validate_utf8_to_latin1.h +0 -12
- package/deps/simdutf/tests/select_implementation.cpp +0 -43
- package/deps/simdutf/tests/simdutf_c_tests.cpp +0 -244
- package/deps/simdutf/tests/span_tests.cpp +0 -401
- package/deps/simdutf/tests/special_tests.cpp +0 -559
- package/deps/simdutf/tests/straight_c_test.c +0 -187
- package/deps/simdutf/tests/text_encoding_tests.cpp +0 -77
- package/deps/simdutf/tests/to_well_formed_utf16_tests.cpp +0 -377
- package/deps/simdutf/tests/utf8_length_from_utf16_tests.cpp +0 -202
- package/deps/simdutf/tests/validate_ascii_basic_tests.cpp +0 -165
- package/deps/simdutf/tests/validate_ascii_with_errors_tests.cpp +0 -77
- package/deps/simdutf/tests/validate_utf16be_basic_tests.cpp +0 -175
- package/deps/simdutf/tests/validate_utf16be_with_errors_tests.cpp +0 -188
- package/deps/simdutf/tests/validate_utf16le_basic_tests.cpp +0 -268
- package/deps/simdutf/tests/validate_utf16le_with_errors_tests.cpp +0 -274
- package/deps/simdutf/tests/validate_utf32_basic_tests.cpp +0 -92
- package/deps/simdutf/tests/validate_utf32_with_errors_tests.cpp +0 -114
- package/deps/simdutf/tests/validate_utf8_basic_tests.cpp +0 -178
- package/deps/simdutf/tests/validate_utf8_brute_force_tests.cpp +0 -88
- package/deps/simdutf/tests/validate_utf8_puzzler_tests.cpp +0 -33
- package/deps/simdutf/tests/validate_utf8_with_errors_tests.cpp +0 -228
- package/deps/simdutf/tools/CMakeLists.txt +0 -85
- package/deps/simdutf/tools/fastbase64.cpp +0 -250
- package/deps/simdutf/tools/sutf.cpp +0 -556
- package/deps/simdutf/tools/sutf.h +0 -40
- package/lib/tsconfig.tsbuildinfo +0 -1
package/QuickCrypto.podspec
CHANGED
|
@@ -152,6 +152,7 @@ Pod::Spec.new do |s|
|
|
|
152
152
|
"\"$(PODS_TARGET_SRCROOT)/cpp/hkdf\"",
|
|
153
153
|
"\"$(PODS_TARGET_SRCROOT)/cpp/dh\"",
|
|
154
154
|
"\"$(PODS_TARGET_SRCROOT)/cpp/ecdh\"",
|
|
155
|
+
"\"$(PODS_TARGET_SRCROOT)/cpp/turboshake\"",
|
|
155
156
|
"\"$(PODS_TARGET_SRCROOT)/nitrogen/generated/shared/c++\"",
|
|
156
157
|
"\"$(PODS_TARGET_SRCROOT)/deps/ncrypto/include\"",
|
|
157
158
|
"\"$(PODS_TARGET_SRCROOT)/deps/simdutf/include\"",
|
package/android/CMakeLists.txt
CHANGED
|
@@ -52,6 +52,7 @@ add_library(
|
|
|
52
52
|
../cpp/keys/KeyObjectData.cpp
|
|
53
53
|
../cpp/mldsa/HybridMlDsaKeyPair.cpp
|
|
54
54
|
../cpp/mlkem/HybridMlKemKeyPair.cpp
|
|
55
|
+
../cpp/slhdsa/HybridSlhDsaKeyPair.cpp
|
|
55
56
|
../cpp/pbkdf2/HybridPbkdf2.cpp
|
|
56
57
|
../cpp/prime/HybridPrime.cpp
|
|
57
58
|
../cpp/random/HybridRandom.cpp
|
|
@@ -59,6 +60,7 @@ add_library(
|
|
|
59
60
|
../cpp/scrypt/HybridScrypt.cpp
|
|
60
61
|
../cpp/sign/HybridSignHandle.cpp
|
|
61
62
|
../cpp/sign/HybridVerifyHandle.cpp
|
|
63
|
+
../cpp/turboshake/HybridTurboShake.cpp
|
|
62
64
|
../cpp/x509/HybridX509Certificate.cpp
|
|
63
65
|
../cpp/utils/HybridUtils.cpp
|
|
64
66
|
../cpp/utils/QuickCryptoUtils.cpp
|
|
@@ -92,12 +94,14 @@ include_directories(
|
|
|
92
94
|
"../cpp/keys"
|
|
93
95
|
"../cpp/mldsa"
|
|
94
96
|
"../cpp/mlkem"
|
|
97
|
+
"../cpp/slhdsa"
|
|
95
98
|
"../cpp/pbkdf2"
|
|
96
99
|
"../cpp/prime"
|
|
97
100
|
"../cpp/random"
|
|
98
101
|
"../cpp/rsa"
|
|
99
102
|
"../cpp/sign"
|
|
100
103
|
"../cpp/scrypt"
|
|
104
|
+
"../cpp/turboshake"
|
|
101
105
|
"../cpp/utils"
|
|
102
106
|
"../cpp/x509"
|
|
103
107
|
"../deps/blake3/c"
|
package/android/build.gradle
CHANGED
|
@@ -7,7 +7,7 @@ buildscript {
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
dependencies {
|
|
10
|
-
classpath "com.android.tools.build:gradle:8.
|
|
10
|
+
classpath "com.android.tools.build:gradle:8.12.2"
|
|
11
11
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}"
|
|
12
12
|
}
|
|
13
13
|
}
|
|
@@ -113,6 +113,10 @@ packagingOptions {
|
|
|
113
113
|
|
|
114
114
|
lintOptions {
|
|
115
115
|
disable "GradleCompatible"
|
|
116
|
+
// AGP version is constrained by RN 0.81 + Gradle 8.14.3 + JDK 17.
|
|
117
|
+
// AGP 9.x requires Gradle 9 and JDK 21 — not viable until RN bumps its toolchain.
|
|
118
|
+
disable "AndroidGradlePluginVersion"
|
|
119
|
+
disable "GradleDependency"
|
|
116
120
|
}
|
|
117
121
|
|
|
118
122
|
compileOptions {
|
|
@@ -30,6 +30,15 @@ static std::shared_ptr<ArrayBuffer> hashImpl(const std::string& algorithm, const
|
|
|
30
30
|
|
|
31
31
|
auto type = parseAlgorithm(algorithm);
|
|
32
32
|
|
|
33
|
+
// Validate every numeric parameter before the cast. The previous code did
|
|
34
|
+
// `static_cast<uint32_t>(parallelism)` etc. naked, which is undefined
|
|
35
|
+
// behavior for NaN, +/-Infinity, or negative input — see audit Phase 1.1.
|
|
36
|
+
uint32_t parallelismU = validateUInt<uint32_t>(parallelism, "Argon2 parallelism");
|
|
37
|
+
size_t tagLengthU = validateUInt<size_t>(tagLength, "Argon2 tagLength");
|
|
38
|
+
uint32_t memoryU = validateUInt<uint32_t>(memory, "Argon2 memory");
|
|
39
|
+
uint32_t passesU = validateUInt<uint32_t>(passes, "Argon2 passes");
|
|
40
|
+
uint32_t versionU = validateUInt<uint32_t>(version, "Argon2 version");
|
|
41
|
+
|
|
33
42
|
ncrypto::Buffer<const char> passBuf{message->size() > 0 ? reinterpret_cast<const char*>(message->data()) : "", message->size()};
|
|
34
43
|
|
|
35
44
|
ncrypto::Buffer<const unsigned char> saltBuf{nonce->size() > 0 ? reinterpret_cast<const unsigned char*>(nonce->data())
|
|
@@ -46,9 +55,7 @@ static std::shared_ptr<ArrayBuffer> hashImpl(const std::string& algorithm, const
|
|
|
46
55
|
adBuf = {reinterpret_cast<const unsigned char*>(associatedData.value()->data()), associatedData.value()->size()};
|
|
47
56
|
}
|
|
48
57
|
|
|
49
|
-
auto result =
|
|
50
|
-
ncrypto::argon2(passBuf, saltBuf, static_cast<uint32_t>(parallelism), static_cast<size_t>(tagLength), static_cast<uint32_t>(memory),
|
|
51
|
-
static_cast<uint32_t>(passes), static_cast<uint32_t>(version), secretBuf, adBuf, type);
|
|
58
|
+
auto result = ncrypto::argon2(passBuf, saltBuf, parallelismU, tagLengthU, memoryU, passesU, versionU, secretBuf, adBuf, type);
|
|
52
59
|
|
|
53
60
|
if (!result) {
|
|
54
61
|
unsigned long err = ERR_peek_last_error();
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
#include <NitroModules/ArrayBuffer.hpp>
|
|
4
4
|
#include <cstring>
|
|
5
|
+
#include <memory>
|
|
5
6
|
#include <stdexcept>
|
|
6
7
|
|
|
7
8
|
#include "QuickCryptoUtils.hpp"
|
|
@@ -67,10 +68,11 @@ std::shared_ptr<ArrayBuffer> HybridBlake3::digest(std::optional<double> length)
|
|
|
67
68
|
outLen = static_cast<size_t>(len);
|
|
68
69
|
}
|
|
69
70
|
|
|
70
|
-
auto output =
|
|
71
|
-
blake3_hasher_finalize(&hasher, output, outLen);
|
|
71
|
+
auto output = std::make_unique<uint8_t[]>(outLen);
|
|
72
|
+
blake3_hasher_finalize(&hasher, output.get(), outLen);
|
|
72
73
|
|
|
73
|
-
|
|
74
|
+
uint8_t* raw_ptr = output.get();
|
|
75
|
+
return std::make_shared<margelo::nitro::NativeArrayBuffer>(output.release(), outLen, [raw_ptr]() { delete[] raw_ptr; });
|
|
74
76
|
}
|
|
75
77
|
|
|
76
78
|
void HybridBlake3::reset() {
|
package/cpp/cipher/CCMCipher.cpp
CHANGED
|
@@ -18,11 +18,10 @@ void CCMCipher::init(const std::shared_ptr<ArrayBuffer> cipher_key, const std::s
|
|
|
18
18
|
checkCtx();
|
|
19
19
|
|
|
20
20
|
// 2. Perform CCM-specific initialization
|
|
21
|
-
|
|
22
|
-
size_t iv_len = native_iv->size();
|
|
21
|
+
size_t iv_len = iv->size();
|
|
23
22
|
|
|
24
23
|
// Set the IV length using CCM-specific control
|
|
25
|
-
if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_IVLEN, iv_len, nullptr) != 1) {
|
|
24
|
+
if (EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_CCM_SET_IVLEN, iv_len, nullptr) != 1) {
|
|
26
25
|
unsigned long err = ERR_get_error();
|
|
27
26
|
char err_buf[256];
|
|
28
27
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
|
@@ -31,7 +30,7 @@ void CCMCipher::init(const std::shared_ptr<ArrayBuffer> cipher_key, const std::s
|
|
|
31
30
|
|
|
32
31
|
// Set the expected/output tag length using CCM-specific control.
|
|
33
32
|
// auth_tag_len should have been defaulted or set via setArgs in the base init.
|
|
34
|
-
if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_TAG, auth_tag_len, nullptr) != 1) {
|
|
33
|
+
if (EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_CCM_SET_TAG, auth_tag_len, nullptr) != 1) {
|
|
35
34
|
unsigned long err = ERR_get_error();
|
|
36
35
|
char err_buf[256];
|
|
37
36
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
|
@@ -39,12 +38,11 @@ void CCMCipher::init(const std::shared_ptr<ArrayBuffer> cipher_key, const std::s
|
|
|
39
38
|
}
|
|
40
39
|
|
|
41
40
|
// Finally, initialize the key and IV using the parameters passed to this function.
|
|
42
|
-
|
|
43
|
-
const unsigned char*
|
|
44
|
-
const unsigned char* iv_ptr = reinterpret_cast<const unsigned char*>(native_iv->data());
|
|
41
|
+
const unsigned char* key_ptr = reinterpret_cast<const unsigned char*>(cipher_key->data());
|
|
42
|
+
const unsigned char* iv_ptr = reinterpret_cast<const unsigned char*>(iv->data());
|
|
45
43
|
|
|
46
44
|
// The last argument (is_cipher) should be consistent with the initial setup call.
|
|
47
|
-
if (EVP_CipherInit_ex(ctx, nullptr, nullptr, key_ptr, iv_ptr, is_cipher) != 1) {
|
|
45
|
+
if (EVP_CipherInit_ex(ctx.get(), nullptr, nullptr, key_ptr, iv_ptr, is_cipher) != 1) {
|
|
48
46
|
unsigned long err = ERR_get_error();
|
|
49
47
|
char err_buf[256];
|
|
50
48
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
|
@@ -55,8 +53,8 @@ void CCMCipher::init(const std::shared_ptr<ArrayBuffer> cipher_key, const std::s
|
|
|
55
53
|
std::shared_ptr<ArrayBuffer> CCMCipher::update(const std::shared_ptr<ArrayBuffer>& data) {
|
|
56
54
|
checkCtx();
|
|
57
55
|
checkNotFinalized();
|
|
58
|
-
|
|
59
|
-
size_t in_len =
|
|
56
|
+
has_update_called = true;
|
|
57
|
+
size_t in_len = data->size();
|
|
60
58
|
if (in_len < 0 || in_len > INT_MAX) {
|
|
61
59
|
throw std::runtime_error("Invalid message length");
|
|
62
60
|
}
|
|
@@ -66,7 +64,7 @@ std::shared_ptr<ArrayBuffer> CCMCipher::update(const std::shared_ptr<ArrayBuffer
|
|
|
66
64
|
maybePassAuthTagToOpenSSL();
|
|
67
65
|
}
|
|
68
66
|
|
|
69
|
-
int block_size = EVP_CIPHER_CTX_block_size(ctx);
|
|
67
|
+
int block_size = EVP_CIPHER_CTX_block_size(ctx.get());
|
|
70
68
|
if (block_size <= 0) {
|
|
71
69
|
throw std::runtime_error("Invalid block size in update");
|
|
72
70
|
}
|
|
@@ -76,16 +74,20 @@ std::shared_ptr<ArrayBuffer> CCMCipher::update(const std::shared_ptr<ArrayBuffer
|
|
|
76
74
|
}
|
|
77
75
|
|
|
78
76
|
auto out_buf = std::make_unique<unsigned char[]>(out_len);
|
|
79
|
-
const uint8_t* in = reinterpret_cast<const uint8_t*>(
|
|
77
|
+
const uint8_t* in = reinterpret_cast<const uint8_t*>(data->data());
|
|
80
78
|
|
|
81
79
|
int actual_out_len = 0;
|
|
82
|
-
int ret = EVP_CipherUpdate(ctx, out_buf.get(), &actual_out_len, in, in_len);
|
|
80
|
+
int ret = EVP_CipherUpdate(ctx.get(), out_buf.get(), &actual_out_len, in, in_len);
|
|
83
81
|
|
|
84
82
|
if (!is_cipher) {
|
|
85
|
-
// Decryption:
|
|
83
|
+
// Decryption: tag verification happens during update for CCM. Don't
|
|
84
|
+
// throw here — defer the failure to final() so callers see the standard
|
|
85
|
+
// "auth tag mismatch on final" semantics. This also covers the misuse
|
|
86
|
+
// case where setAuthTag() was never called: ret <= 0 here, we record
|
|
87
|
+
// it, and final() turns it into a thrown error.
|
|
86
88
|
if (ret <= 0) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
+
pending_auth_failed = true;
|
|
90
|
+
actual_out_len = 0;
|
|
89
91
|
}
|
|
90
92
|
} else {
|
|
91
93
|
// Encryption: Check for standard errors
|
|
@@ -107,22 +109,29 @@ std::shared_ptr<ArrayBuffer> CCMCipher::final() {
|
|
|
107
109
|
checkCtx();
|
|
108
110
|
checkNotFinalized();
|
|
109
111
|
|
|
110
|
-
// CCM decryption does not use final
|
|
112
|
+
// CCM decryption does not use final for the verification step itself
|
|
113
|
+
// (that happens in update()), but final() is still where misuse must
|
|
114
|
+
// surface — both "setAuthTag was never called" and "the tag we did set
|
|
115
|
+
// didn't match the ciphertext" land here.
|
|
111
116
|
if (!is_cipher) {
|
|
112
117
|
is_finalized = true;
|
|
113
|
-
|
|
114
|
-
|
|
118
|
+
if (auth_tag_state == kAuthTagUnknown || pending_auth_failed) {
|
|
119
|
+
throw std::runtime_error("Unsupported state or unable to authenticate data");
|
|
120
|
+
}
|
|
121
|
+
auto empty_output = std::make_unique<unsigned char[]>(0);
|
|
122
|
+
unsigned char* raw_ptr = empty_output.get();
|
|
123
|
+
return std::make_shared<NativeArrayBuffer>(empty_output.release(), 0, [raw_ptr]() { delete[] raw_ptr; });
|
|
115
124
|
}
|
|
116
125
|
|
|
117
126
|
// Proceed only for encryption
|
|
118
|
-
int block_size = EVP_CIPHER_CTX_block_size(ctx);
|
|
127
|
+
int block_size = EVP_CIPHER_CTX_block_size(ctx.get());
|
|
119
128
|
if (block_size <= 0) {
|
|
120
129
|
throw std::runtime_error("Invalid block size");
|
|
121
130
|
}
|
|
122
131
|
auto out_buf = std::make_unique<unsigned char[]>(block_size);
|
|
123
132
|
int out_len = 0;
|
|
124
133
|
|
|
125
|
-
if (!EVP_CipherFinal_ex(ctx, out_buf.get(), &out_len)) {
|
|
134
|
+
if (!EVP_CipherFinal_ex(ctx.get(), out_buf.get(), &out_len)) {
|
|
126
135
|
unsigned long err = ERR_get_error();
|
|
127
136
|
char err_buf[256];
|
|
128
137
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
|
@@ -133,7 +142,7 @@ std::shared_ptr<ArrayBuffer> CCMCipher::final() {
|
|
|
133
142
|
auth_tag_len = sizeof(auth_tag);
|
|
134
143
|
}
|
|
135
144
|
|
|
136
|
-
if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_GET_TAG, auth_tag_len, auth_tag) != 1) {
|
|
145
|
+
if (EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_CCM_GET_TAG, auth_tag_len, auth_tag) != 1) {
|
|
137
146
|
unsigned long err = ERR_get_error();
|
|
138
147
|
char err_buf[256];
|
|
139
148
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
|
@@ -148,6 +157,7 @@ std::shared_ptr<ArrayBuffer> CCMCipher::final() {
|
|
|
148
157
|
|
|
149
158
|
bool CCMCipher::setAAD(const std::shared_ptr<ArrayBuffer>& data, std::optional<double> plaintextLength) {
|
|
150
159
|
checkCtx();
|
|
160
|
+
checkAADBeforeUpdate();
|
|
151
161
|
if (!plaintextLength.has_value()) {
|
|
152
162
|
throw std::runtime_error("CCM mode requires plaintextLength to be set");
|
|
153
163
|
}
|
|
@@ -172,14 +182,13 @@ bool CCMCipher::setAAD(const std::shared_ptr<ArrayBuffer>& data, std::optional<d
|
|
|
172
182
|
int out_len = 0;
|
|
173
183
|
|
|
174
184
|
// Get AAD data and length *before* deciding whether to set total length
|
|
175
|
-
|
|
176
|
-
size_t aad_len = native_aad->size();
|
|
185
|
+
size_t aad_len = data->size();
|
|
177
186
|
|
|
178
187
|
// 1. Set the total *ciphertext* length. This seems necessary based on examples,
|
|
179
188
|
// BUT the wiki says "(only needed if AAD is passed)". Let's skip if decrypting and AAD length is 0.
|
|
180
189
|
bool should_set_total_length = is_cipher || aad_len > 0;
|
|
181
190
|
if (should_set_total_length) {
|
|
182
|
-
if (EVP_CipherUpdate(ctx, nullptr, &out_len, nullptr, data_len) != 1) {
|
|
191
|
+
if (EVP_CipherUpdate(ctx.get(), nullptr, &out_len, nullptr, data_len) != 1) {
|
|
183
192
|
unsigned long err = ERR_get_error();
|
|
184
193
|
char err_buf[256];
|
|
185
194
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
|
@@ -190,7 +199,7 @@ bool CCMCipher::setAAD(const std::shared_ptr<ArrayBuffer>& data, std::optional<d
|
|
|
190
199
|
// 2. Process AAD Data
|
|
191
200
|
// Per OpenSSL CCM decryption examples, this MUST be called even if aad_len is 0.
|
|
192
201
|
// Pass nullptr as the output buffer, the AAD data pointer, and its length.
|
|
193
|
-
if (EVP_CipherUpdate(ctx, nullptr, &out_len,
|
|
202
|
+
if (EVP_CipherUpdate(ctx.get(), nullptr, &out_len, data->data(), aad_len) != 1) {
|
|
194
203
|
unsigned long err = ERR_get_error();
|
|
195
204
|
char err_buf[256];
|
|
196
205
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
package/cpp/cipher/CCMCipher.hpp
CHANGED
|
@@ -7,10 +7,8 @@ namespace margelo::nitro::crypto {
|
|
|
7
7
|
class CCMCipher : public HybridCipher {
|
|
8
8
|
public:
|
|
9
9
|
CCMCipher() : HybridObject(TAG) {}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
ctx = nullptr;
|
|
13
|
-
}
|
|
10
|
+
// Destructor defaulted: HybridCipher's unique_ptr ctx frees itself.
|
|
11
|
+
~CCMCipher() override = default;
|
|
14
12
|
|
|
15
13
|
void init(const std::shared_ptr<ArrayBuffer> cipher_key, const std::shared_ptr<ArrayBuffer> iv) override;
|
|
16
14
|
std::shared_ptr<ArrayBuffer> update(const std::shared_ptr<ArrayBuffer>& data) override;
|
|
@@ -7,11 +7,8 @@
|
|
|
7
7
|
namespace margelo::nitro::crypto {
|
|
8
8
|
|
|
9
9
|
void ChaCha20Cipher::init(const std::shared_ptr<ArrayBuffer> cipher_key, const std::shared_ptr<ArrayBuffer> iv) {
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
EVP_CIPHER_CTX_free(ctx);
|
|
13
|
-
ctx = nullptr;
|
|
14
|
-
}
|
|
10
|
+
// Resetting the unique_ptr frees any previous context.
|
|
11
|
+
ctx.reset();
|
|
15
12
|
|
|
16
13
|
// Get ChaCha20 cipher implementation
|
|
17
14
|
const EVP_CIPHER* cipher = EVP_chacha20();
|
|
@@ -20,44 +17,39 @@ void ChaCha20Cipher::init(const std::shared_ptr<ArrayBuffer> cipher_key, const s
|
|
|
20
17
|
}
|
|
21
18
|
|
|
22
19
|
// Create a new context
|
|
23
|
-
ctx
|
|
20
|
+
ctx.reset(EVP_CIPHER_CTX_new());
|
|
24
21
|
if (!ctx) {
|
|
25
22
|
throw std::runtime_error("Failed to create cipher context");
|
|
26
23
|
}
|
|
27
24
|
|
|
28
25
|
// Initialize the encryption/decryption operation
|
|
29
|
-
if (EVP_CipherInit_ex(ctx, cipher, nullptr, nullptr, nullptr, is_cipher) != 1) {
|
|
26
|
+
if (EVP_CipherInit_ex(ctx.get(), cipher, nullptr, nullptr, nullptr, is_cipher) != 1) {
|
|
30
27
|
unsigned long err = ERR_get_error();
|
|
31
28
|
char err_buf[256];
|
|
32
29
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
|
33
|
-
|
|
34
|
-
ctx = nullptr;
|
|
30
|
+
ctx.reset();
|
|
35
31
|
throw std::runtime_error("ChaCha20Cipher: Failed initial CipherInit setup: " + std::string(err_buf));
|
|
36
32
|
}
|
|
37
33
|
|
|
38
34
|
// Set key and IV
|
|
39
|
-
auto native_key = ToNativeArrayBuffer(cipher_key);
|
|
40
|
-
auto native_iv = ToNativeArrayBuffer(iv);
|
|
41
|
-
|
|
42
35
|
// Validate key size
|
|
43
|
-
if (
|
|
36
|
+
if (cipher_key->size() != kKeySize) {
|
|
44
37
|
throw std::runtime_error("ChaCha20 key must be 32 bytes");
|
|
45
38
|
}
|
|
46
39
|
|
|
47
40
|
// Validate IV size
|
|
48
|
-
if (
|
|
41
|
+
if (iv->size() != kIVSize) {
|
|
49
42
|
throw std::runtime_error("ChaCha20 IV must be 16 bytes");
|
|
50
43
|
}
|
|
51
44
|
|
|
52
|
-
const unsigned char* key_ptr = reinterpret_cast<const unsigned char*>(
|
|
53
|
-
const unsigned char* iv_ptr = reinterpret_cast<const unsigned char*>(
|
|
45
|
+
const unsigned char* key_ptr = reinterpret_cast<const unsigned char*>(cipher_key->data());
|
|
46
|
+
const unsigned char* iv_ptr = reinterpret_cast<const unsigned char*>(iv->data());
|
|
54
47
|
|
|
55
|
-
if (EVP_CipherInit_ex(ctx, nullptr, nullptr, key_ptr, iv_ptr, is_cipher) != 1) {
|
|
48
|
+
if (EVP_CipherInit_ex(ctx.get(), nullptr, nullptr, key_ptr, iv_ptr, is_cipher) != 1) {
|
|
56
49
|
unsigned long err = ERR_get_error();
|
|
57
50
|
char err_buf[256];
|
|
58
51
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
|
59
|
-
|
|
60
|
-
ctx = nullptr;
|
|
52
|
+
ctx.reset();
|
|
61
53
|
throw std::runtime_error("ChaCha20Cipher: Failed to set key/IV: " + std::string(err_buf));
|
|
62
54
|
}
|
|
63
55
|
}
|
|
@@ -65,19 +57,17 @@ void ChaCha20Cipher::init(const std::shared_ptr<ArrayBuffer> cipher_key, const s
|
|
|
65
57
|
std::shared_ptr<ArrayBuffer> ChaCha20Cipher::update(const std::shared_ptr<ArrayBuffer>& data) {
|
|
66
58
|
checkCtx();
|
|
67
59
|
checkNotFinalized();
|
|
68
|
-
|
|
69
|
-
size_t in_len = native_data->size();
|
|
60
|
+
size_t in_len = data->size();
|
|
70
61
|
if (in_len > INT_MAX) {
|
|
71
62
|
throw std::runtime_error("Message too long");
|
|
72
63
|
}
|
|
73
64
|
|
|
74
65
|
// For ChaCha20, output size equals input size since it's a stream cipher
|
|
75
66
|
int out_len = in_len;
|
|
76
|
-
|
|
67
|
+
auto out_buf = std::make_unique<uint8_t[]>(out_len);
|
|
77
68
|
|
|
78
69
|
// Perform the cipher update operation
|
|
79
|
-
if (EVP_CipherUpdate(ctx,
|
|
80
|
-
delete[] out;
|
|
70
|
+
if (EVP_CipherUpdate(ctx.get(), out_buf.get(), &out_len, data->data(), in_len) != 1) {
|
|
81
71
|
unsigned long err = ERR_get_error();
|
|
82
72
|
char err_buf[256];
|
|
83
73
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
|
@@ -85,15 +75,17 @@ std::shared_ptr<ArrayBuffer> ChaCha20Cipher::update(const std::shared_ptr<ArrayB
|
|
|
85
75
|
}
|
|
86
76
|
|
|
87
77
|
// Create and return a new buffer of exact size needed
|
|
88
|
-
|
|
78
|
+
uint8_t* raw_ptr = out_buf.get();
|
|
79
|
+
return std::make_shared<NativeArrayBuffer>(out_buf.release(), out_len, [raw_ptr]() { delete[] raw_ptr; });
|
|
89
80
|
}
|
|
90
81
|
|
|
91
82
|
std::shared_ptr<ArrayBuffer> ChaCha20Cipher::final() {
|
|
92
83
|
checkCtx();
|
|
93
84
|
checkNotFinalized();
|
|
94
85
|
is_finalized = true;
|
|
95
|
-
|
|
96
|
-
|
|
86
|
+
auto empty_buf = std::make_unique<unsigned char[]>(0);
|
|
87
|
+
unsigned char* raw_ptr = empty_buf.get();
|
|
88
|
+
return std::make_shared<NativeArrayBuffer>(empty_buf.release(), 0, [raw_ptr]() { delete[] raw_ptr; });
|
|
97
89
|
}
|
|
98
90
|
|
|
99
91
|
} // namespace margelo::nitro::crypto
|
|
@@ -7,10 +7,8 @@ namespace margelo::nitro::crypto {
|
|
|
7
7
|
class ChaCha20Cipher : public HybridCipher {
|
|
8
8
|
public:
|
|
9
9
|
ChaCha20Cipher() : HybridObject(TAG) {}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
ctx = nullptr;
|
|
13
|
-
}
|
|
10
|
+
// Destructor defaulted: HybridCipher's unique_ptr ctx frees itself.
|
|
11
|
+
~ChaCha20Cipher() override = default;
|
|
14
12
|
|
|
15
13
|
void init(const std::shared_ptr<ArrayBuffer> cipher_key, const std::shared_ptr<ArrayBuffer> iv) override;
|
|
16
14
|
std::shared_ptr<ArrayBuffer> update(const std::shared_ptr<ArrayBuffer>& data) override;
|
|
@@ -7,11 +7,8 @@
|
|
|
7
7
|
namespace margelo::nitro::crypto {
|
|
8
8
|
|
|
9
9
|
void ChaCha20Poly1305Cipher::init(const std::shared_ptr<ArrayBuffer> cipher_key, const std::shared_ptr<ArrayBuffer> iv) {
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
EVP_CIPHER_CTX_free(ctx);
|
|
13
|
-
ctx = nullptr;
|
|
14
|
-
}
|
|
10
|
+
// Resetting the unique_ptr frees any previous context.
|
|
11
|
+
ctx.reset();
|
|
15
12
|
|
|
16
13
|
// Get ChaCha20-Poly1305 cipher implementation
|
|
17
14
|
const EVP_CIPHER* cipher = EVP_chacha20_poly1305();
|
|
@@ -20,65 +17,63 @@ void ChaCha20Poly1305Cipher::init(const std::shared_ptr<ArrayBuffer> cipher_key,
|
|
|
20
17
|
}
|
|
21
18
|
|
|
22
19
|
// Create a new context
|
|
23
|
-
ctx
|
|
20
|
+
ctx.reset(EVP_CIPHER_CTX_new());
|
|
24
21
|
if (!ctx) {
|
|
25
22
|
throw std::runtime_error("Failed to create cipher context");
|
|
26
23
|
}
|
|
27
24
|
|
|
28
25
|
// Initialize the encryption/decryption operation
|
|
29
|
-
if (EVP_CipherInit_ex(ctx, cipher, nullptr, nullptr, nullptr, is_cipher) != 1) {
|
|
26
|
+
if (EVP_CipherInit_ex(ctx.get(), cipher, nullptr, nullptr, nullptr, is_cipher) != 1) {
|
|
30
27
|
unsigned long err = ERR_get_error();
|
|
31
28
|
char err_buf[256];
|
|
32
29
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
|
33
|
-
|
|
34
|
-
ctx = nullptr;
|
|
30
|
+
ctx.reset();
|
|
35
31
|
throw std::runtime_error("ChaCha20Poly1305Cipher: Failed initial CipherInit setup: " + std::string(err_buf));
|
|
36
32
|
}
|
|
37
33
|
|
|
38
34
|
// Set key and IV
|
|
39
|
-
auto native_key = ToNativeArrayBuffer(cipher_key);
|
|
40
|
-
auto native_iv = ToNativeArrayBuffer(iv);
|
|
41
|
-
|
|
42
35
|
// Validate key size
|
|
43
|
-
if (
|
|
36
|
+
if (cipher_key->size() != kKeySize) {
|
|
44
37
|
throw std::runtime_error("ChaCha20-Poly1305 key must be 32 bytes");
|
|
45
38
|
}
|
|
46
39
|
|
|
47
40
|
// Validate nonce size
|
|
48
|
-
if (
|
|
41
|
+
if (iv->size() != kNonceSize) {
|
|
49
42
|
throw std::runtime_error("ChaCha20-Poly1305 nonce must be 12 bytes");
|
|
50
43
|
}
|
|
51
44
|
|
|
52
|
-
const unsigned char* key_ptr = reinterpret_cast<const unsigned char*>(
|
|
53
|
-
const unsigned char* iv_ptr = reinterpret_cast<const unsigned char*>(
|
|
45
|
+
const unsigned char* key_ptr = reinterpret_cast<const unsigned char*>(cipher_key->data());
|
|
46
|
+
const unsigned char* iv_ptr = reinterpret_cast<const unsigned char*>(iv->data());
|
|
54
47
|
|
|
55
|
-
if (EVP_CipherInit_ex(ctx, nullptr, nullptr, key_ptr, iv_ptr, is_cipher) != 1) {
|
|
48
|
+
if (EVP_CipherInit_ex(ctx.get(), nullptr, nullptr, key_ptr, iv_ptr, is_cipher) != 1) {
|
|
56
49
|
unsigned long err = ERR_get_error();
|
|
57
50
|
char err_buf[256];
|
|
58
51
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
|
59
|
-
|
|
60
|
-
ctx = nullptr;
|
|
52
|
+
ctx.reset();
|
|
61
53
|
throw std::runtime_error("ChaCha20Poly1305Cipher: Failed to set key/IV: " + std::string(err_buf));
|
|
62
54
|
}
|
|
63
55
|
is_finalized = false;
|
|
56
|
+
has_update_called = false;
|
|
57
|
+
has_aad = false;
|
|
58
|
+
pending_auth_failed = false;
|
|
59
|
+
auth_tag_state = kAuthTagUnknown;
|
|
64
60
|
}
|
|
65
61
|
|
|
66
62
|
std::shared_ptr<ArrayBuffer> ChaCha20Poly1305Cipher::update(const std::shared_ptr<ArrayBuffer>& data) {
|
|
67
63
|
checkCtx();
|
|
68
64
|
checkNotFinalized();
|
|
69
|
-
|
|
70
|
-
size_t in_len =
|
|
65
|
+
has_update_called = true;
|
|
66
|
+
size_t in_len = data->size();
|
|
71
67
|
if (in_len > INT_MAX) {
|
|
72
68
|
throw std::runtime_error("Message too long");
|
|
73
69
|
}
|
|
74
70
|
|
|
75
71
|
// For ChaCha20-Poly1305, output size equals input size since it's a stream cipher
|
|
76
72
|
int out_len = in_len;
|
|
77
|
-
|
|
73
|
+
auto out_buf = std::make_unique<uint8_t[]>(out_len);
|
|
78
74
|
|
|
79
75
|
// Perform the cipher update operation
|
|
80
|
-
if (EVP_CipherUpdate(ctx,
|
|
81
|
-
delete[] out;
|
|
76
|
+
if (EVP_CipherUpdate(ctx.get(), out_buf.get(), &out_len, data->data(), in_len) != 1) {
|
|
82
77
|
unsigned long err = ERR_get_error();
|
|
83
78
|
char err_buf[256];
|
|
84
79
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
|
@@ -86,19 +81,28 @@ std::shared_ptr<ArrayBuffer> ChaCha20Poly1305Cipher::update(const std::shared_pt
|
|
|
86
81
|
}
|
|
87
82
|
|
|
88
83
|
// Create and return a new buffer of exact size needed
|
|
89
|
-
|
|
84
|
+
uint8_t* raw_ptr = out_buf.get();
|
|
85
|
+
return std::make_shared<NativeArrayBuffer>(out_buf.release(), out_len, [raw_ptr]() { delete[] raw_ptr; });
|
|
90
86
|
}
|
|
91
87
|
|
|
92
88
|
std::shared_ptr<ArrayBuffer> ChaCha20Poly1305Cipher::final() {
|
|
93
89
|
checkCtx();
|
|
94
90
|
checkNotFinalized();
|
|
95
91
|
|
|
92
|
+
// For decryption, the auth tag must have been provided via setAuthTag
|
|
93
|
+
// before final(). OpenSSL's ChaCha20-Poly1305 EVP_CipherFinal_ex does
|
|
94
|
+
// not flag a missing tag as an error (it simply doesn't verify), which
|
|
95
|
+
// would silently accept unauthenticated ciphertext — defeating the whole
|
|
96
|
+
// point of an AEAD. Enforce the precondition explicitly.
|
|
97
|
+
if (!is_cipher && auth_tag_state == kAuthTagUnknown) {
|
|
98
|
+
throw std::runtime_error("Unsupported state or unable to authenticate data");
|
|
99
|
+
}
|
|
100
|
+
|
|
96
101
|
// For ChaCha20-Poly1305, we need to call final to generate the tag
|
|
97
102
|
int out_len = 0;
|
|
98
|
-
|
|
103
|
+
auto out_buf = std::make_unique<unsigned char[]>(0);
|
|
99
104
|
|
|
100
|
-
if (EVP_CipherFinal_ex(ctx,
|
|
101
|
-
delete[] out;
|
|
105
|
+
if (EVP_CipherFinal_ex(ctx.get(), out_buf.get(), &out_len) != 1) {
|
|
102
106
|
unsigned long err = ERR_get_error();
|
|
103
107
|
char err_buf[256];
|
|
104
108
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
|
@@ -106,17 +110,18 @@ std::shared_ptr<ArrayBuffer> ChaCha20Poly1305Cipher::final() {
|
|
|
106
110
|
}
|
|
107
111
|
|
|
108
112
|
is_finalized = true;
|
|
109
|
-
|
|
113
|
+
unsigned char* raw_ptr = out_buf.get();
|
|
114
|
+
return std::make_shared<NativeArrayBuffer>(out_buf.release(), out_len, [raw_ptr]() { delete[] raw_ptr; });
|
|
110
115
|
}
|
|
111
116
|
|
|
112
117
|
bool ChaCha20Poly1305Cipher::setAAD(const std::shared_ptr<ArrayBuffer>& data, std::optional<double> plaintextLength) {
|
|
113
118
|
checkCtx();
|
|
114
|
-
|
|
115
|
-
size_t aad_len =
|
|
119
|
+
checkAADBeforeUpdate();
|
|
120
|
+
size_t aad_len = data->size();
|
|
116
121
|
|
|
117
122
|
// Set AAD data
|
|
118
123
|
int out_len = 0;
|
|
119
|
-
if (EVP_CipherUpdate(ctx, nullptr, &out_len,
|
|
124
|
+
if (EVP_CipherUpdate(ctx.get(), nullptr, &out_len, data->data(), aad_len) != 1) {
|
|
120
125
|
unsigned long err = ERR_get_error();
|
|
121
126
|
char err_buf[256];
|
|
122
127
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
|
@@ -136,7 +141,7 @@ std::shared_ptr<ArrayBuffer> ChaCha20Poly1305Cipher::getAuthTag() {
|
|
|
136
141
|
|
|
137
142
|
// Get the authentication tag
|
|
138
143
|
auto tag_buf = std::make_unique<uint8_t[]>(kTagSize);
|
|
139
|
-
if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, kTagSize, tag_buf.get()) != 1) {
|
|
144
|
+
if (EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_GET_TAG, kTagSize, tag_buf.get()) != 1) {
|
|
140
145
|
unsigned long err = ERR_get_error();
|
|
141
146
|
char err_buf[256];
|
|
142
147
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
|
@@ -153,17 +158,17 @@ bool ChaCha20Poly1305Cipher::setAuthTag(const std::shared_ptr<ArrayBuffer>& tag)
|
|
|
153
158
|
throw std::runtime_error("setAuthTag can only be called during decryption");
|
|
154
159
|
}
|
|
155
160
|
|
|
156
|
-
|
|
157
|
-
if (native_tag->size() != kTagSize) {
|
|
161
|
+
if (tag->size() != kTagSize) {
|
|
158
162
|
throw std::runtime_error("ChaCha20-Poly1305 tag must be 16 bytes");
|
|
159
163
|
}
|
|
160
164
|
|
|
161
|
-
if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, kTagSize,
|
|
165
|
+
if (EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_TAG, kTagSize, tag->data()) != 1) {
|
|
162
166
|
unsigned long err = ERR_get_error();
|
|
163
167
|
char err_buf[256];
|
|
164
168
|
ERR_error_string_n(err, err_buf, sizeof(err_buf));
|
|
165
169
|
throw std::runtime_error("ChaCha20Poly1305Cipher: Failed to set auth tag: " + std::string(err_buf));
|
|
166
170
|
}
|
|
171
|
+
auth_tag_state = kAuthTagPassedToOpenSSL;
|
|
167
172
|
return true;
|
|
168
173
|
}
|
|
169
174
|
|
|
@@ -7,10 +7,8 @@ namespace margelo::nitro::crypto {
|
|
|
7
7
|
class ChaCha20Poly1305Cipher : public HybridCipher {
|
|
8
8
|
public:
|
|
9
9
|
ChaCha20Poly1305Cipher() : HybridObject(TAG) {}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
ctx = nullptr;
|
|
13
|
-
}
|
|
10
|
+
// Destructor defaulted: HybridCipher's unique_ptr ctx frees itself.
|
|
11
|
+
~ChaCha20Poly1305Cipher() override = default;
|
|
14
12
|
|
|
15
13
|
void init(const std::shared_ptr<ArrayBuffer> cipher_key, const std::shared_ptr<ArrayBuffer> iv) override;
|
|
16
14
|
std::shared_ptr<ArrayBuffer> update(const std::shared_ptr<ArrayBuffer>& data) override;
|