// Copyright (c) 2023, Sudipto Chandra // All rights reserved. Check LICENSE file for details. import 'package:hashlib/codecs.dart'; import 'package:hashlib/hashlib.dart'; import 'package:test/test.dart'; void main() { group('SHA3 test', () { test('name', () { expect(sha3_224.name, 'SHA3-224'); expect(sha3_256.name, 'SHA3-256'); expect(sha3_384.name, 'SHA3-384'); expect(sha3_512.name, 'SHA3-512'); }); test('SHA3-224 with empty string', () { expect(sha3_224sum(""), "6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7"); }); test('SHA3-384 with exact block size', () { final input = "e35780eb9799ad4c77535d4ddb683cf33ef367715327cf4c4a58ed9cbdcdd486" "f669f80189d549a9364fa82a51a52654ec721bb3aab95dceb4a86a6afa93826d" "b923517e928f33e3fba850d45660ef83b9876accafa2a9987a254b137c6e140a" "21691e1069413848"; final output = "d1c0fa85c8d183beff99ad9d752b263e286b477f79f0710b0103170173978133" "44b99daf3bb7b1bc5e8d722bac85943a"; expect(sha3_384.convert(fromHex(input)).hex(), output); final encoded = String.fromCharCodes(fromHex(input)); expect(sha3_384sum(encoded), output); }); test('SHA3-256 with short message', () { final input = "9f2fcc7c90de090d6b87cd7e9718c1ea6cb21118fc2d5de9f97e5db6ac1e9c10"; final output = "2f1a5f7159e34ea19cddc70ebf9b81f1a66db40615d7ead3cc1f1b954d82a3af"; expect(sha3_256.convert(fromHex(input)).hex(), output); }); test('SHA3-512 with multi block size', () { final input = "3a3a819c48efde2ad914fbf00e18ab6bc4f14513ab27d0c178a188b61431e7f5" "623cb66b23346775d386b50e982c493adbbfc54b9a3cd383382336a1a0b2150a" "15358f336d03ae18f666c7573d55c4fd181c29e6ccfde63ea35f0adf5885cfc0" "a3d84a2b2e4dd24496db789e663170cef74798aa1bbcd4574ea0bba40489d764" "b2f83aadc66b148b4a0cd95246c127d5871c4f11418690a5ddf01246a0c80a43" "c70088b6183639dcfda4125bd113a8f49ee23ed306faac576c3fb0c1e256671d" "817fc2534a52f5b439f72e424de376f4c565cca82307dd9ef76da5b7c4eb7e08" "5172e328807c02d011ffbf33785378d79dc266f6a5be6bb0e4a92eceebaeb1"; final output = "6e8b8bd195bdd560689af2348bdc74ab7cd05ed8b9a57711e9be71e9726fda45" "91fee12205edacaf82ffbbaf16dff9e702a708862080166c2ff6ba379bc7ffc2"; expect(sha3_512.convert(fromHex(input)).hex(), output); final encoded = String.fromCharCodes(fromHex(input)); expect(sha3_512sum(encoded), output); }); test('SHA3-256 with "a"', () { final input = "a"; final output = "80084bf2fba02475726feb2cab2d8215eab14bc6bdd8bfb2c8151257032ecd8b"; expect(sha3_256sum(input), output); }); test('SHA3-256 with "abc"', () { final input = "abc"; final output = "3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532"; expect(sha3_256sum(input), output); }); test('SHA3-256 with long arbitrary string', () { final input = "A quick brown fox jumps over the lazy dog"; final output = "2baa15b5a204f74ae708d588793657a70cda2288a06e7e12c918cc3aedc5cd8d"; expect(sha3_256sum(input), output); }); }); }