summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWiktor Kwapisiewicz <wiktor@metacode.biz>2023-09-01 11:32:53 +0200
committerWiktor Kwapisiewicz <wiktor@metacode.biz>2023-09-04 12:20:34 +0200
commitff8fc9bd682aa6dcaa96a55f9368789807f8900c (patch)
tree0c205dc31652505f3aad25fdf9e35161e618a369
parent2b8f5db01e32da5634a14115add5043a9a208852 (diff)
openpgp: Implement conversion from const size arrays for Protected.
- This type of array is used by ed25519-dalek crate.
-rw-r--r--openpgp/src/crypto/mem.rs12
1 files changed, 12 insertions, 0 deletions
diff --git a/openpgp/src/crypto/mem.rs b/openpgp/src/crypto/mem.rs
index dd63dfbd..c795c7e1 100644
--- a/openpgp/src/crypto/mem.rs
+++ b/openpgp/src/crypto/mem.rs
@@ -170,6 +170,18 @@ impl From<&[u8]> for Protected {
}
}
+impl<const N: usize> From<[u8; N]> for Protected {
+ fn from(v: [u8; N]) -> Self {
+ let mut p = Protected::new(v.len());
+
+ // Very carefully copy the slice. The obvious
+ // `p.copy_from_slice(v);` indeed leaks secrets.
+ v.iter().zip(p.iter_mut()).for_each(|(f, t)| *t = *f);
+
+ p
+ }
+}
+
impl Drop for Protected {
fn drop(&mut self) {
unsafe {