summaryrefslogtreecommitdiffstats
path: root/openpgp/src/serialize/sexp.rs
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2020-08-17 12:44:22 +0200
committerJustus Winter <justus@sequoia-pgp.org>2020-08-17 16:19:24 +0200
commitbc93b8a039753a626406f15a346f84ecaed49583 (patch)
treede89a8d571aac56f402baf2d6327abb838c64ce6 /openpgp/src/serialize/sexp.rs
parent5c80cd51fa5453be3207bb2c9491fbe8d9c0afe3 (diff)
openpgp: Move crypto::sexp to the ipc crate.
- This is only used to communicate with the GnuPG agent, so it should not be in the openpgp crate.
Diffstat (limited to 'openpgp/src/serialize/sexp.rs')
-rw-r--r--openpgp/src/serialize/sexp.rs135
1 files changed, 0 insertions, 135 deletions
diff --git a/openpgp/src/serialize/sexp.rs b/openpgp/src/serialize/sexp.rs
deleted file mode 100644
index 8c072ee0..00000000
--- a/openpgp/src/serialize/sexp.rs
+++ /dev/null
@@ -1,135 +0,0 @@
-use crate::Result;
-use crate::serialize::{
- Marshal,
- MarshalInto,
- generic_serialize_into,
-};
-
-use crate::crypto::sexp::{Sexp, String_};
-
-impl crate::serialize::Serialize for Sexp {}
-
-impl Marshal for Sexp {
- fn serialize(&self, o: &mut dyn std::io::Write) -> Result<()> {
- match self {
- Sexp::String(ref s) => s.serialize(o),
- Sexp::List(ref l) => {
- write!(o, "(")?;
- for sexp in l {
- sexp.serialize(o)?;
- }
- write!(o, ")")?;
- Ok(())
- },
- }
- }
-}
-
-impl crate::serialize::SerializeInto for Sexp {}
-
-impl MarshalInto for Sexp {
- fn serialized_len(&self) -> usize {
- match self {
- Sexp::String(ref s) => s.serialized_len(),
- Sexp::List(ref l) =>
- 2 + l.iter().map(|s| s.serialized_len()).sum::<usize>(),
- }
- }
-
- fn serialize_into(&self, buf: &mut [u8]) -> Result<usize> {
- generic_serialize_into(self, self.serialized_len(), buf)
- }
-}
-
-impl Marshal for String_ {
- fn serialize(&self, o: &mut dyn std::io::Write) -> Result<()> {
- if let Some(display) = self.display_hint() {
- write!(o, "[{}:", display.len())?;
- o.write_all(display)?;
- write!(o, "]")?;
- }
- write!(o, "{}:", self.len())?;
- o.write_all(self)?;
- Ok(())
- }
-}
-
-/// Computes the length of the size tag for a given string length.
-fn size_tag_len(len: usize) -> usize {
- // Compute log10(self.len()).
- let mut l = len;
- let mut digits = 0;
- while l > 0 {
- l /= 10;
- digits += 1;
- }
-
- std::cmp::max(1, digits) // 0 takes up 1 char, too.
-}
-
-impl MarshalInto for String_ {
- fn serialized_len(&self) -> usize {
- self.display_hint()
- .map(|d| size_tag_len(d.len()) + 3 + d.len()).unwrap_or(0)
- + size_tag_len(self.len()) + 1 + self.len()
- }
-
- fn serialize_into(&self, buf: &mut [u8]) -> Result<usize> {
- generic_serialize_into(self, self.serialized_len(), buf)
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn sexp() {
- assert_eq!(
- &Sexp::List(vec![]).to_vec().unwrap(),
- b"()");
- assert_eq!(
- &Sexp::List(vec![Sexp::String(b"hi"[..].into()),
- Sexp::String(b"ho"[..].into()),
- ]).to_vec().unwrap(),
- b"(2:hi2:ho)");
- assert_eq!(
- &Sexp::List(vec![
- Sexp::String(b"hi"[..].into()),
- Sexp::String(String_::with_display_hint(b"ho".to_vec(),
- b"fancy".to_vec())),
- ]).to_vec().unwrap(),
- b"(2:hi[5:fancy]2:ho)");
- assert_eq!(
- &Sexp::List(vec![
- Sexp::String(b"hi"[..].into()),
- Sexp::List(vec![
- Sexp::String(b"ha"[..].into()),
- Sexp::String(b"ho"[..].into()),
- ]),
- ]).to_vec().unwrap(),
- b"(2:hi(2:ha2:ho))");
- assert_eq!(
- &Sexp::List(vec![
- Sexp::String(b"sig-val"[..].into()),
- Sexp::List(vec![
- Sexp::String(b"rsa"[..].into()),
- Sexp::List(vec![
- Sexp::String(b"s"[..].into()),
- Sexp::String(b"abc"[..].into()),
- ]),
- ]),
- ]).to_vec().unwrap(),
- b"(7:sig-val(3:rsa(1:s3:abc)))");
- }
-
- #[test]
- fn string() {
- assert_eq!(&String_::new(b"hi".to_vec()).to_vec().unwrap(),
- b"2:hi");
- assert_eq!(&String_::with_display_hint(b"hi".to_vec(),
- b"fancy".to_vec())
- .to_vec().unwrap(),
- b"[5:fancy]2:hi");
- }
-}