diff --git a/openssl-sys/src/sha.rs b/openssl-sys/src/sha.rs
index 2ad91f6f83c669ba058dc9f891ba4225cc86fd8a..e8d1403f791d6eced5c2c9f3f39870088f36eb4c 100644
--- a/openssl-sys/src/sha.rs
+++ b/openssl-sys/src/sha.rs
@@ -26,6 +26,7 @@ extern "C" {
 }
 
 #[repr(C)]
+#[derive(Clone)]
 pub struct SHA256_CTX {
     pub h: [SHA_LONG; 8],
     pub Nl: SHA_LONG,
@@ -49,6 +50,7 @@ extern "C" {
 pub type SHA_LONG64 = u64;
 
 #[repr(C)]
+#[derive(Clone)]
 pub struct SHA512_CTX {
     pub h: [SHA_LONG64; 8],
     pub Nl: SHA_LONG64,
diff --git a/openssl/src/sha.rs b/openssl/src/sha.rs
index dffadb9053432ffe8438c451d37c39bd1e97f6a3..a33a0f6c440fa2a2f325dd5e3f90f3c220d791fb 100644
--- a/openssl/src/sha.rs
+++ b/openssl/src/sha.rs
@@ -146,6 +146,7 @@ impl Sha1 {
 }
 
 /// An object which calculates a SHA224 hash of some data.
+#[derive(Clone)]
 pub struct Sha224(ffi::SHA256_CTX);
 
 impl Sha224 {
@@ -181,6 +182,7 @@ impl Sha224 {
 }
 
 /// An object which calculates a SHA256 hash of some data.
+#[derive(Clone)]
 pub struct Sha256(ffi::SHA256_CTX);
 
 impl Sha256 {
@@ -216,6 +218,7 @@ impl Sha256 {
 }
 
 /// An object which calculates a SHA384 hash of some data.
+#[derive(Clone)]
 pub struct Sha384(ffi::SHA512_CTX);
 
 impl Sha384 {
@@ -251,6 +254,7 @@ impl Sha384 {
 }
 
 /// An object which calculates a SHA512 hash of some data.
+#[derive(Clone)]
 pub struct Sha512(ffi::SHA512_CTX);
 
 impl Sha512 {