int trn_cell_introduce1_add_encrypted(trn_cell_introduce1_t *inp, uint8_t elt) { TRUNNEL_DYNARRAY_ADD(uint8_t, &inp->encrypted, elt, {}); return 0; trunnel_alloc_failed: TRUNNEL_SET_ERROR_CODE(inp); return -1; }
int auth1_add_sig(auth1_t *inp, uint8_t elt) { TRUNNEL_DYNARRAY_ADD(uint8_t, &inp->sig, elt, {}); return 0; trunnel_alloc_failed: TRUNNEL_SET_ERROR_CODE(inp); return -1; }
int trn_cell_rendezvous1_add_handshake_info(trn_cell_rendezvous1_t *inp, uint8_t elt) { TRUNNEL_DYNARRAY_ADD(uint8_t, &inp->handshake_info, elt, {}); return 0; trunnel_alloc_failed: TRUNNEL_SET_ERROR_CODE(inp); return -1; }
int pwbox_encoded_add_data(pwbox_encoded_t *inp, uint8_t elt) { TRUNNEL_DYNARRAY_ADD(uint8_t, &inp->data, elt, {}); return 0; trunnel_alloc_failed: TRUNNEL_SET_ERROR_CODE(inp); return -1; }
int ed25519_cert_extension_add_un_unparsed(ed25519_cert_extension_t *inp, uint8_t elt) { TRUNNEL_DYNARRAY_ADD(uint8_t, &inp->un_unparsed, elt, {}); return 0; trunnel_alloc_failed: TRUNNEL_SET_ERROR_CODE(inp); return -1; }
int trn_cell_introduce_encrypted_add_onion_key(trn_cell_introduce_encrypted_t *inp, uint8_t elt) { #if SIZE_MAX >= UINT16_MAX if (inp->onion_key.n_ == UINT16_MAX) goto trunnel_alloc_failed; #endif TRUNNEL_DYNARRAY_ADD(uint8_t, &inp->onion_key, elt, {}); return 0; trunnel_alloc_failed: TRUNNEL_SET_ERROR_CODE(inp); return -1; }
int rsa_ed_crosscert_add_sig(rsa_ed_crosscert_t *inp, uint8_t elt) { #if SIZE_MAX >= UINT8_MAX if (inp->sig.n_ == UINT8_MAX) goto trunnel_alloc_failed; #endif TRUNNEL_DYNARRAY_ADD(uint8_t, &inp->sig, elt, {}); return 0; trunnel_alloc_failed: TRUNNEL_SET_ERROR_CODE(inp); return -1; }
int certs_cell_cert_add_body(certs_cell_cert_t *inp, uint8_t elt) { #if SIZE_MAX >= UINT16_MAX if (inp->body.n_ == UINT16_MAX) goto trunnel_alloc_failed; #endif TRUNNEL_DYNARRAY_ADD(uint8_t, &inp->body, elt, {}); return 0; trunnel_alloc_failed: TRUNNEL_SET_ERROR_CODE(inp); return -1; }
int auth_challenge_cell_add_methods(auth_challenge_cell_t *inp, uint16_t elt) { #if SIZE_MAX >= UINT16_MAX if (inp->methods.n_ == UINT16_MAX) goto trunnel_alloc_failed; #endif TRUNNEL_DYNARRAY_ADD(uint16_t, &inp->methods, elt, {}); return 0; trunnel_alloc_failed: TRUNNEL_SET_ERROR_CODE(inp); return -1; }
int pwbox_encoded_add_skey_header(pwbox_encoded_t *inp, uint8_t elt) { #if SIZE_MAX >= UINT8_MAX if (inp->skey_header.n_ == UINT8_MAX) goto trunnel_alloc_failed; #endif TRUNNEL_DYNARRAY_ADD(uint8_t, &inp->skey_header, elt, {}); return 0; trunnel_alloc_failed: TRUNNEL_SET_ERROR_CODE(inp); return -1; }
/** As auth_challenge_cell_parse(), but do not allocate the output * object. */ static ssize_t auth_challenge_cell_parse_into(auth_challenge_cell_t *obj, const uint8_t *input, const size_t len_in) { const uint8_t *ptr = input; size_t remaining = len_in; ssize_t result = 0; (void)result; /* Parse u8 challenge[32] */ CHECK_REMAINING(32, truncated); memcpy(obj->challenge, ptr, 32); remaining -= 32; ptr += 32; /* Parse u16 n_methods */ CHECK_REMAINING(2, truncated); obj->n_methods = trunnel_ntohs(trunnel_get_uint16(ptr)); remaining -= 2; ptr += 2; /* Parse u16 methods[n_methods] */ TRUNNEL_DYNARRAY_EXPAND(uint16_t, &obj->methods, obj->n_methods, {}); { uint16_t elt; unsigned idx; for (idx = 0; idx < obj->n_methods; ++idx) { CHECK_REMAINING(2, truncated); elt = trunnel_ntohs(trunnel_get_uint16(ptr)); remaining -= 2; ptr += 2; TRUNNEL_DYNARRAY_ADD(uint16_t, &obj->methods, elt, {}); } } trunnel_assert(ptr + remaining == input + len_in); return len_in - remaining; truncated: return -2; trunnel_alloc_failed: return -1; }