remove useless manual serde definition

fixes #102
diff --git a/src/crypto.rs b/src/crypto.rs
index ab21637..f63b7b4 100644
--- a/src/crypto.rs
+++ b/src/crypto.rs
@@ -189,57 +189,19 @@
 }
 
 /// Cryptographic signature schemes.
-#[derive(Debug, Clone, PartialEq)]
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
 pub enum SignatureScheme {
     /// [Ed25519](https://ed25519.cr.yp.to/)
+    #[serde(rename="ed25519")]
     Ed25519,
     /// [RSASSA-PSS](https://tools.ietf.org/html/rfc5756) calculated over SHA256
+    #[serde(rename="rsassa-pss-sha256")]
     RsaSsaPssSha256,
     /// [RSASSA-PSS](https://tools.ietf.org/html/rfc5756) calculated over SHA512
+    #[serde(rename="rsassa-pss-sha512")]
     RsaSsaPssSha512,
 }
 
-impl ToString for SignatureScheme {
-    fn to_string(&self) -> String {
-        match self {
-            &SignatureScheme::Ed25519 => "ed25519",
-            &SignatureScheme::RsaSsaPssSha256 => "rsassa-pss-sha256",
-            &SignatureScheme::RsaSsaPssSha512 => "rsassa-pss-sha512",
-        }.to_string()
-    }
-}
-
-impl FromStr for SignatureScheme {
-    type Err = Error;
-
-    fn from_str(s: &str) -> ::std::result::Result<Self, Self::Err> {
-        match s {
-            "ed25519" => Ok(SignatureScheme::Ed25519),
-            "rsassa-pss-sha256" => Ok(SignatureScheme::RsaSsaPssSha256),
-            "rsassa-pss-sha512" => Ok(SignatureScheme::RsaSsaPssSha512),
-            typ => Err(Error::Encoding(typ.into())),
-        }
-    }
-}
-
-impl Serialize for SignatureScheme {
-    fn serialize<S>(&self, ser: S) -> ::std::result::Result<S::Ok, S::Error>
-    where
-        S: Serializer,
-    {
-        ser.serialize_str(&self.to_string())
-    }
-}
-
-impl<'de> Deserialize<'de> for SignatureScheme {
-    fn deserialize<D: Deserializer<'de>>(de: D) -> ::std::result::Result<Self, D::Error> {
-        let string: String = Deserialize::deserialize(de)?;
-        string.parse().map_err(|e| {
-            DeserializeError::custom(format!("{:?}", e))
-        })
-    }
-}
-
 /// Wrapper type for the value of a cryptographic signature.
 #[derive(Clone, PartialEq)]
 pub struct SignatureValue(Vec<u8>);