tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

ed25519_cert.h (44113B)


      1 /* ed25519_cert.h -- generated by Trunnel v1.5.3.
      2 * https://gitweb.torproject.org/trunnel.git
      3 * You probably shouldn't edit this file.
      4 */
      5 #ifndef TRUNNEL_ED25519_CERT_H
      6 #define TRUNNEL_ED25519_CERT_H
      7 
      8 #include <stdint.h>
      9 #include "trunnel.h"
     10 
     11 #define CERTEXT_SIGNED_WITH_KEY 4
     12 #define CERTEXT_FLAG_AFFECTS_VALIDATION 1
     13 #define LS_IPV4 0
     14 #define LS_IPV6 1
     15 #define LS_LEGACY_ID 2
     16 #define LS_ED25519_ID 3
     17 #if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_CREATE2_CELL_BODY)
     18 struct create2_cell_body_st {
     19  uint16_t handshake_type;
     20  uint16_t handshake_len;
     21  TRUNNEL_DYNARRAY_HEAD(, uint8_t) handshake_data;
     22  uint8_t trunnel_error_code_;
     23 };
     24 #endif
     25 typedef struct create2_cell_body_st create2_cell_body_t;
     26 #if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_ED25519_CERT_EXTENSION)
     27 struct ed25519_cert_extension_st {
     28  uint16_t ext_length;
     29  uint8_t ext_type;
     30  uint8_t ext_flags;
     31  uint8_t un_signing_key[32];
     32  TRUNNEL_DYNARRAY_HEAD(, uint8_t) un_unparsed;
     33  uint8_t trunnel_error_code_;
     34 };
     35 #endif
     36 typedef struct ed25519_cert_extension_st ed25519_cert_extension_t;
     37 #if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_EXTEND1_CELL_BODY)
     38 struct extend1_cell_body_st {
     39  uint32_t ipv4addr;
     40  uint16_t port;
     41  uint8_t onionskin[186];
     42  uint8_t identity[20];
     43  uint8_t trunnel_error_code_;
     44 };
     45 #endif
     46 typedef struct extend1_cell_body_st extend1_cell_body_t;
     47 #if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_LINK_SPECIFIER)
     48 struct link_specifier_st {
     49  uint8_t ls_type;
     50  uint8_t ls_len;
     51  uint32_t un_ipv4_addr;
     52  uint16_t un_ipv4_port;
     53  uint8_t un_ipv6_addr[16];
     54  uint16_t un_ipv6_port;
     55  uint8_t un_legacy_id[20];
     56  uint8_t un_ed25519_id[32];
     57  TRUNNEL_DYNARRAY_HEAD(, uint8_t) un_unrecognized;
     58  uint8_t trunnel_error_code_;
     59 };
     60 #endif
     61 typedef struct link_specifier_st link_specifier_t;
     62 #if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_ED25519_CERT)
     63 struct ed25519_cert_st {
     64  uint8_t version;
     65  uint8_t cert_type;
     66  uint32_t exp_field;
     67  uint8_t cert_key_type;
     68  uint8_t certified_key[32];
     69  uint8_t n_extensions;
     70  TRUNNEL_DYNARRAY_HEAD(, struct ed25519_cert_extension_st *) ext;
     71  uint8_t signature[64];
     72  uint8_t trunnel_error_code_;
     73 };
     74 #endif
     75 typedef struct ed25519_cert_st ed25519_cert_t;
     76 #if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_EXTEND2_CELL_BODY)
     77 struct extend2_cell_body_st {
     78  uint8_t n_spec;
     79  TRUNNEL_DYNARRAY_HEAD(, struct link_specifier_st *) ls;
     80  struct create2_cell_body_st *create2;
     81  uint8_t trunnel_error_code_;
     82 };
     83 #endif
     84 typedef struct extend2_cell_body_st extend2_cell_body_t;
     85 #if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_LINK_SPECIFIER_LIST)
     86 struct link_specifier_list_st {
     87  uint8_t n_spec;
     88  TRUNNEL_DYNARRAY_HEAD(, struct link_specifier_st *) spec;
     89  uint8_t trunnel_error_code_;
     90 };
     91 #endif
     92 typedef struct link_specifier_list_st link_specifier_list_t;
     93 /** Return a newly allocated create2_cell_body with all elements set
     94 * to zero.
     95 */
     96 create2_cell_body_t *create2_cell_body_new(void);
     97 /** Release all storage held by the create2_cell_body in 'victim'. (Do
     98 * nothing if 'victim' is NULL.)
     99 */
    100 void create2_cell_body_free(create2_cell_body_t *victim);
    101 /** Try to parse a create2_cell_body from the buffer in 'input', using
    102 * up to 'len_in' bytes from the input buffer. On success, return the
    103 * number of bytes consumed and set *output to the newly allocated
    104 * create2_cell_body_t. On failure, return -2 if the input appears
    105 * truncated, and -1 if the input is otherwise invalid.
    106 */
    107 ssize_t create2_cell_body_parse(create2_cell_body_t **output, const uint8_t *input, const size_t len_in);
    108 /** Return the number of bytes we expect to need to encode the
    109 * create2_cell_body in 'obj'. On failure, return a negative value.
    110 * Note that this value may be an overestimate, and can even be an
    111 * underestimate for certain unencodeable objects.
    112 */
    113 ssize_t create2_cell_body_encoded_len(const create2_cell_body_t *obj);
    114 /** Try to encode the create2_cell_body from 'input' into the buffer
    115 * at 'output', using up to 'avail' bytes of the output buffer. On
    116 * success, return the number of bytes used. On failure, return -2 if
    117 * the buffer was not long enough, and -1 if the input was invalid.
    118 */
    119 ssize_t create2_cell_body_encode(uint8_t *output, size_t avail, const create2_cell_body_t *input);
    120 /** Check whether the internal state of the create2_cell_body in 'obj'
    121 * is consistent. Return NULL if it is, and a short message if it is
    122 * not.
    123 */
    124 const char *create2_cell_body_check(const create2_cell_body_t *obj);
    125 /** Clear any errors that were set on the object 'obj' by its setter
    126 * functions. Return true iff errors were cleared.
    127 */
    128 int create2_cell_body_clear_errors(create2_cell_body_t *obj);
    129 /** Return the value of the handshake_type field of the
    130 * create2_cell_body_t in 'inp'
    131 */
    132 uint16_t create2_cell_body_get_handshake_type(const create2_cell_body_t *inp);
    133 /** Set the value of the handshake_type field of the
    134 * create2_cell_body_t in 'inp' to 'val'. Return 0 on success; return
    135 * -1 and set the error code on 'inp' on failure.
    136 */
    137 int create2_cell_body_set_handshake_type(create2_cell_body_t *inp, uint16_t val);
    138 /** Return the value of the handshake_len field of the
    139 * create2_cell_body_t in 'inp'
    140 */
    141 uint16_t create2_cell_body_get_handshake_len(const create2_cell_body_t *inp);
    142 /** Set the value of the handshake_len field of the
    143 * create2_cell_body_t in 'inp' to 'val'. Return 0 on success; return
    144 * -1 and set the error code on 'inp' on failure.
    145 */
    146 int create2_cell_body_set_handshake_len(create2_cell_body_t *inp, uint16_t val);
    147 /** Return the length of the dynamic array holding the handshake_data
    148 * field of the create2_cell_body_t in 'inp'.
    149 */
    150 size_t create2_cell_body_getlen_handshake_data(const create2_cell_body_t *inp);
    151 /** Return the element at position 'idx' of the dynamic array field
    152 * handshake_data of the create2_cell_body_t in 'inp'.
    153 */
    154 uint8_t create2_cell_body_get_handshake_data(create2_cell_body_t *inp, size_t idx);
    155 /** As create2_cell_body_get_handshake_data, but take and return a
    156 * const pointer
    157 */
    158 uint8_t create2_cell_body_getconst_handshake_data(const create2_cell_body_t *inp, size_t idx);
    159 /** Change the element at position 'idx' of the dynamic array field
    160 * handshake_data of the create2_cell_body_t in 'inp', so that it will
    161 * hold the value 'elt'.
    162 */
    163 int create2_cell_body_set_handshake_data(create2_cell_body_t *inp, size_t idx, uint8_t elt);
    164 /** Append a new element 'elt' to the dynamic array field
    165 * handshake_data of the create2_cell_body_t in 'inp'.
    166 */
    167 int create2_cell_body_add_handshake_data(create2_cell_body_t *inp, uint8_t elt);
    168 /** Return a pointer to the variable-length array field handshake_data
    169 * of 'inp'.
    170 */
    171 uint8_t * create2_cell_body_getarray_handshake_data(create2_cell_body_t *inp);
    172 /** As create2_cell_body_get_handshake_data, but take and return a
    173 * const pointer
    174 */
    175 const uint8_t  * create2_cell_body_getconstarray_handshake_data(const create2_cell_body_t *inp);
    176 /** Change the length of the variable-length array field
    177 * handshake_data of 'inp' to 'newlen'.Fill extra elements with 0.
    178 * Return 0 on success; return -1 and set the error code on 'inp' on
    179 * failure.
    180 */
    181 int create2_cell_body_setlen_handshake_data(create2_cell_body_t *inp, size_t newlen);
    182 /** Return a newly allocated ed25519_cert_extension with all elements
    183 * set to zero.
    184 */
    185 ed25519_cert_extension_t *ed25519_cert_extension_new(void);
    186 /** Release all storage held by the ed25519_cert_extension in
    187 * 'victim'. (Do nothing if 'victim' is NULL.)
    188 */
    189 void ed25519_cert_extension_free(ed25519_cert_extension_t *victim);
    190 /** Try to parse a ed25519_cert_extension from the buffer in 'input',
    191 * using up to 'len_in' bytes from the input buffer. On success,
    192 * return the number of bytes consumed and set *output to the newly
    193 * allocated ed25519_cert_extension_t. On failure, return -2 if the
    194 * input appears truncated, and -1 if the input is otherwise invalid.
    195 */
    196 ssize_t ed25519_cert_extension_parse(ed25519_cert_extension_t **output, const uint8_t *input, const size_t len_in);
    197 /** Return the number of bytes we expect to need to encode the
    198 * ed25519_cert_extension in 'obj'. On failure, return a negative
    199 * value. Note that this value may be an overestimate, and can even be
    200 * an underestimate for certain unencodeable objects.
    201 */
    202 ssize_t ed25519_cert_extension_encoded_len(const ed25519_cert_extension_t *obj);
    203 /** Try to encode the ed25519_cert_extension from 'input' into the
    204 * buffer at 'output', using up to 'avail' bytes of the output buffer.
    205 * On success, return the number of bytes used. On failure, return -2
    206 * if the buffer was not long enough, and -1 if the input was invalid.
    207 */
    208 ssize_t ed25519_cert_extension_encode(uint8_t *output, size_t avail, const ed25519_cert_extension_t *input);
    209 /** Check whether the internal state of the ed25519_cert_extension in
    210 * 'obj' is consistent. Return NULL if it is, and a short message if
    211 * it is not.
    212 */
    213 const char *ed25519_cert_extension_check(const ed25519_cert_extension_t *obj);
    214 /** Clear any errors that were set on the object 'obj' by its setter
    215 * functions. Return true iff errors were cleared.
    216 */
    217 int ed25519_cert_extension_clear_errors(ed25519_cert_extension_t *obj);
    218 /** Return the value of the ext_length field of the
    219 * ed25519_cert_extension_t in 'inp'
    220 */
    221 uint16_t ed25519_cert_extension_get_ext_length(const ed25519_cert_extension_t *inp);
    222 /** Set the value of the ext_length field of the
    223 * ed25519_cert_extension_t in 'inp' to 'val'. Return 0 on success;
    224 * return -1 and set the error code on 'inp' on failure.
    225 */
    226 int ed25519_cert_extension_set_ext_length(ed25519_cert_extension_t *inp, uint16_t val);
    227 /** Return the value of the ext_type field of the
    228 * ed25519_cert_extension_t in 'inp'
    229 */
    230 uint8_t ed25519_cert_extension_get_ext_type(const ed25519_cert_extension_t *inp);
    231 /** Set the value of the ext_type field of the
    232 * ed25519_cert_extension_t in 'inp' to 'val'. Return 0 on success;
    233 * return -1 and set the error code on 'inp' on failure.
    234 */
    235 int ed25519_cert_extension_set_ext_type(ed25519_cert_extension_t *inp, uint8_t val);
    236 /** Return the value of the ext_flags field of the
    237 * ed25519_cert_extension_t in 'inp'
    238 */
    239 uint8_t ed25519_cert_extension_get_ext_flags(const ed25519_cert_extension_t *inp);
    240 /** Set the value of the ext_flags field of the
    241 * ed25519_cert_extension_t in 'inp' to 'val'. Return 0 on success;
    242 * return -1 and set the error code on 'inp' on failure.
    243 */
    244 int ed25519_cert_extension_set_ext_flags(ed25519_cert_extension_t *inp, uint8_t val);
    245 /** Return the (constant) length of the array holding the
    246 * un_signing_key field of the ed25519_cert_extension_t in 'inp'.
    247 */
    248 size_t ed25519_cert_extension_getlen_un_signing_key(const ed25519_cert_extension_t *inp);
    249 /** Return the element at position 'idx' of the fixed array field
    250 * un_signing_key of the ed25519_cert_extension_t in 'inp'.
    251 */
    252 uint8_t ed25519_cert_extension_get_un_signing_key(ed25519_cert_extension_t *inp, size_t idx);
    253 /** As ed25519_cert_extension_get_un_signing_key, but take and return
    254 * a const pointer
    255 */
    256 uint8_t ed25519_cert_extension_getconst_un_signing_key(const ed25519_cert_extension_t *inp, size_t idx);
    257 /** Change the element at position 'idx' of the fixed array field
    258 * un_signing_key of the ed25519_cert_extension_t in 'inp', so that it
    259 * will hold the value 'elt'.
    260 */
    261 int ed25519_cert_extension_set_un_signing_key(ed25519_cert_extension_t *inp, size_t idx, uint8_t elt);
    262 /** Return a pointer to the 32-element array field un_signing_key of
    263 * 'inp'.
    264 */
    265 uint8_t * ed25519_cert_extension_getarray_un_signing_key(ed25519_cert_extension_t *inp);
    266 /** As ed25519_cert_extension_get_un_signing_key, but take and return
    267 * a const pointer
    268 */
    269 const uint8_t  * ed25519_cert_extension_getconstarray_un_signing_key(const ed25519_cert_extension_t *inp);
    270 /** Return the length of the dynamic array holding the un_unparsed
    271 * field of the ed25519_cert_extension_t in 'inp'.
    272 */
    273 size_t ed25519_cert_extension_getlen_un_unparsed(const ed25519_cert_extension_t *inp);
    274 /** Return the element at position 'idx' of the dynamic array field
    275 * un_unparsed of the ed25519_cert_extension_t in 'inp'.
    276 */
    277 uint8_t ed25519_cert_extension_get_un_unparsed(ed25519_cert_extension_t *inp, size_t idx);
    278 /** As ed25519_cert_extension_get_un_unparsed, but take and return a
    279 * const pointer
    280 */
    281 uint8_t ed25519_cert_extension_getconst_un_unparsed(const ed25519_cert_extension_t *inp, size_t idx);
    282 /** Change the element at position 'idx' of the dynamic array field
    283 * un_unparsed of the ed25519_cert_extension_t in 'inp', so that it
    284 * will hold the value 'elt'.
    285 */
    286 int ed25519_cert_extension_set_un_unparsed(ed25519_cert_extension_t *inp, size_t idx, uint8_t elt);
    287 /** Append a new element 'elt' to the dynamic array field un_unparsed
    288 * of the ed25519_cert_extension_t in 'inp'.
    289 */
    290 int ed25519_cert_extension_add_un_unparsed(ed25519_cert_extension_t *inp, uint8_t elt);
    291 /** Return a pointer to the variable-length array field un_unparsed of
    292 * 'inp'.
    293 */
    294 uint8_t * ed25519_cert_extension_getarray_un_unparsed(ed25519_cert_extension_t *inp);
    295 /** As ed25519_cert_extension_get_un_unparsed, but take and return a
    296 * const pointer
    297 */
    298 const uint8_t  * ed25519_cert_extension_getconstarray_un_unparsed(const ed25519_cert_extension_t *inp);
    299 /** Change the length of the variable-length array field un_unparsed
    300 * of 'inp' to 'newlen'.Fill extra elements with 0. Return 0 on
    301 * success; return -1 and set the error code on 'inp' on failure.
    302 */
    303 int ed25519_cert_extension_setlen_un_unparsed(ed25519_cert_extension_t *inp, size_t newlen);
    304 /** Return a newly allocated extend1_cell_body with all elements set
    305 * to zero.
    306 */
    307 extend1_cell_body_t *extend1_cell_body_new(void);
    308 /** Release all storage held by the extend1_cell_body in 'victim'. (Do
    309 * nothing if 'victim' is NULL.)
    310 */
    311 void extend1_cell_body_free(extend1_cell_body_t *victim);
    312 /** Try to parse a extend1_cell_body from the buffer in 'input', using
    313 * up to 'len_in' bytes from the input buffer. On success, return the
    314 * number of bytes consumed and set *output to the newly allocated
    315 * extend1_cell_body_t. On failure, return -2 if the input appears
    316 * truncated, and -1 if the input is otherwise invalid.
    317 */
    318 ssize_t extend1_cell_body_parse(extend1_cell_body_t **output, const uint8_t *input, const size_t len_in);
    319 /** Return the number of bytes we expect to need to encode the
    320 * extend1_cell_body in 'obj'. On failure, return a negative value.
    321 * Note that this value may be an overestimate, and can even be an
    322 * underestimate for certain unencodeable objects.
    323 */
    324 ssize_t extend1_cell_body_encoded_len(const extend1_cell_body_t *obj);
    325 /** Try to encode the extend1_cell_body from 'input' into the buffer
    326 * at 'output', using up to 'avail' bytes of the output buffer. On
    327 * success, return the number of bytes used. On failure, return -2 if
    328 * the buffer was not long enough, and -1 if the input was invalid.
    329 */
    330 ssize_t extend1_cell_body_encode(uint8_t *output, size_t avail, const extend1_cell_body_t *input);
    331 /** Check whether the internal state of the extend1_cell_body in 'obj'
    332 * is consistent. Return NULL if it is, and a short message if it is
    333 * not.
    334 */
    335 const char *extend1_cell_body_check(const extend1_cell_body_t *obj);
    336 /** Clear any errors that were set on the object 'obj' by its setter
    337 * functions. Return true iff errors were cleared.
    338 */
    339 int extend1_cell_body_clear_errors(extend1_cell_body_t *obj);
    340 /** Return the value of the ipv4addr field of the extend1_cell_body_t
    341 * in 'inp'
    342 */
    343 uint32_t extend1_cell_body_get_ipv4addr(const extend1_cell_body_t *inp);
    344 /** Set the value of the ipv4addr field of the extend1_cell_body_t in
    345 * 'inp' to 'val'. Return 0 on success; return -1 and set the error
    346 * code on 'inp' on failure.
    347 */
    348 int extend1_cell_body_set_ipv4addr(extend1_cell_body_t *inp, uint32_t val);
    349 /** Return the value of the port field of the extend1_cell_body_t in
    350 * 'inp'
    351 */
    352 uint16_t extend1_cell_body_get_port(const extend1_cell_body_t *inp);
    353 /** Set the value of the port field of the extend1_cell_body_t in
    354 * 'inp' to 'val'. Return 0 on success; return -1 and set the error
    355 * code on 'inp' on failure.
    356 */
    357 int extend1_cell_body_set_port(extend1_cell_body_t *inp, uint16_t val);
    358 /** Return the (constant) length of the array holding the onionskin
    359 * field of the extend1_cell_body_t in 'inp'.
    360 */
    361 size_t extend1_cell_body_getlen_onionskin(const extend1_cell_body_t *inp);
    362 /** Return the element at position 'idx' of the fixed array field
    363 * onionskin of the extend1_cell_body_t in 'inp'.
    364 */
    365 uint8_t extend1_cell_body_get_onionskin(extend1_cell_body_t *inp, size_t idx);
    366 /** As extend1_cell_body_get_onionskin, but take and return a const
    367 * pointer
    368 */
    369 uint8_t extend1_cell_body_getconst_onionskin(const extend1_cell_body_t *inp, size_t idx);
    370 /** Change the element at position 'idx' of the fixed array field
    371 * onionskin of the extend1_cell_body_t in 'inp', so that it will hold
    372 * the value 'elt'.
    373 */
    374 int extend1_cell_body_set_onionskin(extend1_cell_body_t *inp, size_t idx, uint8_t elt);
    375 /** Return a pointer to the 186-element array field onionskin of
    376 * 'inp'.
    377 */
    378 uint8_t * extend1_cell_body_getarray_onionskin(extend1_cell_body_t *inp);
    379 /** As extend1_cell_body_get_onionskin, but take and return a const
    380 * pointer
    381 */
    382 const uint8_t  * extend1_cell_body_getconstarray_onionskin(const extend1_cell_body_t *inp);
    383 /** Return the (constant) length of the array holding the identity
    384 * field of the extend1_cell_body_t in 'inp'.
    385 */
    386 size_t extend1_cell_body_getlen_identity(const extend1_cell_body_t *inp);
    387 /** Return the element at position 'idx' of the fixed array field
    388 * identity of the extend1_cell_body_t in 'inp'.
    389 */
    390 uint8_t extend1_cell_body_get_identity(extend1_cell_body_t *inp, size_t idx);
    391 /** As extend1_cell_body_get_identity, but take and return a const
    392 * pointer
    393 */
    394 uint8_t extend1_cell_body_getconst_identity(const extend1_cell_body_t *inp, size_t idx);
    395 /** Change the element at position 'idx' of the fixed array field
    396 * identity of the extend1_cell_body_t in 'inp', so that it will hold
    397 * the value 'elt'.
    398 */
    399 int extend1_cell_body_set_identity(extend1_cell_body_t *inp, size_t idx, uint8_t elt);
    400 /** Return a pointer to the 20-element array field identity of 'inp'.
    401 */
    402 uint8_t * extend1_cell_body_getarray_identity(extend1_cell_body_t *inp);
    403 /** As extend1_cell_body_get_identity, but take and return a const
    404 * pointer
    405 */
    406 const uint8_t  * extend1_cell_body_getconstarray_identity(const extend1_cell_body_t *inp);
    407 /** Return a newly allocated link_specifier with all elements set to
    408 * zero.
    409 */
    410 link_specifier_t *link_specifier_new(void);
    411 /** Release all storage held by the link_specifier in 'victim'. (Do
    412 * nothing if 'victim' is NULL.)
    413 */
    414 void link_specifier_free(link_specifier_t *victim);
    415 /** Try to parse a link_specifier from the buffer in 'input', using up
    416 * to 'len_in' bytes from the input buffer. On success, return the
    417 * number of bytes consumed and set *output to the newly allocated
    418 * link_specifier_t. On failure, return -2 if the input appears
    419 * truncated, and -1 if the input is otherwise invalid.
    420 */
    421 ssize_t link_specifier_parse(link_specifier_t **output, const uint8_t *input, const size_t len_in);
    422 /** Return the number of bytes we expect to need to encode the
    423 * link_specifier in 'obj'. On failure, return a negative value. Note
    424 * that this value may be an overestimate, and can even be an
    425 * underestimate for certain unencodeable objects.
    426 */
    427 ssize_t link_specifier_encoded_len(const link_specifier_t *obj);
    428 /** Try to encode the link_specifier from 'input' into the buffer at
    429 * 'output', using up to 'avail' bytes of the output buffer. On
    430 * success, return the number of bytes used. On failure, return -2 if
    431 * the buffer was not long enough, and -1 if the input was invalid.
    432 */
    433 ssize_t link_specifier_encode(uint8_t *output, size_t avail, const link_specifier_t *input);
    434 /** Check whether the internal state of the link_specifier in 'obj' is
    435 * consistent. Return NULL if it is, and a short message if it is not.
    436 */
    437 const char *link_specifier_check(const link_specifier_t *obj);
    438 /** Clear any errors that were set on the object 'obj' by its setter
    439 * functions. Return true iff errors were cleared.
    440 */
    441 int link_specifier_clear_errors(link_specifier_t *obj);
    442 /** Return the value of the ls_type field of the link_specifier_t in
    443 * 'inp'
    444 */
    445 uint8_t link_specifier_get_ls_type(const link_specifier_t *inp);
    446 /** Set the value of the ls_type field of the link_specifier_t in
    447 * 'inp' to 'val'. Return 0 on success; return -1 and set the error
    448 * code on 'inp' on failure.
    449 */
    450 int link_specifier_set_ls_type(link_specifier_t *inp, uint8_t val);
    451 /** Return the value of the ls_len field of the link_specifier_t in
    452 * 'inp'
    453 */
    454 uint8_t link_specifier_get_ls_len(const link_specifier_t *inp);
    455 /** Set the value of the ls_len field of the link_specifier_t in 'inp'
    456 * to 'val'. Return 0 on success; return -1 and set the error code on
    457 * 'inp' on failure.
    458 */
    459 int link_specifier_set_ls_len(link_specifier_t *inp, uint8_t val);
    460 /** Return the value of the un_ipv4_addr field of the link_specifier_t
    461 * in 'inp'
    462 */
    463 uint32_t link_specifier_get_un_ipv4_addr(const link_specifier_t *inp);
    464 /** Set the value of the un_ipv4_addr field of the link_specifier_t in
    465 * 'inp' to 'val'. Return 0 on success; return -1 and set the error
    466 * code on 'inp' on failure.
    467 */
    468 int link_specifier_set_un_ipv4_addr(link_specifier_t *inp, uint32_t val);
    469 /** Return the value of the un_ipv4_port field of the link_specifier_t
    470 * in 'inp'
    471 */
    472 uint16_t link_specifier_get_un_ipv4_port(const link_specifier_t *inp);
    473 /** Set the value of the un_ipv4_port field of the link_specifier_t in
    474 * 'inp' to 'val'. Return 0 on success; return -1 and set the error
    475 * code on 'inp' on failure.
    476 */
    477 int link_specifier_set_un_ipv4_port(link_specifier_t *inp, uint16_t val);
    478 /** Return the (constant) length of the array holding the un_ipv6_addr
    479 * field of the link_specifier_t in 'inp'.
    480 */
    481 size_t link_specifier_getlen_un_ipv6_addr(const link_specifier_t *inp);
    482 /** Return the element at position 'idx' of the fixed array field
    483 * un_ipv6_addr of the link_specifier_t in 'inp'.
    484 */
    485 uint8_t link_specifier_get_un_ipv6_addr(link_specifier_t *inp, size_t idx);
    486 /** As link_specifier_get_un_ipv6_addr, but take and return a const
    487 * pointer
    488 */
    489 uint8_t link_specifier_getconst_un_ipv6_addr(const link_specifier_t *inp, size_t idx);
    490 /** Change the element at position 'idx' of the fixed array field
    491 * un_ipv6_addr of the link_specifier_t in 'inp', so that it will hold
    492 * the value 'elt'.
    493 */
    494 int link_specifier_set_un_ipv6_addr(link_specifier_t *inp, size_t idx, uint8_t elt);
    495 /** Return a pointer to the 16-element array field un_ipv6_addr of
    496 * 'inp'.
    497 */
    498 uint8_t * link_specifier_getarray_un_ipv6_addr(link_specifier_t *inp);
    499 /** As link_specifier_get_un_ipv6_addr, but take and return a const
    500 * pointer
    501 */
    502 const uint8_t  * link_specifier_getconstarray_un_ipv6_addr(const link_specifier_t *inp);
    503 /** Return the value of the un_ipv6_port field of the link_specifier_t
    504 * in 'inp'
    505 */
    506 uint16_t link_specifier_get_un_ipv6_port(const link_specifier_t *inp);
    507 /** Set the value of the un_ipv6_port field of the link_specifier_t in
    508 * 'inp' to 'val'. Return 0 on success; return -1 and set the error
    509 * code on 'inp' on failure.
    510 */
    511 int link_specifier_set_un_ipv6_port(link_specifier_t *inp, uint16_t val);
    512 /** Return the (constant) length of the array holding the un_legacy_id
    513 * field of the link_specifier_t in 'inp'.
    514 */
    515 size_t link_specifier_getlen_un_legacy_id(const link_specifier_t *inp);
    516 /** Return the element at position 'idx' of the fixed array field
    517 * un_legacy_id of the link_specifier_t in 'inp'.
    518 */
    519 uint8_t link_specifier_get_un_legacy_id(link_specifier_t *inp, size_t idx);
    520 /** As link_specifier_get_un_legacy_id, but take and return a const
    521 * pointer
    522 */
    523 uint8_t link_specifier_getconst_un_legacy_id(const link_specifier_t *inp, size_t idx);
    524 /** Change the element at position 'idx' of the fixed array field
    525 * un_legacy_id of the link_specifier_t in 'inp', so that it will hold
    526 * the value 'elt'.
    527 */
    528 int link_specifier_set_un_legacy_id(link_specifier_t *inp, size_t idx, uint8_t elt);
    529 /** Return a pointer to the 20-element array field un_legacy_id of
    530 * 'inp'.
    531 */
    532 uint8_t * link_specifier_getarray_un_legacy_id(link_specifier_t *inp);
    533 /** As link_specifier_get_un_legacy_id, but take and return a const
    534 * pointer
    535 */
    536 const uint8_t  * link_specifier_getconstarray_un_legacy_id(const link_specifier_t *inp);
    537 /** Return the (constant) length of the array holding the
    538 * un_ed25519_id field of the link_specifier_t in 'inp'.
    539 */
    540 size_t link_specifier_getlen_un_ed25519_id(const link_specifier_t *inp);
    541 /** Return the element at position 'idx' of the fixed array field
    542 * un_ed25519_id of the link_specifier_t in 'inp'.
    543 */
    544 uint8_t link_specifier_get_un_ed25519_id(link_specifier_t *inp, size_t idx);
    545 /** As link_specifier_get_un_ed25519_id, but take and return a const
    546 * pointer
    547 */
    548 uint8_t link_specifier_getconst_un_ed25519_id(const link_specifier_t *inp, size_t idx);
    549 /** Change the element at position 'idx' of the fixed array field
    550 * un_ed25519_id of the link_specifier_t in 'inp', so that it will
    551 * hold the value 'elt'.
    552 */
    553 int link_specifier_set_un_ed25519_id(link_specifier_t *inp, size_t idx, uint8_t elt);
    554 /** Return a pointer to the 32-element array field un_ed25519_id of
    555 * 'inp'.
    556 */
    557 uint8_t * link_specifier_getarray_un_ed25519_id(link_specifier_t *inp);
    558 /** As link_specifier_get_un_ed25519_id, but take and return a const
    559 * pointer
    560 */
    561 const uint8_t  * link_specifier_getconstarray_un_ed25519_id(const link_specifier_t *inp);
    562 /** Return the length of the dynamic array holding the un_unrecognized
    563 * field of the link_specifier_t in 'inp'.
    564 */
    565 size_t link_specifier_getlen_un_unrecognized(const link_specifier_t *inp);
    566 /** Return the element at position 'idx' of the dynamic array field
    567 * un_unrecognized of the link_specifier_t in 'inp'.
    568 */
    569 uint8_t link_specifier_get_un_unrecognized(link_specifier_t *inp, size_t idx);
    570 /** As link_specifier_get_un_unrecognized, but take and return a const
    571 * pointer
    572 */
    573 uint8_t link_specifier_getconst_un_unrecognized(const link_specifier_t *inp, size_t idx);
    574 /** Change the element at position 'idx' of the dynamic array field
    575 * un_unrecognized of the link_specifier_t in 'inp', so that it will
    576 * hold the value 'elt'.
    577 */
    578 int link_specifier_set_un_unrecognized(link_specifier_t *inp, size_t idx, uint8_t elt);
    579 /** Append a new element 'elt' to the dynamic array field
    580 * un_unrecognized of the link_specifier_t in 'inp'.
    581 */
    582 int link_specifier_add_un_unrecognized(link_specifier_t *inp, uint8_t elt);
    583 /** Return a pointer to the variable-length array field
    584 * un_unrecognized of 'inp'.
    585 */
    586 uint8_t * link_specifier_getarray_un_unrecognized(link_specifier_t *inp);
    587 /** As link_specifier_get_un_unrecognized, but take and return a const
    588 * pointer
    589 */
    590 const uint8_t  * link_specifier_getconstarray_un_unrecognized(const link_specifier_t *inp);
    591 /** Change the length of the variable-length array field
    592 * un_unrecognized of 'inp' to 'newlen'.Fill extra elements with 0.
    593 * Return 0 on success; return -1 and set the error code on 'inp' on
    594 * failure.
    595 */
    596 int link_specifier_setlen_un_unrecognized(link_specifier_t *inp, size_t newlen);
    597 /** Return a newly allocated ed25519_cert with all elements set to
    598 * zero.
    599 */
    600 ed25519_cert_t *ed25519_cert_new(void);
    601 /** Release all storage held by the ed25519_cert in 'victim'. (Do
    602 * nothing if 'victim' is NULL.)
    603 */
    604 void ed25519_cert_free(ed25519_cert_t *victim);
    605 /** Try to parse a ed25519_cert from the buffer in 'input', using up
    606 * to 'len_in' bytes from the input buffer. On success, return the
    607 * number of bytes consumed and set *output to the newly allocated
    608 * ed25519_cert_t. On failure, return -2 if the input appears
    609 * truncated, and -1 if the input is otherwise invalid.
    610 */
    611 ssize_t ed25519_cert_parse(ed25519_cert_t **output, const uint8_t *input, const size_t len_in);
    612 /** Return the number of bytes we expect to need to encode the
    613 * ed25519_cert in 'obj'. On failure, return a negative value. Note
    614 * that this value may be an overestimate, and can even be an
    615 * underestimate for certain unencodeable objects.
    616 */
    617 ssize_t ed25519_cert_encoded_len(const ed25519_cert_t *obj);
    618 /** Try to encode the ed25519_cert from 'input' into the buffer at
    619 * 'output', using up to 'avail' bytes of the output buffer. On
    620 * success, return the number of bytes used. On failure, return -2 if
    621 * the buffer was not long enough, and -1 if the input was invalid.
    622 */
    623 ssize_t ed25519_cert_encode(uint8_t *output, size_t avail, const ed25519_cert_t *input);
    624 /** Check whether the internal state of the ed25519_cert in 'obj' is
    625 * consistent. Return NULL if it is, and a short message if it is not.
    626 */
    627 const char *ed25519_cert_check(const ed25519_cert_t *obj);
    628 /** Clear any errors that were set on the object 'obj' by its setter
    629 * functions. Return true iff errors were cleared.
    630 */
    631 int ed25519_cert_clear_errors(ed25519_cert_t *obj);
    632 /** Return the value of the version field of the ed25519_cert_t in
    633 * 'inp'
    634 */
    635 uint8_t ed25519_cert_get_version(const ed25519_cert_t *inp);
    636 /** Set the value of the version field of the ed25519_cert_t in 'inp'
    637 * to 'val'. Return 0 on success; return -1 and set the error code on
    638 * 'inp' on failure.
    639 */
    640 int ed25519_cert_set_version(ed25519_cert_t *inp, uint8_t val);
    641 /** Return the value of the cert_type field of the ed25519_cert_t in
    642 * 'inp'
    643 */
    644 uint8_t ed25519_cert_get_cert_type(const ed25519_cert_t *inp);
    645 /** Set the value of the cert_type field of the ed25519_cert_t in
    646 * 'inp' to 'val'. Return 0 on success; return -1 and set the error
    647 * code on 'inp' on failure.
    648 */
    649 int ed25519_cert_set_cert_type(ed25519_cert_t *inp, uint8_t val);
    650 /** Return the value of the exp_field field of the ed25519_cert_t in
    651 * 'inp'
    652 */
    653 uint32_t ed25519_cert_get_exp_field(const ed25519_cert_t *inp);
    654 /** Set the value of the exp_field field of the ed25519_cert_t in
    655 * 'inp' to 'val'. Return 0 on success; return -1 and set the error
    656 * code on 'inp' on failure.
    657 */
    658 int ed25519_cert_set_exp_field(ed25519_cert_t *inp, uint32_t val);
    659 /** Return the value of the cert_key_type field of the ed25519_cert_t
    660 * in 'inp'
    661 */
    662 uint8_t ed25519_cert_get_cert_key_type(const ed25519_cert_t *inp);
    663 /** Set the value of the cert_key_type field of the ed25519_cert_t in
    664 * 'inp' to 'val'. Return 0 on success; return -1 and set the error
    665 * code on 'inp' on failure.
    666 */
    667 int ed25519_cert_set_cert_key_type(ed25519_cert_t *inp, uint8_t val);
    668 /** Return the (constant) length of the array holding the
    669 * certified_key field of the ed25519_cert_t in 'inp'.
    670 */
    671 size_t ed25519_cert_getlen_certified_key(const ed25519_cert_t *inp);
    672 /** Return the element at position 'idx' of the fixed array field
    673 * certified_key of the ed25519_cert_t in 'inp'.
    674 */
    675 uint8_t ed25519_cert_get_certified_key(ed25519_cert_t *inp, size_t idx);
    676 /** As ed25519_cert_get_certified_key, but take and return a const
    677 * pointer
    678 */
    679 uint8_t ed25519_cert_getconst_certified_key(const ed25519_cert_t *inp, size_t idx);
    680 /** Change the element at position 'idx' of the fixed array field
    681 * certified_key of the ed25519_cert_t in 'inp', so that it will hold
    682 * the value 'elt'.
    683 */
    684 int ed25519_cert_set_certified_key(ed25519_cert_t *inp, size_t idx, uint8_t elt);
    685 /** Return a pointer to the 32-element array field certified_key of
    686 * 'inp'.
    687 */
    688 uint8_t * ed25519_cert_getarray_certified_key(ed25519_cert_t *inp);
    689 /** As ed25519_cert_get_certified_key, but take and return a const
    690 * pointer
    691 */
    692 const uint8_t  * ed25519_cert_getconstarray_certified_key(const ed25519_cert_t *inp);
    693 /** Return the value of the n_extensions field of the ed25519_cert_t
    694 * in 'inp'
    695 */
    696 uint8_t ed25519_cert_get_n_extensions(const ed25519_cert_t *inp);
    697 /** Set the value of the n_extensions field of the ed25519_cert_t in
    698 * 'inp' to 'val'. Return 0 on success; return -1 and set the error
    699 * code on 'inp' on failure.
    700 */
    701 int ed25519_cert_set_n_extensions(ed25519_cert_t *inp, uint8_t val);
    702 /** Return the length of the dynamic array holding the ext field of
    703 * the ed25519_cert_t in 'inp'.
    704 */
    705 size_t ed25519_cert_getlen_ext(const ed25519_cert_t *inp);
    706 /** Return the element at position 'idx' of the dynamic array field
    707 * ext of the ed25519_cert_t in 'inp'.
    708 */
    709 struct ed25519_cert_extension_st * ed25519_cert_get_ext(ed25519_cert_t *inp, size_t idx);
    710 /** As ed25519_cert_get_ext, but take and return a const pointer
    711 */
    712 const struct ed25519_cert_extension_st * ed25519_cert_getconst_ext(const ed25519_cert_t *inp, size_t idx);
    713 /** Change the element at position 'idx' of the dynamic array field
    714 * ext of the ed25519_cert_t in 'inp', so that it will hold the value
    715 * 'elt'. Free the previous value, if any.
    716 */
    717 int ed25519_cert_set_ext(ed25519_cert_t *inp, size_t idx, struct ed25519_cert_extension_st * elt);
    718 /** As ed25519_cert_set_ext, but does not free the previous value.
    719 */
    720 int ed25519_cert_set0_ext(ed25519_cert_t *inp, size_t idx, struct ed25519_cert_extension_st * elt);
    721 /** Append a new element 'elt' to the dynamic array field ext of the
    722 * ed25519_cert_t in 'inp'.
    723 */
    724 int ed25519_cert_add_ext(ed25519_cert_t *inp, struct ed25519_cert_extension_st * elt);
    725 /** Return a pointer to the variable-length array field ext of 'inp'.
    726 */
    727 struct ed25519_cert_extension_st * * ed25519_cert_getarray_ext(ed25519_cert_t *inp);
    728 /** As ed25519_cert_get_ext, but take and return a const pointer
    729 */
    730 const struct ed25519_cert_extension_st *  const  * ed25519_cert_getconstarray_ext(const ed25519_cert_t *inp);
    731 /** Change the length of the variable-length array field ext of 'inp'
    732 * to 'newlen'.Fill extra elements with NULL; free removed elements.
    733 * Return 0 on success; return -1 and set the error code on 'inp' on
    734 * failure.
    735 */
    736 int ed25519_cert_setlen_ext(ed25519_cert_t *inp, size_t newlen);
    737 /** Return the (constant) length of the array holding the signature
    738 * field of the ed25519_cert_t in 'inp'.
    739 */
    740 size_t ed25519_cert_getlen_signature(const ed25519_cert_t *inp);
    741 /** Return the element at position 'idx' of the fixed array field
    742 * signature of the ed25519_cert_t in 'inp'.
    743 */
    744 uint8_t ed25519_cert_get_signature(ed25519_cert_t *inp, size_t idx);
    745 /** As ed25519_cert_get_signature, but take and return a const pointer
    746 */
    747 uint8_t ed25519_cert_getconst_signature(const ed25519_cert_t *inp, size_t idx);
    748 /** Change the element at position 'idx' of the fixed array field
    749 * signature of the ed25519_cert_t in 'inp', so that it will hold the
    750 * value 'elt'.
    751 */
    752 int ed25519_cert_set_signature(ed25519_cert_t *inp, size_t idx, uint8_t elt);
    753 /** Return a pointer to the 64-element array field signature of 'inp'.
    754 */
    755 uint8_t * ed25519_cert_getarray_signature(ed25519_cert_t *inp);
    756 /** As ed25519_cert_get_signature, but take and return a const pointer
    757 */
    758 const uint8_t  * ed25519_cert_getconstarray_signature(const ed25519_cert_t *inp);
    759 /** Return a newly allocated extend2_cell_body with all elements set
    760 * to zero.
    761 */
    762 extend2_cell_body_t *extend2_cell_body_new(void);
    763 /** Release all storage held by the extend2_cell_body in 'victim'. (Do
    764 * nothing if 'victim' is NULL.)
    765 */
    766 void extend2_cell_body_free(extend2_cell_body_t *victim);
    767 /** Try to parse a extend2_cell_body from the buffer in 'input', using
    768 * up to 'len_in' bytes from the input buffer. On success, return the
    769 * number of bytes consumed and set *output to the newly allocated
    770 * extend2_cell_body_t. On failure, return -2 if the input appears
    771 * truncated, and -1 if the input is otherwise invalid.
    772 */
    773 ssize_t extend2_cell_body_parse(extend2_cell_body_t **output, const uint8_t *input, const size_t len_in);
    774 /** Return the number of bytes we expect to need to encode the
    775 * extend2_cell_body in 'obj'. On failure, return a negative value.
    776 * Note that this value may be an overestimate, and can even be an
    777 * underestimate for certain unencodeable objects.
    778 */
    779 ssize_t extend2_cell_body_encoded_len(const extend2_cell_body_t *obj);
    780 /** Try to encode the extend2_cell_body from 'input' into the buffer
    781 * at 'output', using up to 'avail' bytes of the output buffer. On
    782 * success, return the number of bytes used. On failure, return -2 if
    783 * the buffer was not long enough, and -1 if the input was invalid.
    784 */
    785 ssize_t extend2_cell_body_encode(uint8_t *output, size_t avail, const extend2_cell_body_t *input);
    786 /** Check whether the internal state of the extend2_cell_body in 'obj'
    787 * is consistent. Return NULL if it is, and a short message if it is
    788 * not.
    789 */
    790 const char *extend2_cell_body_check(const extend2_cell_body_t *obj);
    791 /** Clear any errors that were set on the object 'obj' by its setter
    792 * functions. Return true iff errors were cleared.
    793 */
    794 int extend2_cell_body_clear_errors(extend2_cell_body_t *obj);
    795 /** Return the value of the n_spec field of the extend2_cell_body_t in
    796 * 'inp'
    797 */
    798 uint8_t extend2_cell_body_get_n_spec(const extend2_cell_body_t *inp);
    799 /** Set the value of the n_spec field of the extend2_cell_body_t in
    800 * 'inp' to 'val'. Return 0 on success; return -1 and set the error
    801 * code on 'inp' on failure.
    802 */
    803 int extend2_cell_body_set_n_spec(extend2_cell_body_t *inp, uint8_t val);
    804 /** Return the length of the dynamic array holding the ls field of the
    805 * extend2_cell_body_t in 'inp'.
    806 */
    807 size_t extend2_cell_body_getlen_ls(const extend2_cell_body_t *inp);
    808 /** Return the element at position 'idx' of the dynamic array field ls
    809 * of the extend2_cell_body_t in 'inp'.
    810 */
    811 struct link_specifier_st * extend2_cell_body_get_ls(extend2_cell_body_t *inp, size_t idx);
    812 /** As extend2_cell_body_get_ls, but take and return a const pointer
    813 */
    814 const struct link_specifier_st * extend2_cell_body_getconst_ls(const extend2_cell_body_t *inp, size_t idx);
    815 /** Change the element at position 'idx' of the dynamic array field ls
    816 * of the extend2_cell_body_t in 'inp', so that it will hold the value
    817 * 'elt'. Free the previous value, if any.
    818 */
    819 int extend2_cell_body_set_ls(extend2_cell_body_t *inp, size_t idx, struct link_specifier_st * elt);
    820 /** As extend2_cell_body_set_ls, but does not free the previous value.
    821 */
    822 int extend2_cell_body_set0_ls(extend2_cell_body_t *inp, size_t idx, struct link_specifier_st * elt);
    823 /** Append a new element 'elt' to the dynamic array field ls of the
    824 * extend2_cell_body_t in 'inp'.
    825 */
    826 int extend2_cell_body_add_ls(extend2_cell_body_t *inp, struct link_specifier_st * elt);
    827 /** Return a pointer to the variable-length array field ls of 'inp'.
    828 */
    829 struct link_specifier_st * * extend2_cell_body_getarray_ls(extend2_cell_body_t *inp);
    830 /** As extend2_cell_body_get_ls, but take and return a const pointer
    831 */
    832 const struct link_specifier_st *  const  * extend2_cell_body_getconstarray_ls(const extend2_cell_body_t *inp);
    833 /** Change the length of the variable-length array field ls of 'inp'
    834 * to 'newlen'.Fill extra elements with NULL; free removed elements.
    835 * Return 0 on success; return -1 and set the error code on 'inp' on
    836 * failure.
    837 */
    838 int extend2_cell_body_setlen_ls(extend2_cell_body_t *inp, size_t newlen);
    839 /** Return the value of the create2 field of the extend2_cell_body_t
    840 * in 'inp'
    841 */
    842 struct create2_cell_body_st * extend2_cell_body_get_create2(extend2_cell_body_t *inp);
    843 /** As extend2_cell_body_get_create2, but take and return a const
    844 * pointer
    845 */
    846 const struct create2_cell_body_st * extend2_cell_body_getconst_create2(const extend2_cell_body_t *inp);
    847 /** Set the value of the create2 field of the extend2_cell_body_t in
    848 * 'inp' to 'val'. Free the old value if any. Steals the referenceto
    849 * 'val'.Return 0 on success; return -1 and set the error code on
    850 * 'inp' on failure.
    851 */
    852 int extend2_cell_body_set_create2(extend2_cell_body_t *inp, struct create2_cell_body_st *val);
    853 /** As extend2_cell_body_set_create2, but does not free the previous
    854 * value.
    855 */
    856 int extend2_cell_body_set0_create2(extend2_cell_body_t *inp, struct create2_cell_body_st *val);
    857 /** Return a newly allocated link_specifier_list with all elements set
    858 * to zero.
    859 */
    860 link_specifier_list_t *link_specifier_list_new(void);
    861 /** Release all storage held by the link_specifier_list in 'victim'.
    862 * (Do nothing if 'victim' is NULL.)
    863 */
    864 void link_specifier_list_free(link_specifier_list_t *victim);
    865 /** Try to parse a link_specifier_list from the buffer in 'input',
    866 * using up to 'len_in' bytes from the input buffer. On success,
    867 * return the number of bytes consumed and set *output to the newly
    868 * allocated link_specifier_list_t. On failure, return -2 if the input
    869 * appears truncated, and -1 if the input is otherwise invalid.
    870 */
    871 ssize_t link_specifier_list_parse(link_specifier_list_t **output, const uint8_t *input, const size_t len_in);
    872 /** Return the number of bytes we expect to need to encode the
    873 * link_specifier_list in 'obj'. On failure, return a negative value.
    874 * Note that this value may be an overestimate, and can even be an
    875 * underestimate for certain unencodeable objects.
    876 */
    877 ssize_t link_specifier_list_encoded_len(const link_specifier_list_t *obj);
    878 /** Try to encode the link_specifier_list from 'input' into the buffer
    879 * at 'output', using up to 'avail' bytes of the output buffer. On
    880 * success, return the number of bytes used. On failure, return -2 if
    881 * the buffer was not long enough, and -1 if the input was invalid.
    882 */
    883 ssize_t link_specifier_list_encode(uint8_t *output, size_t avail, const link_specifier_list_t *input);
    884 /** Check whether the internal state of the link_specifier_list in
    885 * 'obj' is consistent. Return NULL if it is, and a short message if
    886 * it is not.
    887 */
    888 const char *link_specifier_list_check(const link_specifier_list_t *obj);
    889 /** Clear any errors that were set on the object 'obj' by its setter
    890 * functions. Return true iff errors were cleared.
    891 */
    892 int link_specifier_list_clear_errors(link_specifier_list_t *obj);
    893 /** Return the value of the n_spec field of the link_specifier_list_t
    894 * in 'inp'
    895 */
    896 uint8_t link_specifier_list_get_n_spec(const link_specifier_list_t *inp);
    897 /** Set the value of the n_spec field of the link_specifier_list_t in
    898 * 'inp' to 'val'. Return 0 on success; return -1 and set the error
    899 * code on 'inp' on failure.
    900 */
    901 int link_specifier_list_set_n_spec(link_specifier_list_t *inp, uint8_t val);
    902 /** Return the length of the dynamic array holding the spec field of
    903 * the link_specifier_list_t in 'inp'.
    904 */
    905 size_t link_specifier_list_getlen_spec(const link_specifier_list_t *inp);
    906 /** Return the element at position 'idx' of the dynamic array field
    907 * spec of the link_specifier_list_t in 'inp'.
    908 */
    909 struct link_specifier_st * link_specifier_list_get_spec(link_specifier_list_t *inp, size_t idx);
    910 /** As link_specifier_list_get_spec, but take and return a const
    911 * pointer
    912 */
    913 const struct link_specifier_st * link_specifier_list_getconst_spec(const link_specifier_list_t *inp, size_t idx);
    914 /** Change the element at position 'idx' of the dynamic array field
    915 * spec of the link_specifier_list_t in 'inp', so that it will hold
    916 * the value 'elt'. Free the previous value, if any.
    917 */
    918 int link_specifier_list_set_spec(link_specifier_list_t *inp, size_t idx, struct link_specifier_st * elt);
    919 /** As link_specifier_list_set_spec, but does not free the previous
    920 * value.
    921 */
    922 int link_specifier_list_set0_spec(link_specifier_list_t *inp, size_t idx, struct link_specifier_st * elt);
    923 /** Append a new element 'elt' to the dynamic array field spec of the
    924 * link_specifier_list_t in 'inp'.
    925 */
    926 int link_specifier_list_add_spec(link_specifier_list_t *inp, struct link_specifier_st * elt);
    927 /** Return a pointer to the variable-length array field spec of 'inp'.
    928 */
    929 struct link_specifier_st * * link_specifier_list_getarray_spec(link_specifier_list_t *inp);
    930 /** As link_specifier_list_get_spec, but take and return a const
    931 * pointer
    932 */
    933 const struct link_specifier_st *  const  * link_specifier_list_getconstarray_spec(const link_specifier_list_t *inp);
    934 /** Change the length of the variable-length array field spec of 'inp'
    935 * to 'newlen'.Fill extra elements with NULL; free removed elements.
    936 * Return 0 on success; return -1 and set the error code on 'inp' on
    937 * failure.
    938 */
    939 int link_specifier_list_setlen_spec(link_specifier_list_t *inp, size_t newlen);
    940 
    941 
    942 #endif