1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
// **********************************************************************
//
// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************
#include <IceUtil/SHA1.h>
#include <TestCommon.h>
using namespace std;
namespace
{
struct SHA1Item
{
const char* data;
const char* digest;
};
SHA1Item items[] =
{
{"hello world", "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"},
{"2aae6c35c94fcfb415dbe95f408b9ce91ee846ed", "d6b0d82cea4269b51572b8fab43adcee9fc3cf9a"},
{"Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
"Cras vel ante adipiscing, aliquet ipsum sit amet, suscipit ante. "
"Donec tempor purus in suscipit tempus. "
"Vestibulum vulputate ipsum in quam bibendum laoreet. "
"Etiam tristique viverra metus, at condimentum eros scelerisque et. "
"Proin in diam sit amet nisi facilisis dictum. "
"Donec placerat libero a mauris tristique, "
"id pulvinar magna pharetra. Vivamus posuere tincidunt elit, "
"eget lacinia nisl feugiat in. Aenean neque mi, "
"vehicula a vestibulum nec, condimentum vel ipsum. "
"Duis sit amet quam sit amet risus sollicitudin euismod. "
"Nullam elit neque, suscipit ac convallis non, convallis et urna. "
"Sed semper elementum erat, ut egestas lacus interdum sit amet. "
"Sed ipsum nisi, ultricies congue augue id, euismod posuere sapien. "
"Fusce volutpat nisl in orci laoreet, vitae lacinia urna venenatis.",
"84fac2d6a78ab4acbeae1408ab4de49c4bd145bb"},
{"Pellentesque accumsan mauris neque, nec sollicitudin metus ornare eu. "
"Sed dignissim nisi neque, sit amet dapibus purus faucibus laoreet. "
"Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. "
"Donec cursus risus sed arcu varius posuere. Donec pretium felis mi, eu consequat arcu imperdiet vitae. "
"Etiam fringilla velit in nisl semper, nec mattis turpis blandit. "
"Etiam magna sem, laoreet eu urna vitae, laoreet dictum tortor. In et iaculis enim, nec pharetra ipsum. "
"Sed porttitor suscipit ligula mattis sollicitudin. Cras imperdiet iaculis dictum. "
"Ut vel nisl condimentum, placerat ante a, suscipit turpis",
"0ecd4503f02f3febeca1460fb81e8f7fc0d59abe"},
{"Curabitur in dolor justo. Morbi vitae consectetur odio. Aliquam erat volutpat. "
"Fusce consectetur magna nec metus ornare pretium. Ut tincidunt mi eu bibendum pharetra. "
"Morbi sit amet elit augue. Praesent et enim condimentum, ullamcorper est tempor, auctor leo. "
"Pellentesque eu convallis urna, ac auctor orci. Cras sapien lectus, convallis congue nunc nec, "
"porta molestie est. Aliquam consectetur elementum posuere. Duis et mollis lorem.",
"b4d38ece814fdfe9ff067d08c6389c6512530bb4"}
};
int itemsSize = sizeof(items)/sizeof(SHA1Item);
string toHex(const string& data)
{
ostringstream os;
for(size_t i = 0; i < data.size(); ++i)
{
os.width(2);
os.fill('0');
unsigned char c = data[i];
os << hex << (int)c;
}
return os.str();
}
}
int main(int argc, char* argv[])
{
cout << "Testing sha1 hash computation... ";
for(int i = 0; i < itemsSize; ++i)
{
const SHA1Item* item = &items[i];
vector<unsigned char> buffer;
IceUtilInternal::sha1(reinterpret_cast<const unsigned char*>(item->data), strlen(item->data), buffer);
test(buffer.size() == 20);
string digest = toHex(string(reinterpret_cast<const char*>(&buffer[0]), 20));
test(item->digest == digest);
}
for(int i = 0; i < itemsSize; ++i)
{
const SHA1Item* item = &items[i];
IceUtilInternal::SHA1 hasher;
//
// Test adding the data in chunks
//
const unsigned char* begin = reinterpret_cast<const unsigned char*>(&item->data[0]);
const unsigned char* end = begin + strlen(item->data);
while(begin != end)
{
size_t packetSize = min(static_cast<size_t>(5), static_cast<size_t>(end - begin));
hasher.update(begin, packetSize);
begin += packetSize;
}
vector<unsigned char> buffer;
hasher.finalize(buffer);
test(buffer.size() == 20);
string digest = toHex(string(reinterpret_cast<const char*>(&buffer[0]), 20));
test(item->digest == digest);
}
cout << "ok" << endl;
return EXIT_SUCCESS;
}
|