2 This file contains the reference implementation of SHA-1
3 from http://www.ietf.org/rfc/rfc3174.txt
9 * This file will exercise the SHA-1 code performing the three
10 * tests documented in FIPS PUB 180-1 plus one which calls
11 * SHA1Input with an exact multiple of 512 bits, plus a few
20 #include "torture/ui.h"
22 #include "lib/crypto/crypto.h"
24 struct torture_context;
27 * Define patterns for testing
30 #define TEST2a "abcdbcdecdefdefgefghfghighijhi"
31 #define TEST2b "jkijkljklmklmnlmnomnopnopq"
32 #define TEST2 TEST2a TEST2b
34 #define TEST4a "01234567012345670123456701234567"
35 #define TEST4b "01234567012345670123456701234567"
36 /* an exact multiple of 512 bits */
37 #define TEST4 TEST4a TEST4b
38 static const char *testarray[4] =
45 static int repeatcount[4] = { 1, 1, 1000000, 10 };
46 static const char *resultarray[4] =
48 "A9 99 3E 36 47 06 81 6A BA 3E 25 71 78 50 C2 6C 9C D0 D8 9D ",
49 "84 98 3E 44 1C 3B D2 6E BA AE 4A A1 F9 51 29 E5 E5 46 70 F1 ",
50 "34 AA 97 3C D4 C4 DA A4 F6 1E EB 2B DB AD 27 31 65 34 01 6F ",
51 "DE A3 56 A2 CD DD 90 C7 A7 EC ED C5 EB B5 63 93 4F 46 04 52 "
55 bool torture_local_crypto_sha1(struct torture_context *tctx)
57 struct SHA1Context sha;
59 uint8_t Message_Digest[20];
66 for(j = 0; j < 4; ++j)
69 torture_comment(tctx, "Test %d: %d, '%s'\n",
75 torture_assert_int_equal(tctx, err, 0, "SHA1Init Error");
77 for(i = 0; i < repeatcount[j]; ++i)
79 err = SHA1Update(&sha,
80 (const unsigned char *) testarray[j],
81 strlen(testarray[j]));
82 torture_assert_int_equal(tctx, err, 0, "SHA1Update Error");
85 err = SHA1Final(Message_Digest, &sha);
86 torture_assert_int_equal(tctx, err, 0,
87 "SHA1Result Error, could not compute message digest.");
88 torture_comment(tctx, "\t");
89 for(i = 0; i < 20 ; ++i)
91 snprintf(tmp+(i*3), sizeof(tmp) - (i*3),"%02X ", Message_Digest[i]);
92 torture_comment(tctx, "%02X ", Message_Digest[i]);
94 torture_comment(tctx, "\n");
95 torture_comment(tctx, "Should match:\n\t%s\n", resultarray[j]);
96 if (strcmp(resultarray[j], tmp) != 0) {
101 /* Test some error returns */
102 err = SHA1Update(&sha,(const unsigned char *) testarray[1], 1);
103 torture_assert_int_equal(tctx, err, shaStateError, "SHA1Update failed");
105 torture_assert_int_equal(tctx, err, shaNull, "SHA1Init failed");