GNUnet  0.11.x
Macros | Functions
gnunet-gnsrecord-tvg.c File Reference
#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_signatures.h"
#include "gnunet_gns_service.h"
#include "gnunet_gnsrecord_lib.h"
#include "gnunet_dnsparser_lib.h"
#include "gnunet_testing_lib.h"
#include <inttypes.h>
Include dependency graph for gnunet-gnsrecord-tvg.c:

Go to the source code of this file.

Macros

#define TEST_RECORD_LABEL   "test"
 
#define TEST_RECORD_A   "1.2.3.4"
 
#define TEST_RRCOUNT   2
 

Functions

static void print_bytes (void *buf, size_t buf_len, int fold)
 
static void print_record (const struct GNUNET_GNSRECORD_Data *rd)
 
static void run (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
 Main function that will be run. More...
 
int main (int argc, char *const *argv)
 The main function of the test vector generation tool. More...
 

Macro Definition Documentation

◆ TEST_RECORD_LABEL

#define TEST_RECORD_LABEL   "test"

Definition at line 35 of file gnunet-gnsrecord-tvg.c.

Referenced by run().

◆ TEST_RECORD_A

#define TEST_RECORD_A   "1.2.3.4"

Definition at line 36 of file gnunet-gnsrecord-tvg.c.

Referenced by run().

◆ TEST_RRCOUNT

#define TEST_RRCOUNT   2

Definition at line 37 of file gnunet-gnsrecord-tvg.c.

Referenced by run().

Function Documentation

◆ print_bytes()

static void print_bytes ( void *  buf,
size_t  buf_len,
int  fold 
)
static

Definition at line 40 of file gnunet-gnsrecord-tvg.c.

Referenced by print_record(), and run().

43 {
44  int i;
45 
46  for (i = 0; i < buf_len; i++)
47  {
48  if ((0 != i) && (0 != fold) && (i % fold == 0))
49  printf ("\n");
50  printf ("%02x", ((unsigned char*) buf)[i]);
51  }
52  printf ("\n");
53 }
static char buf[2048]
Here is the caller graph for this function:

◆ print_record()

static void print_record ( const struct GNUNET_GNSRECORD_Data rd)
static

Definition at line 57 of file gnunet-gnsrecord-tvg.c.

References GNUNET_GNSRECORD_Data::data, GNUNET_GNSRECORD_Data::data_size, GNUNET_GNSRECORD_Data::expiration_time, GNUNET_GNSRECORD_Data::flags, print_bytes(), and GNUNET_GNSRECORD_Data::record_type.

Referenced by run().

58 {
59 
60  fprintf (stdout,
61  "EXPIRATION: %" PRIu64 "\n", rd->expiration_time);
62  fprintf (stdout,
63  "DATA_SIZE: %zu\n", rd->data_size);
64  fprintf (stdout,
65  "TYPE: %d\n", rd->record_type);
66  fprintf (stdout,
67  "FLAGS: %d\n", rd->flags);
68  fprintf (stdout,
69  "DATA:\n");
70  print_bytes ((char*) rd->data, rd->data_size, 8);
71  fprintf (stdout, "\n");
72 }
size_t data_size
Number of bytes in data.
static void print_bytes(void *buf, size_t buf_len, int fold)
const void * data
Binary value stored in the DNS record.
uint64_t expiration_time
Expiration time for the DNS record.
uint32_t record_type
Type of the GNS/DNS record.
enum GNUNET_GNSRECORD_Flags flags
Flags for the record.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ run()

static void run ( void *  cls,
char *const *  args,
const char *  cfgfile,
const struct GNUNET_CONFIGURATION_Handle cfg 
)
static

Main function that will be run.

Parameters
clsclosure
argsremaining command-line arguments
cfgfilename of the configuration file used (for saving, can be NULL!)
cfgconfiguration

Definition at line 84 of file gnunet-gnsrecord-tvg.c.

References GNUNET_TIME_Absolute::abs_value_us, data, GNUNET_GNSRECORD_Data::data, data_size, GNUNET_GNSRECORD_Data::data_size, GNUNET_GNSRECORD_Data::expiration_time, GNUNET_GNSRECORD_Data::flags, GNUNET_assert, GNUNET_CRYPTO_ecdsa_key_create(), GNUNET_CRYPTO_ecdsa_key_get_public(), GNUNET_DNSPARSER_TYPE_A, GNUNET_GNSRECORD_block_create(), GNUNET_GNSRECORD_records_get_size(), GNUNET_GNSRECORD_records_serialize(), GNUNET_GNSRECORD_RF_PRIVATE, GNUNET_GNSRECORD_string_to_value(), GNUNET_GNSRECORD_TYPE_PKEY, GNUNET_malloc, GNUNET_OK, GNUNET_TIME_absolute_get(), print_bytes(), print_record(), GNUNET_GNSRECORD_Block::purpose, GNUNET_GNSRECORD_Data::record_type, GNUNET_CRYPTO_EccSignaturePurpose::size, TEST_RECORD_A, TEST_RECORD_LABEL, and TEST_RRCOUNT.

Referenced by main().

88 {
89  struct GNUNET_GNSRECORD_Data rd[2];
91  struct GNUNET_GNSRECORD_Block *rrblock;
92  char *bdata;
93  struct GNUNET_CRYPTO_EcdsaPrivateKey id_priv;
94  struct GNUNET_CRYPTO_EcdsaPublicKey id_pub;
95  struct GNUNET_CRYPTO_EcdsaPrivateKey pkey_data_p;
96  struct GNUNET_CRYPTO_EcdsaPublicKey pkey_data;
97  void *data;
98  size_t data_size;
99  char *rdata;
100  size_t rdata_size;
101 
104  &id_pub);
105  fprintf (stdout, "Zone private key (d, little-endian scalar):\n");
106  print_bytes (&id_priv, sizeof(id_priv), 0);
107  fprintf (stdout, "\n");
108  fprintf (stdout, "Zone public key (zk):\n");
109  print_bytes (&id_pub, sizeof(id_pub), 0);
110  fprintf (stdout, "\n");
111 
112  GNUNET_CRYPTO_ecdsa_key_create (&pkey_data_p);
114  &pkey_data);
115  fprintf (stdout,
116  "Label: %s\nRRCOUNT: %d\n\n", TEST_RECORD_LABEL, TEST_RRCOUNT);
117  memset (rd, 0, sizeof (struct GNUNET_GNSRECORD_Data) * 2);
119  GNUNET_DNSPARSER_TYPE_A, TEST_RECORD_A, &data, &data_size));
120  rd[0].data = data;
121  rd[0].data_size = data_size;
122  rd[0].expiration_time = exp_abs.abs_value_us;
123  rd[0].record_type = GNUNET_DNSPARSER_TYPE_A;
124  fprintf (stdout, "Record #0\n");
125  print_record (&rd[0]);
126 
127  rd[1].data = &pkey_data;
128  rd[1].data_size = sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey);
129  rd[1].expiration_time = exp_abs.abs_value_us;
130  rd[1].record_type = GNUNET_GNSRECORD_TYPE_PKEY;
131  rd[1].flags = GNUNET_GNSRECORD_RF_PRIVATE;
132  fprintf (stdout, "Record #1\n");
133  print_record (&rd[1]);
134 
135  rdata_size = GNUNET_GNSRECORD_records_get_size (2,
136  rd);
137  rdata = GNUNET_malloc (rdata_size);
139  rd,
140  rdata_size,
141  rdata);
142  fprintf (stdout, "RDATA:\n");
143  print_bytes (rdata, rdata_size, 8);
144  fprintf (stdout, "\n");
145  rrblock = GNUNET_GNSRECORD_block_create (&id_priv,
146  exp_abs,
148  rd,
149  TEST_RRCOUNT);
150  size_t bdata_size = ntohl (rrblock->purpose.size)
151  - sizeof(struct GNUNET_CRYPTO_EccSignaturePurpose)
152  - sizeof(struct GNUNET_TIME_AbsoluteNBO);
153  size_t rrblock_size = ntohl (rrblock->purpose.size)
154  + sizeof(struct GNUNET_CRYPTO_EcdsaPublicKey)
155  + sizeof(struct GNUNET_CRYPTO_EcdsaSignature);
156 
157  bdata = (char*) &rrblock[1];
158  fprintf (stdout, "BDATA:\n");
159  print_bytes (bdata, bdata_size, 8);
160  fprintf (stdout, "\n");
161  fprintf (stdout, "RRBLOCK:\n");
162  print_bytes (rrblock, rrblock_size, 8);
163  fprintf (stdout, "\n");
164 
165 }
GNUNET_NETWORK_STRUCT_END ssize_t GNUNET_GNSRECORD_records_get_size(unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
Calculate how many bytes we will need to serialize the given records.
struct GNUNET_GNSRECORD_Block * GNUNET_GNSRECORD_block_create(const struct GNUNET_CRYPTO_EcdsaPrivateKey *key, struct GNUNET_TIME_Absolute expire, const char *label, const struct GNUNET_GNSRECORD_Data *rd, unsigned int rd_count)
Sign name and records.
ssize_t GNUNET_GNSRECORD_records_serialize(unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd, size_t dest_size, char *dest)
Serialize the given records to the given destination buffer.
static size_t data_size
Number of bytes in data.
Definition: gnunet-abd.c:187
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
static void print_record(const struct GNUNET_GNSRECORD_Data *rd)
#define TEST_RRCOUNT
Private ECC key encoded for transmission.
Information we have in an encrypted block with record data (i.e.
Time for absolute time used by GNUnet, in microseconds and in network byte order. ...
uint64_t abs_value_us
The actual value.
header of what an ECC signature signs this must be followed by "size - 8" bytes of the actual signed ...
static void print_bytes(void *buf, size_t buf_len, int fold)
#define GNUNET_GNSRECORD_TYPE_PKEY
Record type for GNS zone transfer ("PKEY").
an ECC signature using ECDSA
This is a private record of this peer and it should thus not be handed out to other peers...
uint32_t size
How many bytes does this signature sign? (including this purpose header); in network byte order (!)...
#define TEST_RECORD_LABEL
int GNUNET_GNSRECORD_string_to_value(uint32_t type, const char *s, void **data, size_t *data_size)
Convert human-readable version of a &#39;value&#39; of a record to the binary representation.
Definition: gnsrecord.c:175
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get(void)
Get the current time.
Definition: time.c:118
#define TEST_RECORD_A
void GNUNET_CRYPTO_ecdsa_key_get_public(const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv, struct GNUNET_CRYPTO_EcdsaPublicKey *pub)
Extract the public key for the given private key.
Definition: crypto_ecc.c:176
void GNUNET_CRYPTO_ecdsa_key_create(struct GNUNET_CRYPTO_EcdsaPrivateKey *pk)
Create a new private key.
Definition: crypto_ecc.c:524
Public ECC key (always for Curve25519) encoded in a format suitable for network transmission and ECDS...
Time for absolute times used by GNUnet, in microseconds.
uint32_t data
The data value.
struct GNUNET_CRYPTO_EccSignaturePurpose purpose
Number of bytes signed; also specifies the number of bytes of encrypted data that follow...
#define GNUNET_DNSPARSER_TYPE_A
#define GNUNET_malloc(size)
Wrapper around malloc.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ main()

int main ( int  argc,
char *const *  argv 
)

The main function of the test vector generation tool.

Parameters
argcnumber of arguments from the command line
argvcommand line arguments
Returns
0 ok, 1 on error

Definition at line 176 of file gnunet-gnsrecord-tvg.c.

References GNUNET_assert, GNUNET_GETOPT_OPTION_END, GNUNET_log_setup(), GNUNET_OK, GNUNET_PROGRAM_run(), and run().

178 {
179  const struct GNUNET_GETOPT_CommandLineOption options[] = {
181  };
182 
184  GNUNET_log_setup ("gnunet-gns-tvg",
185  "INFO",
186  NULL));
187  if (GNUNET_OK !=
188  GNUNET_PROGRAM_run (argc, argv,
189  "gnunet-gns-tvg",
190  "Generate test vectors for GNS",
191  options,
192  &run, NULL))
193  return 1;
194  return 0;
195 }
struct GNUNET_GETOPT_CommandLineOption options[]
Definition: 002.c:5
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
Definition of a command line option.
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_OPTION_END
Definition: 002.c:13
static void run(void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
Main function that will be run.
int GNUNET_PROGRAM_run(int argc, char *const *argv, const char *binaryName, const char *binaryHelp, const struct GNUNET_GETOPT_CommandLineOption *options, GNUNET_PROGRAM_Main task, void *task_cls)
Run a standard GNUnet command startup sequence (initialize loggers and configuration, parse options).
Definition: program.c:367
int GNUNET_log_setup(const char *comp, const char *loglevel, const char *logfile)
Setup logging.
Here is the call graph for this function: