Skip to content

Commit f096d5f

Browse files
authored
feat: add serde support (#780)
This (optional) feature implements Serialize/Deserialize for Zeroizing when the inner type implements these traits. This makes it possible to use Zeroizing in serde contexts. Signed-off-by: Nathaniel McCallum <nathaniel@profian.com>
1 parent 846ae59 commit f096d5f

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

zeroize/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ keywords = ["memory", "memset", "secure", "volatile", "zero"]
1717
edition = "2018"
1818

1919
[dependencies]
20+
serde = { version = "1.0", default-features = false, optional = true }
2021
zeroize_derive = { version = "1.3", path = "derive", optional = true }
2122

2223
[features]

zeroize/src/lib.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,34 @@ where
715715
}
716716
}
717717

718+
#[cfg(feature = "serde")]
719+
impl<Z> serde::Serialize for Zeroizing<Z>
720+
where
721+
Z: Zeroize + serde::Serialize,
722+
{
723+
#[inline(always)]
724+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
725+
where
726+
S: serde::Serializer,
727+
{
728+
self.0.serialize(serializer)
729+
}
730+
}
731+
732+
#[cfg(feature = "serde")]
733+
impl<'de, Z> serde::Deserialize<'de> for Zeroizing<Z>
734+
where
735+
Z: Zeroize + serde::Deserialize<'de>,
736+
{
737+
#[inline(always)]
738+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
739+
where
740+
D: serde::Deserializer<'de>,
741+
{
742+
Ok(Self(Z::deserialize(deserializer)?))
743+
}
744+
}
745+
718746
/// Use fences to prevent accesses from being reordered before this
719747
/// point, which should hopefully help ensure that all accessors
720748
/// see zeroes after this point.

0 commit comments

Comments
 (0)