blob: 02574313ccba3d446f4f05cc0668a625652742fb [file] [log] [blame]
Austin Schuh812d0d12021-11-04 20:16:48 -07001// Copyright (c) FIRST and other WPILib contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the WPILib BSD license file in the root directory of this project.
Brian Silverman8fce7482020-01-05 13:18:21 -08004
5/*
6 test_sha1.cpp - test program of
7
8 ============
9 SHA-1 in C++
10 ============
11
12 100% Public Domain.
13
14 Original C Code
15 -- Steve Reid <steve@edmweb.com>
16 Small changes to fit into bglibs
17 -- Bruce Guenter <bruce@untroubled.org>
18 Translation to simpler C++ Code
19 -- Volker Grabsch <vog@notjusthosting.com>
20*/
21
22#include <string>
23
24#include "gtest/gtest.h"
25#include "wpi/sha1.h"
26
27namespace wpi {
28
29/*
30 * The 3 test vectors from FIPS PUB 180-1
31 */
32
33TEST(SHA1Test, Standard1) {
34 SHA1 checksum;
35 checksum.Update("abc");
36 ASSERT_EQ(checksum.Final(), "a9993e364706816aba3e25717850c26c9cd0d89d");
37}
38
39TEST(SHA1Test, Standard2) {
40 SHA1 checksum;
41 checksum.Update("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq");
42 ASSERT_EQ(checksum.Final(), "84983e441c3bd26ebaae4aa1f95129e5e54670f1");
43}
44
45TEST(SHA1Test, Standard3) {
46 SHA1 checksum;
47 // A million repetitions of 'a'
48 for (int i = 0; i < 1000000 / 200; ++i) {
49 checksum.Update(
50 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
51 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
52 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
53 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
54 }
55 ASSERT_EQ(checksum.Final(), "34aa973cd4c4daa4f61eeb2bdbad27316534016f");
56}
57
58/*
59 * Other tests
60 */
61
62TEST(SHA1Test, OtherNoString) {
63 SHA1 checksum;
64 ASSERT_EQ(checksum.Final(), "da39a3ee5e6b4b0d3255bfef95601890afd80709");
65}
66
67TEST(SHA1Test, OtherEmptyString) {
68 SHA1 checksum;
69 checksum.Update("");
70 ASSERT_EQ(checksum.Final(), "da39a3ee5e6b4b0d3255bfef95601890afd80709");
71}
72
73TEST(SHA1Test, OtherABCDE) {
74 SHA1 checksum;
75 checksum.Update("abcde");
76 ASSERT_EQ(checksum.Final(), "03de6c570bfe24bfc328ccd7ca46b76eadaf4334");
77}
78
79TEST(SHA1Test, Concurrent) {
80 // Two concurrent checksum calculations
81 SHA1 checksum1, checksum2;
82 checksum1.Update("abc");
83 ASSERT_EQ(checksum2.Final(),
84 "da39a3ee5e6b4b0d3255bfef95601890afd80709"); /* "" */
85 ASSERT_EQ(checksum1.Final(),
86 "a9993e364706816aba3e25717850c26c9cd0d89d"); /* "abc" */
87}
88
89} // namespace wpi