v/vlib/crypto/sha256/sha224_shavs_test.v

382 lines
14 KiB
V

// These tests are derived from the Secure Hash Algorithm Validation System
// test vectors contained in:
// https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/shs/shabytetestvectors.zip
//
// For SHA224, the test vectors come from:
// SHA224ShortMsg.rsp
// SHA224LongMsg.rsp
import crypto.sha256
import encoding.hex
// This structure deals with both the short message and long message tests
struct SHA224TestCase {
name string
message string
digest string
}
// short message test cases
const short_cases = [
SHA224TestCase{
name: 'test case 0'
message: ''
digest: 'd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f'
},
SHA224TestCase{
name: 'test case 1'
message: '84'
digest: '3cd36921df5d6963e73739cf4d20211e2d8877c19cff087ade9d0e3a'
},
SHA224TestCase{
name: 'test case 2'
message: '5c7b'
digest: 'daff9bce685eb831f97fc1225b03c275a6c112e2d6e76f5faf7a36e6'
},
SHA224TestCase{
name: 'test case 3'
message: '51ca3d'
digest: '2c8959023515476e38388abb43599a29876b4b33d56adc06032de3a2'
},
SHA224TestCase{
name: 'test case 4'
message: '6084347e'
digest: 'ae57c0a6d49739ba338adfa53bdae063e5c09122b77604780a8eeaa3'
},
SHA224TestCase{
name: 'test case 5'
message: '493e14623c'
digest: '7f631f295e024e74552083245ca8f988a3fb65680ae97c3040d2e65c'
},
SHA224TestCase{
name: 'test case 6'
message: 'd729d8cd1631'
digest: '342e8e6b23c1c6a54910631f098e08e836259c57e49c1b1d023d166d'
},
SHA224TestCase{
name: 'test case 7'
message: 'cbf2061e10faa5'
digest: '3aa702b1b66dc57d7aec3ccdbdfbd88592d7520f843ba5d0fa481168'
},
SHA224TestCase{
name: 'test case 8'
message: '5f77b3664823c33e'
digest: 'bdf21ff325f754157ccf417f4855360a72e8fd117d28c8fe7da3ea38'
},
SHA224TestCase{
name: 'test case 9'
message: '10713b894de4a734c0'
digest: '03842600c86f5cd60c3a2147a067cb962a05303c3488b05cb45327bd'
},
SHA224TestCase{
name: 'test case 10'
message: '006470d57dad9893dc03'
digest: 'c90026cda5ad24115059c62ae9add57793ade445d4742273288bbce7'
},
SHA224TestCase{
name: 'test case 11'
message: '6f29ca274190400720bba2'
digest: 'ac53157947aa4b2a19089182382a4363d182dd8e4ca79cd8571390be'
},
SHA224TestCase{
name: 'test case 12'
message: '17e8556176fcca2addbdde29'
digest: 'cc6ad0488db0222066f740557b5758a19b30372b302332295d8c3aff'
},
SHA224TestCase{
name: 'test case 13'
message: 'dbf163601db9a122a4026824de'
digest: '9849845f4e47e1ece9a1c1e01a0d896ffea61c6c8894a75a11ce5f49'
},
SHA224TestCase{
name: 'test case 14'
message: '5e1ef2ad86ceaf5439fe87d2ec9b'
digest: '223c5d5d4a0116b32cea044f9af0fe44babea1c5ab201502591bcd5f'
},
SHA224TestCase{
name: 'test case 15'
message: '65f3b9866fb8002b53cfaf806f702f'
digest: 'b1e0806a218d593821fde8e9eacc44ab5287c32209a94f011ab66b75'
},
SHA224TestCase{
name: 'test case 16'
message: 'b776708ffb91b3515ac46598ab9fa796'
digest: '427311b1d7ab2488791c4deeb4251d783fe5f9806bfdfb5188c5443d'
},
SHA224TestCase{
name: 'test case 17'
message: 'a4bc10b1a62c96d459fbaf3a5aa3face73'
digest: 'd7e6634723ac25cb1879bdb1508da05313530419013fe255967a39e1'
},
SHA224TestCase{
name: 'test case 18'
message: '9e8f3c6645c1749b55c50d2018ce40dc2427'
digest: '2f5a583bf588c8988a572d128a95bea5ef1b66780a7d4be9c29efc31'
},
SHA224TestCase{
name: 'test case 19'
message: '2db6d207c0b7d9117f24d78ee59abf2f316978'
digest: '35681fce28307cae19522c23cbd4a77969347f7d8ee4a3088ba90ada'
},
SHA224TestCase{
name: 'test case 20'
message: '3df5e7f399f6dd61a12a9d4e9464fc4997c1f37b'
digest: 'a3e68076e30751085a843a6cbfbf0f3dee63d9c4219c914372e50b28'
},
SHA224TestCase{
name: 'test case 21'
message: '65781d018f27ca0c72a9fa9ab4648ed369646dd3ce'
digest: 'd15ef0d872d02da6427b8d0349dea2f204e67133b7365b4b150efc3c'
},
SHA224TestCase{
name: 'test case 22'
message: 'af48eeddd93fee69d1bd7de428a63986011d10945eaf'
digest: 'b89d428ee42e397cf11029ecbb27baddd036c8938f51c8ab56b875ac'
},
SHA224TestCase{
name: 'test case 23'
message: 'df2bf0d5f9c994ac69d78baa0d512eceb74d8a047531c1'
digest: 'db8e1ce68c8c6b84d6db755c2b8bf54f3c4b081a881efcddaf303294'
},
SHA224TestCase{
name: 'test case 24'
message: '48d2f20955ea2d13433c20bc0404eb2e6ad79ed28f7cb4c0'
digest: '3617cc3179f8b59adce181eebeed5e2763f62650949224a67e53694b'
},
SHA224TestCase{
name: 'test case 25'
message: '218f74a42d3a47ef3b806601fba024b078cbff4e4b85772e0e'
digest: 'b5f40b95dcc363b97e9d00b67c5d7c37f17ab563297d2d67a4df20c9'
},
SHA224TestCase{
name: 'test case 26'
message: 'ef55b1e797000b04fcdb9b3021b09327e3b4e269d20cabdf418f'
digest: '827b223d51240c2e3271c534c19c5637b6fe10083e85bcf06761ef21'
},
SHA224TestCase{
name: 'test case 27'
message: '96df4387dc2c40297043bea36483f65e4eb1e07e93359cb7e68610'
digest: '98e430a63fcdedafc9419010f7f59a4d816a45b4f973beb62530ff8c'
},
SHA224TestCase{
name: 'test case 28'
message: '3ec0aa8d30d5ed825b77dc7095f421b1e608158797a377ff8bed641b'
digest: '3108321eb7ff857f6aae69101b937f32a51ea279a6c14ba5232ac8c1'
},
SHA224TestCase{
name: 'test case 29'
message: '8b0239712039f077ce323b35f4e306787b9b35270096e57735cff45d84'
digest: 'a5c740d3ce46bb2e0a048488f2b0605c6d0ca0ea2f382d043d13db97'
},
SHA224TestCase{
name: 'test case 30'
message: '044be30167a9758c46c727921dc4eb4e0dcb965623423e6fdd44e7a4ea52'
digest: '6eb78313c743ea8769d8340f284dda6ded64a1db64392f21abb82c5c'
},
SHA224TestCase{
name: 'test case 31'
message: '57f6118bacce47ecc31ce8b0c083d3c9219e0dbe9e4fbea154537c41231acc'
digest: '0dbb53c866d63af44c222c76c825df0e379dcedfb958db03b6fd29a5'
},
SHA224TestCase{
name: 'test case 32'
message: 'fe1f0fb02c9011f4c8c5905934ed15136771737ce31c5859e67f235fe594f5f6'
digest: 'bbeaacc632c2a3db2a9b47f157ab54aa27776c6e74cf0bcaa91b06d5'
},
SHA224TestCase{
name: 'test case 33'
message: '14fb01ae9d6015ecb3e56d6ecdfa4bc0533186adf8457f5e4a5c57c687895f3db3'
digest: '178272c7d7cc71b15074c27e3b7997d4a3ba99626986a1a16cf30030'
},
SHA224TestCase{
name: 'test case 34'
message: 'ff6c49712f044f4063c14125c0cdfba18ed8b7138453768a45dfa2d82a05f1e84227'
digest: '403284c888a7280bc8bfc25f0c34182cd378306a21a1404d4e1c40cf'
},
SHA224TestCase{
name: 'test case 35'
message: 'f900bd7e0117247f97c8fc7a665c76a35f571c3366571d6c4a3ee5d7fb93f1d1f726e2'
digest: '48235b9820d66d8885faabf6a9ede63ba2a21b6177e987a33242373e'
},
SHA224TestCase{
name: 'test case 36'
message: '42d38188ac49440cfefb77db975e083e6b22348c4c67f0f8692e88ad140d861dc828d595'
digest: '615344f890e5bcf71b5efe39de1fc942ba1fe30dd9e9146adb6a41bf'
},
SHA224TestCase{
name: 'test case 37'
message: '74fdd7d958b8ae7c2c3c5cff4266dfb2b3b842c9f59ecbbcaff575edcbcda08ccd6e08b764'
digest: '66d7d6c54fc7775a0ba845ba3e11719fa535b9289f20b098c5f7a342'
},
SHA224TestCase{
name: 'test case 38'
message: '934416dd0581e22f2bfbece7bb64afe820451fa21342df7e6f9fb37c4103381a1f7cd379bcc4'
digest: 'fae8f1aa22def4dbaa814c5b0babdec43394951792c937050d2963a6'
},
SHA224TestCase{
name: 'test case 39'
message: '102401c84a716ae72579c6ae79c359ea309ffd95abffae4c61884c03c9e99df77b6c92e492cacb'
digest: '8f34812d57a16ef8a51ad987660c5f8623e0fa9d89846e28d46d14d9'
},
SHA224TestCase{
name: 'test case 40'
message: '79bc8fb60f85d15a2386566e3e7314df284533085add1c7bb6ead3ff760c86d5633a66404761b544'
digest: '65c54014cfa30f0bc27d1c6efa96ae8481f4c2505bff272956eab0df'
},
SHA224TestCase{
name: 'test case 41'
message: 'db3121ea71294983b185207a9d8de3e484a66c0431bf07c962eb82977c4f834b7c3f1e7931a4a7f7a9'
digest: '9316d2f021c2913d63a7e66924c87c161c3cfde0ea7ba07f54772862'
},
SHA224TestCase{
name: 'test case 42'
message: '0dd51aa660c5cb4b7f78c46852c1db8707ab451c1367b6187388c8bb3873a1aa4210d0414cc6792a29a7'
digest: '31989e7a62a5132a5070d77250d8904bb82d457dc63469d06b50185e'
},
SHA224TestCase{
name: 'test case 43'
message: '487fd2e5b694b7071d3789a258a51e8604dc0d3e8f5d62f39131968e602abe1ddf6b0278962a512408b553'
digest: 'e798683438284626d710877d9eea3a0e02f349fc43acb7f9f8f9e81c'
},
SHA224TestCase{
name: 'test case 44'
message: '11183bdebfef58e4da5b1cb73be0d30b20da304d8659d921da2e270fd14626799537e4d12119e809ee97004a'
digest: '96870657d6cb668be3995aa8bd31df77840d1d1915d72482e83b6b2c'
},
SHA224TestCase{
name: 'test case 45'
message: 'a239de5c8e2644e8f030d94d98f1a30664e6fd961dc2977a9c08be5c31d8de89450945a53d79299ea2a1edde7f'
digest: 'e99743d4fd26c8800c36a67b6762247c29da6b62794123c59de06dc0'
},
SHA224TestCase{
name: 'test case 46'
message: '917c4577aa6b0f9df49999fc1c958cb09b7fd5fc80be949670f03545eb27dcaed052076b24f96f5e0f2e2f4527c0'
digest: '7ecd693d4d9cf43929464698efa0bac33c2e1424f816edc769260978'
},
SHA224TestCase{
name: 'test case 47'
message: 'c3f1e735a6741aa481ad577a98dbac1f03cc80ea0dae1b94db2369ed4e93facd29c64e4e77b25038279120bdfa3715'
digest: '86f0d89d8e14fd8b6606412d71a7a54a347b304ea5d49c208f2266ab'
},
SHA224TestCase{
name: 'test case 48'
message: 'de4fbfd553cdf37019f25afa82dc6b9970f4bb1ebbc37f80d3084c88a70722cdc523a9e3c2afbad0dc0221bfdec9a2f9'
digest: '4c5262acb4a2a44eaa9bc6757024fb202ef4d5a7a16fa37252a422b5'
},
SHA224TestCase{
name: 'test case 49'
message: 'db2e2eb636610cf42e9b33433acce1b3b925949f297dd83199f45d2861d64cd910c2db74a60b2089045e22cba0a536137d'
digest: '16bf4e45bcdc60447c68dcb30e6b08f55ce9f4124a29cf1f9a9d065d'
},
SHA224TestCase{
name: 'test case 50'
message: 'a8e729d336d5d6ac50e1e22f0b193b66e26042fc6459214129875e740ab2b142918c138aaf941863ad3b7e6065450613b273'
digest: '452bf2e5ebfc4e451cc434bc09e2a10032eed0b7627cf55e7e5ed0e2'
},
SHA224TestCase{
name: 'test case 51'
message: 'd05317d4b535f9d10f739d0c2dedf3ffb090c1ad9d205089b1346693f58273c4925c0face57ba45ad6fc687c66a88fc78878be'
digest: '4f03c439e097b51b00e314f675937c4d911505859fb7ab16adc65e44'
},
SHA224TestCase{
name: 'test case 52'
message: '26bb4ed4f0424c60fe4212ff8c955e89e2f553a7d7701be59416d2089af59fa1074724e214e919b1e30f33fb78374b4b055bbc9b'
digest: 'e7c899e27009d4dc77c2d300f191b757e52c9e7eac4b023bfab2b52a'
},
SHA224TestCase{
name: 'test case 53'
message: 'f015ec83944f03292463c4345fdb1c26d1ea07645facbc9520ae244b6eb191e53dabadb4ac0fb15cda4ed77dfb9e1193abfafb1b81'
digest: '459e40b3fbd612912f0217c60099379ce077cd02505871b0c9c14e7a'
},
SHA224TestCase{
name: 'test case 54'
message: '0786706f680c27b792d054faa63f499a8e6b5ddb90502946235bf74c022d772c809cb4171bfa4791539aca1abd91900e53ba93ca0efd'
digest: 'fadebab7c3d0fb8e97e429b79083087735e4ab385a789521260ef3ad'
},
SHA224TestCase{
name: 'test case 55'
message: '445e8698eeb8accbaac4ffa7d934fffd16014a430ef70f3a9174c6cfe96d1e3f6ab1377f4a7212dbb30146dd17d9f470c4dffc45b8e871'
digest: '4c7ae028c0fe61f2a9cada61fae30685b77f04c6442576e912af9fa6'
},
SHA224TestCase{
name: 'test case 56'
message: '52839f2f0853a30df14ec897a1914c685c1ac21470d00654c8c37663bfb65fa732dbb694d9dd09ced723b48d8f545846ba168988b61cc724'
digest: '2f755a57674b49d5c25cb37348f35b6fd2de2552c749f2645ba63d20'
},
SHA224TestCase{
name: 'test case 57'
message: '5fe8c2072d8900287ccaf07f3f66b0c22acd3e0bb91d9573754e19e373ac35271d8b43443436ac0c162850ef3d7f281409ad29a9bf716c77d1'
digest: '42909757f6e229f69f04cc7a863c4e70e48c7c3575057b455c959775'
},
SHA224TestCase{
name: 'test case 58'
message: 'e8064d83f3d643af8718c87e3ccd6a9733685eac61d572a22ab943f232fcb04f70858e8984449db14a76bb7eaf2458efc3ed2a32100622c52b7f'
digest: '1a1d8ed54cb45c97bc970754b43eb93d9eabde4c7b07f76ad82d8ede'
},
SHA224TestCase{
name: 'test case 59'
message: '87c9a517e28d1bb54ad20fca76460efd894d7786e68ee8d746b2f68208682157c8ad06cc324ad7a3189e09c6c39d4c768719c0a49a41669f2767d5'
digest: '605977cf87b9b309bbddaaa64e528ace66b04df9f72c0e7ec88be1da'
},
SHA224TestCase{
name: 'test case 60'
message: '59fdac3b6b32039291801c7d6f46ede8d26dc5b7a192e007116739b617569f2523680b3c0b6631af453e55805aa760c6970833ac06963bbc9dbd455e'
digest: 'e9f0cb1dc8337e906385892f2348a8ba4412318ecad9b96e3711531f'
},
SHA224TestCase{
name: 'test case 61'
message: '30350a4df0b58ff49c0fa09e426fcd7007b290c760c825c1855d9b0023b82caa51e3cab4c60cfa61492be50568e5ac0f6db0fd468e39e4536403e3809f'
digest: '776cc6636c02408fbf65ace73ae80017108b917c16c5a912fd860241'
},
SHA224TestCase{
name: 'test case 62'
message: 'ef797a0d43c30b4fe1014bdb9420879c2ff845d27e73d55a7df22930c8ece73253d8bb265b4ef2ff9c69455cc56ff25229b4126bb7bb26ee2c9ff36187b1'
digest: 'f5b9ffb102affac352a4a535a00f89b06c268cf4881d712668906025'
},
SHA224TestCase{
name: 'test case 63'
message: '716944de41710c29b659be10480bb25a351a39e577ee30e8f422d57cf62ad95bda39b6e70c61426e33fd84aca84cc7912d5eee45dc34076a5d2323a15c7964'
digest: '61645ac748db567ac862796b8d06a47afebfa2e1783d5c5f3bcd81e2'
},
SHA224TestCase{
name: 'test case 64'
message: 'a3310ba064be2e14ad32276e18cd0310c933a6e650c3c754d0243c6c61207865b4b65248f66a08edf6e0832689a9dc3a2e5d2095eeea50bd862bac88c8bd318d'
digest: 'b2a5586d9cbf0baa999157b4af06d88ae08d7c9faab4bc1a96829d65'
},
]
// long message test cases
const long_cases = [
SHA224TestCase{
name: 'test case 163'
message: 'f149e41d848f59276cfddd743bafa9a90e1ee4a263a118142b33e3702176ef0a59f8237a1cb51b42f3ded6b202d9af0997898fdd03cf60bda951c514547a0850cec25444ae2f24cb711bfbafcc3956c941d3de69f155e3f8b10f06db5f37359b772ddd43e1035a0a0d3db33242d5843033833b0dd43b870c6bf60e8deab55f317cc3273f5e3ba747f0cb65050cb7228796210d9254873643008d45f29cfd6c5b060c9a'
digest: '9db6dc3a23abd7b6c3d72c38f4843c7de48a71d0ba91a86b18393e5f'
},
SHA224TestCase{
name: 'test case 262'
message: 'c39147fad02c6ed5876eb3257837c3f456008694fac94932aa521bae9c8e77abb65524e298595abbdc5b261e9c9f0f86359dfa584bf94b740eb54d09bba6d4ad652421adf50605a170ce4a4478204e831679f1d4b61db1c9735114e595cb47ae58670403f01bb8b0c92de64013a3c6137efc33b0421dc45b638e38eb33e617d61884968e8f80bb1071e1c3b97611c15cf78e8793f8e1c95265d480c29ce08d4c2ce59ff3dc1e56e8f053a958a75085890897b625de520bd6028bb512d89ff1391cf0e7dddfdbd160ccea5fc5b04a5ac03a7f890fff56d10dc01b9f85f00d8bc4710f35f29fa073a28f0dafa798e58a2913aec5f960d662222aed06c1eb11a216b2a952da2456'
digest: '2b05b170d4976409f23ce885a0a2c0a943226688d4f5bbaf35fabb46'
},
]
fn test_short_messages() {
for c in short_cases {
message := hex.decode(c.message)!
expected_result := hex.decode(c.digest)!
actual_result := sha256.sum224(message)
assert actual_result == expected_result, 'failed ${c.name}'
}
}
fn test_long_messages() {
for c in long_cases {
message := hex.decode(c.message)!
expected_result := hex.decode(c.digest)!
actual_result := sha256.sum224(message)
assert actual_result == expected_result, 'failed ${c.name}'
}
}