summaryrefslogtreecommitdiffstats
path: root/openpgp/src/crypto/backend
diff options
context:
space:
mode:
Diffstat (limited to 'openpgp/src/crypto/backend')
-rw-r--r--openpgp/src/crypto/backend/botan/hash.rs4
-rw-r--r--openpgp/src/crypto/backend/cng/hash.rs11
-rw-r--r--openpgp/src/crypto/backend/nettle/hash.rs8
-rw-r--r--openpgp/src/crypto/backend/openssl/hash.rs2
-rw-r--r--openpgp/src/crypto/backend/rust/hash.rs6
5 files changed, 30 insertions, 1 deletions
diff --git a/openpgp/src/crypto/backend/botan/hash.rs b/openpgp/src/crypto/backend/botan/hash.rs
index 0e02b5dd..7f5934e3 100644
--- a/openpgp/src/crypto/backend/botan/hash.rs
+++ b/openpgp/src/crypto/backend/botan/hash.rs
@@ -48,6 +48,8 @@ impl HashAlgorithm {
HashAlgorithm::SHA256 => true,
HashAlgorithm::SHA384 => true,
HashAlgorithm::SHA512 => true,
+ HashAlgorithm::SHA3_256 => true,
+ HashAlgorithm::SHA3_512 => true,
HashAlgorithm::RipeMD => true,
HashAlgorithm::MD5 => true,
HashAlgorithm::Private(_) => false,
@@ -82,6 +84,8 @@ impl HashAlgorithm {
HashAlgorithm::SHA256 => Ok("SHA-256"),
HashAlgorithm::SHA384 => Ok("SHA-384"),
HashAlgorithm::SHA512 => Ok("SHA-512"),
+ HashAlgorithm::SHA3_256 => Ok("SHA-3(256)"),
+ HashAlgorithm::SHA3_512 => Ok("SHA-3(512)"),
HashAlgorithm::MD5 => Ok("MD5"),
HashAlgorithm::RipeMD => Ok("RIPEMD-160"),
HashAlgorithm::Private(_) | HashAlgorithm::Unknown(_) =>
diff --git a/openpgp/src/crypto/backend/cng/hash.rs b/openpgp/src/crypto/backend/cng/hash.rs
index 301ac0c6..e71789d1 100644
--- a/openpgp/src/crypto/backend/cng/hash.rs
+++ b/openpgp/src/crypto/backend/cng/hash.rs
@@ -84,6 +84,12 @@ impl TryFrom<HashAlgorithm> for cng::HashAlgorithmId {
HashAlgorithm::SHA512 => cng::HashAlgorithmId::Sha512,
HashAlgorithm::MD5 => cng::HashAlgorithmId::Md5,
+ // SHA3 support is on the horizon, see
+ // https://blogs.windows.com/windows-insider/2023/03/23/announcing-windows-11-insider-preview-build-25324/
+ HashAlgorithm::SHA3_256 |
+ HashAlgorithm::SHA3_512 =>
+ return Err(Error::UnsupportedHashAlgorithm(value)),
+
HashAlgorithm::SHA224 |
HashAlgorithm::RipeMD |
HashAlgorithm::Private(_) |
@@ -119,6 +125,11 @@ impl HashAlgorithm {
HashAlgorithm::SHA512 => true,
HashAlgorithm::MD5 => true,
+ // SHA3 support is on the horizon, see
+ // https://blogs.windows.com/windows-insider/2023/03/23/announcing-windows-11-insider-preview-build-25324/
+ HashAlgorithm::SHA3_256 |
+ HashAlgorithm::SHA3_512 => false,
+
HashAlgorithm::SHA224 |
HashAlgorithm::RipeMD |
HashAlgorithm::Private(_) |
diff --git a/openpgp/src/crypto/backend/nettle/hash.rs b/openpgp/src/crypto/backend/nettle/hash.rs
index 4bf1535e..3e9d12a6 100644
--- a/openpgp/src/crypto/backend/nettle/hash.rs
+++ b/openpgp/src/crypto/backend/nettle/hash.rs
@@ -29,6 +29,8 @@ impl_digest_for!(nettle::hash::Sha224, SHA224);
impl_digest_for!(nettle::hash::Sha256, SHA256);
impl_digest_for!(nettle::hash::Sha384, SHA384);
impl_digest_for!(nettle::hash::Sha512, SHA512);
+impl_digest_for!(nettle::hash::Sha3_256, SHA3_256);
+impl_digest_for!(nettle::hash::Sha3_512, SHA3_512);
impl_digest_for!(nettle::hash::insecure_do_not_use::Sha1, SHA1);
impl_digest_for!(nettle::hash::insecure_do_not_use::Md5, MD5);
impl_digest_for!(nettle::hash::insecure_do_not_use::Ripemd160, RipeMD);
@@ -42,6 +44,8 @@ impl HashAlgorithm {
HashAlgorithm::SHA256 => true,
HashAlgorithm::SHA384 => true,
HashAlgorithm::SHA512 => true,
+ HashAlgorithm::SHA3_256 => true,
+ HashAlgorithm::SHA3_512 => true,
HashAlgorithm::RipeMD => true,
HashAlgorithm::MD5 => true,
HashAlgorithm::Private(_) => false,
@@ -59,7 +63,7 @@ impl HashAlgorithm {
///
/// [`HashAlgorithm::is_supported`]: HashAlgorithm::is_supported()
pub(crate) fn new_hasher(self) -> Result<Box<dyn Digest>> {
- use nettle::hash::{Sha224, Sha256, Sha384, Sha512};
+ use nettle::hash::{Sha224, Sha256, Sha384, Sha512, Sha3_256, Sha3_512};
use nettle::hash::insecure_do_not_use::{
Sha1,
Md5,
@@ -72,6 +76,8 @@ impl HashAlgorithm {
HashAlgorithm::SHA256 => Ok(Box::new(Sha256::default())),
HashAlgorithm::SHA384 => Ok(Box::new(Sha384::default())),
HashAlgorithm::SHA512 => Ok(Box::new(Sha512::default())),
+ HashAlgorithm::SHA3_256 => Ok(Box::new(Sha3_256::default())),
+ HashAlgorithm::SHA3_512 => Ok(Box::new(Sha3_512::default())),
HashAlgorithm::MD5 => Ok(Box::new(Md5::default())),
HashAlgorithm::RipeMD => Ok(Box::new(Ripemd160::default())),
HashAlgorithm::Private(_) | HashAlgorithm::Unknown(_) =>
diff --git a/openpgp/src/crypto/backend/openssl/hash.rs b/openpgp/src/crypto/backend/openssl/hash.rs
index b4f6d816..e8db9373 100644
--- a/openpgp/src/crypto/backend/openssl/hash.rs
+++ b/openpgp/src/crypto/backend/openssl/hash.rs
@@ -73,6 +73,8 @@ fn get_md(algo: HashAlgorithm) -> Option<MessageDigest> {
SHA384 => Nid::SHA384,
SHA512 => Nid::SHA512,
SHA224 => Nid::SHA224,
+ SHA3_256 => Nid::SHA3_256,
+ SHA3_512 => Nid::SHA3_512,
HashAlgorithm::Private(_) |
HashAlgorithm::Unknown(_) => return None,
};
diff --git a/openpgp/src/crypto/backend/rust/hash.rs b/openpgp/src/crypto/backend/rust/hash.rs
index 069dfc79..ed3a3704 100644
--- a/openpgp/src/crypto/backend/rust/hash.rs
+++ b/openpgp/src/crypto/backend/rust/hash.rs
@@ -37,6 +37,8 @@ impl_digest_for!(sha2::Sha224, SHA224);
impl_digest_for!(sha2::Sha256, SHA256);
impl_digest_for!(sha2::Sha384, SHA384);
impl_digest_for!(sha2::Sha512, SHA512);
+impl_digest_for!(sha3::Sha3_256, SHA3_256);
+impl_digest_for!(sha3::Sha3_512, SHA3_512);
impl HashAlgorithm {
/// Whether Sequoia supports this algorithm.
@@ -47,6 +49,8 @@ impl HashAlgorithm {
HashAlgorithm::SHA256 => true,
HashAlgorithm::SHA384 => true,
HashAlgorithm::SHA512 => true,
+ HashAlgorithm::SHA3_256 => true,
+ HashAlgorithm::SHA3_512 => true,
HashAlgorithm::RipeMD => true,
HashAlgorithm::MD5 => true,
HashAlgorithm::Private(_) => false,
@@ -73,6 +77,8 @@ impl HashAlgorithm {
HashAlgorithm::SHA256 => Ok(Box::new(sha2::Sha256::new())),
HashAlgorithm::SHA384 => Ok(Box::new(sha2::Sha384::new())),
HashAlgorithm::SHA512 => Ok(Box::new(sha2::Sha512::new())),
+ HashAlgorithm::SHA3_256 => Ok(Box::new(sha3::Sha3_256::new())),
+ HashAlgorithm::SHA3_512 => Ok(Box::new(sha3::Sha3_512::new())),
HashAlgorithm::RipeMD => Ok(Box::new(ripemd::Ripemd160::new())),
HashAlgorithm::MD5 => Ok(Box::new(md5::Md5::new())),
HashAlgorithm::Private(_) | HashAlgorithm::Unknown(_) =>