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