-
Notifications
You must be signed in to change notification settings - Fork 83
/
Copy pathdriver.cpp
78 lines (69 loc) · 3.33 KB
/
driver.cpp
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
#include "driver.h"
#include <fuzzing/datasource/id.hpp>
#include "tests.h"
#include "executor.h"
#include <cryptofuzz/util.h>
#include <set>
#include <unistd.h>
namespace cryptofuzz {
void Driver::LoadModule(std::shared_ptr<Module> module) {
modules[module->ID] = module;
}
void Driver::Run(const uint8_t* data, const size_t size) const {
using fuzzing::datasource::ID;
static ExecutorDigest executorDigest(ID("Cryptofuzz/Operation/Digest"), modules);
static ExecutorHMAC executorHMAC(ID("Cryptofuzz/Operation/HMAC"), modules);
static ExecutorCMAC executorCMAC(ID("Cryptofuzz/Operation/CMAC"), modules);
static ExecutorSymmetricEncrypt executorSymmetricEncrypt(ID("Cryptofuzz/Operation/SymmetricEncrypt"), modules);
static ExecutorSymmetricDecrypt executorSymmetricDecrypt(ID("Cryptofuzz/Operation/SymmetricDecrypt"), modules);
static ExecutorKDF_SCRYPT executorKDF_SCRYPT(ID("Cryptofuzz/Operation/KDF_SCRYPT"), modules);
static ExecutorKDF_HKDF executorKDF_HKDF(ID("Cryptofuzz/Operation/KDF_HKDF"), modules);
static ExecutorKDF_TLS1_PRF executorKDF_TLS1_PRF(ID("Cryptofuzz/Operation/KDF_TLS1_PRF"), modules);
static ExecutorKDF_PBKDF2 executorKDF_PBKDF2(ID("Cryptofuzz/Operation/KDF_PBKDF2"), modules);
static ExecutorSign executorSign(ID("Cryptofuzz/Operation/Sign"), modules);
static ExecutorVerify executorVerify(ID("Cryptofuzz/Operation/Verify"), modules);
try {
Datasource ds(data, size);
const auto operation = ds.Get<uint64_t>();
const auto payload = ds.GetData(0, 1);
switch ( operation ) {
case ID("Cryptofuzz/Operation/Digest"):
executorDigest.Run(ds, payload.data(), payload.size());
break;
case ID("Cryptofuzz/Operation/HMAC"):
executorHMAC.Run(ds, payload.data(), payload.size());
break;
case ID("Cryptofuzz/Operation/CMAC"):
executorCMAC.Run(ds, payload.data(), payload.size());
break;
case ID("Cryptofuzz/Operation/SymmetricEncrypt"):
executorSymmetricEncrypt.Run(ds, payload.data(), payload.size());
break;
case ID("Cryptofuzz/Operation/SymmetricDecrypt"):
executorSymmetricDecrypt.Run(ds, payload.data(), payload.size());
break;
#if 0
case ID("Cryptofuzz/Operation/KDF_SCRYPT"):
executorKDF_SCRYPT.Run(ds, payload.data(), payload.size());
break;
case ID("Cryptofuzz/Operation/KDF_HKDF"):
executorKDF_HKDF.Run(ds, payload.data(), payload.size());
break;
case ID("Cryptofuzz/Operation/KDF_TLS1_PRF"):
executorKDF_TLS1_PRF.Run(ds, payload.data(), payload.size());
break;
case ID("Cryptofuzz/Operation/KDF_PBKDF2"):
executorKDF_PBKDF2.Run(ds, payload.data(), payload.size());
break;
case ID("Cryptofuzz/Operation/Sign"):
executorSign.Run(ds, payload.data(), payload.size());
break;
case ID("Cryptofuzz/Operation/Verify"):
executorVerify.Run(ds, payload.data(), payload.size());
break;
#endif
}
} catch ( Datasource::OutOfData ) {
}
};
} /* namespace cryptofuzz */