summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeal H. Walfield <neal@pep.foundation>2020-02-28 18:31:20 +0100
committerNeal H. Walfield <neal@pep.foundation>2020-02-28 18:31:20 +0100
commit3037c4123921719183abd7b75a11bc8639ed9df8 (patch)
tree7ab87bf378ebbbddd5f8e48f07406a1ba48403fc
parent95d986f75418748c91b85911d922f605fb2facd0 (diff)
openpgp: Generalize TryFrom<{,Valid}ErasedKeyAmalgamation>.
- Generalize `TryFrom<ErasedKeyAmalgamation>` and `TryFrom<ValidErasedKeyAmalgamation>` to convert not only the `KeyAmalgamation`'s role, but also its parts (i.e., between `PublicParts`, `SecretParts`, and `UnspecifiedParts`).
-rw-r--r--openpgp/src/cert/key_amalgamation.rs30
1 files changed, 20 insertions, 10 deletions
diff --git a/openpgp/src/cert/key_amalgamation.rs b/openpgp/src/cert/key_amalgamation.rs
index eb2cfa85..546b4506 100644
--- a/openpgp/src/cert/key_amalgamation.rs
+++ b/openpgp/src/cert/key_amalgamation.rs
@@ -267,15 +267,18 @@ impl<'a, P: 'a + key::KeyParts> From<SubordinateKeyAmalgamation<'a, P>>
}
-impl<'a, P: 'a + key::KeyParts> TryFrom<ErasedKeyAmalgamation<'a, P>>
- for PrimaryKeyAmalgamation<'a, P>
+impl<'a, P, P2> TryFrom<ErasedKeyAmalgamation<'a, P>>
+ for PrimaryKeyAmalgamation<'a, P2>
+ where P: 'a + key::KeyParts,
+ P2: 'a + key::KeyParts,
{
type Error = failure::Error;
fn try_from(ka: ErasedKeyAmalgamation<'a, P>) -> Result<Self> {
if ka.primary {
Ok(Self {
- ca: ka.ca.mark_role_primary(),
+ ca: P2::convert_key_amalgamation(
+ ka.ca.mark_role_primary().mark_parts_unspecified())?,
primary: (),
})
} else {
@@ -286,8 +289,10 @@ impl<'a, P: 'a + key::KeyParts> TryFrom<ErasedKeyAmalgamation<'a, P>>
}
}
-impl<'a, P: 'a + key::KeyParts> TryFrom<ErasedKeyAmalgamation<'a, P>>
- for SubordinateKeyAmalgamation<'a, P>
+impl<'a, P, P2> TryFrom<ErasedKeyAmalgamation<'a, P>>
+ for SubordinateKeyAmalgamation<'a, P2>
+ where P: 'a + key::KeyParts,
+ P2: 'a + key::KeyParts,
{
type Error = failure::Error;
@@ -298,7 +303,8 @@ impl<'a, P: 'a + key::KeyParts> TryFrom<ErasedKeyAmalgamation<'a, P>>
to a SubordinateKeyAmalgamation".into()).into())
} else {
Ok(Self {
- ca: ka.ca.mark_role_subordinate(),
+ ca: P2::convert_key_amalgamation(
+ ka.ca.mark_role_subordinate().mark_parts_unspecified())?,
primary: (),
})
}
@@ -454,8 +460,10 @@ impl<'a, P: 'a + key::KeyParts> From<ValidSubordinateKeyAmalgamation<'a, P>>
}
}
-impl<'a, P: 'a + key::KeyParts> TryFrom<ValidErasedKeyAmalgamation<'a, P>>
- for ValidPrimaryKeyAmalgamation<'a, P>
+impl<'a, P, P2> TryFrom<ValidErasedKeyAmalgamation<'a, P>>
+ for ValidPrimaryKeyAmalgamation<'a, P2>
+ where P: 'a + key::KeyParts,
+ P2: 'a + key::KeyParts,
{
type Error = failure::Error;
@@ -469,8 +477,10 @@ impl<'a, P: 'a + key::KeyParts> TryFrom<ValidErasedKeyAmalgamation<'a, P>>
}
}
-impl<'a, P: 'a + key::KeyParts> TryFrom<ValidErasedKeyAmalgamation<'a, P>>
- for ValidSubordinateKeyAmalgamation<'a, P>
+impl<'a, P, P2> TryFrom<ValidErasedKeyAmalgamation<'a, P>>
+ for ValidSubordinateKeyAmalgamation<'a, P2>
+ where P: 'a + key::KeyParts,
+ P2: 'a + key::KeyParts,
{
type Error = failure::Error;