diff options
author | Wiktor Kwapisiewicz <wiktor@metacode.biz> | 2023-09-01 11:32:53 +0200 |
---|---|---|
committer | Wiktor Kwapisiewicz <wiktor@metacode.biz> | 2023-09-04 12:20:34 +0200 |
commit | ff8fc9bd682aa6dcaa96a55f9368789807f8900c (patch) | |
tree | 0c205dc31652505f3aad25fdf9e35161e618a369 | |
parent | 2b8f5db01e32da5634a14115add5043a9a208852 (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.rs | 12 |
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 { |