• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <vector>
2 #include <cassert>
3 
4 #include "crypto.hpp"
5 
6 using namespace std;
7 using namespace SimpleWeb;
8 
9 const vector<pair<string, string> > base64_string_tests = {
10     {"", ""},
11     {"f" , "Zg=="},
12     {"fo", "Zm8="},
13     {"foo", "Zm9v"},
14     {"foob", "Zm9vYg=="},
15     {"fooba", "Zm9vYmE="},
16     {"foobar", "Zm9vYmFy"}
17 };
18 
19 const vector<pair<string, string> > md5_string_tests = {
20     {"", "d41d8cd98f00b204e9800998ecf8427e"},
21     {"The quick brown fox jumps over the lazy dog", "9e107d9d372bb6826bd81d3542a419d6"}
22 };
23 
24 const vector<pair<string, string> > sha1_string_tests = {
25     {"", "da39a3ee5e6b4b0d3255bfef95601890afd80709"},
26     {"The quick brown fox jumps over the lazy dog", "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12"}
27 };
28 
29 const vector<pair<string, string> > sha256_string_tests = {
30     {"", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},
31     {"The quick brown fox jumps over the lazy dog", "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592"}
32 };
33 
34 const vector<pair<string, string> > sha512_string_tests = {
35     {"", "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"},
36     {"The quick brown fox jumps over the lazy dog", "07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6"}
37 };
38 
main()39 int main() {
40     for(auto& string_test: base64_string_tests) {
41         assert(Crypto::Base64::encode(string_test.first)==string_test.second);
42         assert(Crypto::Base64::decode(string_test.second)==string_test.first);
43     }
44 
45     for(auto& string_test: md5_string_tests) {
46         assert(Crypto::to_hex_string(Crypto::md5(string_test.first)) == string_test.second);
47         stringstream ss(string_test.first);
48         assert(Crypto::to_hex_string(Crypto::md5(ss)) == string_test.second);
49     }
50 
51     for(auto& string_test: sha1_string_tests) {
52         assert(Crypto::to_hex_string(Crypto::sha1(string_test.first)) == string_test.second);
53         stringstream ss(string_test.first);
54         assert(Crypto::to_hex_string(Crypto::sha1(ss)) == string_test.second);
55     }
56 
57     for(auto& string_test: sha256_string_tests) {
58         assert(Crypto::to_hex_string(Crypto::sha256(string_test.first)) == string_test.second);
59         stringstream ss(string_test.first);
60         assert(Crypto::to_hex_string(Crypto::sha256(ss)) == string_test.second);
61     }
62 
63     for(auto& string_test: sha512_string_tests) {
64         assert(Crypto::to_hex_string(Crypto::sha512(string_test.first)) == string_test.second);
65         stringstream ss(string_test.first);
66         assert(Crypto::to_hex_string(Crypto::sha512(ss)) == string_test.second);
67     }
68 
69     //Testing iterations
70     assert(Crypto::to_hex_string(Crypto::sha1("Test", 1)) == "640ab2bae07bedc4c163f679a746f7ab7fb5d1fa");
71     assert(Crypto::to_hex_string(Crypto::sha1("Test", 2)) == "af31c6cbdecd88726d0a9b3798c71ef41f1624d5");
72     stringstream ss("Test");
73     assert(Crypto::to_hex_string(Crypto::sha1(ss, 2)) == "af31c6cbdecd88726d0a9b3798c71ef41f1624d5");
74 
75     assert(Crypto::to_hex_string(Crypto::pbkdf2("Password", "Salt", 4096, 128 / 8)) == "f66df50f8aaa11e4d9721e1312ff2e66");
76     assert(Crypto::to_hex_string(Crypto::pbkdf2("Password", "Salt", 8192, 512 / 8)) == "a941ccbc34d1ee8ebbd1d34824a419c3dc4eac9cbc7c36ae6c7ca8725e2b618a6ad22241e787af937b0960cf85aa8ea3a258f243e05d3cc9b08af5dd93be046c");
77 }
78