| // Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| // ignore_for_file: lines_longer_than_80_chars |
| |
| import 'dart:typed_data'; |
| |
| import 'package:crypto/crypto.dart'; |
| import 'package:test/test.dart'; |
| |
| import 'utils.dart'; |
| |
| // See https://csrc.nist.gov/Projects/cryptographic-algorithm-validation-program/Secure-Hashing |
| |
| void main() { |
| group('Monte Vectors', () { |
| monteTest( |
| 'sha224', |
| sha224, |
| 'ed2b70d575d9d0b4196ae84a03eed940057ea89cdd729b95b7d4e6a5', |
| [ |
| 'cd94d7da13c030208b2d0d78fcfe9ea22fa8906df66aa9a1f42afa70', |
| '555846e884633639565d5e0c01dd93ba58edb01ee18e68ccca28f7b8', |
| '44d5f4a179b33231f24cc209ed2542ddb931391f2a2d604f80ed460b', |
| '18678e3c151f05f92a89fc5b2ec56bfc6fafa66d73ffc1937fcab4d0', |
| 'b285f829b0499ff45f8454eda2d4e0997b3f438c2728f1a25cfbb05a', |
| ], |
| ); |
| monteTest( |
| 'sha256', |
| sha256, |
| '6d1e72ad03ddeb5de891e572e2396f8da015d899ef0e79503152d6010a3fe691', |
| [ |
| 'e93c330ae5447738c8aa85d71a6c80f2a58381d05872d26bdd39f1fcd4f2b788', |
| '2e78f8c8772ea7c9331d41ed3f9cdf27d8f514a99342ee766ee3b8b0d0b121c0', |
| 'd6a23dff1b7f2eddc1a212f8a218397523a799b07386a30692fd6fe9d2bf0944', |
| 'fb0099a964fad5a88cf12952f2991ce256a4ac3049f3d389c3b9e6c00e585db4', |
| 'f9eba2a4cf6263826beaf6150057849eb975a9513c0b76ecad0f1c19ebbad89b', |
| ], |
| ); |
| monteTest( |
| 'sha384', |
| sha384, |
| 'edff07255c71b54a9beae52cdfa083569a08be89949cbba73ddc8acf429359ca5e5be7a673633ca0d9709848f522a9df', |
| [ |
| 'e81b86c49a38feddfd185f71ca7da6732a053ed4a2640d52d27f53f9f76422650b0e93645301ac99f8295d6f820f1035', |
| '1d6bd21713bffd50946a10c39a7742d740e8f271f0c8f643d4c95375094fd9bf29d89ee61a76053f22e44a4b058a64ed', |
| '425167b66ae965bd7d68515b54ebfa16f33d2bdb2147a4eac515a75224cd19cea564d692017d2a1c41c1a3f68bb5a209', |
| '9e7477ffd4baad1fcca035f4687b35ed47a57832fb27d131eb8018fcb41edf4d5e25874466d2e2d61ae3accdfc7aa364', |
| 'd7b4d4e779ca70c8d065630db1f9128ee43b4bde08a81bce13d48659b6ef47b6cfc802af6d8756f6cd43c709bb445bab', |
| ], |
| ); |
| monteTest( |
| 'sha512', |
| sha512, |
| '5c337de5caf35d18ed90b5cddfce001ca1b8ee8602f367e7c24ccca6f893802fb1aca7a3dae32dcd60800a59959bc540d63237876b799229ae71a2526fbc52cd', |
| [ |
| 'ada69add0071b794463c8806a177326735fa624b68ab7bcab2388b9276c036e4eaaff87333e83c81c0bca0359d4aeebcbcfd314c0630e0c2af68c1fb19cc470e', |
| 'ef219b37c24ae507a2b2b26d1add51b31fb5327eb8c3b19b882fe38049433dbeccd63b3d5b99ba2398920bcefb8aca98cd28a1ee5d2aaf139ce58a15d71b06b4', |
| 'c3d5087a62db0e5c6f5755c417f69037308cbce0e54519ea5be8171496cc6d18023ba15768153cfd74c7e7dc103227e9eed4b0f82233362b2a7b1a2cbcda9daf', |
| 'bb3a58f71148116e377505461d65d6c89906481fedfbcfe481b7aa8ceb977d252b3fe21bfff6e7fbf7575ceecf5936bd635e1cf52698c36ef6908ddbd5b6ae05', |
| 'b68f0cd2d63566b3934a50666dec6d62ca1db98e49d7733084c1f86d91a8a08c756fa7ece815e20930dd7cb66351bad8c087c2f94e8757cb98e7f4b86b21a8a8', |
| ], |
| ); |
| |
| monteTest( |
| 'sha512/224', |
| sha512224, |
| '2e325bf8c98c0be54493d04c329e706343aebe4968fdd33b37da9c0a', |
| [ |
| '9ee006873962aa0842d636c759646a4ef4b65bcbebcc35430b20f7f4', |
| '87726eda4570734b396f4c253146ecb9770b8591739240f02a4f2a02', |
| '7be0871653db5fa514b4ec1a0363df004657155575b0383bc9fdec35', |
| '7a794a3a1ae255e67ffbf688a05b6aba7f231cebec64b4fc75092d49', |
| 'aaf5d4ecaf9426149821b15821b41c49e3900c0fc91664fb294216ea', |
| ], |
| ); |
| |
| monteTest( |
| 'sha512/256', |
| sha512256, |
| 'f41ece2613e4573915696b5adcd51ca328be3bf566a9ca99c9ceb0279c1cb0a7', |
| [ |
| 'b1d97a6536896aa01098fb2b9e15d8692621c84077051fc1f70a8a48baa6dfaf', |
| 'a008d2c5adce31a95b30397ac691d8606c6769a47b801441ba3afb7f727c8a9c', |
| '8eb896cb2b309db019121eb72564b89c1a59f74d4e2f2f6773c87b98c1997d77', |
| 'ac71b694438cc300dde0f6f9f548d2304e2bdb6ea45e2b305af5fb3e4ec27761', |
| 'd47cca4ae027778fc285bc78fb2a9c1cc7cde498267c35157e86b05fc58e698d', |
| ], |
| ); |
| }); |
| } |
| |
| void monteTest(String name, Hash hash, String seed, List<String> expected) { |
| test(name, () { |
| Iterable<String> run() sync* { |
| var seedBytes = bytesFromHexString(seed); |
| for (var j = 0; j < expected.length; j++) { |
| Uint8List md0, md1, md2; |
| md0 = Uint8List.fromList(seedBytes); |
| md1 = Uint8List.fromList(seedBytes); |
| md2 = Uint8List.fromList(seedBytes); |
| late Digest mdI; |
| for (var i = 3; i < 1003; i++) { |
| var mI = [...md0, ...md1, ...md2]; |
| mdI = hash.convert(mI); |
| md0.setAll(0, md1); |
| md1.setAll(0, md2); |
| md2.setAll(0, mdI.bytes); |
| } |
| yield '$mdI'; |
| seedBytes.setAll(0, md2); |
| } |
| } |
| |
| expect(run().toList(), expected); |
| }); |
| } |