1//
2// SHA3EngineTest.cpp
3//
4// Code of the SHA3EngineTest class.
5//
6// test vectors from FIPS 180-1
7//
8// Copyright (c) 2017, Applied Informatics Software Engineering GmbH
9// and Contributors.
10//
11// SPDX-License-Identifier: BSL-1.0
12//
13
14#include "SHA3EngineTest.h"
15#include "Poco/CppUnit/TestCaller.h"
16#include "Poco/CppUnit/TestSuite.h"
17#include "Poco/SHA3Engine.h"
18
19using Poco::SHA3Engine;
20using Poco::DigestEngine;
21
22SHA3EngineTest::SHA3EngineTest(const std::string& rName): CppUnit::TestCase(rName)
23{
24}
25
26SHA3EngineTest::~SHA3EngineTest()
27{
28}
29
30void SHA3EngineTest::testSHA3_224()
31{
32 SHA3Engine engine(SHA3Engine::SHA3_224);
33
34 engine.update("abc");
35 assertTrue (DigestEngine::digestToHex(engine.digest()) == "e642824c3f8cf24ad09234ee7d3c766fc9a3a5168d0c94ad73b46fdf");
36
37 engine.update("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq");
38 assertTrue (DigestEngine::digestToHex(engine.digest()) == "8a24108b154ada21c9fd5574494479ba5c7e7ab76ef264ead0fcce33");
39
40 engine.update("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu");
41 assertTrue (DigestEngine::digestToHex(engine.digest()) == "543e6868e1666c1a643630df77367ae5a62a85070a51c14cbf665cbc");
42
43 for (int i = 0; i < 1000000; ++i)
44 engine.update('a');
45 assertTrue (DigestEngine::digestToHex(engine.digest()) == "d69335b93325192e516a912e6d19a15cb51c6ed5c15243e7a7fd653c");
46}
47
48void SHA3EngineTest::testSHA3_256()
49{
50 SHA3Engine engine(SHA3Engine::SHA3_256);
51
52 engine.update("abc");
53 assertTrue (DigestEngine::digestToHex(engine.digest()) == "3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532");
54
55 engine.update("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq");
56 assertTrue (DigestEngine::digestToHex(engine.digest()) == "41c0dba2a9d6240849100376a8235e2c82e1b9998a999e21db32dd97496d3376");
57
58 engine.update("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu");
59 assertTrue (DigestEngine::digestToHex(engine.digest()) == "916f6061fe879741ca6469b43971dfdb28b1a32dc36cb3254e812be27aad1d18");
60
61 for (int i = 0; i < 1000000; ++i)
62 engine.update('a');
63 assertTrue (DigestEngine::digestToHex(engine.digest()) == "5c8875ae474a3634ba4fd55ec85bffd661f32aca75c6d699d0cdcb6c115891c1");
64}
65
66void SHA3EngineTest::testSHA3_384()
67{
68 SHA3Engine engine(SHA3Engine::SHA3_384);
69
70 engine.update("abc");
71 assertTrue (DigestEngine::digestToHex(engine.digest()) == "ec01498288516fc926459f58e2c6ad8df9b473cb0fc08c2596da7cf0e49be4b298d88cea927ac7f539f1edf228376d25");
72
73 engine.update("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq");
74 assertTrue (DigestEngine::digestToHex(engine.digest()) == "991c665755eb3a4b6bbdfb75c78a492e8c56a22c5c4d7e429bfdbc32b9d4ad5aa04a1f076e62fea19eef51acd0657c22");
75
76 engine.update("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu");
77 assertTrue (DigestEngine::digestToHex(engine.digest()) == "79407d3b5916b59c3e30b09822974791c313fb9ecc849e406f23592d04f625dc8c709b98b43b3852b337216179aa7fc7");
78
79 for (int i = 0; i < 1000000; ++i)
80 engine.update('a');
81 assertTrue (DigestEngine::digestToHex(engine.digest()) == "eee9e24d78c1855337983451df97c8ad9eedf256c6334f8e948d252d5e0e76847aa0774ddb90a842190d2c558b4b8340");
82}
83
84void SHA3EngineTest::testSHA3_512()
85{
86 SHA3Engine engine(SHA3Engine::SHA3_512);
87
88 engine.update("abc");
89 assertTrue (DigestEngine::digestToHex(engine.digest()) == "b751850b1a57168a5693cd924b6b096e08f621827444f70d884f5d0240d2712e10e116e9192af3c91a7ec57647e3934057340b4cf408d5a56592f8274eec53f0");
90
91 engine.update("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq");
92 assertTrue (DigestEngine::digestToHex(engine.digest()) == "04a371e84ecfb5b8b77cb48610fca8182dd457ce6f326a0fd3d7ec2f1e91636dee691fbe0c985302ba1b0d8dc78c086346b533b49c030d99a27daf1139d6e75e");
93
94 engine.update("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu");
95 assertTrue (DigestEngine::digestToHex(engine.digest()) == "afebb2ef542e6579c50cad06d2e578f9f8dd6881d7dc824d26360feebf18a4fa73e3261122948efcfd492e74e82e2189ed0fb440d187f382270cb455f21dd185");
96
97 for (int i = 0; i < 1000000; ++i)
98 engine.update('a');
99 assertTrue (DigestEngine::digestToHex(engine.digest()) == "3c3a876da14034ab60627c077bb98f7e120a2a5370212dffb3385a18d4f38859ed311d0a9d5141ce9cc5c66ee689b266a8aa18ace8282a0e0db596c90b0a7b87");
100}
101
102void SHA3EngineTest::setUp()
103{
104}
105
106void SHA3EngineTest::tearDown()
107{
108}
109
110CppUnit::Test* SHA3EngineTest::suite()
111{
112 CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SHA3EngineTest");
113
114 CppUnit_addTest(pSuite, SHA3EngineTest, testSHA3_224);
115 CppUnit_addTest(pSuite, SHA3EngineTest, testSHA3_256);
116 CppUnit_addTest(pSuite, SHA3EngineTest, testSHA3_384);
117 CppUnit_addTest(pSuite, SHA3EngineTest, testSHA3_512);
118
119 return pSuite;
120}
121