Skip to content

Commit 907f952

Browse files
Rust wrapper: zeroize aead keys on stack
Fixes F-11286.
1 parent d81fedb commit 907f952

2 files changed

Lines changed: 24 additions & 8 deletions

File tree

wrapper/rust/wolfssl-wolfcrypt/src/aes.rs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,9 @@ impl KeyInit for Aes128Ccm {
526526
fn new(key: &aead::Key<Self>) -> Self {
527527
let mut k = [0u8; 16];
528528
k.copy_from_slice(key.as_ref());
529-
Aes128Ccm { key: k }
529+
let out = Aes128Ccm { key: k };
530+
k.zeroize();
531+
out
530532
}
531533
}
532534

@@ -578,7 +580,9 @@ impl KeyInit for Aes192Ccm {
578580
fn new(key: &aead::Key<Self>) -> Self {
579581
let mut k = [0u8; 24];
580582
k.copy_from_slice(key.as_ref());
581-
Aes192Ccm { key: k }
583+
let out = Aes192Ccm { key: k };
584+
k.zeroize();
585+
out
582586
}
583587
}
584588

@@ -630,7 +634,9 @@ impl KeyInit for Aes256Ccm {
630634
fn new(key: &aead::Key<Self>) -> Self {
631635
let mut k = [0u8; 32];
632636
k.copy_from_slice(key.as_ref());
633-
Aes256Ccm { key: k }
637+
let out = Aes256Ccm { key: k };
638+
k.zeroize();
639+
out
634640
}
635641
}
636642

@@ -1742,7 +1748,9 @@ impl KeyInit for Aes128Gcm {
17421748
fn new(key: &aead::Key<Self>) -> Self {
17431749
let mut k = [0u8; 16];
17441750
k.copy_from_slice(key.as_ref());
1745-
Aes128Gcm { key: k }
1751+
let out = Aes128Gcm { key: k };
1752+
k.zeroize();
1753+
out
17461754
}
17471755
}
17481756

@@ -1794,7 +1802,9 @@ impl KeyInit for Aes192Gcm {
17941802
fn new(key: &aead::Key<Self>) -> Self {
17951803
let mut k = [0u8; 24];
17961804
k.copy_from_slice(key.as_ref());
1797-
Aes192Gcm { key: k }
1805+
let out = Aes192Gcm { key: k };
1806+
k.zeroize();
1807+
out
17981808
}
17991809
}
18001810

@@ -1846,7 +1856,9 @@ impl KeyInit for Aes256Gcm {
18461856
fn new(key: &aead::Key<Self>) -> Self {
18471857
let mut k = [0u8; 32];
18481858
k.copy_from_slice(key.as_ref());
1849-
Aes256Gcm { key: k }
1859+
let out = Aes256Gcm { key: k };
1860+
k.zeroize();
1861+
out
18501862
}
18511863
}
18521864

wrapper/rust/wolfssl-wolfcrypt/src/chacha20_poly1305.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,9 @@ impl aead::KeyInit for ChaCha20Poly1305Aead {
339339
fn new(key: &aead::Key<Self>) -> Self {
340340
let mut k = [0u8; 32];
341341
k.copy_from_slice(key.as_ref());
342-
ChaCha20Poly1305Aead { key: k }
342+
let out = ChaCha20Poly1305Aead { key: k };
343+
k.zeroize();
344+
out
343345
}
344346
}
345347

@@ -528,7 +530,9 @@ impl aead::KeyInit for XChaCha20Poly1305Aead {
528530
fn new(key: &aead::Key<Self>) -> Self {
529531
let mut k = [0u8; 32];
530532
k.copy_from_slice(key.as_ref());
531-
XChaCha20Poly1305Aead { key: k }
533+
let out = XChaCha20Poly1305Aead { key: k };
534+
k.zeroize();
535+
out
532536
}
533537
}
534538

0 commit comments

Comments
 (0)