aboutsummaryrefslogtreecommitdiff
path: root/src/include/block_regex.h
blob: be9d305ad481b3b68dc915444f57ca6ca896eff4 (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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
     This file is part of GNUnet.
     (C) 2012,2013 Christian Grothoff (and other contributing authors)

     GNUnet is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 3, or (at your
     option) any later version.

     GNUnet is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with GNUnet; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file include/block_regex.h
 * @brief regex block formats
 * @author Bartlomiej Polot
 */
#ifndef BLOCK_REGEX_H
#define BLOCK_REGEX_H

#ifdef __cplusplus
extern "C"
{
#if 0
  /* keep Emacsens' auto-indent happy */
}
#endif
#endif

#include "gnunet_util_lib.h"
#include <stdint.h>


GNUNET_NETWORK_STRUCT_BEGIN


/**
 * @brief A RegexBlock contains one or more of this struct in the payload.
 */
struct RegexEdge
{
  /**
   * Destination of this edge.
   */
  struct GNUNET_HashCode key;
  
  /**
   * Length of the token towards the new state.
   */
  uint32_t n_token GNUNET_PACKED;

  /* char token[n_token] */
};


/**
 * @brief Block to announce a regex state.
 */
struct RegexBlock
{

  /**
   * Length of the proof regex string.
   */
  uint16_t proof_len GNUNET_PACKED;

  /**
   * Is this state an accepting state?
   */
  int16_t is_accepting GNUNET_PACKED;

  /**
   * Numer of edges parting from this state.
   */
  uint32_t n_edges GNUNET_PACKED;

  /* char proof[n_proof] */
  /* struct RegexEdge edges[n_edges] */
};


/**
 * @brief Block to announce a peer accepting a state.
 */
struct RegexAcceptBlock
{

  /**
   * Accept blocks must be signed.  Signature
   * goes over expiration time and key.
   */
  struct GNUNET_CRYPTO_EccSignaturePurpose purpose;

  /**
   * When does the signature expire?
   */
  struct GNUNET_TIME_AbsoluteNBO expiration_time;

  /**
   * The key of the state.
   */
  struct GNUNET_HashCode key;
  
  /**
   * Public key of the peer signing.
   */
  struct GNUNET_CRYPTO_EccPublicKeyBinaryEncoded public_key;

  /**
   * The signature.
   */
  struct GNUNET_CRYPTO_EccSignature signature;
};


GNUNET_NETWORK_STRUCT_END


#if 0                           /* keep Emacsens' auto-indent happy */
{
#endif
#ifdef __cplusplus
}
#endif

#endif