File: fuzz_send_secure_msg.cc

package info (click to toggle)
yubihsm-shell 2.7.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,972 kB
  • sloc: ansic: 41,773; sh: 1,679; cpp: 528; makefile: 18
file content (62 lines) | stat: -rw-r--r-- 1,469 bytes parent folder | download
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
#include <assert.h>
#include <string.h>
#include "debug_lib.h"

extern "C" {
#include "yubihsm.h"

uint8_t *backend_data;
size_t backend_data_len;
yh_session *fuzz_session;
}

#include "yubihsm_fuzz.h"

yh_connector *connector;

static bool initialize() {
  yh_rc rc = yh_init_connector("yhfuzz://yubihsm_fuzz", &connector);
  assert(rc == YHR_SUCCESS);
  rc = yh_connect(connector, 0);
  assert(rc == YHR_SUCCESS);
  return true;
}

extern "C" int LLVMFuzzerTestOneInput(uint8_t *data, size_t size) {
  static bool is_initialized = initialize();
  yh_rc yrc = YHR_GENERIC_ERROR;

  if (size < 2) {
    return 0;
  }

  yrc = yh_create_session_derived(connector, 1,
                                  (const uint8_t *) FUZZ_BACKEND_PASSWORD,
                                  strlen(FUZZ_BACKEND_PASSWORD), false,
                                  &fuzz_session);
  assert(yrc == YHR_SUCCESS);

  size_t data_len = data[0];
  size_t response_len = data[1];

  backend_data = data + 2;
  backend_data_len = size - 2;

  uint8_t *hsm_data = new uint8_t[data_len];
  uint8_t *response = new uint8_t[response_len];
  yh_cmd response_cmd;

  yh_send_secure_msg(fuzz_session, YHC_ECHO, hsm_data, data_len, &response_cmd,
                     response, &response_len);

  yrc = yh_util_close_session(fuzz_session);
  assert(yrc == YHR_SUCCESS);

  yrc = yh_destroy_session(&fuzz_session);
  assert(yrc == YHR_SUCCESS);

  delete[] hsm_data;
  delete[] response;

  return 0;
}