* Remove unnecessary constraints on hash * Remove unnecessary `Result` on `KeyPair::generate_random` * Fix de-serialization issue on `Ke1State` * Fix rustfmt * Remove allocations in `envelope` * Run Clippy for tests and rustdoc lints too * Fix `Debug` implementation * Fix missing constraints on `ClientRegistration` * Fix de-serialization * Pin temporary dependency * Update dependencies * Replace macro with derive-where * Remove unnecessary installation of Rust components * Improve macro naming * Implement `Copy`, `Debug`, `Ord` and `PartialOrd` for high-level items * Add `rust-version` field to `Cargo.toml` * Remove unnecessary allocations * Fix MSRV * Fix no_std * Remove unnecessary allocations * Remove unnecessary allocations * Not importing items from voprf helps readability * Fix rustdoc * Remove unnecessary allocations * Remove unnecessary allocations * Replace `Vec` from `diffie_hellman` with `GenericArray` * Remove unnecessary allocations * Remove unnecessary allocations * Remove `cfg(feature = bench)` guard for `missing_docs` * Fix documentation * Remove all remaining allocations from `KeyExchange` * Improve type-safety * Remove all remaining allocations in `keypair` * Remove last remaining allocations except `NonVerifiableClient` input * Remove base64 encoding in Serde implementation * Remove unnecessary Serde `alloc` feature * Make curve25519-dalek optional * Rename `serialize` crate feature to `serde` * Switch `KeGroup` implementations to higher-level libraries - Fixes missing clamping in X25519 - X25519 is now a separate crate feature * Fix typo
73 lines
2.7 KiB
Rust
Executable File
73 lines
2.7 KiB
Rust
Executable File
// Copyright (c) Facebook, Inc. and its affiliates.
|
|
//
|
|
// This source code is licensed under both the MIT license found in the
|
|
// LICENSE-MIT file in the root directory of this source tree and the Apache
|
|
// License, Version 2.0 found in the LICENSE-APACHE file in the root directory
|
|
// of this source tree.
|
|
|
|
/// Macro used for deriving `serde`'s `Serialize` and `Deserialize` traits.
|
|
macro_rules! impl_serialize_and_deserialize_for {
|
|
($item:ident$( where $($path:ty: $bound1:path $(| $bound2:path)*),+$(,)?)?$(; $error:expr)?) => {
|
|
#[cfg(feature = "serde")]
|
|
impl<CS: CipherSuite> serde_::Serialize for $item<CS>
|
|
$(where
|
|
$($path: $bound1 $(+ $bound2)*),+
|
|
)?
|
|
{
|
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: serde_::Serializer,
|
|
{
|
|
serializer.serialize_bytes(&self.serialize()$(.map_err($error)?)?)
|
|
}
|
|
}
|
|
|
|
#[cfg(feature = "serde")]
|
|
impl<'de, CS: CipherSuite> serde_::Deserialize<'de> for $item<CS>
|
|
{
|
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
|
where
|
|
D: serde_::Deserializer<'de>,
|
|
{
|
|
use serde_::de::Error;
|
|
|
|
struct ByteVisitor<CS: CipherSuite>(core::marker::PhantomData<CS>);
|
|
|
|
impl<'de, CS: CipherSuite> serde_::de::Visitor<'de> for ByteVisitor<CS>
|
|
{
|
|
type Value = $item<CS>;
|
|
|
|
fn expecting(
|
|
&self,
|
|
formatter: &mut core::fmt::Formatter,
|
|
) -> core::fmt::Result {
|
|
formatter.write_str(core::concat!(
|
|
"the byte representation of a ",
|
|
core::stringify!($t)
|
|
))
|
|
}
|
|
|
|
fn visit_bytes<E>(self, value: &[u8]) -> Result<Self::Value, E>
|
|
where
|
|
E: Error,
|
|
{
|
|
$item::<CS>::deserialize(value).map_err(|_| {
|
|
Error::invalid_value(
|
|
serde_::de::Unexpected::Bytes(value),
|
|
&core::concat!(
|
|
"invalid byte sequence for ",
|
|
core::stringify!($t)
|
|
),
|
|
)
|
|
})
|
|
}
|
|
}
|
|
|
|
deserializer
|
|
.deserialize_bytes(ByteVisitor::<CS>(core::marker::PhantomData))
|
|
.map_err(Error::custom)
|
|
}
|
|
}
|
|
};
|
|
}
|