aboutsummaryrefslogtreecommitdiff
path: root/src/gnsrecord/test_gnsrecord_testvectors.c
blob: 2b05c1b5d3415bb3cc55ebde5d1509a909f8306f (plain) (blame)
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
#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_gns_service.h"
#include "gnunet_gnsrecord_lib.h"
#include <inttypes.h>

struct GnsTv
{
  char *d;
  char *zid;
  int rrcount;
  char *label;
  char *q;
  char *rdata;
  char *bdata;
  char *rrblock;
};

#define TVCOUNT 1

struct GnsTv tvs[] = {
  { .d = "5af7020ee19160328832352bbc6a68a8d71a7cbe1b929969a7c66d415a0d8f65\0",
    .zid =
      "000100143cf4b924032022f0dc50581453b85d93b047b63d446c5845cb48445ddb96688f\0",
    .rrcount = 1,
    .label = "7465737464656c65676174696f6e\0",
    .q =
      "ed76cefdb6a9d73a9e1f10d96717eba3fc89ebe1b37584f6b077c2912e2fc5f312cf74e1b4d4dfca5abaec736d72666f0faa2945217f3b1436aa4e27c14c9732\0",
    .rdata =
      "0008c06fb9281580002000010001000021e3b30ff93bc6d35ac8c6e0e13afdff794cb7b44bbbc748d259d0a0284dbe84\0",
    .bdata =
      "9cc455a1293319435993cb3d67179ec06ea8d8894e904a0c35e91c5c2ff2ed939cc2f8301231f44e592a4ac87e4998b94625c64af51686a2b36a2b2892d44f2d\0",
    .rrblock =
      "000000b0000100149bf233198c6d53bbdbac495cabd91049a684af3f4051bacab0dcf21c8cf27a1a44d240d07902f490b7c43ef00758abce8851c18c70ac6df97a88f79211cf875f784885ca3e349ec4ca892b9ff084c5358965b8e74a2315952d4c8c06521c2f0c0008c06fb92815809cc455a1293319435993cb3d67179ec06ea8d8894e904a0c35e91c5c2ff2ed939cc2f8301231f44e592a4ac87e4998b94625c64af51686a2b36a2b2892d44f2d\0"}
};

int
parsehex (char *src, char *dst, size_t dstlen, int invert)
{
  char *line = src;
  char *data = line;
  int off;
  int read_byte;
  int data_len = 0;

  while (sscanf (data, " %02x%n", &read_byte, &off) == 1)
  {
    if (invert)
      dst[dstlen - 1 - data_len++] = read_byte;
    else
      dst[data_len++] = read_byte;
    data += off;
  }
  return data_len;
}


void
res_checker (void *cls,
             unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
{
  struct GnsTv *tv = cls;
  GNUNET_assert (rd_count == tv->rrcount);
  printf ("RRCOUNT good: %d\n", rd_count);
}


int
main ()
{
  struct GNUNET_IDENTITY_PrivateKey priv;
  struct GNUNET_IDENTITY_PublicKey pub;
  struct GNUNET_IDENTITY_PublicKey pub_parsed;
  struct GNUNET_GNSRECORD_Block *rrblock;
  char *bdata;
  char label[128];

  for (int i = 0; i < TVCOUNT; i++)
  {
    memset (label, 0, sizeof (label));
    parsehex (tvs[i].d,(char*) &priv.ecdsa_key, sizeof (priv.ecdsa_key), 1);
    priv.type = htonl (GNUNET_GNSRECORD_TYPE_PKEY);
    parsehex (tvs[i].zid,(char*) &pub_parsed, 0, 0);
    priv.type = pub_parsed.type;
    GNUNET_IDENTITY_key_get_public (&priv, &pub);
    // GNUNET_assert (0 == memcmp (&pub, &pub_parsed, sizeof (pub)));
    rrblock = GNUNET_malloc (strlen (tvs[i].rrblock));
    parsehex (tvs[i].rrblock, (char*) rrblock, 0, 0);
    parsehex (tvs[i].label, (char*) label, 0, 0);
    printf ("Got label: %s\n", label);
    GNUNET_GNSRECORD_block_decrypt (rrblock,
                                    &pub_parsed,
                                    label,
                                    &res_checker,
                                    &tvs[i]);
  }
  return 0;
}