diff options
Diffstat (limited to 'openpgp')
-rw-r--r-- | openpgp/src/crypto/tests.rs | 1 | ||||
-rw-r--r-- | openpgp/src/crypto/tests/rsa.rs | 629 |
2 files changed, 630 insertions, 0 deletions
diff --git a/openpgp/src/crypto/tests.rs b/openpgp/src/crypto/tests.rs index a5935871..91cdc0c6 100644 --- a/openpgp/src/crypto/tests.rs +++ b/openpgp/src/crypto/tests.rs @@ -1,4 +1,5 @@ //! Low-level crypto tests. +mod rsa; mod dsa; mod ecdsa; diff --git a/openpgp/src/crypto/tests/rsa.rs b/openpgp/src/crypto/tests/rsa.rs new file mode 100644 index 00000000..9bb82aad --- /dev/null +++ b/openpgp/src/crypto/tests/rsa.rs @@ -0,0 +1,629 @@ +//! Low-level RSA tests. + +use crate::Result; +use crate::crypto::{mpi, hash::Digest}; +use crate::packet::{prelude::*, signature::subpacket::*}; +use crate::types::*; + +#[test] +fn fips_186_3_verification() -> Result<()> { + if ! PublicKeyAlgorithm::RSAEncryptSign.is_supported() { + eprintln!("Skipping because RSA is not supported."); + return Ok(()); + } + + fn test(hash: HashAlgorithm, + msg: &[u8], + n: &[u8], e: &[u8], + s: &[u8]) + -> Result<()> + { + if ! hash.is_supported() { + eprintln!("Skipping because {} is not supported.", hash); + return Ok(()); + } + + let now = Timestamp::now(); + let key: Key<key::PublicParts, key::PrimaryRole> = + Key4::new(now, PublicKeyAlgorithm::RSAEncryptSign, + mpi::PublicKey::RSA { + e: mpi::MPI::new(e), + n: mpi::MPI::new(n), + })?.into(); + let mut h = hash.context()?; + h.update(msg); + let mut d = h.into_digest()?; + let mut sig: Signature = + Signature4::new(SignatureType::Binary, + PublicKeyAlgorithm::RSAEncryptSign, + hash, + SubpacketArea::new(vec![ + Subpacket::new( + SubpacketValue::SignatureCreationTime(now), + false)?, + ])?, + SubpacketArea::default(), + [d[0], d[1]], + mpi::Signature::RSA { + s: mpi::MPI::new(s), + }).into(); + + sig.verify_digest(&key, &d)?; + + // Sanity check: Change the digest and retry. + d[0] ^= 1; + sig.verify_digest(&key, &d).unwrap_err(); + + Ok(()) + } + + // [mod = 2048] + let n = b"\xce\xa8\x04\x75\x32\x4c\x1d\xc8\x34\x78\x27\x81\x8d\xa5\x8b\xac\x06\x9d\x34\x19\xc6\x14\xa6\xea\x1a\xc6\xa3\xb5\x10\xdc\xd7\x2c\xc5\x16\x95\x49\x05\xe9\xfe\xf9\x08\xd4\x5e\x13\x00\x6a\xdf\x27\xd4\x67\xa7\xd8\x3c\x11\x1d\x1a\x5d\xf1\x5e\xf2\x93\x77\x1a\xef\xb9\x20\x03\x2a\x5b\xb9\x89\xf8\xe4\xf5\xe1\xb0\x50\x93\xd3\xf1\x30\xf9\x84\xc0\x7a\x77\x2a\x36\x83\xf4\xdc\x6f\xb2\x8a\x96\x81\x5b\x32\x12\x3c\xcd\xd1\x39\x54\xf1\x9d\x5b\x8b\x24\xa1\x03\xe7\x71\xa3\x4c\x32\x87\x55\xc6\x5e\xd6\x4e\x19\x24\xff\xd0\x4d\x30\xb2\x14\x2c\xc2\x62\xf6\xe0\x04\x8f\xef\x6d\xbc\x65\x2f\x21\x47\x9e\xa1\xc4\xb1\xd6\x6d\x28\xf4\xd4\x6e\xf7\x18\x5e\x39\x0c\xbf\xa2\xe0\x23\x80\x58\x2f\x31\x88\xbb\x94\xeb\xbf\x05\xd3\x14\x87\xa0\x9a\xff\x01\xfc\xbb\x4c\xd4\xbf\xd1\xf0\xa8\x33\xb3\x8c\x11\x81\x3c\x84\x36\x0b\xb5\x3c\x7d\x44\x81\x03\x1c\x40\xba\xd8\x71\x3b\xb6\xb8\x35\xcb\x08\x09\x8e\xd1\x5b\xa3\x1e\xe4\xba\x72\x8a\x8c\x8e\x10\xf7\x29\x4e\x1b\x41\x63\xb7\xae\xe5\x72\x77\xbf\xd8\x81\xa6\xf9\xd4\x3e\x02\xc6\x92\x5a\xa3\xa0\x43\xfb\x7f\xb7\x8d"; + let e = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x04\x45"; + test( + HashAlgorithm::SHA224, + b"\x74\x23\x04\x47\xbc\xd4\x92\xf2\xf8\xa8\xc5\x94\xa0\x43\x79\x27\x16\x90\xbf\x0c\x8a\x13\xdd\xfc\x1b\x7b\x96\x41\x3e\x77\xab\x26\x64\xcb\xa1\xac\xd7\xa3\xc5\x7e\xe5\x27\x6e\x27\x41\x4f\x82\x83\xa6\xf9\x3b\x73\xbd\x39\x2b\xd5\x41\xf0\x7e\xb4\x61\xa0\x80\xbb\x66\x7e\x5f\xf0\x95\xc9\x31\x9f\x57\x5b\x38\x93\x97\x7e\x65\x8c\x6c\x00\x1c\xee\xf8\x8a\x37\xb7\x90\x2d\x4d\xb3\x1c\x3e\x34\xf3\xc1\x64\xc4\x7b\xbe\xef\xde\x3b\x94\x6b\xad\x41\x6a\x75\x2c\x2c\xaf\xce\xe9\xe4\x01\xae\x08\x88\x4e\x5b\x8a\xa8\x39\xf9\xd0\xb5", + n, + e, + b"\x27\xda\x41\x04\xea\xce\x19\x91\xe0\x8b\xd8\xe7\xcf\xcc\xd9\x7e\xc4\x8b\x89\x6a\x0e\x15\x6c\xe7\xbd\xc2\x3f\xd5\x70\xaa\xa9\xa0\x0e\xd0\x15\x10\x1f\x0c\x62\x61\xc7\x37\x1c\xec\xa3\x27\xa7\x3c\x3c\xec\xfc\xf6\xb2\xd9\xed\x92\x0c\x96\x98\x04\x6e\x25\xc8\x9a\xdb\x23\x60\x88\x7d\x99\x98\x3b\xf6\x32\xf9\xe6\xeb\x0e\x5d\xf6\x07\x15\x90\x2b\x9a\xea\xa7\x4b\xf5\x02\x7a\xa2\x46\x51\x08\x91\xc7\x4a\xe3\x66\xa1\x6f\x39\x7e\x2c\x8c\xcd\xc8\xbd\x56\xaa\x10\xe0\xd0\x15\x85\xe6\x9f\x8c\x48\x56\xe7\x6b\x53\xac\xfd\x3d\x78\x2b\x81\x71\x52\x90\x08\xfa\x5e\xff\x03\x0f\x46\x95\x67\x04\xa3\xf5\xd9\x16\x73\x48\xf3\x70\x21\xfc\x27\x7c\x6c\x0a\x8f\x93\xb8\xa2\x3c\xfb\xf9\x18\x99\x0f\x98\x2a\x56\xd0\xed\x2a\xa0\x81\x61\x56\x07\x55\xad\xc0\xce\x2c\x3e\x2a\xb2\x92\x9f\x79\xbf\xc0\xb2\x4f\xf3\xe0\xff\x35\x2e\x64\x45\xd8\xa6\x17\xf1\x78\x5d\x66\xc3\x22\x95\xbb\x36\x5d\x61\xcf\xb1\x07\xe9\x99\x3b\xbd\x93\x42\x1f\x2d\x34\x4a\x86\xe4\x12\x78\x27\xfa\x0d\x0b\x25\x35\xf9\xb1\xd5\x47\xde\x12\xba\x28\x68\xac\xde\xcf\x2c\xb5\xf9\x2a\x6a\x15\x9a", + )?; + test( + HashAlgorithm::SHA224, + b"\x9a\xf2\xc5\xa9\x19\xe5\xda\xdc\x66\x87\x99\xf3\x65\xfc\x23\xda\x62\x31\x43\x7e\xa5\x1c\xa5\x31\x46\x45\x42\x50\x43\x85\x1f\x23\xd0\x0d\x37\x04\xee\xab\xb5\xc4\x3f\x49\x67\x4a\x19\xb7\x70\x7d\xd9\xaa\x3d\x65\x7a\x04\xba\x8c\x66\x55\xc5\xab\x8b\xa2\xe3\x82\xb2\x66\x31\x08\x0c\xd7\x9e\xc4\x0e\x6a\x58\x7b\x7f\x99\x84\x0b\xd0\xe4\x32\x97\xab\x16\x90\xe4\xce\xc9\x5d\x03\x1a\x2c\xa1\x31\xe7\x04\x9c\xfb\x9b\xf1\xfc\xa6\x7b\xf3\x53\xcd\xc1\x2c\xc7\x4c\xee\xe8\x0c\x5d\x61\xda\x8f\x01\x29\xa8\xf4\xa2\x18\xab\xc3\xf6", + n, + e, + b"\xc5\xdf\xbe\xfd\x35\xce\xc8\x46\xe2\xc7\xb2\x43\x4d\xc9\xc4\x6a\x5a\x9b\x1b\x6c\xe6\x5b\x2b\x18\x66\x5a\xed\xb1\x40\x4d\xe1\xf4\x66\xe0\x24\xf8\x49\xee\xc3\x08\xc2\xd2\xf2\xf0\x19\x3d\xf1\x89\x8a\x58\x1c\x9e\xa3\x25\x81\x18\x55\x53\xb1\x71\xb6\x50\x70\x82\x61\x7c\x5c\x01\x8a\xfe\x0c\x3a\xf6\x4d\x2e\xc5\xa5\x63\x79\x5a\xa5\x85\xe7\x77\x53\xcd\x18\x83\x6f\x6f\x0c\x29\x53\x5f\x62\x00\xca\x89\x99\x28\xfe\x78\xe9\x49\xb0\xa2\x16\xec\x47\xa6\xad\xf2\x22\x3e\x17\x23\x6c\xfc\x16\x7c\xf0\x0e\xd6\x13\x6f\x03\xcf\x6f\xfd\x4f\x3f\x77\x87\xae\xb0\x05\x84\x09\x78\xd8\xd6\xba\x59\x3d\x4f\x4c\xfe\x69\x20\xbe\x10\x2b\x98\x47\xd1\x01\x40\xdf\xf8\x6b\x0d\xb1\x4f\xfc\xcc\x9a\x96\xe6\x73\xc6\x72\xc1\x12\x8a\xe4\x54\x89\xd2\xcb\xfe\x6e\x19\x5c\xa5\x20\x6e\xda\x51\x9c\xad\x3d\x6e\x0a\xbf\x46\x53\xe3\x6b\x5a\x26\x4e\x87\x49\x4a\x4d\x63\xee\x91\xff\x7c\x35\xa6\xab\x12\xad\xfa\x3b\xb5\x37\xf6\x19\x8b\x06\xf5\xde\x07\x17\x07\x6b\x0e\xc8\x3a\xe0\xda\x9e\xa4\x19\xcc\x0c\x96\x66\x9d\x1d\x7c\x9e\x52\x92\x71\x42\x84\x01\xe0\x9e\x04\x88\x8a", + )?; + test( + HashAlgorithm::SHA224, + b"\x59\xb5\xb8\x5b\x9d\xc2\x46\xd3\x0a\x3f\xc8\xa2\xde\x3c\x9d\xfa\x97\x16\x43\xb0\xc1\xf7\xc9\xe4\x0c\x9c\x87\xe4\xa1\x5b\x0c\x4e\xb6\x64\x58\x75\x60\x47\x4c\x06\xa9\xb6\x5e\xec\xe3\x8c\x91\x70\x3c\x0f\xa5\xa5\x92\x72\x8a\x03\x88\x9f\x1b\x52\xd9\x33\x09\xca\xec\xc9\x15\x78\xa9\x7b\x83\xe3\x8c\xa6\xcb\xf0\xf7\xee\x91\x03\xcd\x82\xd7\x67\x3c\xa1\x72\xf0\xda\x5e\xba\xde\xf4\xa0\x86\x05\x22\x6c\x58\x2b\x1f\x67\xd4\xb2\xd8\x96\x77\x77\xc3\x69\x85\xf9\x72\xf8\x43\xbe\x68\x8c\x67\xf2\x2b\x61\xcd\x52\x9b\xaa\x6b\x48", + n, + e, + b"\x29\xb5\xac\x41\x72\x26\x44\x4b\xc8\x57\x0a\x27\x9e\x0e\x56\x1a\x4c\x39\x70\x7b\xdb\xea\x93\x60\x64\xed\x60\x3b\xa9\x68\x89\xeb\x3d\x78\x6b\x19\x99\xb5\x18\x0c\xd5\xd0\x61\x17\x88\x83\x7a\x9d\xf1\x49\x6b\xac\xea\x31\xcb\xf8\xf2\x4a\x1a\x22\x32\xd4\x15\x89\x13\xc9\x63\xf5\x06\x6a\xad\x4b\x65\xe6\x17\xd0\x90\x33\x59\x69\x6d\x75\x9d\x84\xc1\x39\x2e\x22\xc2\x46\xd5\xf5\xbe\xd4\xb8\x06\xf4\x09\x1d\x5e\x8f\x71\xa5\x13\xf1\x31\x9b\xb4\xe5\x69\x71\xcd\x3e\x16\x8c\x9a\x7e\x27\x89\x83\x22\x93\x99\x1a\x73\xd3\x02\x70\x72\xec\xee\x68\x63\x51\x45\x49\x02\x9f\xb3\x55\x34\x78\xc8\xf4\x10\x3b\xf6\x2d\x7d\xe1\xfb\x53\xfe\x76\xce\x97\x78\xad\xa3\xbb\x9e\xfa\x62\xda\x44\xcd\x00\xd0\x2b\xb0\xeb\x74\x88\xac\x24\xda\x38\x14\xc6\x53\xcb\xa6\x12\x30\x13\x73\x83\x7a\x0c\x3f\x11\x88\x54\x93\xcb\xf3\x02\x4c\x35\x72\xea\xed\x39\x6d\x0e\xbb\x80\x39\xdd\xf8\x43\xc2\x18\xd8\xbc\x77\x83\x54\x90\x46\xc3\x35\x86\xfb\x34\x28\x56\x2c\xb8\x04\x60\x90\x04\x0c\x0e\x4e\xea\x50\xa1\x9a\x42\x8b\xde\x34\x62\x62\x77\xff\x48\xa8\x4f\xaa\x18\x9b\x54\x40", + )?; + test( + HashAlgorithm::SHA224, + b"\x49\xa5\xf3\x93\x0a\xd4\x5a\xca\x5e\x22\xca\xac\x66\x46\xf0\xbe\xde\x12\x28\x83\x8d\x49\xf8\xf2\xe0\xb2\xdd\x27\xd2\x6a\x4b\x59\x0e\x7e\xef\x0c\x58\xb9\x37\x88\x29\xbb\x14\x89\x99\x4b\xff\x38\x82\xef\x3a\x5a\xe3\xb9\x58\xc8\x82\x63\xff\x1f\xd6\x9f\xed\xb8\x23\xa8\x39\xdb\xe7\x1d\xdb\x2f\x75\x0f\x6f\x75\xe0\x59\x36\x76\x1a\x2f\x5e\x3a\x5d\xfa\x83\x7b\xca\x63\x75\x59\x51\xae\x3c\x50\xd0\x4a\x59\x66\x7f\xa6\x4f\xa9\x8b\x46\x62\xd8\x01\x15\x9f\x61\xee\xfd\x1c\x8b\xc5\xb5\x81\xf5\x00\xda\xc7\x3f\x0a\x42\x40\x07", + n, + e, + b"\x60\x4e\xb6\x37\xca\x54\xbe\xa5\xad\x1f\xd3\x16\x59\x11\xf3\xba\xa2\xe0\x6c\x85\x9d\xc7\x39\x45\xa3\x8b\xca\x7f\xf9\xbf\xa9\xed\x39\x43\x53\x48\x62\x3d\x3e\x60\xf1\xce\x48\x74\x43\x84\x0c\x6b\x2c\x00\x0f\x15\x82\xe8\x52\x60\x67\xa5\xe8\x92\x3f\x1a\x1b\xda\xab\xb1\xa4\x0c\x0f\x49\xee\x69\x06\xa4\xc8\xfc\x9b\x8c\xfa\x6d\x07\xc2\xcc\x5b\xdf\x2a\xda\x65\xc5\x3d\x79\x54\x80\x89\xc5\x24\xfa\x36\x43\x19\xa9\x0d\x46\x21\x3f\xeb\xdc\xe6\xdb\x79\x59\x14\xcb\xda\x04\xd7\xbb\xbf\x26\xbb\xb2\x99\xfc\x7d\x14\x49\xdc\xc8\x1d\x13\x9e\x3c\x33\xd4\xc1\xde\x96\x47\x39\x94\x73\x0a\x4b\x63\x96\x33\xd6\x77\xdb\x25\x69\x5f\xfd\x15\x7e\x59\x1b\xdd\xea\xd0\x3d\xd2\xf1\xc1\xb8\xf5\xc8\xa2\x13\xb7\x85\x87\x9b\xf7\xc9\xa9\x92\xbb\x11\xdd\x5e\x91\xdf\x3a\xff\x09\x31\xca\x76\xc4\x06\x23\x0a\x19\xe3\x07\xf3\x34\x19\xc9\xd9\xd3\xf6\xf6\x4b\xf8\x88\x1c\x0d\xdf\x74\xa5\x71\x6c\xbc\x43\x33\x29\x36\x8d\x6e\x55\xf1\xf7\x51\xd7\xb9\xf9\xb0\xa2\x6e\xb5\x81\x17\x72\xf5\xf6\x98\x53\x0e\xfc\x1e\xac\xee\xe6\xe1\xdc\x68\x39\xb2\x13\x3c\x2f\xcc\xfa\x8c", + )?; + test( + HashAlgorithm::SHA224, + b"\x9b\xfc\x4d\xac\x8c\x22\x32\x38\x72\x16\xa5\x32\xce\x62\xd9\x8c\x1a\xaf\xa3\x5c\x65\xdc\x38\x8e\x3d\x4d\x37\xd6\xd1\x86\xea\xe9\x57\xf8\xc9\xed\xac\x1a\x3f\x2e\x3a\xbc\xb1\x12\x1f\x99\xbd\x4f\x8c\x2b\xbf\x5b\x6a\xc3\x9a\x25\x44\xd8\xb5\x02\x61\x9f\x43\xea\x30\xdd\xc8\xe4\xea\xfa\xd8\xbf\x72\x56\x22\x03\x80\xe0\xae\x27\xfe\xe4\x63\x04\xb2\x24\xcc\x8a\x1e\x2b\x1c\xb2\xa4\xde\x6f\xb3\xee\x54\x52\x79\x8d\xe7\x86\x53\xe0\x8b\x01\xec\x38\x5f\x36\x7c\x39\x82\x96\x3f\x84\x28\x57\x27\x93\xed\x74\xce\xe3\x69\xf5\xae", + n, + e, + b"\x44\x4f\x7e\xfb\xfe\xf5\x86\xfa\xd4\x31\xe1\x7f\xea\x1a\x2d\x59\xf1\x9b\x3d\x61\x9b\xb6\xfa\x36\x64\x30\x18\x33\xa4\xdb\x12\x43\x45\x9e\x31\xaa\x6a\x70\x3b\x22\x57\x2f\x09\x12\x75\x4e\x56\xf7\x23\x1a\x55\xac\x7a\xbc\xa5\x14\xc7\x9d\x9f\xb3\x56\x42\x14\xb4\xaf\x83\x5d\x7d\x1e\xaf\x2b\x58\xce\xb6\xa3\x44\xf1\xc3\x68\x90\xf5\xe8\x3b\x50\x18\x8c\x01\x47\xd6\xd1\x15\x6d\xa2\x89\xcc\xf4\xbd\xb0\xb9\xa6\x6f\x1e\x4a\x1f\x26\x43\x59\x1d\x5f\xfb\x53\x70\x2c\xf7\x0d\xdf\x35\x15\x92\x57\x54\x88\xf1\x92\x90\x10\xac\xa3\x77\x14\xb2\x34\xee\xb5\xb9\x52\xb9\x32\x3a\xe2\x65\x33\xe9\xec\xd5\x16\xdf\x26\x39\x2d\x12\x54\x22\x8b\xd9\xca\x21\xa3\x69\xbb\x6a\xb0\xa3\x3d\x5e\xb4\x4c\xee\x92\xb0\xea\x74\x71\xff\xe5\xfa\x43\xc2\x1d\xe2\xa8\x97\x5d\x4c\x5c\x8e\x18\x5f\xcb\x7a\xab\x33\xd8\x8a\x83\x65\xdd\xf0\x11\x9c\x10\x88\x03\xc5\x62\x88\x64\x3a\x05\x6e\x78\x1a\xbd\x4a\x02\x42\xa9\x2e\x25\x29\xd4\x05\xef\xcf\xd4\x24\x86\x62\xcf\xbb\x33\x2d\x6e\x6f\xad\x6a\xce\xb9\x0b\x5b\x58\xa5\x54\x1a\xbe\x07\xbe\xf2\x5d\x9d\x89\x21\x5e\x39\x84\x26", + )?; + test( + HashAlgorithm::SHA224, + b"\xbf\x5f\xf1\x96\x8a\x39\xf8\x09\xde\x73\xe6\xa8\x01\x4f\xc6\xe8\xdf\x15\x93\x67\xf4\x63\x40\xda\x6c\xc5\xfb\x46\x89\x85\xb3\x74\x46\xc5\xd8\x9f\x3a\xca\x62\x6f\xbe\x9b\x14\x2b\x52\xcb\x02\x2a\x3d\x93\x51\x8a\x74\x24\x3e\x25\xbd\x3a\x61\xc1\x14\xf5\x33\x87\x4e\xe5\xcf\xb7\xfc\x63\xf5\x99\x92\x28\x54\xb7\xc9\x18\x09\x49\x41\x5f\x63\xf1\x6b\xbf\xe9\xa8\xa6\x28\x9e\xf8\xa8\x8a\x83\x6d\x20\xe7\x5e\x46\x99\xac\xba\x6f\xa2\x41\x2f\xb4\x2c\xdf\xe3\x2f\x33\xa2\x51\x02\xa1\xdf\x49\x4c\x6f\xb7\x38\x55\x0d\xec\xaa\x0c", + n, + e, + b"\x01\x7e\x05\x3d\x1e\xf8\x5c\x43\x19\x3a\x00\x09\xa9\x03\x95\x2a\xaf\x40\x0f\xbc\xfe\xe9\xc0\x28\x97\x57\x77\xab\x54\x0d\x2d\x22\xab\x5c\x25\xf4\xcf\x1d\x37\x94\xaf\xac\x66\x97\xe1\xf2\x43\x82\x90\x52\xa8\x4e\x28\x43\xcc\x0e\x25\x4d\xba\xc1\x02\x15\x72\x99\x9f\x2d\xca\xfa\xb5\x8b\x9d\xfe\xf2\xfc\xaf\x70\x1e\x43\x1b\xdc\xd1\x6d\xbe\xf1\x10\x09\x5b\xcf\xba\x50\x10\x59\xd7\x99\x4d\xad\x5b\x0b\x54\xd0\x81\x2a\x43\x80\xa1\xf0\xba\x8e\xc2\xbc\xba\x76\x8b\xf5\xb5\x44\x69\x56\x26\xa5\xf3\x95\xe7\x84\xd4\xb2\x96\x2f\xb7\x53\x38\x18\xde\x1d\x6e\xc6\x86\xed\xc9\xf6\x68\x68\xad\x03\xee\x64\x36\x1a\x6c\xb9\x1f\xd8\xef\x53\x6c\xa6\x45\x4d\x16\xc5\x37\xc0\x7a\xa4\x29\x23\xe6\x20\x57\xdf\x9d\xd9\xe7\xfa\x4a\xd0\x38\x4f\x35\x72\x1f\x6e\xb3\xb8\x16\xd3\x52\xa0\x95\xc6\x05\xd5\xc1\x0e\x0a\x7a\x2e\x86\x40\xe2\x73\x07\xcd\x44\xb9\xd7\x1a\xc5\x0c\x00\x43\xca\xca\x28\xae\x8d\x6f\x8f\xa5\xbb\x48\x31\x58\xa4\xe4\x15\xef\x6c\xfa\xd4\x7f\x34\xc0\x04\x2a\x2d\x58\x8a\xce\x0f\x13\x71\xd9\x38\x65\x39\x7b\xd2\x15\x16\xda\x2c\xc1\x5e\x90\x9c", + )?; + test( + HashAlgorithm::SHA224, + b"\x2f\xf4\xfc\xd0\xbe\x26\x0b\xf4\xa0\xd7\x31\x12\xd0\xe5\x64\x9c\x0b\xef\x5b\xbc\xdf\x15\x42\x3a\x05\xff\xb2\xa1\xf0\x21\xe0\x9d\xa6\x3d\x15\xa8\xcf\x29\x5e\xe5\x0b\xd2\x84\x4c\x89\x81\x3e\x08\xd6\x5d\xa6\x1d\xf2\x32\xea\x4e\xa9\x70\x44\x3e\x20\x77\x2c\xd5\xaf\x11\xcc\xe5\xee\x40\xb4\x0e\x13\x3b\xcf\xdf\x7b\xb3\x95\x3d\x86\x5a\x83\x09\xa8\xa6\xc8\xfd\xbd\xd2\x42\xd7\x9d\x27\xa8\xba\xf1\x79\x09\xd1\x45\xf4\x75\x35\x5e\x19\xfa\x11\xcd\x03\xd2\x04\xc4\xef\xda\xc6\x29\xfb\x46\x0f\xe9\x2e\x93\xb4\x8f\xb9\xbe\x13", + n, + e, + b"\xab\xee\x5c\x86\x8f\x85\x0c\x17\x79\x4f\x02\x1e\xe9\x70\x9c\xc2\x30\x13\x20\xdd\x24\x6f\xb3\xea\xdb\x78\x02\xa3\x00\xa9\x8a\x67\x08\x3a\x2e\x4e\x25\x0d\xf1\x33\x14\xc2\x54\x53\xb8\x98\x11\x08\x01\xf7\xe7\xac\xb9\xb6\x94\x64\x4e\x5c\x4a\x26\x23\xdf\xf1\x88\x49\x13\xc0\x5e\x63\x6f\xe7\x7e\xd5\x15\x5d\x95\x4e\xe3\x8f\x12\x62\xc6\xc2\xe3\x8d\x11\x14\xcf\x6c\xc5\x14\x3c\x72\x77\xc8\x64\x9f\x5a\x42\x3f\x83\xdf\xd5\xf8\x29\xd9\xdc\x74\xaa\x4b\x2f\xcd\xc8\x96\x0c\xde\x5c\xe1\x46\xb2\x89\x13\x60\x64\xb1\x3b\xd0\xd3\x6a\x1e\x64\xa2\x61\xd6\x80\xfb\x7e\x23\xd2\xae\x92\xef\xb7\x43\xc3\xdb\x54\x60\x9e\xca\x7a\x1b\xe0\xe4\x7e\x6f\x72\x4d\xc5\xcf\x61\xcb\x2a\x36\x9c\x2b\xb1\x73\xf2\xc6\xcf\xec\xb9\xa8\x87\xd5\x83\xd2\x77\xb8\xe3\x0b\x24\xec\x85\x49\xc4\xd5\x3b\xa3\x98\x86\x42\xa6\x1f\x1f\x93\x9f\x0f\x38\x98\x00\x5c\x5d\x13\xaa\xaa\x54\xbc\xb8\xae\x83\xb7\x2b\x3c\xb6\x44\xb9\x43\x9d\x1d\x2a\xcc\xc8\x00\x27\x1d\x23\xe5\x2f\x98\x48\x0d\x27\x0f\xad\x6a\xce\xd5\x12\x25\x2e\xe9\x83\x32\xaf\x90\x35\x63\xd9\x82\xd8\xcb\xde\xfb\x7d", + )?; + test( + HashAlgorithm::SHA224, + b"\xb5\xdc\xa1\x53\x2d\xff\xda\x08\x31\xcb\x2d\x21\xeb\xd1\xbd\xca\x23\xc9\x31\x9c\x64\x27\xfd\xcc\x5a\xef\xe3\xa2\x7f\xc9\xb9\x2d\xf7\x58\x6c\x36\xb7\xc8\x45\x72\xed\xa6\x6b\xfb\x9c\xf5\xaa\x01\x87\x7e\x72\xbd\x51\x67\x23\xa7\xe2\x07\x87\xe9\x0d\xf9\xa0\x13\x6f\x6f\xa5\x10\x9a\xc9\x47\x59\x73\x67\x38\x68\xd8\xbb\xee\x70\x86\xa2\xa5\x4b\x3a\xf4\xa3\xb4\x17\x59\xbf\xb6\x48\x5f\x24\x64\xe6\xca\x53\xcb\x1c\x2c\x67\x25\x89\xb5\x9d\x50\xe5\x4b\x13\x7e\xe8\xdd\xd0\x2d\x67\xf5\x05\x5a\xc1\x8d\x92\xf1\x79\x24\xcc\x89", + n, + e, + b"\x9a\xe5\xb9\x63\x3f\x9a\xdc\x7f\xf9\x23\xd8\x87\x57\x48\xbc\x62\x20\xdd\x8f\x67\x81\xb3\xd4\x6d\x60\x08\xae\x69\xfd\xa0\x72\xd2\x05\xf8\x7a\x12\xd5\x4c\x3c\x7e\xcc\x85\xb8\x8b\x6e\xf4\x77\x0e\xeb\x4b\x71\xde\xbe\xff\x84\x01\xe3\x29\xf6\xb3\xe8\xdc\x8a\x9a\xf1\x3a\x53\x3b\x60\xb9\x62\x93\x0b\xc0\xce\x3d\x65\xd0\xb5\xa2\x76\xe8\x5a\x0c\x74\xf4\x59\xfb\x07\x29\x92\x99\x1b\xa9\x68\x49\x02\x34\x78\xab\x28\xd3\x81\xaa\x67\xd2\x2c\x9c\x3b\x09\x2a\x02\x3f\x06\xc9\x6e\x11\xfd\x2f\x1b\x4d\x9d\xaf\x0f\x34\x49\xde\x17\x97\x61\x2a\x81\x13\xd6\xe6\x26\xcc\x3f\x99\x5e\x1c\x11\x0e\x65\xd1\x7c\x63\x6c\x92\x92\x9f\x91\x36\x39\xa9\x7c\xd0\x49\x15\x58\x30\xdc\x0f\x76\x04\x91\x23\xbe\x3d\x3d\x79\x15\x9f\xc2\xb4\x25\x8e\x94\xb8\xbf\x80\x8d\x7c\x46\xbe\xef\xe6\xdf\x0a\x83\x03\x7d\x15\xa7\x2a\x58\x1d\x8a\xde\xdd\x8f\x01\x3b\x38\xf5\x50\x2d\x73\x6d\x1d\x2f\x04\xb0\xe5\xdc\x22\xeb\x1a\x41\x4e\x52\xb1\xa9\xe8\x73\x5e\x05\x92\x28\x8c\x9e\x5a\x0a\x78\x53\x1e\x95\x97\x4a\x5d\x48\x86\x0f\x8e\x5b\x04\xeb\xd3\xeb\x56\xad\x12\xad\xc4\x6e\xc7", + )?; + test( + HashAlgorithm::SHA224, + b"\x1e\x56\x3f\xc3\xad\x02\x7a\x9c\xc6\x06\xbe\x19\xb2\x58\xbf\x70\xdd\x8b\x52\x73\xe2\x96\x23\x6e\xe8\xd7\xa6\x53\x31\x58\x50\x14\xf0\x50\x06\x51\x5b\xed\xd6\x33\x02\x50\xe5\x98\x5f\xda\xa8\x70\xae\xa6\x57\x66\xff\x56\x9f\xc4\x89\x13\x98\x90\x41\xcf\xf6\xfb\xab\xcd\x83\xfd\xf0\x64\xcd\x39\x32\x00\x1b\x26\x1c\x69\xa6\x70\xbd\x48\x06\x9c\x96\xe7\xeb\xec\xf1\x38\x0d\x82\x75\x19\x66\xc7\xf8\xd6\x9e\x0e\x94\xef\xc7\x75\xfd\x1c\x4a\x0c\x11\x8f\x21\x3a\xb1\x79\x47\x5c\xd0\xcf\x6d\xae\xc9\x4e\xef\x6f\xf6\xbd\x06\x40", + n, + e, + b"\x80\xd3\xff\x1f\x74\xa8\x10\x95\xd0\xba\xa2\xe9\xde\x24\x8c\x03\x12\xca\x5a\x81\x7b\xc9\xf5\x15\x6a\x29\x3d\x80\x89\x6a\xde\xc5\x50\x7e\xe8\xf2\xdf\x41\x7a\xfe\x87\x79\x66\x8e\x25\xb4\x6f\x49\xe4\x35\x7a\x71\x70\x53\x1e\xd3\x07\x61\x10\x3d\xbb\x99\x41\x35\xb5\x10\xd9\x1d\xb9\xfe\x1f\x12\x68\xf4\x37\xe0\xf3\xa7\xa4\xba\x6a\x4d\x0b\x9e\xb7\x0d\xfc\x09\xfe\xd4\xb4\x4b\x35\x60\x85\x01\xc2\xdf\xd7\xa2\x30\xa2\x8d\xad\x14\x92\x6d\xa4\x60\x0b\xa7\x85\xe4\x96\x21\x2e\x57\x73\x8d\xd5\x75\xb4\x0c\x23\x34\x7b\x16\x35\xec\xdf\x2b\x91\x94\xd9\x6b\x14\x50\xa6\x87\x6a\xa7\x6d\x04\xaa\x59\x47\xcc\xe7\x1d\x85\x12\x1e\x0b\xf5\x78\xe8\x1c\xf7\x8c\x6a\x04\x7e\x30\xfc\x1d\x87\xcf\xd3\x01\x9d\xe4\xbb\x48\x29\x4c\x25\x86\x0b\x45\x03\x55\xbc\x26\x62\xaa\x36\xd6\xe3\x3f\x00\xad\x79\x25\x7d\x2d\x8b\x91\xf7\x3f\x27\xc3\x2a\x9a\xfc\xb1\xe1\xf0\x15\xf7\x7c\xb6\xb0\xdf\x51\xfb\x39\xee\x1b\xd7\x6a\xc4\x2c\x20\x79\x1d\x79\xcf\x3f\x36\x3f\xb3\x24\xdb\x30\xee\x82\xbc\xc1\xdf\x1a\x95\x64\x33\x0c\x12\xa5\x49\x65\x9b\xd3\x01\x00\x01\x57\x31\x33", + )?; + test( + HashAlgorithm::SHA224, + b"\x90\x0a\xe7\xe2\xe7\xe5\xf6\x15\x75\x0c\x4e\xe4\xc1\x3c\xca\x8f\x9f\x45\x07\x14\xa6\xb2\x73\xf2\xe4\xac\xa6\x32\xd1\x1c\xf6\xa8\x82\x10\x45\x77\x1f\x60\x1e\xd3\x97\x91\x01\x0b\x92\xf9\xfa\xc6\xa8\x24\x78\x8c\xd0\x77\x5d\x89\x1b\x13\x52\x8e\xa2\xfd\x5d\x59\xbc\x7b\xb5\x16\x75\xc1\xd5\x26\x3c\xcc\xcf\x1e\xdc\x8f\xe3\x13\xae\x4d\x50\x15\x0c\x46\x6a\xf9\x08\x95\xed\x5c\x5e\x59\x91\xe4\xa8\x13\xde\xc9\xd1\x4f\x42\x94\xcc\x87\x61\x27\x86\x44\xac\xfe\x19\x86\x35\xb4\x42\x66\xc1\xc9\x15\xfa\x1f\xa2\xef\x79\xb9\xd1", + n, + e, + b"\x39\xc6\x48\x91\xd9\xac\x47\x41\xa5\x7d\xd8\xae\xc7\xf7\x24\x36\x13\xd1\x55\xdf\x44\x92\x81\x4b\x40\xce\xab\xee\x79\xea\xdb\x8d\x8b\xc5\xfa\x61\x1b\xde\xbe\x0e\x0d\x97\x14\xc4\x3d\x6d\x29\xef\x30\x9f\x78\x2b\xc8\xe6\x8a\x4d\x31\x7c\xe1\xec\xe4\x68\x55\x23\x05\xa7\x3d\xb9\xd0\xd2\x89\x1e\x28\x04\xf4\x20\x1b\x1b\xf8\xa3\x24\x6f\xa0\x82\xad\xde\x1f\xc9\xb3\xd2\x99\xf8\x8c\xb9\x3b\x7b\x47\xfe\x9f\x73\x13\x70\x96\xc2\xb8\xc5\x9e\xc0\x61\x2a\x08\x53\x63\xc0\x4c\xc3\x74\x76\x9a\x96\x4f\xea\xf1\xf8\xe4\x91\x38\x1e\x16\xd7\xae\x2a\x0c\x67\x2e\x69\xa3\x66\x73\x10\xfe\xed\x01\x21\x56\xdc\xa6\x30\xa6\x8d\x33\x9e\xc8\x04\x96\xc6\xb5\x94\xfe\xd1\x70\x91\xd3\xa1\xc6\xac\x3e\x4d\xa1\x41\x9b\x05\xd5\x89\xcb\x32\x46\x82\x88\xf7\xdf\x4d\xaa\xce\xff\x5a\x39\xbc\xf2\x97\xdc\x50\x8c\xe9\x54\x9f\x60\x2e\x97\x3e\xdb\xc2\xaa\x44\x33\x2e\xc3\x66\x1b\x19\xc8\xc5\x8c\x56\x16\x92\x4b\xeb\x89\x2f\x77\xb5\xe2\x00\xd6\xfb\x3f\xc7\x59\x26\x3a\x74\x9d\x15\x7e\xff\x9f\x73\x67\x98\xd2\x81\xb2\x5b\x71\xfb\x47\x0b\xdb\x70\x0f\x21\x1f\x84\x1d\xb7", + )?; + test( + HashAlgorithm::SHA256, + b"\x5a\xf2\x83\xb1\xb7\x6a\xb2\xa6\x95\xd7\x94\xc2\x3b\x35\xca\x73\x71\xfc\x77\x9e\x92\xeb\xf5\x89\xe3\x04\xc7\xf9\x23\xd8\xcf\x97\x63\x04\xc1\x98\x18\xfc\xd8\x9d\x6f\x07\xc8\xd8\xe0\x8b\xf3\x71\x06\x8b\xdf\x28\xae\x6e\xe8\x3b\x2e\x02\x32\x8a\xf8\xc0\xe2\xf9\x6e\x52\x8e\x16\xf8\x52\xf1\xfc\x54\x55\xe4\x77\x2e\x28\x8a\x68\xf1\x59\xca\x6b\xdc\xf9\x02\xb8\x58\xa1\xf9\x47\x89\xb3\x16\x38\x23\xe2\xd0\x71\x7f\xf5\x66\x89\xee\xc7\xd0\xe5\x4d\x93\xf5\x20\xd9\x6e\x1e\xb0\x45\x15\xab\xc7\x0a\xe9\x05\x78\xff\x38\xd3\x1b", + n, + e, + b"\x6b\x8b\xe9\x7d\x9e\x51\x8a\x2e\xde\x74\x6f\xf4\xa7\xd9\x1a\x84\xa1\xfc\x66\x5b\x52\xf1\x54\xa9\x27\x65\x0d\xb6\xe7\x34\x8c\x69\xf8\xc8\x88\x1f\x7b\xcf\x9b\x1a\x6d\x33\x66\xee\xd3\x0c\x3a\xed\x4e\x93\xc2\x03\xc4\x3f\x55\x28\xa4\x5d\xe7\x91\x89\x57\x47\xad\xe9\xc5\xfa\x5e\xee\x81\x42\x7e\xde\xe0\x20\x82\x14\x7a\xa3\x11\x71\x2a\x6a\xd5\xfb\x17\x32\xe9\x3b\x3d\x6c\xd2\x3f\xfd\x46\xa0\xb3\xca\xf6\x2a\x8b\x69\x95\x7c\xc6\x8a\xe3\x9f\x99\x93\xc1\xa7\x79\x59\x9c\xdd\xa9\x49\xbd\xaa\xba\xbb\x77\xf2\x48\xfc\xfe\xaa\x44\x05\x9b\xe5\x45\x9f\xb9\xb8\x99\x27\x8e\x92\x95\x28\xee\x13\x0f\xac\xd5\x33\x72\xec\xbc\x42\xf3\xe8\xde\x29\x98\x42\x58\x60\x40\x64\x40\xf2\x48\xd8\x17\x43\x2d\xe6\x87\x11\x2e\x50\x4d\x73\x40\x28\xe6\xc5\x62\x0f\xa2\x82\xca\x07\x64\x70\x06\xcf\x0a\x2f\xf8\x3e\x19\xa9\x16\x55\x4c\xc6\x18\x10\xc2\xe8\x55\x30\x5d\xb4\xe5\xcf\x89\x3a\x6a\x96\x76\x73\x65\x79\x45\x56\xff\x03\x33\x59\x08\x4d\x7e\x38\xa8\x45\x6e\x68\xe2\x11\x55\xb7\x61\x51\x31\x4a\x29\x87\x5f\xee\xe0\x95\x57\x16\x1c\xbc\x65\x45\x41\xe8\x9e\x42", + )?; + test( + HashAlgorithm::SHA256, + b"\xc4\x30\x11\xf3\xee\x88\xc9\xc9\xad\xca\xc8\xbf\x37\x22\x1a\xfa\x31\x76\x9d\x34\x7d\xec\x70\x5e\x53\xac\xa9\x89\x93\xe7\x46\x06\x59\x18\x67\xcc\xd2\x89\xba\x1b\x4f\x19\x36\x5f\x98\x3e\x0c\x57\x83\x46\xda\x76\xc5\xe2\x22\x8a\x07\xe4\xfc\x9b\x3d\x48\x07\x16\x33\x71\xa5\x2b\x68\xb6\x68\x73\x20\x1d\xc7\xd6\xb5\x66\x16\xac\x2e\x4c\xb5\x22\x12\x07\x87\xdf\x7f\x15\xa5\xe8\x76\x3a\x54\xc1\x79\xc6\x35\xd6\x58\x16\xbc\x19\x48\x5d\xe3\xeb\x35\xa5\x20\x40\x59\x10\x94\xfe\x0e\x64\x85\xa7\xe0\xc6\x0e\x38\xe7\xc6\x15\x51", + n, + e, + b"\xaa\x3a\x4e\x12\xeb\x87\x59\x6c\x71\x1c\x9a\x22\xbc\xab\xcb\x9d\xad\xff\xca\xbc\xec\xbd\x16\x22\x88\x89\xe9\xbb\x45\x7d\x5d\x22\x57\x1a\x72\xf0\x34\xbe\x47\x83\x38\x4f\x43\xce\x6f\xff\xc6\x05\x34\xb8\x33\x1c\xdd\x5d\x7c\x77\xf4\x91\x80\xbf\xd1\x94\xb5\xfd\x43\xa5\x08\xc6\x6d\x78\x6c\x55\x88\x76\x73\x58\x94\xe6\xa9\x30\x09\x52\xde\x79\x2f\x74\x70\x45\xe7\x4d\x87\xfd\x50\x98\x02\x30\x70\x7a\x34\xa4\xdf\x01\x3c\xe0\x50\xbb\xff\x0d\x6f\x57\x08\x85\xc9\xc7\xbf\x8d\xc4\x99\x13\x2c\xae\xe0\x71\xb4\x1d\x81\xff\x91\xb8\xce\x21\xaa\x2f\x28\x2c\xbf\x52\x38\x9f\x23\x9a\xfe\x14\x90\x89\x0b\xe2\x1f\x9d\x80\x8b\x3d\x70\xb9\x7e\xfd\x59\xc0\xb6\x0e\x46\x60\x88\xbb\x42\x71\x4f\x21\x2b\xc9\x0d\xb7\xe9\x42\xeb\xce\xe6\x0e\x7b\x10\x7f\xff\x44\xfb\x35\x64\xff\x07\xd6\xd0\x28\x50\x21\x5f\xd3\x57\xd8\x97\xc4\xd3\x2b\xef\x86\x61\x68\x9f\x2d\x84\xff\x89\x76\x37\xfb\x6d\x55\x68\xa7\x27\x0e\x78\x34\x26\xb7\x4b\x70\x37\x49\x3e\x51\x55\xfd\x7c\xb3\xdd\xdd\xfd\x36\xbd\x8a\x9c\x87\x7d\x71\xd2\xa9\x66\x05\x7c\x08\x26\x3d\x29\x39\xc8\x49\x87", + )?; + test( + HashAlgorithm::SHA256, + b"\x61\xd7\xb3\x15\x01\x31\x35\x1e\x7b\x4c\x8e\x56\x45\xd3\x8b\xe9\x33\x5b\x40\x28\x9a\xf3\x4c\xc6\xb6\xfc\x5e\x48\x49\x3b\xf8\xb7\x85\x2c\x73\x98\x2c\x99\x44\x1e\xf6\x6c\x7d\x9d\x33\xc2\x97\x42\xb1\x40\x6e\x02\xe0\xaa\x8d\xd0\x34\xb1\xac\x13\xcb\x0d\x77\x57\x50\xcc\x91\x42\x1f\xea\xd9\xca\xa9\x21\xec\xa6\x1a\x02\xeb\x02\x3a\x45\x7e\x77\x91\x5e\x18\x3a\xcf\x51\x7d\x94\x6b\xc6\x82\x92\x89\x60\x14\xfd\x21\x4b\x7c\x8c\x5e\x14\xe1\x59\x44\xbe\x0f\x92\x96\x12\x77\x71\xf7\x36\x76\x6e\x4f\x81\xda\xb3\x70\x8e\xa2\xd0", + n, + e, + b"\x84\xe9\x2a\x14\x5a\xe6\xbe\x1f\xf9\x24\x2d\x9e\xd2\xd6\x8d\xe6\x68\xe8\x02\x52\x4e\x8a\xc0\xa7\x9d\xe6\x2f\xe7\x40\x48\xc3\x54\x91\xfd\x2f\xfd\xb1\x85\x05\x7e\x66\x6d\xbf\xaa\xc8\x4c\x34\xfd\xe7\x89\x12\x63\xf8\xb2\xbc\x74\x74\x62\x30\x32\x0f\x67\xa7\xbd\x73\x19\xc9\xb9\xde\x41\x90\x54\x70\x14\xe2\xd7\xa2\xa5\x06\x0d\x62\x00\xaa\xdc\x3a\x44\xba\xc0\x29\xff\x39\x92\xed\xd3\x0e\xc5\x3a\xb0\xd9\x12\x3e\xaa\x6b\x14\x73\x52\xa0\x73\xa9\x81\x61\xe6\x4f\x39\x4b\xb9\x94\x92\xc6\x97\x7e\x24\xf4\x45\xc7\x12\x5b\xfb\x90\xf8\x7f\xaf\x26\x22\x72\x13\x4a\xcb\x18\x82\x3a\x99\xa5\x22\x8d\x14\x95\x46\x32\x97\xfd\x77\x48\x77\xfb\x63\xd4\x91\x81\x06\x34\x7e\x6f\x29\x31\x5e\x48\x36\x3f\x39\xb3\x32\x99\xea\xa3\x2d\x8d\xa7\x1b\x22\x9d\x8f\xfe\xe5\xf6\x6f\x72\x2a\xd3\xaa\x41\x75\xd3\xf8\x4e\xce\x9c\xc8\xec\xa8\xd6\xf2\xf3\x56\xa8\x5c\x15\x24\x89\x6c\x18\xf7\xb5\xc8\xf9\xbc\xde\xf4\x5c\x49\x6d\x53\x91\x79\x89\x1d\xdc\x76\xe5\x20\x8a\xd8\x35\x3d\x48\xc6\x24\x05\x4f\x34\x40\xee\xba\x44\x32\xa1\x06\x54\xa1\x1e\xf5\x37\x83\xbd\x11\x6f", + )?; + test( + HashAlgorithm::SHA256, + b"\xb6\x77\x1a\xb0\xe1\x28\xb4\x1b\x32\xb8\xb0\x5e\x05\xad\xd2\x3c\xe0\xfb\x87\x7b\x40\xbf\xcc\x3b\x99\x2f\x4c\x86\x98\xd1\xc8\x28\xab\xec\xbc\xc1\xc3\x3d\x40\x18\x59\xea\x2c\xb2\xaf\xbc\x7f\xa4\x58\x88\x02\xa5\xfa\xee\x28\x67\x53\x46\x39\x28\x7a\xd8\xaf\x84\x67\x4b\xe1\x8d\xb6\x61\xde\x1d\xa8\xe1\x9c\x6b\x6b\xd4\x52\xdd\x9b\xf3\x22\x1d\x08\x61\xfb\x6f\xba\x96\xbe\x42\x32\x9b\x9f\x04\xf3\x7d\xcf\x3b\x41\xfc\x58\xd2\x29\x83\x48\xb0\xc1\x5d\x11\x90\xb1\x25\x30\x0c\xf2\x7e\x0d\xfa\xd6\x05\x22\xfc\x49\x84\x60\x53", + n, + e, + b"\x62\x76\x92\x55\x68\x62\x6f\x0c\xbe\x6f\x51\x50\xb0\x50\xe1\x70\x25\x82\xf8\xda\xf9\x9a\x6f\x88\x0e\xf7\x5c\xd9\x6c\x2d\x42\x08\xfb\x6e\x91\xb0\x1b\xa6\xab\xa2\xa8\x16\xb2\xd3\xcb\x97\x5d\xf8\x50\xb1\xd2\x68\xc4\x66\x2d\xd1\xea\x3a\x30\x0c\x1d\x71\x71\xc6\x33\xdd\x2e\xfb\xac\x30\x00\xc5\x6a\xb8\x0f\x98\x9d\xbc\x18\x24\x3e\x63\x6b\xa5\xd4\xd2\x6a\x7d\x3f\x19\x65\xad\x3c\xb0\xf1\xa8\x51\x3f\x99\x80\x03\xf7\xb6\x7e\x2a\xc5\xc7\x18\xcb\x68\x8b\x32\x01\xd5\x6e\x68\xf0\xb9\xf8\x62\x57\xb8\x47\x94\xcd\xff\xbc\x1f\xe3\xea\x24\xb7\xbb\x6e\x9e\xf0\x53\x9b\xd4\xfb\xc1\xaf\xb5\x5b\xc1\xdc\xa3\x99\x96\xea\x8a\x63\x76\x9f\x6e\x22\x57\x07\xf6\x90\x47\x55\x5e\x1a\x4e\xf3\xc6\x39\xc5\xf2\xa4\x97\xb8\x89\x42\x4a\x90\x14\x86\x39\xbb\x64\xdf\x0a\x06\xe0\xb7\xf0\xe8\xed\x46\x6a\x97\x7b\xac\xa3\x2f\x48\x23\x37\xb2\xab\xe3\x98\x3e\xae\xc3\xfe\x10\x75\x01\x6e\x58\x67\x52\x17\x60\xfd\x06\x07\xd7\x99\xf1\x76\x6b\x3f\xf6\xe2\xae\x15\x5d\x69\x25\x0f\x8b\xf0\x8c\x8e\xdc\xa0\xb4\xf3\x1d\x0f\x83\x8c\xfd\x29\x8c\xb7\x31\x2d\xf9\x3f\x09\x97", + )?; + test( + HashAlgorithm::SHA256, + b"\x6a\x81\xcb\x6c\x7b\x26\x8f\x4b\x9f\xb9\x17\x2a\xdb\xbb\x36\xa2\x37\xa0\xdc\xf1\xc3\xc8\x3a\x95\xdc\xb0\x27\x1a\xac\x6a\xc3\x30\xf0\x4a\x5a\x00\xfe\xe3\x8b\xc0\x06\x31\xa9\x85\x98\x18\x61\x59\x66\x0d\x9d\x8e\x4c\x14\xa9\x52\x8d\xea\x94\x83\x60\x83\xda\xc4\xab\xb7\x3f\xd0\x0e\x38\xfe\x0e\x23\xc7\x23\x66\x04\xa7\x36\x54\x0e\x52\x19\x3a\xe5\x6c\x33\xfb\xb8\xf5\xcf\xc5\xc7\xc2\xbe\x2e\x22\x2e\x44\x83\xb3\x0d\x32\x5c\x7e\xe1\x4f\x74\x28\x51\xfc\xb8\xb6\xd6\x18\x9e\x98\xb8\x22\xb8\xe6\x39\x9d\x89\xe9\x0f\xb9\x97", + n, + e, + b"\xb6\x79\x91\x05\x0c\x08\x3e\x64\x50\x97\xdb\x03\xff\xf3\x47\x58\x86\x8b\xeb\x19\xe9\xc0\xc4\x84\x75\xf0\xf9\x13\x36\x1e\x71\xd3\xd6\xf2\x7a\x8c\x4f\x0b\x26\x9b\x49\xe8\x53\x40\x39\xe5\x3a\xd3\xba\xb9\xa3\xe6\x2a\xbe\x07\x8e\xe7\x5e\x7f\xb5\x95\x90\x06\xfb\xfb\x01\x4c\xa7\xb8\x1b\x3d\x5a\xfe\x0e\xe5\xf6\xfc\x2d\xfb\xc4\x50\xf2\x83\x95\x43\x00\x2f\x33\xf4\xf3\x54\xf8\x27\x27\x8c\x76\xc0\x41\x68\x6e\xea\x78\x86\xeb\xb2\xa7\xaf\xa5\x99\x5c\x6c\xdd\xb1\xc0\xb5\x80\x66\xdd\xb8\xdc\x54\xa6\x92\x7c\x14\x6c\x3b\x2a\x0f\xa7\xce\xf2\x89\x03\xc6\xc6\x72\xbc\x20\xef\x68\xff\xbf\xab\x24\x7e\xb6\x88\xab\x4b\xde\x71\x06\xd9\xc5\x9d\x21\x53\x09\x6d\xc9\xe5\x20\x72\x67\x03\x8d\x88\xe2\x17\x4e\x76\xad\xc1\x50\x8a\xe2\x4e\xb6\x02\x33\x2e\x53\xc0\xc2\xe3\x31\x54\xa6\x6a\x97\xa0\xf1\x2f\x66\xc6\x12\x58\xc7\xbf\x6b\xbf\x3f\x1d\xcb\xe9\xca\xf2\xfd\x30\xec\x68\xc0\xa9\xd0\x9f\x4f\xd7\x76\x30\x4b\x54\x0e\x62\xfc\x85\x12\xbe\xaa\xbc\x4b\xe2\x10\x7a\x1e\xc1\x8e\x87\xf6\x1f\x9d\xb2\x5e\x87\x1d\xc0\x69\x3c\xef\x17\xc2\xa6\x87\xfc\x85\x4f", + )?; + test( + HashAlgorithm::SHA256, + b"\x05\x6c\x1e\x46\x44\x59\x9e\x31\x83\xdd\x8d\x2f\x64\xe4\xbb\x23\x52\xff\x00\xd0\x12\xab\x76\x3f\x9a\xd6\xe5\x60\x27\x9f\x7f\xf3\x8a\x5e\xce\xa9\xc2\xe4\xea\x87\xd0\x04\xef\x8c\xc7\x52\xae\x93\x23\x2a\xa3\x7b\x5b\xf4\x28\x84\xba\xa7\xe7\xfc\x6a\x8c\x95\x1c\xd2\x45\xde\x2d\x22\x0d\x9b\xee\x2b\x41\x4b\x3a\x75\x20\xc1\xe6\x8b\xcf\x1a\xe9\x9a\x9f\xf2\xbf\x3a\x93\xd8\x0f\x8c\x1d\xfe\x8b\x85\x29\x35\x17\x89\x5c\x19\x2e\x3c\x9e\x89\x82\x95\xd6\x5b\xe3\x34\xf4\x4d\x62\xf5\x35\x3e\xb6\xc5\xa2\x9e\xdf\xb4\xdb\x23\x09", + n, + e, + b"\xae\x05\x20\x4e\x40\x9d\x72\x7e\xb9\xe4\xdc\x24\xbe\x8f\x86\x33\x28\xc2\x81\x3d\xa4\xfc\xef\x28\x86\x6e\x21\xa5\xda\xb2\x1a\x48\x53\x21\xb7\x35\x27\x4a\xf0\x6b\xf1\x7e\x27\x15\x18\xe1\x11\x64\xd7\x22\xab\x07\x35\x48\xf0\x2e\x1b\x44\x19\x23\xdb\x6f\x1c\xee\x65\xa0\x17\xed\xfb\xaf\x33\x61\xc6\x7f\xbc\x2b\x39\xfe\x03\x8c\xb5\xcb\x65\xa6\x40\xf9\x58\x87\x38\x9c\xe8\xa5\xad\x2e\xc6\xe6\x9d\x3d\x60\x35\x05\xb0\x25\xf6\xd6\x33\x0c\x8b\x64\x88\x02\xca\xf7\xe6\xfa\x3f\xe7\xb3\x81\x41\x65\x99\x86\xcb\x89\xe6\x23\x2f\x10\x62\x22\x56\x4d\x5e\x51\x95\xed\xa6\xa2\x5f\x99\x06\x85\x72\xc2\xfa\xfe\x97\xf1\x47\xf7\xf2\xf4\x11\x9f\x21\x38\x5a\xf1\xfc\xed\x97\xf7\x86\x32\xd8\xbf\x4f\xd9\xa9\x05\x4d\x8b\x9a\xa2\xa9\xf4\xde\xd5\x87\x84\x7a\x91\xd4\x2c\x63\x91\x12\x5f\x10\x3a\xe2\x88\x54\x7e\x84\x89\x69\x3a\xe8\x68\x6b\x84\x89\x1b\x77\x2b\x10\xc4\x79\x68\x83\xf6\x6c\xd4\x59\xa8\xc1\xa6\xa4\x18\x7b\xd6\xb3\x87\xd3\x49\xe9\x2d\x7b\x60\x49\x53\x72\x7c\x9e\x9f\xdc\x44\x9e\x73\x45\xe7\xca\x6b\x33\x9e\x26\xb0\x86\xf5\x54\x88\x98\xcb\xe9", + )?; + test( + HashAlgorithm::SHA256, + b"\xce\xc5\xc9\xb6\xf8\x44\x97\xac\x32\x7f\x68\xef\x88\x66\x41\xfe\xc9\x95\x17\x8b\x30\x71\x92\x30\x43\x74\x11\x5e\xfc\xc5\xee\x96\x27\x0c\x03\xdb\x0b\x84\x6d\x67\x4c\x52\x8f\x9d\x10\x15\x5a\x3f\x61\xbe\xcc\xe1\xd3\xa2\xb7\x9d\x66\xcd\xc4\x09\xad\x99\xb7\x66\x30\x80\xf5\x1a\x10\x2f\x43\x61\xe9\xdb\xd0\x3f\xfc\xd8\x76\xb9\x8e\x68\x3d\x44\x8b\xd1\x21\x7e\x6f\xb2\x15\x1c\x66\x96\x47\x23\xb2\xca\xa6\x5c\x4e\x6c\xa2\x01\xd1\xc5\x32\xbd\x94\xd9\x1c\xd4\x17\x3b\x71\x9d\xa1\x26\x56\x39\x27\xca\x0a\x7f\x6f\xe4\x25\x36", + n, + e, + b"\xc4\x8a\x8e\x01\xd4\xbb\xfe\x0f\x2f\x05\x65\x93\x37\xea\x71\xd2\x1f\x38\xd7\xf7\xa1\x0b\x00\xb0\x6e\x1f\x89\x9e\xaf\x40\xa8\xe9\x7e\xad\x64\xbc\xa3\x7f\x13\xa5\x5e\xf1\xcf\x3f\xb5\x2c\xee\x27\x9c\xdc\xb0\x96\x08\x5a\x46\x7a\xfa\x97\xb0\x3d\x78\xd6\x07\x6e\x47\x2b\x12\xd6\xbe\x96\x47\xce\xc3\x2d\x8d\x91\xa2\x62\x47\x69\x37\x71\x68\x74\x60\xba\x52\x69\xde\x18\xe1\xed\xef\x60\x22\x53\x3a\x95\x79\xf9\x1d\x58\x4f\x9e\x0c\xee\x11\x00\xc4\x47\xb7\x75\x76\xb1\xb4\xee\x16\x3e\xd4\x70\x01\x47\xa9\xaa\x61\xbd\xc4\xe2\x31\x6d\x2d\x81\x8c\x10\x28\xed\x1c\x3e\x37\x2c\x9f\x6a\x17\x45\x57\x24\x44\x63\x72\x48\x09\x1b\x83\xf7\xb5\x39\xf9\xbd\x58\xb7\x67\x56\x76\x03\x4c\x20\xe4\xca\x11\x9b\x91\xc4\xca\x5d\xc7\x6a\xcb\xff\x3d\x04\x62\x89\x83\x52\xc5\x91\xc2\xca\x6f\x2d\x8b\x09\xe2\xe6\x33\x8a\x84\x33\x6e\x06\xf0\xcc\x02\x0e\x9e\xb8\xda\x78\x58\x89\xb4\x97\xf3\xb9\x8e\x82\x7e\xe7\xa7\xd3\xf1\xb0\xb7\x3c\x19\x58\xe1\x6a\xa9\x78\x61\xe6\x67\x59\x70\xce\x31\xd9\xd1\x19\xbb\x34\x0b\xe8\x0f\xd0\xf4\x3c\x3d\xbe\x64\xf2\xa5\x9d\x62\x9d", + )?; + test( + HashAlgorithm::SHA256, + b"\x91\x93\xf8\xb9\x14\xdf\xe0\xe6\x25\x21\xf3\x5a\xfa\x4f\xa5\xd4\x28\x35\xe1\x98\xaf\x67\x38\x09\x37\x7a\x3e\x7a\x99\x73\x31\x42\xa1\x80\xdc\x0e\x13\xe6\xbb\x7c\xeb\x3b\x60\xe5\xe9\xd5\x15\x79\x4d\x82\xc3\x92\xe0\x79\x13\x42\x33\x91\xd2\x2e\x2b\xb1\x9a\xa0\xbd\x88\xaf\xd7\xf7\x7e\x27\xa2\x40\xea\x4e\x2d\xe0\x85\x48\x1a\xc3\x1f\xf8\xd3\x79\x90\x21\x1f\x82\xf2\xcb\xf4\xc9\x0d\xe9\x8d\x6e\x13\x38\xbb\xc8\x8e\x6a\x80\xab\x96\x84\xda\xe6\x47\x85\xdd\x10\x72\x48\x04\x85\x93\xab\xc9\xab\x03\xf1\x73\x7a\x6f\x65\x30", + n, + e, + b"\x5c\x2f\xe4\x53\xa8\xb0\x8c\x90\xb0\x2e\xb2\xc9\x99\x42\x42\xd5\x18\xf3\xf2\x1b\x36\x88\x95\xcf\xfd\x62\x40\x50\xe4\x8a\xa7\x14\x00\x5a\xe6\x75\xfe\x79\xaa\x3c\xad\xd4\xdf\x55\xbd\xf1\x2b\xec\x5b\xe8\xa4\x1d\x87\x53\x8f\x7e\x03\x1b\x78\x2e\x34\xd3\x92\x46\x8e\x5f\x14\xbc\x61\x3b\x8f\x4d\x28\xc8\xfb\x79\xa2\x53\x7e\x1e\x60\x10\x31\xda\x72\x0a\xcd\x7b\x2c\x8d\xcb\xe9\x85\x86\x24\xa7\xa9\xa9\x2a\x06\xf9\x18\x45\xf7\x32\x37\x0d\x67\x36\x5c\x64\x64\xf7\xb6\x8f\x22\xeb\x3e\xdf\xee\xc9\x7e\x32\x85\x02\x4d\x7f\x69\x43\xb6\xd5\x0a\x16\xcc\x96\xd6\x0f\x68\x03\x51\xde\xaa\x25\xf0\xbc\x86\x89\x48\x60\x7a\x6b\xa7\xf1\x94\x9b\x85\x94\x3c\x6a\x92\xbd\x61\x72\xe8\x1b\xcc\x05\x50\x14\xb7\x8a\x73\x39\x72\xe3\xf3\x9d\x14\x09\x9d\x16\x07\xa2\x0f\xf8\x68\x1c\x29\xae\x1e\xf9\x9e\xf1\x15\xed\x6a\x10\x84\xb5\x14\xb8\x1a\x69\xd4\xa1\x5c\xe1\xe2\x57\x6f\xdc\xf2\xb2\xaf\x61\x5b\x52\xfe\xc7\x01\x32\x11\x2d\xcc\x5b\xc1\x9e\xc1\x7f\x32\x28\x14\x60\x62\x34\x20\x31\x73\x53\xe8\xa2\x55\xfd\xa5\x02\xbd\x1f\xb1\x1a\x58\x83\x2a\xe2\xc0\x4f\x9a", + )?; + test( + HashAlgorithm::SHA256, + b"\x0e\x57\xef\x40\xb0\x21\xbf\x87\xf6\x42\xc5\x75\x6b\x65\x15\xa0\xe0\x6c\x15\xa0\x18\x56\xd7\x16\xc5\x66\xa6\xed\xb3\x81\xdf\xdf\x44\xd9\x03\x3b\x1c\xc8\x09\xe6\x1d\xfe\xf9\xa0\x96\xdf\xb6\x89\xb7\x27\x1b\xe4\x49\xd0\x4a\x1a\x9c\x35\x41\x02\xc0\x77\xaf\x5f\xf7\x20\x05\xab\x6b\x06\xcf\x13\x1d\x73\x45\xc2\x1e\x82\x1d\x62\x01\xcc\xa4\xe0\x90\x44\x0d\x70\xbe\x60\x09\xd2\xdd\x7a\x98\xd3\x11\x75\x1e\x16\x05\xa3\xb9\x14\xdc\xe6\xd2\x62\x6b\x16\xf2\x33\xa5\xa3\xd7\x1d\x56\x7c\xc8\x20\x15\x2f\x25\xe4\x73\x51\x42\x42", + n, + e, + b"\x76\x43\xaa\x3f\xe6\x3e\x66\xf7\x9d\x6b\x40\x9d\x14\x5e\xa8\x20\xc9\xf7\x35\x6f\x71\xb4\xac\xdc\xbd\x43\xfe\x1e\x99\xf8\x80\x2c\xd1\x66\x2b\x16\x24\x0f\x5c\xfd\x94\xa7\x69\xb0\xb3\xf2\xcb\x0b\x11\x88\x7e\x88\x6e\x5b\xa4\x37\x33\x36\x74\x90\xb3\xfc\x18\x8f\x2f\xb3\xa0\xc0\xc8\xa6\x8b\x5d\x27\x26\xc8\xf7\xa3\x19\x02\xb6\xb8\x6c\xd4\x02\x28\x7d\x38\x5c\x3e\x3c\x06\x50\x3c\xe1\x7f\xd6\xe5\x4e\x58\x2f\x4a\x90\x7a\x91\xf9\x52\xd2\xa3\x60\xe2\xfb\xa0\x00\x28\xe4\xd3\xb0\x2a\xab\xf7\xd2\x20\xb3\x1d\x1f\x8e\xe7\xfa\xa0\x70\x14\x76\x82\xcc\xc8\xbc\xc7\x56\xca\x6a\x68\xfc\x20\x95\x45\x50\xc3\x17\xe8\x79\x18\x78\x1a\x3d\x1f\x19\x23\x50\x30\x91\x09\x0c\x3c\x60\xca\x1c\x0b\x1c\x69\x99\x06\xfb\xf8\x5a\xa7\x0a\xd9\xae\x48\x70\x9f\xf7\x43\xb8\x2d\xcc\x31\x07\x4c\xfc\xea\x62\x3e\xa4\x5e\x48\x64\x4b\x19\xa2\x17\x72\xca\x10\x7e\xd6\x42\x39\xc5\x65\x74\xa0\x87\xf1\xa6\xaa\xdf\x0f\x4b\x00\xff\xe5\x81\xc1\x41\x02\x74\xc8\x75\xe4\x59\x90\x63\xe4\x6e\x51\x68\x80\x3f\x0d\x28\xd2\x1f\xcd\x35\x09\xb4\xc6\x22\x29\x95\xad\xd7\x75\x3b\xf3", + )?; + test( + HashAlgorithm::SHA256, + b"\x0c\x84\x91\xfc\x34\x8d\x34\x1f\xe8\x5c\x46\xa5\x61\x15\xf2\x60\x35\xc5\x9e\x6a\x2b\xe7\x65\xc4\x4e\x2e\xc8\x3d\x40\x7e\xa0\x96\xd1\x3b\x57\xe3\xd0\xc7\x58\x34\x22\x46\xc4\x75\x10\xa5\x67\x93\xe5\xda\xea\xe1\xb9\x6d\x4a\xb9\x88\x37\x89\x66\x87\x6a\xa3\x41\xb7\xd1\xc3\x1b\xba\x59\xb7\xdb\xe6\xd1\xa1\x68\x98\xee\xf0\xca\xca\x92\x8f\x8c\xe8\x4d\x5c\x64\xe0\x25\xdc\x16\x79\x92\x2d\x95\xe5\xcd\x3c\x6b\x99\x4a\x38\x5c\x5c\x83\x46\x46\x9e\xf8\x76\x4c\x0c\x74\xf5\x33\x61\x91\x85\x0c\x7f\x7e\x2b\x14\xbe\x00\x27\xd8", + n, + e, + b"\xca\xcc\x8d\x9f\x5e\xcd\x34\xc1\x43\x48\x84\x61\x13\x5c\x49\x51\x67\x61\x45\xc6\xe4\x72\xb9\x2f\x12\xf7\x58\x04\x6f\x17\x21\x42\xfa\x38\x8f\x28\x5f\x3f\xff\x06\x82\x42\x02\x88\x29\x04\x7e\x24\x80\x59\xed\x4f\xd3\x9d\x2c\x5a\xde\x46\x9d\xc7\xc3\x93\x45\xe5\x11\x49\x50\xd2\x03\x1c\xc7\x46\x5f\xe7\x12\xc4\x04\x1d\x05\xc7\x56\xd3\xf2\xd8\x8a\x46\xce\xb9\x9f\x2e\x24\xa5\x2e\x95\x8a\x03\xcd\x25\x19\xa9\xb1\x37\xe6\x2d\x5c\xa2\xb3\x53\xf7\xb0\x47\xb6\x25\xc3\x60\x23\x13\xfd\xb5\x3c\x8d\xb2\x3d\x83\x95\x1a\x59\x9d\xb3\x28\xfe\xdc\x4a\xe0\x6d\xa8\x9c\xe7\xf5\x62\x59\xb5\xc8\x22\x2f\x7b\xd3\xd9\x74\x04\x78\xfd\x28\xe5\x81\x0d\xb7\x8a\xee\x86\x23\xfd\xd3\x9f\x60\x3f\x8d\xdf\x98\x08\x1d\x78\x73\x98\x0c\x4e\xb0\xe2\x2a\x9c\xd4\x08\xf7\xc4\x13\x4c\x12\xd2\x04\x9a\x2d\x12\x0f\x4b\x62\xe6\xb3\x82\xb9\x97\xfc\x37\x5e\xf7\xac\x95\x5f\xcf\x80\xb0\x45\xc3\xd6\x38\x5f\xf4\x22\xda\xd3\x50\xc6\x88\x70\x53\x90\x68\xa1\x62\xa2\xed\xbb\x93\xce\xef\xed\x96\x77\x93\x9b\x90\xbd\x3d\xfa\x0d\xc0\x53\x46\x0b\x4e\x23\x32\xef\xa6\x92\x17\x9a", + )?; + test( + HashAlgorithm::SHA384, + b"\x6c\xd5\x9f\xdd\x3e\xfd\x89\x3d\x09\x1a\xfd\xc3\x15\x5d\x35\x4f\x10\xd6\xd8\x81\x67\x42\x7a\x2c\xf7\x24\x62\x07\xe5\x17\x91\xa6\xca\x62\x00\xa9\x14\xcd\x28\x34\xa9\xb3\xc7\x9f\xcd\x59\xe2\x6e\x45\x7e\x06\x83\xbc\x33\xd4\x92\x67\xed\xbd\xd6\xe5\xd9\x09\x02\x69\x6f\x1e\x7b\x1a\x4a\xff\xc4\xba\x37\x13\x39\x86\x8c\x28\x01\x5e\xbb\xb7\x3e\x26\x26\x69\x86\x6c\x35\xdb\x97\x4b\xa6\x9e\x46\x8f\x25\x83\xb9\x19\x1d\x15\xd6\x86\xcd\x66\xfb\x0b\x9e\x0f\xf0\xa3\xb4\x72\x1a\x6d\xc3\x42\xf1\x4f\x24\x46\xb4\xe0\x28\x59\x5b", + n, + e, + b"\x39\x74\x90\x0b\xec\x3f\xcb\x08\x1f\x0e\x5a\x29\x9a\xdf\x30\xd0\x87\xaa\xba\xa6\x33\x91\x14\x10\xe8\x7a\x49\x79\xbb\xe3\xfa\x80\xc3\xab\xcf\x22\x16\x86\x39\x9a\x49\xbc\x2f\x1e\x5a\xc4\x0c\x35\xdf\x17\x00\xe4\xb9\xcb\x7c\x80\x5a\x89\x66\x46\x57\x3f\x4a\x57\x0a\x97\x04\xd2\xa2\xe6\xba\xee\x4b\x43\xd9\x16\x90\x68\x84\xad\x3c\xf2\x83\x52\x9e\xa2\x65\xe8\xfc\xb5\xcc\x1b\xdf\x7b\x7d\xee\x85\x94\x1e\x4b\x4f\xb2\x5c\x1f\xc7\xb9\x51\xfb\x12\x9a\xb3\x93\xcb\x06\x9b\xe2\x71\xc1\xd9\x54\xda\x3c\x43\x67\x43\x09\xf1\xd2\x12\x82\x6f\xab\xb8\xe8\x12\xde\x2d\x53\xd1\x25\x97\xde\x04\x0d\x32\xcb\x28\xc9\xf8\x13\x15\x9c\xb1\x8c\x1b\x51\xf7\xa8\x74\xcb\xf2\x29\xcc\x22\x2c\xae\xb9\x8e\x35\xec\x5e\x4b\xf5\xc5\xe2\x2c\xc8\x52\x86\x31\xf1\x51\x17\xe8\xc2\xbe\x6e\xac\x91\xf4\x07\x0e\xec\xdd\x07\xec\xc6\xdb\x6c\x46\xea\xa6\x5f\x47\x2f\x20\x06\x98\x8e\xfe\xf0\xb5\x1c\x53\x8c\x6e\x04\xd7\x51\x9c\x8e\x3d\xa4\xb1\x72\xb1\xe2\x76\x10\x89\xed\x3a\xd1\x19\x79\x92\xef\x37\xc1\x68\xdc\x88\x1c\x8b\x5f\x8b\xbf\xee\x91\x9f\x7c\x7a\xfd\x25\xb8\xfc", + )?; + test( + HashAlgorithm::SHA384, + b"\xac\xb3\x0b\xe9\x09\x2b\x2f\x18\xf2\x59\x34\xa0\xd6\x78\xb6\xbc\xd6\xb6\x7c\x2b\x88\xe7\x58\x84\xf4\x7b\x4f\xca\xe3\xad\xfa\x40\x5a\xfe\x2c\x7e\x61\xe2\xd6\xc5\x08\xb9\x27\x90\xac\x00\xf7\x6b\x77\xc9\x65\x08\x26\x68\xbf\x90\x0f\x70\xa3\x37\x62\xde\x64\x13\xaf\x93\xaf\x2e\xa8\x08\x6f\xda\x29\x3d\xed\x44\x75\xf2\x3c\x4c\xc3\x1a\xd4\x94\xf9\x8d\x7d\xd7\xb7\xfd\x6f\x7d\x97\x2b\xb7\x6c\xb3\x5a\xdc\x20\x68\x04\xc3\xfe\x5a\xcd\xd0\xe5\xb8\xb5\x4e\x07\xc2\x91\x11\xf7\x88\xbc\x59\x02\xf4\x0a\xfa\xc3\x0a\xfd\xba\xf2", + n, + e, + b"\xb5\xc6\x0d\x8d\xa9\xb3\x94\x38\x78\xcb\x23\x59\xcf\x65\xe4\x81\x7c\x07\x94\xf9\x50\x45\x3c\xa7\x7c\x81\xa5\xa1\xc1\x58\x55\x91\xaa\x50\xa6\x74\x68\xe3\xb3\x99\xe4\xfa\xf1\xd6\x06\xbe\xa0\xd9\xe6\xcc\x1d\x2d\x70\xdb\x80\x63\x73\x9e\x0c\x27\xd3\xdc\x9f\x9a\xfe\x88\xde\xa5\x2e\x73\x29\x8a\x07\xd0\x5c\x7d\x97\x07\x00\x2e\xfa\x53\x7c\x38\x9e\x38\xbd\x37\xbc\xa7\x4e\xb0\xaf\x62\x61\xa5\xda\x06\x13\x62\x02\xc8\xad\x48\x7e\xeb\xd5\x0b\xef\x74\x76\x70\x89\xc7\x08\x70\xbe\x1d\x8f\xab\x91\x56\xf9\xfd\xbc\x2f\x2e\x9c\xc3\x30\xa9\x50\x18\xce\x79\x43\x98\x4b\xec\xc2\x56\x21\xbf\xa6\x60\x18\xef\x83\x20\xb6\x00\x59\xf9\x41\x15\x6e\x9c\xdd\x87\xff\x0d\x82\xcf\x7b\xe7\x74\x65\xe0\x20\x3e\x71\x20\xaa\xec\xed\x84\xab\xd8\x18\x69\x47\xd4\xac\x3d\xaf\x3f\x99\x39\x02\xae\xc4\x7c\x30\x90\x47\x5c\x85\x7b\x5d\x35\x9f\x0a\x55\x72\xd4\x68\x8e\x5a\x76\xa4\x65\x38\x68\xff\x54\xce\x9f\x99\x9e\x6b\xb5\x59\xd1\xc1\x1c\x67\xc1\x5b\xe9\xd7\xfe\x5f\x8c\x17\x04\x30\x1d\x05\x5f\x3d\x29\x07\x72\x27\x79\xd6\x01\x20\x36\x08\x4e\x95\x0d\xe3\x6f\x4f", + )?; + test( + HashAlgorithm::SHA384, + b"\x60\x1a\x6a\xad\x3f\xaa\x79\x88\xd5\xae\x52\x8a\x69\x69\x03\x1b\x10\xa6\xf3\x92\x16\x94\x6a\xa8\x9f\xd4\x53\x2c\x8e\xd1\x41\xf9\xa6\x50\xb1\x26\xef\x48\x8f\x7c\x5c\xf3\xfb\x2d\xaa\x25\x4c\xc2\x8b\xdd\x55\x56\x04\x19\xe8\x02\x14\xef\x99\x98\x96\xda\xc4\x94\x68\x52\xd2\x4f\xcd\x9f\xb7\x76\x10\xee\xbf\xbb\x6b\xa5\x8b\xca\x26\xf4\x56\x7f\x03\xac\x7e\x56\xda\x55\x3f\x23\x81\x7b\xc1\x03\xee\x48\x55\x92\xa0\x58\xfb\x5e\x3b\xc8\x29\x9c\x72\x90\xc7\x1a\x29\x13\x7e\x75\xdb\xf5\x32\x8c\x3a\x2d\xcd\x34\x16\x5b\x3f\x2e", + n, + e, + b"\x30\x1d\x60\xd5\x65\x76\xf3\x66\x3a\x7f\xbe\x80\x36\xbb\xe4\xfb\xc0\xfb\xd8\x2c\xd6\xa4\x2e\x36\xd7\xbb\xc8\xb2\x06\x54\x3d\xc2\xd5\x6d\x31\x98\xe7\x91\x1a\xd1\x38\xca\xd2\x22\xdd\x99\x05\x0d\xd1\xf8\x5f\xe1\x9c\x8a\x88\xbf\x67\x13\x5e\x7f\x8f\x11\xb5\xf5\xe4\x85\xc9\x1f\xc7\xd4\x78\x06\x9b\x72\xf4\x6e\xbc\xdc\xf2\xd2\xae\x7d\xe6\xac\x8f\xe5\x3b\xb6\xc0\x49\x11\xd1\x22\xcc\x23\x1d\xc2\x10\xb2\x14\x7e\xbe\x8b\x05\x2e\x8b\x2c\xcc\x09\xf3\x38\xb3\x49\xde\x20\x25\xcc\x87\xb2\x61\x9a\x7b\x16\x33\x47\xca\x66\xa3\x47\x91\xa2\xe4\x6b\x4e\x2a\xc5\x7e\xb9\xf6\x02\x9c\xdb\xe0\x24\xe8\x96\xd5\x7f\x7d\x04\x91\xf7\x78\x33\x12\xf8\xf0\x6c\x79\x07\x70\x15\x0c\xd1\x39\xf6\x1f\xd2\xb3\xe7\x04\x1b\x37\x26\x1c\x6e\x7e\xa8\x6d\x4e\x06\xd9\x30\x0b\x1a\x56\x67\xcb\x02\x88\xc5\x50\xb2\xaf\xb3\x55\x94\x48\x34\xb4\x61\xce\xad\x13\x79\x42\x76\xbb\x46\xe5\xe2\x0a\xec\x7b\x63\xaa\xca\x4d\x49\x1a\x50\x0f\xac\xd5\x9a\x37\xc5\x27\x79\xcf\x46\x7d\x74\xaf\x1e\x62\xb1\xeb\xe0\xfd\x0b\xe1\xca\xcb\x7c\xe6\xd0\x50\xd8\x6e\x4e\xb7\x6c\xde\x06\x93", + )?; + test( + HashAlgo |