Project import generated by Copybara.

GitOrigin-RevId: 7f4c114221f28e2491e12aec25af85bc6317eb9c
Change-Id: Ib4716744ede7689846ae6c92f5a291fbb6ba5e7e
diff --git a/nearby/Dockerfile b/nearby/Dockerfile
index 331e8e6..7a32b21 100644
--- a/nearby/Dockerfile
+++ b/nearby/Dockerfile
@@ -16,7 +16,7 @@
 
 # install system deps
 RUN apt-get update && apt-get install -y build-essential cmake gcc wget vim \
-clang git checkinstall zlib1g-dev rapidjson-dev libbenchmark-dev curl \
+clang git checkinstall zlib1g-dev libjsoncpp-dev libbenchmark-dev curl \
 protobuf-compiler pkg-config libdbus-1-dev libssl-dev ninja-build
 RUN apt upgrade -y
 
diff --git a/nearby/connections/ukey2/ukey2_connections/fuzz/Cargo.lock b/nearby/connections/ukey2/ukey2_connections/fuzz/Cargo.lock
index 8320405..8f42dbe 100644
--- a/nearby/connections/ukey2/ukey2_connections/fuzz/Cargo.lock
+++ b/nearby/connections/ukey2/ukey2_connections/fuzz/Cargo.lock
@@ -71,9 +71,9 @@
 
 [[package]]
 name = "base16ct"
-version = "0.1.1"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
 
 [[package]]
 name = "bitflags"
@@ -156,9 +156,9 @@
 
 [[package]]
 name = "crypto-bigint"
-version = "0.4.9"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef"
+checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7"
 dependencies = [
  "generic-array",
  "rand_core",
@@ -180,6 +180,9 @@
 [[package]]
 name = "crypto_provider"
 version = "0.1.0"
+dependencies = [
+ "bytes",
+]
 
 [[package]]
 name = "crypto_provider_rustcrypto"
@@ -230,11 +233,12 @@
 
 [[package]]
 name = "der"
-version = "0.6.1"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de"
+checksum = "bc906908ea6458456e5eaa160a9c08543ec3d1e6f71e2235cedd660cb65f9df0"
 dependencies = [
  "const-oid",
+ "zeroize",
 ]
 
 [[package]]
@@ -299,13 +303,12 @@
 
 [[package]]
 name = "elliptic-curve"
-version = "0.12.3"
+version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3"
+checksum = "6ea5a92946e8614bb585254898bb7dd1ddad241ace60c52149e3765e34cc039d"
 dependencies = [
  "base16ct",
  "crypto-bigint",
- "der",
  "digest",
  "ff",
  "generic-array",
@@ -349,9 +352,9 @@
 
 [[package]]
 name = "ff"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
+checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
 dependencies = [
  "rand_core",
  "subtle",
@@ -371,6 +374,7 @@
 dependencies = [
  "typenum",
  "version_check",
+ "zeroize",
 ]
 
 [[package]]
@@ -386,9 +390,9 @@
 
 [[package]]
 name = "group"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
 dependencies = [
  "ff",
  "rand_core",
@@ -578,9 +582,9 @@
 
 [[package]]
 name = "p256"
-version = "0.12.0"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49c124b3cbce43bcbac68c58ec181d98ed6cc7e6d0aa7c3ba97b2563410b0e55"
+checksum = "7270da3e5caa82afd3deb054cc237905853813aea3859544bc082c3fe55b8d47"
 dependencies = [
  "elliptic-curve",
  "primeorder",
@@ -622,9 +626,9 @@
 
 [[package]]
 name = "primeorder"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b54f7131b3dba65a2f414cf5bd25b66d4682e4608610668eae785750ba4c5b2"
+checksum = "7613fdcc0831c10060fa69833ea8fa2caa94b6456f51e25356a885b530a2e3d0"
 dependencies = [
  "elliptic-curve",
 ]
@@ -770,9 +774,9 @@
 
 [[package]]
 name = "sec1"
-version = "0.3.0"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928"
+checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e"
 dependencies = [
  "base16ct",
  "der",
diff --git a/nearby/crypto/crypto_provider/src/lib.rs b/nearby/crypto/crypto_provider/src/lib.rs
index bc6d4d2..4eb5563 100644
--- a/nearby/crypto/crypto_provider/src/lib.rs
+++ b/nearby/crypto/crypto_provider/src/lib.rs
@@ -19,6 +19,11 @@
 
 use core::fmt::Debug;
 
+#[cfg(feature = "testing")]
+pub use rstest_reuse;
+
+use crate::aes::{Aes128Key, Aes256Key};
+
 /// mod containing hmac trait
 pub mod hkdf;
 
@@ -74,6 +79,12 @@
     /// The trait defining ed25519, a Edwards-curve Digital Signature Algorithm signature scheme
     /// using SHA-512 (SHA-2) and Curve25519
     type Ed25519: ed25519::Ed25519Provider;
+    /// The trait defining AES-128-GCM-SIV, a nonce-misuse resistant AEAD with a key size of 16 bytes.
+    #[cfg(feature = "gcm_siv")]
+    type Aes128GcmSiv: aes::gcm_siv::AesGcmSiv<Key = Aes128Key>;
+    /// The trait defining AES-256-GCM-SIV, a nonce-misuse resistant AEAD with a key size of 32 bytes.
+    #[cfg(feature = "gcm_siv")]
+    type Aes256GcmSiv: aes::gcm_siv::AesGcmSiv<Key = Aes256Key>;
 
     /// The cryptographically secure random number generator
     type CryptoRng: CryptoRng;
@@ -114,27 +125,27 @@
     }
 }
 
-use crate::aes::{Aes128Key, Aes256Key};
-#[cfg(feature = "testing")]
-pub use rstest_reuse;
-
 /// Utilities for testing implementations of this crate.
 #[cfg(feature = "testing")]
 pub mod testing {
     extern crate alloc;
-    use crate::CryptoProvider;
+
     use alloc::{format, string::String};
     use core::marker::PhantomData;
+
     use hex_literal::hex;
     use rand::{Rng, RngCore};
     use rstest_reuse::template;
 
+    use crate::CryptoProvider;
+
     /// Common items that needs to be imported to use these test cases
     pub mod prelude {
-        pub use super::CryptoProviderTestCase;
         pub use rstest::rstest;
         pub use rstest_reuse;
         pub use rstest_reuse::apply;
+
+        pub use super::CryptoProviderTestCase;
     }
 
     /// A test case for Crypto Provider. A test case is a function that panics if the test fails.
diff --git a/nearby/crypto/crypto_provider_boringssl/src/lib.rs b/nearby/crypto/crypto_provider_boringssl/src/lib.rs
index c8c466d..6618bab 100644
--- a/nearby/crypto/crypto_provider_boringssl/src/lib.rs
+++ b/nearby/crypto/crypto_provider_boringssl/src/lib.rs
@@ -56,6 +56,8 @@
     type AesCtr128 = Aes128Stubs;
     type AesCtr256 = Aes256Stubs;
     type Ed25519 = Ed25519Stubs;
+    type Aes128GcmSiv = Aes128Stubs;
+    type Aes256GcmSiv = Aes256Stubs;
     type CryptoRng = BoringSslRng;
 
     fn constant_time_eq(_a: &[u8], _b: &[u8]) -> bool {
diff --git a/nearby/crypto/crypto_provider_openssl/Cargo.toml b/nearby/crypto/crypto_provider_openssl/Cargo.toml
index 92d66a7..78c6cf3 100644
--- a/nearby/crypto/crypto_provider_openssl/Cargo.toml
+++ b/nearby/crypto/crypto_provider_openssl/Cargo.toml
@@ -5,7 +5,7 @@
 publish.workspace = true
 
 [dependencies]
-crypto_provider = { path = "../crypto_provider", features = ["alloc", "std"] }
+crypto_provider = { path = "../crypto_provider", default-features = false, features = ["alloc", "std"] }
 openssl.workspace = true
 cfg-if.workspace = true
 
@@ -13,9 +13,9 @@
 
 [features]
 default = []
-boringssl = ["openssl/unstable_boringssl"]
+boringssl = ["openssl/unstable_boringssl", "crypto_provider/gcm_siv"]
 
 [dev-dependencies]
-crypto_provider = { path = "../crypto_provider", features = ["testing"] }
+crypto_provider = { path = "../crypto_provider", default-features = false, features = ["testing"] }
 rstest = "0.16.0"
 hex-literal.workspace = true
diff --git a/nearby/crypto/crypto_provider_openssl/src/aes.rs b/nearby/crypto/crypto_provider_openssl/src/aes.rs
index 742560a..ded187f 100644
--- a/nearby/crypto/crypto_provider_openssl/src/aes.rs
+++ b/nearby/crypto/crypto_provider_openssl/src/aes.rs
@@ -24,14 +24,17 @@
 
 //! Implementation of `crypto_provider::aes` types using openssl's `symm` module.
 
+use openssl::symm::{Cipher, Crypter, Mode};
+
 use crypto_provider::aes::cbc::{AesCbcIv, DecryptionError};
+use crypto_provider::aes::gcm_siv::{AesGcmSiv, GcmSivError};
 use crypto_provider::aes::{
     Aes, Aes128Key, Aes256Key, AesBlock, AesCipher, AesDecryptCipher, AesEncryptCipher, AesKey,
 };
-use openssl::symm::{Cipher, Crypter, Mode};
 
 /// Uber struct which contains impls for AES-128 fns
 pub struct Aes128;
+
 impl Aes for Aes128 {
     type Key = Aes128Key;
     type EncryptCipher = Aes128Cipher;
@@ -40,6 +43,7 @@
 
 /// Uber struct which contains impls for AES-256 fns
 pub struct Aes256;
+
 impl Aes for Aes256 {
     type Key = Aes256Key;
     type EncryptCipher = Aes256Cipher;
@@ -245,14 +249,53 @@
     }
 }
 
+/// Unimplemented AES-GCM-SIV implementation.
+pub struct OpenSslAesGcmSiv128;
+
+impl AesGcmSiv for OpenSslAesGcmSiv128 {
+    type Key = Aes128Key;
+
+    fn new(_key: &Self::Key) -> Self {
+        todo!()
+    }
+
+    fn encrypt(&self, _data: &mut Vec<u8>, _aad: &[u8], _nonce: &[u8]) -> Result<(), GcmSivError> {
+        todo!()
+    }
+
+    fn decrypt(&self, _data: &mut Vec<u8>, _aad: &[u8], _nonce: &[u8]) -> Result<(), GcmSivError> {
+        todo!()
+    }
+}
+
+pub struct OpenSslAesGcmSiv256;
+
+impl AesGcmSiv for OpenSslAesGcmSiv256 {
+    type Key = Aes256Key;
+
+    fn new(_key: &Self::Key) -> Self {
+        todo!()
+    }
+
+    fn encrypt(&self, _data: &mut Vec<u8>, _aad: &[u8], _nonce: &[u8]) -> Result<(), GcmSivError> {
+        todo!()
+    }
+
+    fn decrypt(&self, _data: &mut Vec<u8>, _aad: &[u8], _nonce: &[u8]) -> Result<(), GcmSivError> {
+        todo!()
+    }
+}
+
 #[cfg(test)]
 mod tests {
-    use super::*;
     use core::marker::PhantomData;
+
     use crypto_provider::aes::cbc::testing::*;
     use crypto_provider::aes::ctr::testing::*;
     use crypto_provider::aes::testing::*;
 
+    use super::*;
+
     #[apply(aes_128_ctr_test_cases)]
     fn aes_128_ctr_test(testcase: CryptoProviderTestCase<OpenSslAesCtr128>) {
         testcase(PhantomData);
diff --git a/nearby/crypto/crypto_provider_openssl/src/lib.rs b/nearby/crypto/crypto_provider_openssl/src/lib.rs
index 8930199..db926f0 100644
--- a/nearby/crypto/crypto_provider_openssl/src/lib.rs
+++ b/nearby/crypto/crypto_provider_openssl/src/lib.rs
@@ -17,12 +17,13 @@
 //! Crate which provides impls for CryptoProvider backed by openssl
 
 use cfg_if::cfg_if;
-use crypto_provider::CryptoRng;
 pub use openssl;
 use openssl::hash::MessageDigest;
 use openssl::md::MdRef;
 use openssl::rand::rand_bytes;
 
+use crypto_provider::CryptoRng;
+
 /// Contains the openssl backed AES implementations for CryptoProvider
 mod aes;
 /// Contains the openssl backed ed25519 impl for key generation, verification, and signing
@@ -79,6 +80,8 @@
     type AesCtr128 = aes::OpenSslAesCtr128;
     type AesCtr256 = aes::OpenSslAesCtr256;
     type Ed25519 = ed25519::Ed25519;
+    type Aes128GcmSiv = aes::OpenSslAesGcmSiv128;
+    type Aes256GcmSiv = aes::OpenSslAesGcmSiv256;
     type CryptoRng = OpenSslRng;
 
     fn constant_time_eq(a: &[u8], b: &[u8]) -> bool {
@@ -107,11 +110,13 @@
 
 #[cfg(test)]
 mod tests {
-    use crate::Openssl;
     use core::marker::PhantomData;
+
     use crypto_provider::sha2::testing::*;
     use crypto_provider::testing::*;
 
+    use crate::Openssl;
+
     #[apply(sha2_test_cases)]
     fn sha2_tests(testcase: CryptoProviderTestCase<Openssl>) {
         testcase(PhantomData);
diff --git a/nearby/crypto/crypto_provider_rustcrypto/src/lib.rs b/nearby/crypto/crypto_provider_rustcrypto/src/lib.rs
index 72ca033..e73ea11 100644
--- a/nearby/crypto/crypto_provider_rustcrypto/src/lib.rs
+++ b/nearby/crypto/crypto_provider_rustcrypto/src/lib.rs
@@ -23,6 +23,15 @@
 
 //! Crate which provides impls for CryptoProvider backed by RustCrypto crates
 
+use core::{fmt::Debug, marker::PhantomData};
+
+use cfg_if::cfg_if;
+pub use hkdf;
+pub use hmac;
+use rand::{Rng, RngCore, SeedableRng};
+use rand_core::CryptoRng;
+use subtle::ConstantTimeEq;
+
 /// Contains the RustCrypto backed AES impl for CryptoProvider
 pub mod aes;
 /// Contains the RustCrypto backed impl for ed25519 key generation, signing, and verification
@@ -38,15 +47,6 @@
 /// Contains the RustCrypto backed X25519 impl for CryptoProvider
 mod x25519;
 
-pub use hkdf;
-pub use hmac;
-
-use cfg_if::cfg_if;
-use core::{fmt::Debug, marker::PhantomData};
-use rand::{Rng, RngCore, SeedableRng};
-use rand_core::CryptoRng;
-use subtle::ConstantTimeEq;
-
 cfg_if! {
     if #[cfg(feature = "std")] {
         /// Providing a type alias for compatibility with existing usage of RustCrypto
@@ -91,6 +91,10 @@
     type AesCtr128 = aes::AesCtr128;
     type AesCtr256 = aes::AesCtr256;
     type Ed25519 = ed25519::Ed25519;
+    #[cfg(feature = "gcm_siv")]
+    type Aes128GcmSiv = aes::gcm_siv::AesGcmSiv128;
+    #[cfg(feature = "gcm_siv")]
+    type Aes256GcmSiv = aes::gcm_siv::AesGcmSiv256;
     type CryptoRng = RcRng<R>;
 
     fn constant_time_eq(a: &[u8], b: &[u8]) -> bool {
@@ -120,10 +124,12 @@
 
 #[cfg(test)]
 mod tests {
-    use crate::RustCrypto;
     use core::marker::PhantomData;
+
     use crypto_provider::sha2::testing::*;
 
+    use crate::RustCrypto;
+
     #[apply(sha2_test_cases)]
     fn sha2_tests(testcase: CryptoProviderTestCase<RustCrypto>) {
         testcase(PhantomData::<RustCrypto>);
diff --git a/nearby/crypto/crypto_provider_stubs/src/lib.rs b/nearby/crypto/crypto_provider_stubs/src/lib.rs
index c7c4876..fcfec39 100644
--- a/nearby/crypto/crypto_provider_stubs/src/lib.rs
+++ b/nearby/crypto/crypto_provider_stubs/src/lib.rs
@@ -17,8 +17,12 @@
 //! Can be removed once no one else is depending on it.
 
 #![allow(unused_variables)]
+
+use std::fmt::Debug;
+
 use crypto_provider::aes::cbc::{AesCbcIv, AesCbcPkcs7Padded, DecryptionError};
 use crypto_provider::aes::ctr::AesCtr;
+use crypto_provider::aes::gcm_siv::{AesGcmSiv, GcmSivError};
 use crypto_provider::aes::{
     Aes, Aes128Key, Aes256Key, AesBlock, AesCipher, AesDecryptCipher, AesEncryptCipher,
 };
@@ -31,9 +35,7 @@
 use crypto_provider::hkdf::{Hkdf, InvalidLength};
 use crypto_provider::hmac::{Hmac, MacError};
 use crypto_provider::p256::{P256PublicKey, P256};
-
 use crypto_provider::x25519::X25519;
-use std::fmt::Debug;
 
 #[derive(Default, Clone, Debug, PartialEq, Eq)]
 pub struct CryptoProviderStubs;
@@ -53,6 +55,8 @@
     type AesCtr128 = Aes128Stubs;
     type AesCtr256 = Aes256Stubs;
     type Ed25519 = Ed25519Stubs;
+    type Aes128GcmSiv = Aes128Stubs;
+    type Aes256GcmSiv = Aes256Stubs;
     type CryptoRng = ();
 
     fn constant_time_eq(_a: &[u8], _b: &[u8]) -> bool {
@@ -61,6 +65,7 @@
 }
 
 pub struct Aes128Impl;
+
 impl Aes for Aes128Impl {
     type Key = Aes128Key;
     type EncryptCipher = Aes128Stubs;
@@ -68,6 +73,7 @@
 }
 
 pub struct Aes256Impl;
+
 impl Aes for Aes256Impl {
     type Key = Aes256Key;
     type EncryptCipher = Aes256Stubs;
@@ -76,6 +82,7 @@
 
 #[derive(Clone)]
 pub struct HkdfStubs;
+
 impl Hkdf for HkdfStubs {
     fn new(_salt: Option<&[u8]>, _ikm: &[u8]) -> Self {
         unimplemented!()
@@ -95,6 +102,7 @@
 }
 
 pub struct HmacStubs;
+
 impl Hmac<32> for HmacStubs {
     fn new_from_key(_key: [u8; 32]) -> Self {
         unimplemented!()
@@ -156,6 +164,7 @@
 }
 
 pub struct AesCbcPkcs7PaddedStubs;
+
 impl AesCbcPkcs7Padded for AesCbcPkcs7PaddedStubs {
     fn encrypt(_key: &Aes256Key, _iv: &AesCbcIv, _message: &[u8]) -> Vec<u8> {
         unimplemented!()
@@ -171,6 +180,7 @@
 }
 
 pub struct X25519Stubs;
+
 impl EcdhProvider<X25519> for X25519Stubs {
     type PublicKey = EcdhPubKey;
     type EphemeralSecret = EphSecretStubs;
@@ -178,6 +188,7 @@
 }
 
 pub struct EphSecretStubs;
+
 impl EphemeralSecret<X25519> for EphSecretStubs {
     type Impl = X25519Stubs;
     type Error = ();
@@ -222,6 +233,7 @@
 
 #[derive(Debug, PartialEq)]
 pub struct EcdhPubKey;
+
 impl PublicKey<X25519> for EcdhPubKey {
     type Error = ();
 
@@ -236,6 +248,7 @@
 
 #[derive(Debug, PartialEq, Eq)]
 pub struct PublicKeyStubs;
+
 impl P256PublicKey for PublicKeyStubs {
     type Error = ();
 
@@ -257,6 +270,7 @@
 }
 
 pub struct P256Stubs;
+
 impl EcdhProvider<P256> for P256Stubs {
     type PublicKey = PublicKeyStubs;
     type EphemeralSecret = EphSecretStubs;
@@ -264,6 +278,7 @@
 }
 
 pub struct Sha2Stubs;
+
 impl crypto_provider::sha2::Sha256 for Sha2Stubs {
     fn sha256(_input: &[u8]) -> [u8; 32] {
         unimplemented!()
@@ -314,6 +329,22 @@
     }
 }
 
+impl AesGcmSiv for Aes128Stubs {
+    type Key = Aes128Key;
+
+    fn new(key: &Self::Key) -> Self {
+        unimplemented!()
+    }
+
+    fn encrypt(&self, data: &mut Vec<u8>, aad: &[u8], nonce: &[u8]) -> Result<(), GcmSivError> {
+        unimplemented!()
+    }
+
+    fn decrypt(&self, data: &mut Vec<u8>, aad: &[u8], nonce: &[u8]) -> Result<(), GcmSivError> {
+        unimplemented!()
+    }
+}
+
 pub struct Aes256Stubs;
 
 impl AesCipher for Aes256Stubs {
@@ -351,7 +382,25 @@
         unimplemented!()
     }
 }
+
+impl AesGcmSiv for Aes256Stubs {
+    type Key = Aes256Key;
+
+    fn new(key: &Self::Key) -> Self {
+        unimplemented!()
+    }
+
+    fn encrypt(&self, data: &mut Vec<u8>, aad: &[u8], nonce: &[u8]) -> Result<(), GcmSivError> {
+        unimplemented!()
+    }
+
+    fn decrypt(&self, data: &mut Vec<u8>, aad: &[u8], nonce: &[u8]) -> Result<(), GcmSivError> {
+        unimplemented!()
+    }
+}
+
 pub struct Ed25519Stubs;
+
 impl Ed25519Provider for Ed25519Stubs {
     type KeyPair = KeyPairStubs;
     type PublicKey = PublicKeyStubs;
@@ -382,6 +431,7 @@
 }
 
 pub struct SignatureStubs;
+
 impl Signature for SignatureStubs {
     fn from_bytes(_bytes: &[u8]) -> Result<Self, InvalidSignature> {
         unimplemented!()
@@ -393,6 +443,7 @@
 }
 
 pub struct KeyPairStubs;
+
 impl KeyPair for KeyPairStubs {
     type PublicKey = PublicKeyStubs;
     type Signature = SignatureStubs;
diff --git a/nearby/presence/ldt/fuzz/Cargo.lock b/nearby/presence/ldt/fuzz/Cargo.lock
index a007fe8..2f38bca 100644
--- a/nearby/presence/ldt/fuzz/Cargo.lock
+++ b/nearby/presence/ldt/fuzz/Cargo.lock
@@ -54,9 +54,9 @@
 
 [[package]]
 name = "base16ct"
-version = "0.1.1"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
 
 [[package]]
 name = "block-buffer"
@@ -133,9 +133,9 @@
 
 [[package]]
 name = "crypto-bigint"
-version = "0.4.9"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef"
+checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7"
 dependencies = [
  "generic-array",
  "rand_core",
@@ -157,6 +157,9 @@
 [[package]]
 name = "crypto_provider"
 version = "0.1.0"
+dependencies = [
+ "bytes",
+]
 
 [[package]]
 name = "crypto_provider_rustcrypto"
@@ -207,11 +210,12 @@
 
 [[package]]
 name = "der"
-version = "0.6.1"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de"
+checksum = "bc906908ea6458456e5eaa160a9c08543ec3d1e6f71e2235cedd660cb65f9df0"
 dependencies = [
  "const-oid",
+ "zeroize",
 ]
 
 [[package]]
@@ -259,13 +263,12 @@
 
 [[package]]
 name = "elliptic-curve"
-version = "0.12.3"
+version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3"
+checksum = "6ea5a92946e8614bb585254898bb7dd1ddad241ace60c52149e3765e34cc039d"
 dependencies = [
  "base16ct",
  "crypto-bigint",
- "der",
  "digest",
  "ff",
  "generic-array",
@@ -279,9 +282,9 @@
 
 [[package]]
 name = "ff"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
+checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
 dependencies = [
  "rand_core",
  "subtle",
@@ -301,6 +304,7 @@
 dependencies = [
  "typenum",
  "version_check",
+ "zeroize",
 ]
 
 [[package]]
@@ -316,9 +320,9 @@
 
 [[package]]
 name = "group"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
 dependencies = [
  "ff",
  "rand_core",
@@ -425,9 +429,9 @@
 
 [[package]]
 name = "p256"
-version = "0.12.0"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49c124b3cbce43bcbac68c58ec181d98ed6cc7e6d0aa7c3ba97b2563410b0e55"
+checksum = "7270da3e5caa82afd3deb054cc237905853813aea3859544bc082c3fe55b8d47"
 dependencies = [
  "elliptic-curve",
  "primeorder",
@@ -469,9 +473,9 @@
 
 [[package]]
 name = "primeorder"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b54f7131b3dba65a2f414cf5bd25b66d4682e4608610668eae785750ba4c5b2"
+checksum = "7613fdcc0831c10060fa69833ea8fa2caa94b6456f51e25356a885b530a2e3d0"
 dependencies = [
  "elliptic-curve",
 ]
@@ -524,9 +528,9 @@
 
 [[package]]
 name = "sec1"
-version = "0.3.0"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928"
+checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e"
 dependencies = [
  "base16ct",
  "der",
diff --git a/nearby/presence/ldt_np_adv/fuzz/Cargo.lock b/nearby/presence/ldt_np_adv/fuzz/Cargo.lock
index 3bfc3fd..4922fc2 100644
--- a/nearby/presence/ldt_np_adv/fuzz/Cargo.lock
+++ b/nearby/presence/ldt_np_adv/fuzz/Cargo.lock
@@ -58,9 +58,9 @@
 
 [[package]]
 name = "base16ct"
-version = "0.1.1"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
 
 [[package]]
 name = "block-buffer"
@@ -137,9 +137,9 @@
 
 [[package]]
 name = "crypto-bigint"
-version = "0.4.9"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef"
+checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7"
 dependencies = [
  "generic-array",
  "rand_core",
@@ -161,6 +161,9 @@
 [[package]]
 name = "crypto_provider"
 version = "0.1.0"
+dependencies = [
+ "bytes",
+]
 
 [[package]]
 name = "crypto_provider_rustcrypto"
@@ -211,11 +214,12 @@
 
 [[package]]
 name = "der"
-version = "0.6.1"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de"
+checksum = "bc906908ea6458456e5eaa160a9c08543ec3d1e6f71e2235cedd660cb65f9df0"
 dependencies = [
  "const-oid",
+ "zeroize",
 ]
 
 [[package]]
@@ -263,13 +267,12 @@
 
 [[package]]
 name = "elliptic-curve"
-version = "0.12.3"
+version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3"
+checksum = "6ea5a92946e8614bb585254898bb7dd1ddad241ace60c52149e3765e34cc039d"
 dependencies = [
  "base16ct",
  "crypto-bigint",
- "der",
  "digest",
  "ff",
  "generic-array",
@@ -283,9 +286,9 @@
 
 [[package]]
 name = "ff"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
+checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
 dependencies = [
  "rand_core",
  "subtle",
@@ -305,6 +308,7 @@
 dependencies = [
  "typenum",
  "version_check",
+ "zeroize",
 ]
 
 [[package]]
@@ -320,9 +324,9 @@
 
 [[package]]
 name = "group"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
 dependencies = [
  "ff",
  "rand_core",
@@ -452,9 +456,9 @@
 
 [[package]]
 name = "p256"
-version = "0.12.0"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49c124b3cbce43bcbac68c58ec181d98ed6cc7e6d0aa7c3ba97b2563410b0e55"
+checksum = "7270da3e5caa82afd3deb054cc237905853813aea3859544bc082c3fe55b8d47"
 dependencies = [
  "elliptic-curve",
  "primeorder",
@@ -496,9 +500,9 @@
 
 [[package]]
 name = "primeorder"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b54f7131b3dba65a2f414cf5bd25b66d4682e4608610668eae785750ba4c5b2"
+checksum = "7613fdcc0831c10060fa69833ea8fa2caa94b6456f51e25356a885b530a2e3d0"
 dependencies = [
  "elliptic-curve",
 ]
@@ -551,9 +555,9 @@
 
 [[package]]
 name = "sec1"
-version = "0.3.0"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928"
+checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e"
 dependencies = [
  "base16ct",
  "der",
diff --git a/nearby/presence/ldt_np_adv_ffi/Cargo.lock b/nearby/presence/ldt_np_adv_ffi/Cargo.lock
index 3a16c56..075e658 100644
--- a/nearby/presence/ldt_np_adv_ffi/Cargo.lock
+++ b/nearby/presence/ldt_np_adv_ffi/Cargo.lock
@@ -67,9 +67,9 @@
 
 [[package]]
 name = "base16ct"
-version = "0.1.1"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
 
 [[package]]
 name = "base64ct"
@@ -166,9 +166,9 @@
 
 [[package]]
 name = "crypto-bigint"
-version = "0.4.9"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef"
+checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7"
 dependencies = [
  "generic-array",
  "rand_core",
@@ -267,15 +267,6 @@
 
 [[package]]
 name = "der"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de"
-dependencies = [
- "const-oid",
-]
-
-[[package]]
-name = "der"
 version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "bc906908ea6458456e5eaa160a9c08543ec3d1e6f71e2235cedd660cb65f9df0"
@@ -321,13 +312,12 @@
 
 [[package]]
 name = "elliptic-curve"
-version = "0.12.3"
+version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3"
+checksum = "6ea5a92946e8614bb585254898bb7dd1ddad241ace60c52149e3765e34cc039d"
 dependencies = [
  "base16ct",
  "crypto-bigint",
- "der 0.6.1",
  "digest",
  "ff",
  "generic-array",
@@ -341,9 +331,9 @@
 
 [[package]]
 name = "ff"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
+checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
 dependencies = [
  "rand_core",
  "subtle",
@@ -378,6 +368,7 @@
 dependencies = [
  "typenum",
  "version_check",
+ "zeroize",
 ]
 
 [[package]]
@@ -393,9 +384,9 @@
 
 [[package]]
 name = "group"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
 dependencies = [
  "ff",
  "rand_core",
@@ -597,9 +588,9 @@
 
 [[package]]
 name = "p256"
-version = "0.12.0"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49c124b3cbce43bcbac68c58ec181d98ed6cc7e6d0aa7c3ba97b2563410b0e55"
+checksum = "7270da3e5caa82afd3deb054cc237905853813aea3859544bc082c3fe55b8d47"
 dependencies = [
  "elliptic-curve",
  "primeorder",
@@ -627,7 +618,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3d2820d87d2b008616e5c27212dd9e0e694fb4c6b522de06094106813328cb49"
 dependencies = [
- "der 0.7.1",
+ "der",
  "spki",
 ]
 
@@ -663,9 +654,9 @@
 
 [[package]]
 name = "primeorder"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b54f7131b3dba65a2f414cf5bd25b66d4682e4608610668eae785750ba4c5b2"
+checksum = "7613fdcc0831c10060fa69833ea8fa2caa94b6456f51e25356a885b530a2e3d0"
 dependencies = [
  "elliptic-curve",
 ]
@@ -750,12 +741,12 @@
 
 [[package]]
 name = "sec1"
-version = "0.3.0"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928"
+checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e"
 dependencies = [
  "base16ct",
- "der 0.6.1",
+ "der",
  "generic-array",
  "subtle",
  "zeroize",
@@ -806,7 +797,7 @@
 checksum = "c0445c905640145c7ea8c1993555957f65e7c46d0535b91ba501bc9bfc85522f"
 dependencies = [
  "base64ct",
- "der 0.7.1",
+ "der",
 ]
 
 [[package]]
diff --git a/nearby/presence/ldt_np_c_sample/tests/CMakeLists.txt b/nearby/presence/ldt_np_c_sample/tests/CMakeLists.txt
index a4c4b37..c7a39f4 100644
--- a/nearby/presence/ldt_np_c_sample/tests/CMakeLists.txt
+++ b/nearby/presence/ldt_np_c_sample/tests/CMakeLists.txt
@@ -16,6 +16,13 @@
 
 # GoogleTest requires at least C++14
 set(CMAKE_CXX_STANDARD 14)
+add_compile_options(-Wall -Werror -Wextra -Wimplicit-fallthrough -Wextra-semi
+        -Wunreachable-code-aggressive -Wthread-safety
+        -Wno-missing-field-initializers -Wno-unused-parameter -Wno-psabi
+        -Wloop-analysis -Wno-unneeded-internal-declaration
+        -Wenum-compare-conditional -Wno-ignored-pragma-optimize
+        -Wno-bitfield-constant-conversion -Wno-deprecated-this-capture -Wshadow
+        -Wsign-compare)
 
 include(FetchContent)
 FetchContent_Declare(
@@ -26,13 +33,17 @@
 FetchContent_MakeAvailable(googletest)
 enable_testing()
 
-find_package(RapidJSON REQUIRED)
-message(STATUS "RapidJson include directories: ${RAPIDJSON_INCLUDE_DIRS}${RapidJSON_INCLUDE_DIRS}")
-include_directories("${RAPIDJSON_INCLUDE_DIRS}${RapidJSON_INCLUDE_DIRS}")
 
 find_package(benchmark REQUIRED)
 add_compile_options(-fsanitize=address)
 
+find_package(PkgConfig REQUIRED)
+pkg_check_modules(JSONCPP jsoncpp)
+include_directories("${JSONCPP_INCLUDEDIR}")
+
+file(COPY ${CMAKE_SOURCE_DIR}/ldt_np_adv/resources/test/np_adv_test_vectors.json
+     DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+
 add_executable(
   np_ffi_tests
   np_ffi_tests.cc
@@ -54,6 +65,7 @@
 target_link_libraries(
   np_ffi_tests
   "${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/target/release/libldt_np_adv_ffi.a"
+  ${pkgcfg_lib_JSONCPP_jsoncpp}
   GTest::gtest_main
   OpenSSL::SSL
   dl pthread -fsanitize=address
diff --git a/nearby/presence/ldt_np_c_sample/tests/benchmarks.cc b/nearby/presence/ldt_np_c_sample/tests/benchmarks.cc
index fbd20a8..d0cfb67 100644
--- a/nearby/presence/ldt_np_c_sample/tests/benchmarks.cc
+++ b/nearby/presence/ldt_np_c_sample/tests/benchmarks.cc
@@ -50,6 +50,7 @@
 
     void TearDown(const ::benchmark::State& state)
     {
+        (void) state;
         free(salt);
         free(payload);
         freeCiphers();
@@ -127,7 +128,7 @@
             NpLdtDecryptAndVerify(dec_handle, payload, payload_len, *salt);
         }
     }
-};
+}
 
 BENCHMARK_REGISTER_F(NpLdtFfiBenchmark, DecryptExistingCiphers)->RangeMultiplier(10)->Range(1, 1000);
 
@@ -141,7 +142,7 @@
             NpLdtDecryptAndVerify(handle, payload, payload_len, *salt);
         }
     }
-};
+}
 
 BENCHMARK_REGISTER_F(NpLdtFfiBenchmark, DecryptFreshCiphers)->RangeMultiplier(10)->Range(1, 1000);
 
diff --git a/nearby/presence/ldt_np_c_sample/tests/np_ffi_tests.cc b/nearby/presence/ldt_np_c_sample/tests/np_ffi_tests.cc
index fbb0db4..1cc2ae2 100644
--- a/nearby/presence/ldt_np_c_sample/tests/np_ffi_tests.cc
+++ b/nearby/presence/ldt_np_c_sample/tests/np_ffi_tests.cc
@@ -13,25 +13,27 @@
 // limitations under the License.
 
 #include <gtest/gtest.h>
+#include <json/json.h>
+#include <fstream>
 
 extern "C" {
 #include "np_ldt.h"
 }
 
 #include <algorithm>
-#include <rapidjson/document.h>
-#include <rapidjson/filereadstream.h>
 
 // TODO: get multi threaded tests working on windows
 #ifndef _WIN32
 #include <pthread.h>
 #endif
 
-using namespace rapidjson;
 using namespace std;
 
-static const char* PATH_TO_DATA_FILE = "../../../ldt_np_adv/resources/test/np_adv_test_vectors.json";
-
+#ifdef LDT_TEST_VECTORS
+static const char* PATH_TO_DATA_FILE = LDT_TEST_VECTORS;
+#else
+static const char* PATH_TO_DATA_FILE = "np_adv_test_vectors.json";
+#endif
 static const uint8_t KEY_SEED_BYTES[] = {204, 219, 36, 137, 233, 252, 172, 66, 179, 147, 72, 184, 148, 30, 209, 154, 29, 54, 14, 117, 224, 152, 200, 193, 94, 107, 28, 194, 182, 32, 205, 57};
 static const uint8_t KNOWN_HMAC_BYTES[] = {223, 185, 10, 31, 155, 31, 226, 141, 24, 187, 204, 165, 34, 64, 181, 204, 44, 203, 95, 141, 82, 137, 163, 203, 100, 235, 53, 65, 202, 97, 75, 180};
 static const uint8_t TEST_DATA_BYTES[] = {205, 104, 63, 225, 161, 209, 248, 70, 84, 61, 10, 19, 212, 174, 164, 0, 64, 200, 214, 123};
@@ -84,24 +86,24 @@
 // to generate the ldt_key and hmac_key from a key_seed, this is an implementation
 // detail of the rust ldt library
 TEST(NpFfiTests, TestJsonData) {
-    FILE* fp = fopen(PATH_TO_DATA_FILE, "r");
-    ASSERT_FALSE(fp == NULL);
+    Json::Value root;
+    Json::Reader reader;
+    std::ifstream test(PATH_TO_DATA_FILE);
+    bool parsingSuccessful = reader.parse( test, root, false );
+    if ( !parsingSuccessful )
+    {
+        std::cout  << reader.getFormattedErrorMessages()
+               << "\n";
+    }
+    ASSERT_TRUE(root.size() == 1000);
 
-    char readBuffer[65536];
-    FileReadStream is(fp, readBuffer, sizeof(readBuffer));
-    Document d;
-    d.ParseStream(is);
-
-    ASSERT_TRUE(d.IsArray());
-    ASSERT_EQ(d.Size(), 1000);
-
-    for (SizeType i = 0; i < d.Size(); i++) {
-        const Value& v = d[i];
-        const char * key_seed = v["key_seed"].GetString();
-        const char * metadata_key_hmac = v["metadata_key_hmac"].GetString();
-        const char * adv_salt = v["adv_salt"].GetString();
-        const char * plaintext = v["plaintext"].GetString();
-        const char * ciphertext = v["ciphertext"].GetString();
+    for (Json::Value::ArrayIndex i = 0; i < root.size(); i++) {
+        const Json::Value& v = root[i];
+        auto key_seed = v["key_seed"].asCString();
+        auto metadata_key_hmac = v["metadata_key_hmac"].asCString();
+        auto adv_salt = v["adv_salt"].asCString();
+        auto plaintext = v["plaintext"].asCString();
+        auto ciphertext = v["ciphertext"].asCString();
 
         NpLdtKeySeed np_key_seed;
         int len = strlen(key_seed)/2;
@@ -114,17 +116,17 @@
         ASSERT_EQ(len, 32);
 
         NpLdtEncryptHandle enc_handle = NpLdtEncryptCreate(np_key_seed);
-        ASSERT_NE(enc_handle.handle, 0);
+        ASSERT_TRUE(enc_handle.handle != 0);
 
-        NpLdtSalt salt;
+        NpLdtSalt saltdata;
         len = strlen(adv_salt)/2;
-        hex_string_to_bytes(adv_salt, salt.bytes, len);
+        hex_string_to_bytes(adv_salt, saltdata.bytes, len);
         ASSERT_TRUE(len == 2);
 
         len = strlen(plaintext)/2;
         uint8_t* buffer = (uint8_t*)malloc(len);
         hex_string_to_bytes(plaintext, buffer, len);
-        NP_LDT_RESULT result = NpLdtEncrypt(enc_handle, buffer, len, salt);
+        NP_LDT_RESULT result = NpLdtEncrypt(enc_handle, buffer, len, saltdata);
         ASSERT_EQ(result, NP_LDT_SUCCESS);
 
         char output[strlen(plaintext) + 1];
@@ -132,17 +134,22 @@
         ASSERT_EQ(strcmp(output, ciphertext), 0);
 
         NpLdtDecryptHandle dec_handle = NpLdtDecryptCreate(np_key_seed, known_hmac);
-        ASSERT_NE(dec_handle.handle, 0);
+        ASSERT_TRUE(dec_handle.handle != 0);
 
-        result = NpLdtDecryptAndVerify(dec_handle, buffer, len, salt);
+        result = NpLdtDecryptAndVerify(dec_handle, buffer, len, saltdata);
+        ASSERT_EQ(result, NP_LDT_SUCCESS);
+
+        result = NpLdtEncryptClose(enc_handle);
+        ASSERT_EQ(result, NP_LDT_SUCCESS);
+
+        result = NpLdtDecryptClose(dec_handle);
         ASSERT_EQ(result, NP_LDT_SUCCESS);
 
         bytes_to_hex_string(buffer, output, len);
-        printf("output: %s\n", output);
         ASSERT_EQ( strcmp(output, plaintext), 0);
         free(buffer);
     }
-    fclose(fp);
+    test.close();
 }
 
 TEST(NpFfiTests, TestValidLength)
@@ -151,7 +158,7 @@
     memcpy(plaintext, TEST_DATA_BYTES, 20);
 
     NpLdtEncryptHandle enc_handle = create_enc_handle_from_test_key();
-    ASSERT_NE(enc_handle.handle, 0);
+    ASSERT_TRUE(enc_handle.handle != 0);
 
     NP_LDT_RESULT result = NpLdtEncrypt(enc_handle, plaintext, 20, salt);
     ASSERT_EQ(result, NP_LDT_SUCCESS);
@@ -169,7 +176,7 @@
     memcpy(plaintext, TEST_DATA_BYTES, 20);
 
     NpLdtEncryptHandle enc_handle = create_enc_handle_from_test_key();
-    ASSERT_NE(enc_handle.handle, 0);
+    ASSERT_TRUE(enc_handle.handle != 0);
 
     NP_LDT_RESULT result = NpLdtEncrypt(enc_handle, plaintext, 32, salt);
     ASSERT_EQ(result, NP_LDT_ERROR_INVALID_LENGTH);
@@ -185,7 +192,7 @@
     memcpy(plaintext, TEST_DATA_BYTES, 20);
 
     NpLdtDecryptHandle dec_handle = create_dec_handle_from_test_key();
-    ASSERT_NE(dec_handle.handle, 0);
+    ASSERT_TRUE(dec_handle.handle != 0);
 
     NP_LDT_RESULT result = NpLdtDecryptAndVerify(dec_handle, plaintext, 32, salt);
     ASSERT_EQ(result, NP_LDT_ERROR_INVALID_LENGTH);
@@ -203,7 +210,7 @@
     memcpy(plaintext, test_text, 29);
 
     NpLdtDecryptHandle dec_handle = create_dec_handle_from_test_key();
-    ASSERT_NE(dec_handle.handle, 0);
+    ASSERT_TRUE(dec_handle.handle != 0);
 
     NP_LDT_RESULT result = NpLdtDecryptAndVerify(dec_handle, plaintext, 24, salt);
     ASSERT_EQ(result, NP_LDT_ERROR_MAC_MISMATCH);
@@ -237,14 +244,12 @@
 
 void *worker_thread(void *arg)
 {
-    int *my_id = (int *)arg;
+    (void) arg;
     pthread_mutex_lock(&my_mutex);
-    printf("Thread %d: waiting for release\n", *my_id);
 
     pthread_cond_wait(&cond, &my_mutex);
     pthread_mutex_unlock(&my_mutex);
 
-    printf("Thread %d: doing ldt stuff!\n", *my_id);
     uint8_t* plaintext = (uint8_t*) malloc(20 * sizeof(uint8_t));
     memcpy(plaintext, TEST_DATA_BYTES, 20);
 
@@ -292,7 +297,6 @@
 
     // give time for all threads to lock
     sleep(1);
-    printf("Main: Now releasing the condition\n");
 
     // unleash the threads!
     pthread_cond_broadcast(&cond);
diff --git a/nearby/presence/xts_aes/fuzz/Cargo.lock b/nearby/presence/xts_aes/fuzz/Cargo.lock
index 5408688..2bdaef3 100644
--- a/nearby/presence/xts_aes/fuzz/Cargo.lock
+++ b/nearby/presence/xts_aes/fuzz/Cargo.lock
@@ -54,9 +54,9 @@
 
 [[package]]
 name = "base16ct"
-version = "0.1.1"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
 
 [[package]]
 name = "block-buffer"
@@ -133,9 +133,9 @@
 
 [[package]]
 name = "crypto-bigint"
-version = "0.4.9"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef"
+checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7"
 dependencies = [
  "generic-array",
  "rand_core",
@@ -207,11 +207,12 @@
 
 [[package]]
 name = "der"
-version = "0.6.1"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de"
+checksum = "bc906908ea6458456e5eaa160a9c08543ec3d1e6f71e2235cedd660cb65f9df0"
 dependencies = [
  "const-oid",
+ "zeroize",
 ]
 
 [[package]]
@@ -259,13 +260,12 @@
 
 [[package]]
 name = "elliptic-curve"
-version = "0.12.3"
+version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3"
+checksum = "6ea5a92946e8614bb585254898bb7dd1ddad241ace60c52149e3765e34cc039d"
 dependencies = [
  "base16ct",
  "crypto-bigint",
- "der",
  "digest",
  "ff",
  "generic-array",
@@ -279,9 +279,9 @@
 
 [[package]]
 name = "ff"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
+checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
 dependencies = [
  "rand_core",
  "subtle",
@@ -301,6 +301,7 @@
 dependencies = [
  "typenum",
  "version_check",
+ "zeroize",
 ]
 
 [[package]]
@@ -316,9 +317,9 @@
 
 [[package]]
 name = "group"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
 dependencies = [
  "ff",
  "rand_core",
@@ -406,9 +407,9 @@
 
 [[package]]
 name = "p256"
-version = "0.12.0"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49c124b3cbce43bcbac68c58ec181d98ed6cc7e6d0aa7c3ba97b2563410b0e55"
+checksum = "7270da3e5caa82afd3deb054cc237905853813aea3859544bc082c3fe55b8d47"
 dependencies = [
  "elliptic-curve",
  "primeorder",
@@ -450,9 +451,9 @@
 
 [[package]]
 name = "primeorder"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b54f7131b3dba65a2f414cf5bd25b66d4682e4608610668eae785750ba4c5b2"
+checksum = "7613fdcc0831c10060fa69833ea8fa2caa94b6456f51e25356a885b530a2e3d0"
 dependencies = [
  "elliptic-curve",
 ]
@@ -505,9 +506,9 @@
 
 [[package]]
 name = "sec1"
-version = "0.3.0"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928"
+checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e"
 dependencies = [
  "base16ct",
  "der",
diff --git a/nearby/scripts/build-script.sh b/nearby/scripts/build-script.sh
index f559167..c117a5c 100755
--- a/nearby/scripts/build-script.sh
+++ b/nearby/scripts/build-script.sh
@@ -236,9 +236,12 @@
   go install github.com/google/addlicense@latest
   curl https://sh.rustup.rs -sSf | sh -s -- -y --no-modify-path --default-toolchain 1.68.0
   cargo install --locked cargo-deny --color never 2>&1
+  # Must use this version, as version >= 0.65.0 removes the option "--size_t-is-usize", an option
+  # used by boringssl when generating rust bindings
+  cargo install --version 0.64.0 bindgen-cli
   source "$HOME/.cargo/env"
   rustup install nightly
-  brew install rapidjson google-benchmark ninja bindgen
+  brew install google-benchmark ninja jsoncpp
 
   # Unfortunately CMake is not smart enough to find this on its own, even though
   # it is in fact there by default on the build machines