aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/schema/consistency_proof.schema.json30
-rw-r--r--doc/schema/example/consistency_proof.json7
-rw-r--r--doc/schema/example/inclusion_proof.json7
-rw-r--r--doc/schema/example/leaves.json14
-rw-r--r--doc/schema/example/sth.json11
-rw-r--r--doc/schema/inclusion_proof.schema.json30
-rw-r--r--doc/schema/leaves.schema.json38
-rw-r--r--doc/schema/sth.schema.json50
-rw-r--r--trunnel/README.md9
-rw-r--r--trunnel/stfe.c3580
-rw-r--r--trunnel/stfe.h1235
-rw-r--r--trunnel/stfe.trunnel94
12 files changed, 0 insertions, 5105 deletions
diff --git a/doc/schema/consistency_proof.schema.json b/doc/schema/consistency_proof.schema.json
deleted file mode 100644
index 003f3c7..0000000
--- a/doc/schema/consistency_proof.schema.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft-07/schema#",
- "title": "inclusion_proof",
- "description": "JSON-formatted inclusion proof, version 0.",
-
- "type": "object",
- "required": [ "new_size", "old_size", "consistency_proof" ],
- "properties": {
- "new_size": {
- "description": "The tree size of the newer Merkle tree head.",
- "type": "integer",
- "minimum": 0
- },
- "old_size": {
- "description": "The tree size of the older Merkle tree head.",
- "type": "integer",
- "minimum": 0
- },
- "consistency_proof": {
- "description": "A list of base64-encoded node hashes that proves consistency",
- "type": "array",
- "items": {
- "description": "A node hash in base64",
- "type": "string",
- "minLength": 44,
- "maxLength": 44
- }
- }
- }
-}
diff --git a/doc/schema/example/consistency_proof.json b/doc/schema/example/consistency_proof.json
deleted file mode 100644
index 0a323b7..0000000
--- a/doc/schema/example/consistency_proof.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "new_size": 2,
- "old_size": 1,
- "consistency_proof": [
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
- ]
-}
diff --git a/doc/schema/example/inclusion_proof.json b/doc/schema/example/inclusion_proof.json
deleted file mode 100644
index d46d426..0000000
--- a/doc/schema/example/inclusion_proof.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "tree_size": 2,
- "leaf_index": 0,
- "inclusion_proof": [
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
- ]
-}
diff --git a/doc/schema/example/leaves.json b/doc/schema/example/leaves.json
deleted file mode 100644
index 1eed05d..0000000
--- a/doc/schema/example/leaves.json
+++ /dev/null
@@ -1,14 +0,0 @@
-[
- {
- "checksum": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
- "signature_scheme": 1,
- "signature": "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC=",
- "key_hash": "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD="
- },
- {
- "checksum": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
- "signature_scheme": 2,
- "signature": "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=",
- "key_hash": "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC="
- }
-]
diff --git a/doc/schema/example/sth.json b/doc/schema/example/sth.json
deleted file mode 100644
index ec3ad11..0000000
--- a/doc/schema/example/sth.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "timestamp": 0,
- "tree_size": 0,
- "root_hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
- "signatures": [
- {
- "key_hash": "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=",
- "signature": "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC="
- }
- ]
-}
diff --git a/doc/schema/inclusion_proof.schema.json b/doc/schema/inclusion_proof.schema.json
deleted file mode 100644
index 3309d37..0000000
--- a/doc/schema/inclusion_proof.schema.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft-07/schema#",
- "title": "inclusion_proof",
- "description": "JSON-formatted inclusion proof, version 0.",
-
- "type": "object",
- "required": [ "tree_size", "leaf_index", "inclusion_proof" ],
- "properties": {
- "tree_size": {
- "description": "The Merkle tree size that the inclusion proof is based on.",
- "type": "integer",
- "minimum": 0
- },
- "leaf_index": {
- "description": "The zero-based index of the leaf that the inclusion proof is for.",
- "type": "integer",
- "minimum": 0
- },
- "inclusion_proof": {
- "description": "A list of base64-encoded node hashes that proves inclusion",
- "type": "array",
- "items": {
- "description": "A node hash in base64",
- "type": "string",
- "minLength": 44,
- "maxLength": 44
- }
- }
- }
-}
diff --git a/doc/schema/leaves.schema.json b/doc/schema/leaves.schema.json
deleted file mode 100644
index 74d7454..0000000
--- a/doc/schema/leaves.schema.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft-07/schema#",
- "title": "list of tree_leaf",
- "description": "JSON-formatted tree leaf list, version 0.",
-
- "type": "array",
- "description": "A list Merkle tree leaves",
- "items": {
- "type": "object",
- "required": [ "checksum", "signature_scheme", "signature", "key_hash" ],
- "properties": {
- "checksum": {
- "description": "A cryptographic hash that is computed over some data of opaque type. The result is base64-encoded.",
- "type": "string",
- "minLength": 44,
- "maxLength": 44
- },
- "signature_scheme": {
- "description": "An integer that identifies the signature scheme used by the submitter. See API documentation.",
- "type": "integer",
- "enum": [ 1, 2, 3 ]
- },
- "signature": {
- "description": "The submitter's signature over the checksum in base64",
- "type": "string",
- "minLength": 44,
- "maxLength": 684
- },
- "key_hash": {
- "description": "A public verification-key hash that identifies the signer.",
- "type": "string",
- "minLength": 44,
- "maxLength": 44
- }
- }
- },
- "minItems": 1
-}
diff --git a/doc/schema/sth.schema.json b/doc/schema/sth.schema.json
deleted file mode 100644
index 86de2d3..0000000
--- a/doc/schema/sth.schema.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "$schema": "https://json-schema.org/draft-07/schema#",
- "title": "signed_tree_head_v0",
- "description": "JSON-formatted signed tree head, version 0.",
-
- "type": "object",
- "required": [ "timestamp", "tree_size", "root_hash", "signatures" ],
- "properties": {
- "timestamp": {
- "description": "The number of milliseconds since the UNIX epoch (January 1, 1970 00:00:00 UTC).",
- "type": "integer",
- "minimum": 0
- },
- "tree_size": {
- "description": "The number of entries that are stored in the log's Merkle tree.",
- "type": "integer",
- "minimum": 0
- },
- "root_hash": {
- "description": "The log's Merkle tree root hash in base64.",
- "type": "string",
- "minLength": 44,
- "maxLength": 44
- },
- "signatures": {
- "description": "A list of signer-signature pairs.",
- "type": "array",
- "items": {
- "description": "A signer-signature pair.",
- "type": "object",
- "required": [ "key_hash", "signature" ],
- "properties": {
- "key_hash": {
- "description": "A public verification-key hash that identifies the signer in base64.",
- "type": "string",
- "minLength": 44,
- "maxLength": 44
- },
- "signature": {
- "description": "The signer's signature over the log's tree_leaf structure in base64.",
- "type": "string",
- "minLength": 44,
- "maxLength": 44
- }
- }
- },
- "minItems": 1
- }
- }
-}
diff --git a/trunnel/README.md b/trunnel/README.md
deleted file mode 100644
index 74180a0..0000000
--- a/trunnel/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-Expressing doc/formats.md in trunnel[0].
-
-- stfe.trunnel is the input file
-- stfe.[ch] are output files from running trunnel on stfe.trunnel.
-
-TODO: Generate go code using [1].
-
-[0] https://gitweb.torproject.org/trunnel.git
-[1] https://github.com/mmcloughlin/trunnel
diff --git a/trunnel/stfe.c b/trunnel/stfe.c
deleted file mode 100644
index 7bf2652..0000000
--- a/trunnel/stfe.c
+++ /dev/null
@@ -1,3580 +0,0 @@
-/* stfe.c -- generated by Trunnel v1.5.3.
- * https://gitweb.torproject.org/trunnel.git
- * You probably shouldn't edit this file.
- */
-#include <stdlib.h>
-#include "trunnel-impl.h"
-
-#include "stfe.h"
-
-#define TRUNNEL_SET_ERROR_CODE(obj) \
- do { \
- (obj)->trunnel_error_code_ = 1; \
- } while (0)
-
-#if defined(__COVERITY__) || defined(__clang_analyzer__)
-/* If we're running a static analysis tool, we don't want it to complain
- * that some of our remaining-bytes checks are dead-code. */
-int stfe_deadcode_dummy__ = 0;
-#define OR_DEADCODE_DUMMY || stfe_deadcode_dummy__
-#else
-#define OR_DEADCODE_DUMMY
-#endif
-
-#define CHECK_REMAINING(nbytes, label) \
- do { \
- if (remaining < (nbytes) OR_DEADCODE_DUMMY) { \
- goto label; \
- } \
- } while (0)
-
-hash_t *
-hash_new(void)
-{
- hash_t *val = trunnel_calloc(1, sizeof(hash_t));
- if (NULL == val)
- return NULL;
- return val;
-}
-
-/** Release all storage held inside 'obj', but do not free 'obj'.
- */
-static void
-hash_clear(hash_t *obj)
-{
- (void) obj;
-}
-
-void
-hash_free(hash_t *obj)
-{
- if (obj == NULL)
- return;
- hash_clear(obj);
- trunnel_memwipe(obj, sizeof(hash_t));
- trunnel_free_(obj);
-}
-
-size_t
-hash_getlen_hash(const hash_t *inp)
-{
- (void)inp; return 32;
-}
-
-uint8_t
-hash_get_hash(hash_t *inp, size_t idx)
-{
- trunnel_assert(idx < 32);
- return inp->hash[idx];
-}
-
-uint8_t
-hash_getconst_hash(const hash_t *inp, size_t idx)
-{
- return hash_get_hash((hash_t*)inp, idx);
-}
-int
-hash_set_hash(hash_t *inp, size_t idx, uint8_t elt)
-{
- trunnel_assert(idx < 32);
- inp->hash[idx] = elt;
- return 0;
-}
-
-uint8_t *
-hash_getarray_hash(hash_t *inp)
-{
- return inp->hash;
-}
-const uint8_t *
-hash_getconstarray_hash(const hash_t *inp)
-{
- return (const uint8_t *)hash_getarray_hash((hash_t*)inp);
-}
-const char *
-hash_check(const hash_t *obj)
-{
- if (obj == NULL)
- return "Object was NULL";
- if (obj->trunnel_error_code_)
- return "A set function failed on this object";
- return NULL;
-}
-
-ssize_t
-hash_encoded_len(const hash_t *obj)
-{
- ssize_t result = 0;
-
- if (NULL != hash_check(obj))
- return -1;
-
-
- /* Length of u8 hash[32] */
- result += 32;
- return result;
-}
-int
-hash_clear_errors(hash_t *obj)
-{
- int r = obj->trunnel_error_code_;
- obj->trunnel_error_code_ = 0;
- return r;
-}
-ssize_t
-hash_encode(uint8_t *output, const size_t avail, const hash_t *obj)
-{
- ssize_t result = 0;
- size_t written = 0;
- uint8_t *ptr = output;
- const char *msg;
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- const ssize_t encoded_len = hash_encoded_len(obj);
-#endif
-
- if (NULL != (msg = hash_check(obj)))
- goto check_failed;
-
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- trunnel_assert(encoded_len >= 0);
-#endif
-
- /* Encode u8 hash[32] */
- trunnel_assert(written <= avail);
- if (avail - written < 32)
- goto truncated;
- memcpy(ptr, obj->hash, 32);
- written += 32; ptr += 32;
-
-
- trunnel_assert(ptr == output + written);
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- {
- trunnel_assert(encoded_len >= 0);
- trunnel_assert((size_t)encoded_len == written);
- }
-
-#endif
-
- return written;
-
- truncated:
- result = -2;
- goto fail;
- check_failed:
- (void)msg;
- result = -1;
- goto fail;
- fail:
- trunnel_assert(result < 0);
- return result;
-}
-
-/** As hash_parse(), but do not allocate the output object.
- */
-static ssize_t
-hash_parse_into(hash_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 hash[32] */
- CHECK_REMAINING(32, truncated);
- memcpy(obj->hash, ptr, 32);
- remaining -= 32; ptr += 32;
- trunnel_assert(ptr + remaining == input + len_in);
- return len_in - remaining;
-
- truncated:
- return -2;
-}
-
-ssize_t
-hash_parse(hash_t **output, const uint8_t *input, const size_t len_in)
-{
- ssize_t result;
- *output = hash_new();
- if (NULL == *output)
- return -1;
- result = hash_parse_into(*output, input, len_in);
- if (result < 0) {
- hash_free(*output);
- *output = NULL;
- }
- return result;
-}
-req_get_consistency_proof_v1_t *
-req_get_consistency_proof_v1_new(void)
-{
- req_get_consistency_proof_v1_t *val = trunnel_calloc(1, sizeof(req_get_consistency_proof_v1_t));
- if (NULL == val)
- return NULL;
- return val;
-}
-
-/** Release all storage held inside 'obj', but do not free 'obj'.
- */
-static void
-req_get_consistency_proof_v1_clear(req_get_consistency_proof_v1_t *obj)
-{
- (void) obj;
-}
-
-void
-req_get_consistency_proof_v1_free(req_get_consistency_proof_v1_t *obj)
-{
- if (obj == NULL)
- return;
- req_get_consistency_proof_v1_clear(obj);
- trunnel_memwipe(obj, sizeof(req_get_consistency_proof_v1_t));
- trunnel_free_(obj);
-}
-
-uint64_t
-req_get_consistency_proof_v1_get_old_size(const req_get_consistency_proof_v1_t *inp)
-{
- return inp->old_size;
-}
-int
-req_get_consistency_proof_v1_set_old_size(req_get_consistency_proof_v1_t *inp, uint64_t val)
-{
- inp->old_size = val;
- return 0;
-}
-uint64_t
-req_get_consistency_proof_v1_get_new_size(const req_get_consistency_proof_v1_t *inp)
-{
- return inp->new_size;
-}
-int
-req_get_consistency_proof_v1_set_new_size(req_get_consistency_proof_v1_t *inp, uint64_t val)
-{
- inp->new_size = val;
- return 0;
-}
-const char *
-req_get_consistency_proof_v1_check(const req_get_consistency_proof_v1_t *obj)
-{
- if (obj == NULL)
- return "Object was NULL";
- if (obj->trunnel_error_code_)
- return "A set function failed on this object";
- return NULL;
-}
-
-ssize_t
-req_get_consistency_proof_v1_encoded_len(const req_get_consistency_proof_v1_t *obj)
-{
- ssize_t result = 0;
-
- if (NULL != req_get_consistency_proof_v1_check(obj))
- return -1;
-
-
- /* Length of u64 old_size */
- result += 8;
-
- /* Length of u64 new_size */
- result += 8;
- return result;
-}
-int
-req_get_consistency_proof_v1_clear_errors(req_get_consistency_proof_v1_t *obj)
-{
- int r = obj->trunnel_error_code_;
- obj->trunnel_error_code_ = 0;
- return r;
-}
-ssize_t
-req_get_consistency_proof_v1_encode(uint8_t *output, const size_t avail, const req_get_consistency_proof_v1_t *obj)
-{
- ssize_t result = 0;
- size_t written = 0;
- uint8_t *ptr = output;
- const char *msg;
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- const ssize_t encoded_len = req_get_consistency_proof_v1_encoded_len(obj);
-#endif
-
- if (NULL != (msg = req_get_consistency_proof_v1_check(obj)))
- goto check_failed;
-
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- trunnel_assert(encoded_len >= 0);
-#endif
-
- /* Encode u64 old_size */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->old_size));
- written += 8; ptr += 8;
-
- /* Encode u64 new_size */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->new_size));
- written += 8; ptr += 8;
-
-
- trunnel_assert(ptr == output + written);
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- {
- trunnel_assert(encoded_len >= 0);
- trunnel_assert((size_t)encoded_len == written);
- }
-
-#endif
-
- return written;
-
- truncated:
- result = -2;
- goto fail;
- check_failed:
- (void)msg;
- result = -1;
- goto fail;
- fail:
- trunnel_assert(result < 0);
- return result;
-}
-
-/** As req_get_consistency_proof_v1_parse(), but do not allocate the
- * output object.
- */
-static ssize_t
-req_get_consistency_proof_v1_parse_into(req_get_consistency_proof_v1_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 u64 old_size */
- CHECK_REMAINING(8, truncated);
- obj->old_size = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
-
- /* Parse u64 new_size */
- CHECK_REMAINING(8, truncated);
- obj->new_size = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
- trunnel_assert(ptr + remaining == input + len_in);
- return len_in - remaining;
-
- truncated:
- return -2;
-}
-
-ssize_t
-req_get_consistency_proof_v1_parse(req_get_consistency_proof_v1_t **output, const uint8_t *input, const size_t len_in)
-{
- ssize_t result;
- *output = req_get_consistency_proof_v1_new();
- if (NULL == *output)
- return -1;
- result = req_get_consistency_proof_v1_parse_into(*output, input, len_in);
- if (result < 0) {
- req_get_consistency_proof_v1_free(*output);
- *output = NULL;
- }
- return result;
-}
-req_get_entries_v1_t *
-req_get_entries_v1_new(void)
-{
- req_get_entries_v1_t *val = trunnel_calloc(1, sizeof(req_get_entries_v1_t));
- if (NULL == val)
- return NULL;
- return val;
-}
-
-/** Release all storage held inside 'obj', but do not free 'obj'.
- */
-static void
-req_get_entries_v1_clear(req_get_entries_v1_t *obj)
-{
- (void) obj;
-}
-
-void
-req_get_entries_v1_free(req_get_entries_v1_t *obj)
-{
- if (obj == NULL)
- return;
- req_get_entries_v1_clear(obj);
- trunnel_memwipe(obj, sizeof(req_get_entries_v1_t));
- trunnel_free_(obj);
-}
-
-uint64_t
-req_get_entries_v1_get_start_size(const req_get_entries_v1_t *inp)
-{
- return inp->start_size;
-}
-int
-req_get_entries_v1_set_start_size(req_get_entries_v1_t *inp, uint64_t val)
-{
- inp->start_size = val;
- return 0;
-}
-uint64_t
-req_get_entries_v1_get_end_size(const req_get_entries_v1_t *inp)
-{
- return inp->end_size;
-}
-int
-req_get_entries_v1_set_end_size(req_get_entries_v1_t *inp, uint64_t val)
-{
- inp->end_size = val;
- return 0;
-}
-const char *
-req_get_entries_v1_check(const req_get_entries_v1_t *obj)
-{
- if (obj == NULL)
- return "Object was NULL";
- if (obj->trunnel_error_code_)
- return "A set function failed on this object";
- return NULL;
-}
-
-ssize_t
-req_get_entries_v1_encoded_len(const req_get_entries_v1_t *obj)
-{
- ssize_t result = 0;
-
- if (NULL != req_get_entries_v1_check(obj))
- return -1;
-
-
- /* Length of u64 start_size */
- result += 8;
-
- /* Length of u64 end_size */
- result += 8;
- return result;
-}
-int
-req_get_entries_v1_clear_errors(req_get_entries_v1_t *obj)
-{
- int r = obj->trunnel_error_code_;
- obj->trunnel_error_code_ = 0;
- return r;
-}
-ssize_t
-req_get_entries_v1_encode(uint8_t *output, const size_t avail, const req_get_entries_v1_t *obj)
-{
- ssize_t result = 0;
- size_t written = 0;
- uint8_t *ptr = output;
- const char *msg;
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- const ssize_t encoded_len = req_get_entries_v1_encoded_len(obj);
-#endif
-
- if (NULL != (msg = req_get_entries_v1_check(obj)))
- goto check_failed;
-
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- trunnel_assert(encoded_len >= 0);
-#endif
-
- /* Encode u64 start_size */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->start_size));
- written += 8; ptr += 8;
-
- /* Encode u64 end_size */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->end_size));
- written += 8; ptr += 8;
-
-
- trunnel_assert(ptr == output + written);
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- {
- trunnel_assert(encoded_len >= 0);
- trunnel_assert((size_t)encoded_len == written);
- }
-
-#endif
-
- return written;
-
- truncated:
- result = -2;
- goto fail;
- check_failed:
- (void)msg;
- result = -1;
- goto fail;
- fail:
- trunnel_assert(result < 0);
- return result;
-}
-
-/** As req_get_entries_v1_parse(), but do not allocate the output
- * object.
- */
-static ssize_t
-req_get_entries_v1_parse_into(req_get_entries_v1_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 u64 start_size */
- CHECK_REMAINING(8, truncated);
- obj->start_size = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
-
- /* Parse u64 end_size */
- CHECK_REMAINING(8, truncated);
- obj->end_size = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
- trunnel_assert(ptr + remaining == input + len_in);
- return len_in - remaining;
-
- truncated:
- return -2;
-}
-
-ssize_t
-req_get_entries_v1_parse(req_get_entries_v1_t **output, const uint8_t *input, const size_t len_in)
-{
- ssize_t result;
- *output = req_get_entries_v1_new();
- if (NULL == *output)
- return -1;
- result = req_get_entries_v1_parse_into(*output, input, len_in);
- if (result < 0) {
- req_get_entries_v1_free(*output);
- *output = NULL;
- }
- return result;
-}
-req_get_proof_by_hash_v1_t *
-req_get_proof_by_hash_v1_new(void)
-{
- req_get_proof_by_hash_v1_t *val = trunnel_calloc(1, sizeof(req_get_proof_by_hash_v1_t));
- if (NULL == val)
- return NULL;
- return val;
-}
-
-/** Release all storage held inside 'obj', but do not free 'obj'.
- */
-static void
-req_get_proof_by_hash_v1_clear(req_get_proof_by_hash_v1_t *obj)
-{
- (void) obj;
-}
-
-void
-req_get_proof_by_hash_v1_free(req_get_proof_by_hash_v1_t *obj)
-{
- if (obj == NULL)
- return;
- req_get_proof_by_hash_v1_clear(obj);
- trunnel_memwipe(obj, sizeof(req_get_proof_by_hash_v1_t));
- trunnel_free_(obj);
-}
-
-uint64_t
-req_get_proof_by_hash_v1_get_tree_size(const req_get_proof_by_hash_v1_t *inp)
-{
- return inp->tree_size;
-}
-int
-req_get_proof_by_hash_v1_set_tree_size(req_get_proof_by_hash_v1_t *inp, uint64_t val)
-{
- inp->tree_size = val;
- return 0;
-}
-size_t
-req_get_proof_by_hash_v1_getlen_leaf_hash(const req_get_proof_by_hash_v1_t *inp)
-{
- (void)inp; return 32;
-}
-
-uint8_t
-req_get_proof_by_hash_v1_get_leaf_hash(req_get_proof_by_hash_v1_t *inp, size_t idx)
-{
- trunnel_assert(idx < 32);
- return inp->leaf_hash[idx];
-}
-
-uint8_t
-req_get_proof_by_hash_v1_getconst_leaf_hash(const req_get_proof_by_hash_v1_t *inp, size_t idx)
-{
- return req_get_proof_by_hash_v1_get_leaf_hash((req_get_proof_by_hash_v1_t*)inp, idx);
-}
-int
-req_get_proof_by_hash_v1_set_leaf_hash(req_get_proof_by_hash_v1_t *inp, size_t idx, uint8_t elt)
-{
- trunnel_assert(idx < 32);
- inp->leaf_hash[idx] = elt;
- return 0;
-}
-
-uint8_t *
-req_get_proof_by_hash_v1_getarray_leaf_hash(req_get_proof_by_hash_v1_t *inp)
-{
- return inp->leaf_hash;
-}
-const uint8_t *
-req_get_proof_by_hash_v1_getconstarray_leaf_hash(const req_get_proof_by_hash_v1_t *inp)
-{
- return (const uint8_t *)req_get_proof_by_hash_v1_getarray_leaf_hash((req_get_proof_by_hash_v1_t*)inp);
-}
-const char *
-req_get_proof_by_hash_v1_check(const req_get_proof_by_hash_v1_t *obj)
-{
- if (obj == NULL)
- return "Object was NULL";
- if (obj->trunnel_error_code_)
- return "A set function failed on this object";
- return NULL;
-}
-
-ssize_t
-req_get_proof_by_hash_v1_encoded_len(const req_get_proof_by_hash_v1_t *obj)
-{
- ssize_t result = 0;
-
- if (NULL != req_get_proof_by_hash_v1_check(obj))
- return -1;
-
-
- /* Length of u64 tree_size */
- result += 8;
-
- /* Length of u8 leaf_hash[32] */
- result += 32;
- return result;
-}
-int
-req_get_proof_by_hash_v1_clear_errors(req_get_proof_by_hash_v1_t *obj)
-{
- int r = obj->trunnel_error_code_;
- obj->trunnel_error_code_ = 0;
- return r;
-}
-ssize_t
-req_get_proof_by_hash_v1_encode(uint8_t *output, const size_t avail, const req_get_proof_by_hash_v1_t *obj)
-{
- ssize_t result = 0;
- size_t written = 0;
- uint8_t *ptr = output;
- const char *msg;
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- const ssize_t encoded_len = req_get_proof_by_hash_v1_encoded_len(obj);
-#endif
-
- if (NULL != (msg = req_get_proof_by_hash_v1_check(obj)))
- goto check_failed;
-
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- trunnel_assert(encoded_len >= 0);
-#endif
-
- /* Encode u64 tree_size */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->tree_size));
- written += 8; ptr += 8;
-
- /* Encode u8 leaf_hash[32] */
- trunnel_assert(written <= avail);
- if (avail - written < 32)
- goto truncated;
- memcpy(ptr, obj->leaf_hash, 32);
- written += 32; ptr += 32;
-
-
- trunnel_assert(ptr == output + written);
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- {
- trunnel_assert(encoded_len >= 0);
- trunnel_assert((size_t)encoded_len == written);
- }
-
-#endif
-
- return written;
-
- truncated:
- result = -2;
- goto fail;
- check_failed:
- (void)msg;
- result = -1;
- goto fail;
- fail:
- trunnel_assert(result < 0);
- return result;
-}
-
-/** As req_get_proof_by_hash_v1_parse(), but do not allocate the
- * output object.
- */
-static ssize_t
-req_get_proof_by_hash_v1_parse_into(req_get_proof_by_hash_v1_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 u64 tree_size */
- CHECK_REMAINING(8, truncated);
- obj->tree_size = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
-
- /* Parse u8 leaf_hash[32] */
- CHECK_REMAINING(32, truncated);
- memcpy(obj->leaf_hash, ptr, 32);
- remaining -= 32; ptr += 32;
- trunnel_assert(ptr + remaining == input + len_in);
- return len_in - remaining;
-
- truncated:
- return -2;
-}
-
-ssize_t
-req_get_proof_by_hash_v1_parse(req_get_proof_by_hash_v1_t **output, const uint8_t *input, const size_t len_in)
-{
- ssize_t result;
- *output = req_get_proof_by_hash_v1_new();
- if (NULL == *output)
- return -1;
- result = req_get_proof_by_hash_v1_parse_into(*output, input, len_in);
- if (result < 0) {
- req_get_proof_by_hash_v1_free(*output);
- *output = NULL;
- }
- return result;
-}
-sigident_ed25519_t *
-sigident_ed25519_new(void)
-{
- sigident_ed25519_t *val = trunnel_calloc(1, sizeof(sigident_ed25519_t));
- if (NULL == val)
- return NULL;
- return val;
-}
-
-/** Release all storage held inside 'obj', but do not free 'obj'.
- */
-static void
-sigident_ed25519_clear(sigident_ed25519_t *obj)
-{
- (void) obj;
-}
-
-void
-sigident_ed25519_free(sigident_ed25519_t *obj)
-{
- if (obj == NULL)
- return;
- sigident_ed25519_clear(obj);
- trunnel_memwipe(obj, sizeof(sigident_ed25519_t));
- trunnel_free_(obj);
-}
-
-size_t
-sigident_ed25519_getlen_signature(const sigident_ed25519_t *inp)
-{
- (void)inp; return 64;
-}
-
-uint8_t
-sigident_ed25519_get_signature(sigident_ed25519_t *inp, size_t idx)
-{
- trunnel_assert(idx < 64);
- return inp->signature[idx];
-}
-
-uint8_t
-sigident_ed25519_getconst_signature(const sigident_ed25519_t *inp, size_t idx)
-{
- return sigident_ed25519_get_signature((sigident_ed25519_t*)inp, idx);
-}
-int
-sigident_ed25519_set_signature(sigident_ed25519_t *inp, size_t idx, uint8_t elt)
-{
- trunnel_assert(idx < 64);
- inp->signature[idx] = elt;
- return 0;
-}
-
-uint8_t *
-sigident_ed25519_getarray_signature(sigident_ed25519_t *inp)
-{
- return inp->signature;
-}
-const uint8_t *
-sigident_ed25519_getconstarray_signature(const sigident_ed25519_t *inp)
-{
- return (const uint8_t *)sigident_ed25519_getarray_signature((sigident_ed25519_t*)inp);
-}
-size_t
-sigident_ed25519_getlen_identifier(const sigident_ed25519_t *inp)
-{
- (void)inp; return 32;
-}
-
-uint8_t
-sigident_ed25519_get_identifier(sigident_ed25519_t *inp, size_t idx)
-{
- trunnel_assert(idx < 32);
- return inp->identifier[idx];
-}
-
-uint8_t
-sigident_ed25519_getconst_identifier(const sigident_ed25519_t *inp, size_t idx)
-{
- return sigident_ed25519_get_identifier((sigident_ed25519_t*)inp, idx);
-}
-int
-sigident_ed25519_set_identifier(sigident_ed25519_t *inp, size_t idx, uint8_t elt)
-{
- trunnel_assert(idx < 32);
- inp->identifier[idx] = elt;
- return 0;
-}
-
-uint8_t *
-sigident_ed25519_getarray_identifier(sigident_ed25519_t *inp)
-{
- return inp->identifier;
-}
-const uint8_t *
-sigident_ed25519_getconstarray_identifier(const sigident_ed25519_t *inp)
-{
- return (const uint8_t *)sigident_ed25519_getarray_identifier((sigident_ed25519_t*)inp);
-}
-const char *
-sigident_ed25519_check(const sigident_ed25519_t *obj)
-{
- if (obj == NULL)
- return "Object was NULL";
- if (obj->trunnel_error_code_)
- return "A set function failed on this object";
- return NULL;
-}
-
-ssize_t
-sigident_ed25519_encoded_len(const sigident_ed25519_t *obj)
-{
- ssize_t result = 0;
-
- if (NULL != sigident_ed25519_check(obj))
- return -1;
-
-
- /* Length of u8 signature[64] */
- result += 64;
-
- /* Length of u8 identifier[32] */
- result += 32;
- return result;
-}
-int
-sigident_ed25519_clear_errors(sigident_ed25519_t *obj)
-{
- int r = obj->trunnel_error_code_;
- obj->trunnel_error_code_ = 0;
- return r;
-}
-ssize_t
-sigident_ed25519_encode(uint8_t *output, const size_t avail, const sigident_ed25519_t *obj)
-{
- ssize_t result = 0;
- size_t written = 0;
- uint8_t *ptr = output;
- const char *msg;
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- const ssize_t encoded_len = sigident_ed25519_encoded_len(obj);
-#endif
-
- if (NULL != (msg = sigident_ed25519_check(obj)))
- goto check_failed;
-
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- trunnel_assert(encoded_len >= 0);
-#endif
-
- /* Encode u8 signature[64] */
- trunnel_assert(written <= avail);
- if (avail - written < 64)
- goto truncated;
- memcpy(ptr, obj->signature, 64);
- written += 64; ptr += 64;
-
- /* Encode u8 identifier[32] */
- trunnel_assert(written <= avail);
- if (avail - written < 32)
- goto truncated;
- memcpy(ptr, obj->identifier, 32);
- written += 32; ptr += 32;
-
-
- trunnel_assert(ptr == output + written);
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- {
- trunnel_assert(encoded_len >= 0);
- trunnel_assert((size_t)encoded_len == written);
- }
-
-#endif
-
- return written;
-
- truncated:
- result = -2;
- goto fail;
- check_failed:
- (void)msg;
- result = -1;
- goto fail;
- fail:
- trunnel_assert(result < 0);
- return result;
-}
-
-/** As sigident_ed25519_parse(), but do not allocate the output
- * object.
- */
-static ssize_t
-sigident_ed25519_parse_into(sigident_ed25519_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 signature[64] */
- CHECK_REMAINING(64, truncated);
- memcpy(obj->signature, ptr, 64);
- remaining -= 64; ptr += 64;
-
- /* Parse u8 identifier[32] */
- CHECK_REMAINING(32, truncated);
- memcpy(obj->identifier, ptr, 32);
- remaining -= 32; ptr += 32;
- trunnel_assert(ptr + remaining == input + len_in);
- return len_in - remaining;
-
- truncated:
- return -2;
-}
-
-ssize_t
-sigident_ed25519_parse(sigident_ed25519_t **output, const uint8_t *input, const size_t len_in)
-{
- ssize_t result;
- *output = sigident_ed25519_new();
- if (NULL == *output)
- return -1;
- result = sigident_ed25519_parse_into(*output, input, len_in);
- if (result < 0) {
- sigident_ed25519_free(*output);
- *output = NULL;
- }
- return result;
-}
-signed_checksum32_ed25519_t *
-signed_checksum32_ed25519_new(void)
-{
- signed_checksum32_ed25519_t *val = trunnel_calloc(1, sizeof(signed_checksum32_ed25519_t));
- if (NULL == val)
- return NULL;
- val->length = 1;
- return val;
-}
-
-/** Release all storage held inside 'obj', but do not free 'obj'.
- */
-static void
-signed_checksum32_ed25519_clear(signed_checksum32_ed25519_t *obj)
-{
- (void) obj;
- TRUNNEL_DYNARRAY_WIPE(&obj->identifier);
- TRUNNEL_DYNARRAY_CLEAR(&obj->identifier);
-}
-
-void
-signed_checksum32_ed25519_free(signed_checksum32_ed25519_t *obj)
-{
- if (obj == NULL)
- return;
- signed_checksum32_ed25519_clear(obj);
- trunnel_memwipe(obj, sizeof(signed_checksum32_ed25519_t));
- trunnel_free_(obj);
-}
-
-size_t
-signed_checksum32_ed25519_getlen_checksum(const signed_checksum32_ed25519_t *inp)
-{
- (void)inp; return 32;
-}
-
-uint8_t
-signed_checksum32_ed25519_get_checksum(signed_checksum32_ed25519_t *inp, size_t idx)
-{
- trunnel_assert(idx < 32);
- return inp->checksum[idx];
-}
-
-uint8_t
-signed_checksum32_ed25519_getconst_checksum(const signed_checksum32_ed25519_t *inp, size_t idx)
-{
- return signed_checksum32_ed25519_get_checksum((signed_checksum32_ed25519_t*)inp, idx);
-}
-int
-signed_checksum32_ed25519_set_checksum(signed_checksum32_ed25519_t *inp, size_t idx, uint8_t elt)
-{
- trunnel_assert(idx < 32);
- inp->checksum[idx] = elt;
- return 0;
-}
-
-uint8_t *
-signed_checksum32_ed25519_getarray_checksum(signed_checksum32_ed25519_t *inp)
-{
- return inp->checksum;
-}
-const uint8_t *
-signed_checksum32_ed25519_getconstarray_checksum(const signed_checksum32_ed25519_t *inp)
-{
- return (const uint8_t *)signed_checksum32_ed25519_getarray_checksum((signed_checksum32_ed25519_t*)inp);
-}
-uint64_t
-signed_checksum32_ed25519_get_length(const signed_checksum32_ed25519_t *inp)
-{
- return inp->length;
-}
-int
-signed_checksum32_ed25519_set_length(signed_checksum32_ed25519_t *inp, uint64_t val)
-{
- if (! (((val >= 1 && val <= 128)))) {
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
- }
- inp->length = val;
- return 0;
-}
-size_t
-signed_checksum32_ed25519_getlen_identifier(const signed_checksum32_ed25519_t *inp)
-{
- return TRUNNEL_DYNARRAY_LEN(&inp->identifier);
-}
-
-uint8_t
-signed_checksum32_ed25519_get_identifier(signed_checksum32_ed25519_t *inp, size_t idx)
-{
- return TRUNNEL_DYNARRAY_GET(&inp->identifier, idx);
-}
-
-uint8_t
-signed_checksum32_ed25519_getconst_identifier(const signed_checksum32_ed25519_t *inp, size_t idx)
-{
- return signed_checksum32_ed25519_get_identifier((signed_checksum32_ed25519_t*)inp, idx);
-}
-int
-signed_checksum32_ed25519_set_identifier(signed_checksum32_ed25519_t *inp, size_t idx, uint8_t elt)
-{
- TRUNNEL_DYNARRAY_SET(&inp->identifier, idx, elt);
- return 0;
-}
-int
-signed_checksum32_ed25519_add_identifier(signed_checksum32_ed25519_t *inp, uint8_t elt)
-{
-#if SIZE_MAX >= UINT64_MAX
- if (inp->identifier.n_ == UINT64_MAX)
- goto trunnel_alloc_failed;
-#endif
- TRUNNEL_DYNARRAY_ADD(uint8_t, &inp->identifier, elt, {});
- return 0;
- trunnel_alloc_failed:
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
-}
-
-uint8_t *
-signed_checksum32_ed25519_getarray_identifier(signed_checksum32_ed25519_t *inp)
-{
- return inp->identifier.elts_;
-}
-const uint8_t *
-signed_checksum32_ed25519_getconstarray_identifier(const signed_checksum32_ed25519_t *inp)
-{
- return (const uint8_t *)signed_checksum32_ed25519_getarray_identifier((signed_checksum32_ed25519_t*)inp);
-}
-int
-signed_checksum32_ed25519_setlen_identifier(signed_checksum32_ed25519_t *inp, size_t newlen)
-{
- uint8_t *newptr;
-#if UINT64_MAX < SIZE_MAX
- if (newlen > UINT64_MAX)
- goto trunnel_alloc_failed;
-#endif
- newptr = trunnel_dynarray_setlen(&inp->identifier.allocated_,
- &inp->identifier.n_, inp->identifier.elts_, newlen,
- sizeof(inp->identifier.elts_[0]), (trunnel_free_fn_t) NULL,
- &inp->trunnel_error_code_);
- if (newlen != 0 && newptr == NULL)
- goto trunnel_alloc_failed;
- inp->identifier.elts_ = newptr;
- return 0;
- trunnel_alloc_failed:
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
-}
-size_t
-signed_checksum32_ed25519_getlen_signature(const signed_checksum32_ed25519_t *inp)
-{
- (void)inp; return 64;
-}
-
-uint8_t
-signed_checksum32_ed25519_get_signature(signed_checksum32_ed25519_t *inp, size_t idx)
-{
- trunnel_assert(idx < 64);
- return inp->signature[idx];
-}
-
-uint8_t
-signed_checksum32_ed25519_getconst_signature(const signed_checksum32_ed25519_t *inp, size_t idx)
-{
- return signed_checksum32_ed25519_get_signature((signed_checksum32_ed25519_t*)inp, idx);
-}
-int
-signed_checksum32_ed25519_set_signature(signed_checksum32_ed25519_t *inp, size_t idx, uint8_t elt)
-{
- trunnel_assert(idx < 64);
- inp->signature[idx] = elt;
- return 0;
-}
-
-uint8_t *
-signed_checksum32_ed25519_getarray_signature(signed_checksum32_ed25519_t *inp)
-{
- return inp->signature;
-}
-const uint8_t *
-signed_checksum32_ed25519_getconstarray_signature(const signed_checksum32_ed25519_t *inp)
-{
- return (const uint8_t *)signed_checksum32_ed25519_getarray_signature((signed_checksum32_ed25519_t*)inp);
-}
-size_t
-signed_checksum32_ed25519_getlen_namespace(const signed_checksum32_ed25519_t *inp)
-{
- (void)inp; return 32;
-}
-
-uint8_t
-signed_checksum32_ed25519_get_namespace(signed_checksum32_ed25519_t *inp, size_t idx)
-{
- trunnel_assert(idx < 32);
- return inp->namespace[idx];
-}
-
-uint8_t
-signed_checksum32_ed25519_getconst_namespace(const signed_checksum32_ed25519_t *inp, size_t idx)
-{
- return signed_checksum32_ed25519_get_namespace((signed_checksum32_ed25519_t*)inp, idx);
-}
-int
-signed_checksum32_ed25519_set_namespace(signed_checksum32_ed25519_t *inp, size_t idx, uint8_t elt)
-{
- trunnel_assert(idx < 32);
- inp->namespace[idx] = elt;
- return 0;
-}
-
-uint8_t *
-signed_checksum32_ed25519_getarray_namespace(signed_checksum32_ed25519_t *inp)
-{
- return inp->namespace;
-}
-const uint8_t *
-signed_checksum32_ed25519_getconstarray_namespace(const signed_checksum32_ed25519_t *inp)
-{
- return (const uint8_t *)signed_checksum32_ed25519_getarray_namespace((signed_checksum32_ed25519_t*)inp);
-}
-const char *
-signed_checksum32_ed25519_check(const signed_checksum32_ed25519_t *obj)
-{
- if (obj == NULL)
- return "Object was NULL";
- if (obj->trunnel_error_code_)
- return "A set function failed on this object";
- if (! ((obj->length >= 1 && obj->length <= 128)))
- return "Integer out of bounds";
- if (TRUNNEL_DYNARRAY_LEN(&obj->identifier) != obj->length)
- return "Length mismatch for identifier";
- return NULL;
-}
-
-ssize_t
-signed_checksum32_ed25519_encoded_len(const signed_checksum32_ed25519_t *obj)
-{
- ssize_t result = 0;
-
- if (NULL != signed_checksum32_ed25519_check(obj))
- return -1;
-
-
- /* Length of u8 checksum[32] */
- result += 32;
-
- /* Length of u64 length IN [1..128] */
- result += 8;
-
- /* Length of u8 identifier[length] */
- result += TRUNNEL_DYNARRAY_LEN(&obj->identifier);
-
- /* Length of u8 signature[64] */
- result += 64;
-
- /* Length of u8 namespace[32] */
- result += 32;
- return result;
-}
-int
-signed_checksum32_ed25519_clear_errors(signed_checksum32_ed25519_t *obj)
-{
- int r = obj->trunnel_error_code_;
- obj->trunnel_error_code_ = 0;
- return r;
-}
-ssize_t
-signed_checksum32_ed25519_encode(uint8_t *output, const size_t avail, const signed_checksum32_ed25519_t *obj)
-{
- ssize_t result = 0;
- size_t written = 0;
- uint8_t *ptr = output;
- const char *msg;
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- const ssize_t encoded_len = signed_checksum32_ed25519_encoded_len(obj);
-#endif
-
- if (NULL != (msg = signed_checksum32_ed25519_check(obj)))
- goto check_failed;
-
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- trunnel_assert(encoded_len >= 0);
-#endif
-
- /* Encode u8 checksum[32] */
- trunnel_assert(written <= avail);
- if (avail - written < 32)
- goto truncated;
- memcpy(ptr, obj->checksum, 32);
- written += 32; ptr += 32;
-
- /* Encode u64 length IN [1..128] */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->length));
- written += 8; ptr += 8;
-
- /* Encode u8 identifier[length] */
- {
- size_t elt_len = TRUNNEL_DYNARRAY_LEN(&obj->identifier);
- trunnel_assert(obj->length == elt_len);
- trunnel_assert(written <= avail);
- if (avail - written < elt_len)
- goto truncated;
- if (elt_len)
- memcpy(ptr, obj->identifier.elts_, elt_len);
- written += elt_len; ptr += elt_len;
- }
-
- /* Encode u8 signature[64] */
- trunnel_assert(written <= avail);
- if (avail - written < 64)
- goto truncated;
- memcpy(ptr, obj->signature, 64);
- written += 64; ptr += 64;
-
- /* Encode u8 namespace[32] */
- trunnel_assert(written <= avail);
- if (avail - written < 32)
- goto truncated;
- memcpy(ptr, obj->namespace, 32);
- written += 32; ptr += 32;
-
-
- trunnel_assert(ptr == output + written);
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- {
- trunnel_assert(encoded_len >= 0);
- trunnel_assert((size_t)encoded_len == written);
- }
-
-#endif
-
- return written;
-
- truncated:
- result = -2;
- goto fail;
- check_failed:
- (void)msg;
- result = -1;
- goto fail;
- fail:
- trunnel_assert(result < 0);
- return result;
-}
-
-/** As signed_checksum32_ed25519_parse(), but do not allocate the
- * output object.
- */
-static ssize_t
-signed_checksum32_ed25519_parse_into(signed_checksum32_ed25519_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 checksum[32] */
- CHECK_REMAINING(32, truncated);
- memcpy(obj->checksum, ptr, 32);
- remaining -= 32; ptr += 32;
-
- /* Parse u64 length IN [1..128] */
- CHECK_REMAINING(8, truncated);
- obj->length = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
- if (! ((obj->length >= 1 && obj->length <= 128)))
- goto fail;
-
- /* Parse u8 identifier[length] */
- CHECK_REMAINING(obj->length, truncated);
- TRUNNEL_DYNARRAY_EXPAND(uint8_t, &obj->identifier, obj->length, {});
- obj->identifier.n_ = obj->length;
- if (obj->length)
- memcpy(obj->identifier.elts_, ptr, obj->length);
- ptr += obj->length; remaining -= obj->length;
-
- /* Parse u8 signature[64] */
- CHECK_REMAINING(64, truncated);
- memcpy(obj->signature, ptr, 64);
- remaining -= 64; ptr += 64;
-
- /* Parse u8 namespace[32] */
- CHECK_REMAINING(32, truncated);
- memcpy(obj->namespace, ptr, 32);
- remaining -= 32; ptr += 32;
- trunnel_assert(ptr + remaining == input + len_in);
- return len_in - remaining;
-
- truncated:
- return -2;
- trunnel_alloc_failed:
- return -1;
- fail:
- result = -1;
- return result;
-}
-
-ssize_t
-signed_checksum32_ed25519_parse(signed_checksum32_ed25519_t **output, const uint8_t *input, const size_t len_in)
-{
- ssize_t result;
- *output = signed_checksum32_ed25519_new();
- if (NULL == *output)
- return -1;
- result = signed_checksum32_ed25519_parse_into(*output, input, len_in);
- if (result < 0) {
- signed_checksum32_ed25519_free(*output);
- *output = NULL;
- }
- return result;
-}
-consistency_proof_v1_t *
-consistency_proof_v1_new(void)
-{
- consistency_proof_v1_t *val = trunnel_calloc(1, sizeof(consistency_proof_v1_t));
- if (NULL == val)
- return NULL;
- val->magic = MAGIC_V1;
- val->format = T_CONSISTENCY_PROOF_V1;
- return val;
-}
-
-/** Release all storage held inside 'obj', but do not free 'obj'.
- */
-static void
-consistency_proof_v1_clear(consistency_proof_v1_t *obj)
-{
- (void) obj;
- {
-
- unsigned idx;
- for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->hashes); ++idx) {
- hash_free(TRUNNEL_DYNARRAY_GET(&obj->hashes, idx));
- }
- }
- TRUNNEL_DYNARRAY_WIPE(&obj->hashes);
- TRUNNEL_DYNARRAY_CLEAR(&obj->hashes);
-}
-
-void
-consistency_proof_v1_free(consistency_proof_v1_t *obj)
-{
- if (obj == NULL)
- return;
- consistency_proof_v1_clear(obj);
- trunnel_memwipe(obj, sizeof(consistency_proof_v1_t));
- trunnel_free_(obj);
-}
-
-uint64_t
-consistency_proof_v1_get_magic(const consistency_proof_v1_t *inp)
-{
- return inp->magic;
-}
-int
-consistency_proof_v1_set_magic(consistency_proof_v1_t *inp, uint64_t val)
-{
- if (! ((val == MAGIC_V1))) {
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
- }
- inp->magic = val;
- return 0;
-}
-uint64_t
-consistency_proof_v1_get_format(const consistency_proof_v1_t *inp)
-{
- return inp->format;
-}
-int
-consistency_proof_v1_set_format(consistency_proof_v1_t *inp, uint64_t val)
-{
- if (! ((val == T_CONSISTENCY_PROOF_V1))) {
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
- }
- inp->format = val;
- return 0;
-}
-size_t
-consistency_proof_v1_getlen_identifier(const consistency_proof_v1_t *inp)
-{
- (void)inp; return 32;
-}
-
-uint8_t
-consistency_proof_v1_get_identifier(consistency_proof_v1_t *inp, size_t idx)
-{
- trunnel_assert(idx < 32);
- return inp->identifier[idx];
-}
-
-uint8_t
-consistency_proof_v1_getconst_identifier(const consistency_proof_v1_t *inp, size_t idx)
-{
- return consistency_proof_v1_get_identifier((consistency_proof_v1_t*)inp, idx);
-}
-int
-consistency_proof_v1_set_identifier(consistency_proof_v1_t *inp, size_t idx, uint8_t elt)
-{
- trunnel_assert(idx < 32);
- inp->identifier[idx] = elt;
- return 0;
-}
-
-uint8_t *
-consistency_proof_v1_getarray_identifier(consistency_proof_v1_t *inp)
-{
- return inp->identifier;
-}
-const uint8_t *
-consistency_proof_v1_getconstarray_identifier(const consistency_proof_v1_t *inp)
-{
- return (const uint8_t *)consistency_proof_v1_getarray_identifier((consistency_proof_v1_t*)inp);
-}
-uint64_t
-consistency_proof_v1_get_old_size(const consistency_proof_v1_t *inp)
-{
- return inp->old_size;
-}
-int
-consistency_proof_v1_set_old_size(consistency_proof_v1_t *inp, uint64_t val)
-{
- inp->old_size = val;
- return 0;
-}
-uint64_t
-consistency_proof_v1_get_new_size(const consistency_proof_v1_t *inp)
-{
- return inp->new_size;
-}
-int
-consistency_proof_v1_set_new_size(consistency_proof_v1_t *inp, uint64_t val)
-{
- inp->new_size = val;
- return 0;
-}
-uint64_t
-consistency_proof_v1_get_n_items(const consistency_proof_v1_t *inp)
-{
- return inp->n_items;
-}
-int
-consistency_proof_v1_set_n_items(consistency_proof_v1_t *inp, uint64_t val)
-{
- inp->n_items = val;
- return 0;
-}
-size_t
-consistency_proof_v1_getlen_hashes(const consistency_proof_v1_t *inp)
-{
- return TRUNNEL_DYNARRAY_LEN(&inp->hashes);
-}
-
-struct hash_st *
-consistency_proof_v1_get_hashes(consistency_proof_v1_t *inp, size_t idx)
-{
- return TRUNNEL_DYNARRAY_GET(&inp->hashes, idx);
-}
-
- const struct hash_st *
-consistency_proof_v1_getconst_hashes(const consistency_proof_v1_t *inp, size_t idx)
-{
- return consistency_proof_v1_get_hashes((consistency_proof_v1_t*)inp, idx);
-}
-int
-consistency_proof_v1_set_hashes(consistency_proof_v1_t *inp, size_t idx, struct hash_st * elt)
-{
- hash_t *oldval = TRUNNEL_DYNARRAY_GET(&inp->hashes, idx);
- if (oldval && oldval != elt)
- hash_free(oldval);
- return consistency_proof_v1_set0_hashes(inp, idx, elt);
-}
-int
-consistency_proof_v1_set0_hashes(consistency_proof_v1_t *inp, size_t idx, struct hash_st * elt)
-{
- TRUNNEL_DYNARRAY_SET(&inp->hashes, idx, elt);
- return 0;
-}
-int
-consistency_proof_v1_add_hashes(consistency_proof_v1_t *inp, struct hash_st * elt)
-{
-#if SIZE_MAX >= UINT64_MAX
- if (inp->hashes.n_ == UINT64_MAX)
- goto trunnel_alloc_failed;
-#endif
- TRUNNEL_DYNARRAY_ADD(struct hash_st *, &inp->hashes, elt, {});
- return 0;
- trunnel_alloc_failed:
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
-}
-
-struct hash_st * *
-consistency_proof_v1_getarray_hashes(consistency_proof_v1_t *inp)
-{
- return inp->hashes.elts_;
-}
-const struct hash_st * const *
-consistency_proof_v1_getconstarray_hashes(const consistency_proof_v1_t *inp)
-{
- return (const struct hash_st * const *)consistency_proof_v1_getarray_hashes((consistency_proof_v1_t*)inp);
-}
-int
-consistency_proof_v1_setlen_hashes(consistency_proof_v1_t *inp, size_t newlen)
-{
- struct hash_st * *newptr;
-#if UINT64_MAX < SIZE_MAX
- if (newlen > UINT64_MAX)
- goto trunnel_alloc_failed;
-#endif
- newptr = trunnel_dynarray_setlen(&inp->hashes.allocated_,
- &inp->hashes.n_, inp->hashes.elts_, newlen,
- sizeof(inp->hashes.elts_[0]), (trunnel_free_fn_t) hash_free,
- &inp->trunnel_error_code_);
- if (newlen != 0 && newptr == NULL)
- goto trunnel_alloc_failed;
- inp->hashes.elts_ = newptr;
- return 0;
- trunnel_alloc_failed:
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
-}
-const char *
-consistency_proof_v1_check(const consistency_proof_v1_t *obj)
-{
- if (obj == NULL)
- return "Object was NULL";
- if (obj->trunnel_error_code_)
- return "A set function failed on this object";
- if (! (obj->magic == MAGIC_V1))
- return "Integer out of bounds";
- if (! (obj->format == T_CONSISTENCY_PROOF_V1))
- return "Integer out of bounds";
- {
- const char *msg;
-
- unsigned idx;
- for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->hashes); ++idx) {
- if (NULL != (msg = hash_check(TRUNNEL_DYNARRAY_GET(&obj->hashes, idx))))
- return msg;
- }
- }
- if (TRUNNEL_DYNARRAY_LEN(&obj->hashes) != obj->n_items)
- return "Length mismatch for hashes";
- return NULL;
-}
-
-ssize_t
-consistency_proof_v1_encoded_len(const consistency_proof_v1_t *obj)
-{
- ssize_t result = 0;
-
- if (NULL != consistency_proof_v1_check(obj))
- return -1;
-
-
- /* Length of u64 magic IN [MAGIC_V1] */
- result += 8;
-
- /* Length of u64 format IN [T_CONSISTENCY_PROOF_V1] */
- result += 8;
-
- /* Length of u8 identifier[32] */
- result += 32;
-
- /* Length of u64 old_size */
- result += 8;
-
- /* Length of u64 new_size */
- result += 8;
-
- /* Length of u64 n_items */
- result += 8;
-
- /* Length of struct hash hashes[n_items] */
- {
-
- unsigned idx;
- for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->hashes); ++idx) {
- result += hash_encoded_len(TRUNNEL_DYNARRAY_GET(&obj->hashes, idx));
- }
- }
- return result;
-}
-int
-consistency_proof_v1_clear_errors(consistency_proof_v1_t *obj)
-{
- int r = obj->trunnel_error_code_;
- obj->trunnel_error_code_ = 0;
- return r;
-}
-ssize_t
-consistency_proof_v1_encode(uint8_t *output, const size_t avail, const consistency_proof_v1_t *obj)
-{
- ssize_t result = 0;
- size_t written = 0;
- uint8_t *ptr = output;
- const char *msg;
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- const ssize_t encoded_len = consistency_proof_v1_encoded_len(obj);
-#endif
-
- if (NULL != (msg = consistency_proof_v1_check(obj)))
- goto check_failed;
-
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- trunnel_assert(encoded_len >= 0);
-#endif
-
- /* Encode u64 magic IN [MAGIC_V1] */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->magic));
- written += 8; ptr += 8;
-
- /* Encode u64 format IN [T_CONSISTENCY_PROOF_V1] */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->format));
- written += 8; ptr += 8;
-
- /* Encode u8 identifier[32] */
- trunnel_assert(written <= avail);
- if (avail - written < 32)
- goto truncated;
- memcpy(ptr, obj->identifier, 32);
- written += 32; ptr += 32;
-
- /* Encode u64 old_size */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->old_size));
- written += 8; ptr += 8;
-
- /* Encode u64 new_size */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->new_size));
- written += 8; ptr += 8;
-
- /* Encode u64 n_items */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->n_items));
- written += 8; ptr += 8;
-
- /* Encode struct hash hashes[n_items] */
- {
-
- unsigned idx;
- for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->hashes); ++idx) {
- trunnel_assert(written <= avail);
- result = hash_encode(ptr, avail - written, TRUNNEL_DYNARRAY_GET(&obj->hashes, idx));
- if (result < 0)
- goto fail; /* XXXXXXX !*/
- written += result; ptr += result;
- }
- }
-
-
- trunnel_assert(ptr == output + written);
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- {
- trunnel_assert(encoded_len >= 0);
- trunnel_assert((size_t)encoded_len == written);
- }
-
-#endif
-
- return written;
-
- truncated:
- result = -2;
- goto fail;
- check_failed:
- (void)msg;
- result = -1;
- goto fail;
- fail:
- trunnel_assert(result < 0);
- return result;
-}
-
-/** As consistency_proof_v1_parse(), but do not allocate the output
- * object.
- */
-static ssize_t
-consistency_proof_v1_parse_into(consistency_proof_v1_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 u64 magic IN [MAGIC_V1] */
- CHECK_REMAINING(8, truncated);
- obj->magic = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
- if (! (obj->magic == MAGIC_V1))
- goto fail;
-
- /* Parse u64 format IN [T_CONSISTENCY_PROOF_V1] */
- CHECK_REMAINING(8, truncated);
- obj->format = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
- if (! (obj->format == T_CONSISTENCY_PROOF_V1))
- goto fail;
-
- /* Parse u8 identifier[32] */
- CHECK_REMAINING(32, truncated);
- memcpy(obj->identifier, ptr, 32);
- remaining -= 32; ptr += 32;
-
- /* Parse u64 old_size */
- CHECK_REMAINING(8, truncated);
- obj->old_size = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
-
- /* Parse u64 new_size */
- CHECK_REMAINING(8, truncated);
- obj->new_size = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
-
- /* Parse u64 n_items */
- CHECK_REMAINING(8, truncated);
- obj->n_items = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
-
- /* Parse struct hash hashes[n_items] */
- TRUNNEL_DYNARRAY_EXPAND(hash_t *, &obj->hashes, obj->n_items, {});
- {
- hash_t * elt;
- unsigned idx;
- for (idx = 0; idx < obj->n_items; ++idx) {
- result = hash_parse(&elt, ptr, remaining);
- if (result < 0)
- goto relay_fail;
- trunnel_assert((size_t)result <= remaining);
- remaining -= result; ptr += result;
- TRUNNEL_DYNARRAY_ADD(hash_t *, &obj->hashes, elt, {hash_free(elt);});
- }
- }
- trunnel_assert(ptr + remaining == input + len_in);
- return len_in - remaining;
-
- truncated:
- return -2;
- relay_fail:
- trunnel_assert(result < 0);
- return result;
- trunnel_alloc_failed:
- return -1;
- fail:
- result = -1;
- return result;
-}
-
-ssize_t
-consistency_proof_v1_parse(consistency_proof_v1_t **output, const uint8_t *input, const size_t len_in)
-{
- ssize_t result;
- *output = consistency_proof_v1_new();
- if (NULL == *output)
- return -1;
- result = consistency_proof_v1_parse_into(*output, input, len_in);
- if (result < 0) {
- consistency_proof_v1_free(*output);
- *output = NULL;
- }
- return result;
-}
-entries_v1_t *
-entries_v1_new(void)
-{
- entries_v1_t *val = trunnel_calloc(1, sizeof(entries_v1_t));
- if (NULL == val)
- return NULL;
- val->magic = MAGIC_V1;
- val->format = T_ENTRIES_V1;
- return val;
-}
-
-/** Release all storage held inside 'obj', but do not free 'obj'.
- */
-static void
-entries_v1_clear(entries_v1_t *obj)
-{
- (void) obj;
- {
-
- unsigned idx;
- for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->checksums); ++idx) {
- signed_checksum32_ed25519_free(TRUNNEL_DYNARRAY_GET(&obj->checksums, idx));
- }
- }
- TRUNNEL_DYNARRAY_WIPE(&obj->checksums);
- TRUNNEL_DYNARRAY_CLEAR(&obj->checksums);
-}
-
-void
-entries_v1_free(entries_v1_t *obj)
-{
- if (obj == NULL)
- return;
- entries_v1_clear(obj);
- trunnel_memwipe(obj, sizeof(entries_v1_t));
- trunnel_free_(obj);
-}
-
-uint64_t
-entries_v1_get_magic(const entries_v1_t *inp)
-{
- return inp->magic;
-}
-int
-entries_v1_set_magic(entries_v1_t *inp, uint64_t val)
-{
- if (! ((val == MAGIC_V1))) {
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
- }
- inp->magic = val;
- return 0;
-}
-uint64_t
-entries_v1_get_format(const entries_v1_t *inp)
-{
- return inp->format;
-}
-int
-entries_v1_set_format(entries_v1_t *inp, uint64_t val)
-{
- if (! ((val == T_ENTRIES_V1))) {
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
- }
- inp->format = val;
- return 0;
-}
-uint64_t
-entries_v1_get_n_items(const entries_v1_t *inp)
-{
- return inp->n_items;
-}
-int
-entries_v1_set_n_items(entries_v1_t *inp, uint64_t val)
-{
- inp->n_items = val;
- return 0;
-}
-size_t
-entries_v1_getlen_checksums(const entries_v1_t *inp)
-{
- return TRUNNEL_DYNARRAY_LEN(&inp->checksums);
-}
-
-struct signed_checksum32_ed25519_st *
-entries_v1_get_checksums(entries_v1_t *inp, size_t idx)
-{
- return TRUNNEL_DYNARRAY_GET(&inp->checksums, idx);
-}
-
- const struct signed_checksum32_ed25519_st *
-entries_v1_getconst_checksums(const entries_v1_t *inp, size_t idx)
-{
- return entries_v1_get_checksums((entries_v1_t*)inp, idx);
-}
-int
-entries_v1_set_checksums(entries_v1_t *inp, size_t idx, struct signed_checksum32_ed25519_st * elt)
-{
- signed_checksum32_ed25519_t *oldval = TRUNNEL_DYNARRAY_GET(&inp->checksums, idx);
- if (oldval && oldval != elt)
- signed_checksum32_ed25519_free(oldval);
- return entries_v1_set0_checksums(inp, idx, elt);
-}
-int
-entries_v1_set0_checksums(entries_v1_t *inp, size_t idx, struct signed_checksum32_ed25519_st * elt)
-{
- TRUNNEL_DYNARRAY_SET(&inp->checksums, idx, elt);
- return 0;
-}
-int
-entries_v1_add_checksums(entries_v1_t *inp, struct signed_checksum32_ed25519_st * elt)
-{
-#if SIZE_MAX >= UINT64_MAX
- if (inp->checksums.n_ == UINT64_MAX)
- goto trunnel_alloc_failed;
-#endif
- TRUNNEL_DYNARRAY_ADD(struct signed_checksum32_ed25519_st *, &inp->checksums, elt, {});
- return 0;
- trunnel_alloc_failed:
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
-}
-
-struct signed_checksum32_ed25519_st * *
-entries_v1_getarray_checksums(entries_v1_t *inp)
-{
- return inp->checksums.elts_;
-}
-const struct signed_checksum32_ed25519_st * const *
-entries_v1_getconstarray_checksums(const entries_v1_t *inp)
-{
- return (const struct signed_checksum32_ed25519_st * const *)entries_v1_getarray_checksums((entries_v1_t*)inp);
-}
-int
-entries_v1_setlen_checksums(entries_v1_t *inp, size_t newlen)
-{
- struct signed_checksum32_ed25519_st * *newptr;
-#if UINT64_MAX < SIZE_MAX
- if (newlen > UINT64_MAX)
- goto trunnel_alloc_failed;
-#endif
- newptr = trunnel_dynarray_setlen(&inp->checksums.allocated_,
- &inp->checksums.n_, inp->checksums.elts_, newlen,
- sizeof(inp->checksums.elts_[0]), (trunnel_free_fn_t) signed_checksum32_ed25519_free,
- &inp->trunnel_error_code_);
- if (newlen != 0 && newptr == NULL)
- goto trunnel_alloc_failed;
- inp->checksums.elts_ = newptr;
- return 0;
- trunnel_alloc_failed:
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
-}
-const char *
-entries_v1_check(const entries_v1_t *obj)
-{
- if (obj == NULL)
- return "Object was NULL";
- if (obj->trunnel_error_code_)
- return "A set function failed on this object";
- if (! (obj->magic == MAGIC_V1))
- return "Integer out of bounds";
- if (! (obj->format == T_ENTRIES_V1))
- return "Integer out of bounds";
- {
- const char *msg;
-
- unsigned idx;
- for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->checksums); ++idx) {
- if (NULL != (msg = signed_checksum32_ed25519_check(TRUNNEL_DYNARRAY_GET(&obj->checksums, idx))))
- return msg;
- }
- }
- if (TRUNNEL_DYNARRAY_LEN(&obj->checksums) != obj->n_items)
- return "Length mismatch for checksums";
- return NULL;
-}
-
-ssize_t
-entries_v1_encoded_len(const entries_v1_t *obj)
-{
- ssize_t result = 0;
-
- if (NULL != entries_v1_check(obj))
- return -1;
-
-
- /* Length of u64 magic IN [MAGIC_V1] */
- result += 8;
-
- /* Length of u64 format IN [T_ENTRIES_V1] */
- result += 8;
-
- /* Length of u64 n_items */
- result += 8;
-
- /* Length of struct signed_checksum32_ed25519 checksums[n_items] */
- {
-
- unsigned idx;
- for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->checksums); ++idx) {
- result += signed_checksum32_ed25519_encoded_len(TRUNNEL_DYNARRAY_GET(&obj->checksums, idx));
- }
- }
- return result;
-}
-int
-entries_v1_clear_errors(entries_v1_t *obj)
-{
- int r = obj->trunnel_error_code_;
- obj->trunnel_error_code_ = 0;
- return r;
-}
-ssize_t
-entries_v1_encode(uint8_t *output, const size_t avail, const entries_v1_t *obj)
-{
- ssize_t result = 0;
- size_t written = 0;
- uint8_t *ptr = output;
- const char *msg;
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- const ssize_t encoded_len = entries_v1_encoded_len(obj);
-#endif
-
- if (NULL != (msg = entries_v1_check(obj)))
- goto check_failed;
-
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- trunnel_assert(encoded_len >= 0);
-#endif
-
- /* Encode u64 magic IN [MAGIC_V1] */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->magic));
- written += 8; ptr += 8;
-
- /* Encode u64 format IN [T_ENTRIES_V1] */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->format));
- written += 8; ptr += 8;
-
- /* Encode u64 n_items */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->n_items));
- written += 8; ptr += 8;
-
- /* Encode struct signed_checksum32_ed25519 checksums[n_items] */
- {
-
- unsigned idx;
- for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->checksums); ++idx) {
- trunnel_assert(written <= avail);
- result = signed_checksum32_ed25519_encode(ptr, avail - written, TRUNNEL_DYNARRAY_GET(&obj->checksums, idx));
- if (result < 0)
- goto fail; /* XXXXXXX !*/
- written += result; ptr += result;
- }
- }
-
-
- trunnel_assert(ptr == output + written);
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- {
- trunnel_assert(encoded_len >= 0);
- trunnel_assert((size_t)encoded_len == written);
- }
-
-#endif
-
- return written;
-
- truncated:
- result = -2;
- goto fail;
- check_failed:
- (void)msg;
- result = -1;
- goto fail;
- fail:
- trunnel_assert(result < 0);
- return result;
-}
-
-/** As entries_v1_parse(), but do not allocate the output object.
- */
-static ssize_t
-entries_v1_parse_into(entries_v1_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 u64 magic IN [MAGIC_V1] */
- CHECK_REMAINING(8, truncated);
- obj->magic = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
- if (! (obj->magic == MAGIC_V1))
- goto fail;
-
- /* Parse u64 format IN [T_ENTRIES_V1] */
- CHECK_REMAINING(8, truncated);
- obj->format = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
- if (! (obj->format == T_ENTRIES_V1))
- goto fail;
-
- /* Parse u64 n_items */
- CHECK_REMAINING(8, truncated);
- obj->n_items = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
-
- /* Parse struct signed_checksum32_ed25519 checksums[n_items] */
- TRUNNEL_DYNARRAY_EXPAND(signed_checksum32_ed25519_t *, &obj->checksums, obj->n_items, {});
- {
- signed_checksum32_ed25519_t * elt;
- unsigned idx;
- for (idx = 0; idx < obj->n_items; ++idx) {
- result = signed_checksum32_ed25519_parse(&elt, ptr, remaining);
- if (result < 0)
- goto relay_fail;
- trunnel_assert((size_t)result <= remaining);
- remaining -= result; ptr += result;
- TRUNNEL_DYNARRAY_ADD(signed_checksum32_ed25519_t *, &obj->checksums, elt, {signed_checksum32_ed25519_free(elt);});
- }
- }
- trunnel_assert(ptr + remaining == input + len_in);
- return len_in - remaining;
-
- truncated:
- return -2;
- relay_fail:
- trunnel_assert(result < 0);
- return result;
- trunnel_alloc_failed:
- return -1;
- fail:
- result = -1;
- return result;
-}
-
-ssize_t
-entries_v1_parse(entries_v1_t **output, const uint8_t *input, const size_t len_in)
-{
- ssize_t result;
- *output = entries_v1_new();
- if (NULL == *output)
- return -1;
- result = entries_v1_parse_into(*output, input, len_in);
- if (result < 0) {
- entries_v1_free(*output);
- *output = NULL;
- }
- return result;
-}
-inclusion_proof_v1_t *
-inclusion_proof_v1_new(void)
-{
- inclusion_proof_v1_t *val = trunnel_calloc(1, sizeof(inclusion_proof_v1_t));
- if (NULL == val)
- return NULL;
- val->magic = MAGIC_V1;
- val->format = T_INCLUSION_PROOF_V1;
- return val;
-}
-
-/** Release all storage held inside 'obj', but do not free 'obj'.
- */
-static void
-inclusion_proof_v1_clear(inclusion_proof_v1_t *obj)
-{
- (void) obj;
- {
-
- unsigned idx;
- for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->hashes); ++idx) {
- hash_free(TRUNNEL_DYNARRAY_GET(&obj->hashes, idx));
- }
- }
- TRUNNEL_DYNARRAY_WIPE(&obj->hashes);
- TRUNNEL_DYNARRAY_CLEAR(&obj->hashes);
-}
-
-void
-inclusion_proof_v1_free(inclusion_proof_v1_t *obj)
-{
- if (obj == NULL)
- return;
- inclusion_proof_v1_clear(obj);
- trunnel_memwipe(obj, sizeof(inclusion_proof_v1_t));
- trunnel_free_(obj);
-}
-
-uint64_t
-inclusion_proof_v1_get_magic(const inclusion_proof_v1_t *inp)
-{
- return inp->magic;
-}
-int
-inclusion_proof_v1_set_magic(inclusion_proof_v1_t *inp, uint64_t val)
-{
- if (! ((val == MAGIC_V1))) {
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
- }
- inp->magic = val;
- return 0;
-}
-uint64_t
-inclusion_proof_v1_get_format(const inclusion_proof_v1_t *inp)
-{
- return inp->format;
-}
-int
-inclusion_proof_v1_set_format(inclusion_proof_v1_t *inp, uint64_t val)
-{
- if (! ((val == T_INCLUSION_PROOF_V1))) {
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
- }
- inp->format = val;
- return 0;
-}
-size_t
-inclusion_proof_v1_getlen_identifier(const inclusion_proof_v1_t *inp)
-{
- (void)inp; return 32;
-}
-
-uint8_t
-inclusion_proof_v1_get_identifier(inclusion_proof_v1_t *inp, size_t idx)
-{
- trunnel_assert(idx < 32);
- return inp->identifier[idx];
-}
-
-uint8_t
-inclusion_proof_v1_getconst_identifier(const inclusion_proof_v1_t *inp, size_t idx)
-{
- return inclusion_proof_v1_get_identifier((inclusion_proof_v1_t*)inp, idx);
-}
-int
-inclusion_proof_v1_set_identifier(inclusion_proof_v1_t *inp, size_t idx, uint8_t elt)
-{
- trunnel_assert(idx < 32);
- inp->identifier[idx] = elt;
- return 0;
-}
-
-uint8_t *
-inclusion_proof_v1_getarray_identifier(inclusion_proof_v1_t *inp)
-{
- return inp->identifier;
-}
-const uint8_t *
-inclusion_proof_v1_getconstarray_identifier(const inclusion_proof_v1_t *inp)
-{
- return (const uint8_t *)inclusion_proof_v1_getarray_identifier((inclusion_proof_v1_t*)inp);
-}
-uint64_t
-inclusion_proof_v1_get_tree_size(const inclusion_proof_v1_t *inp)
-{
- return inp->tree_size;
-}
-int
-inclusion_proof_v1_set_tree_size(inclusion_proof_v1_t *inp, uint64_t val)
-{
- inp->tree_size = val;
- return 0;
-}
-uint64_t
-inclusion_proof_v1_get_leaf_index(const inclusion_proof_v1_t *inp)
-{
- return inp->leaf_index;
-}
-int
-inclusion_proof_v1_set_leaf_index(inclusion_proof_v1_t *inp, uint64_t val)
-{
- inp->leaf_index = val;
- return 0;
-}
-uint64_t
-inclusion_proof_v1_get_n_items(const inclusion_proof_v1_t *inp)
-{
- return inp->n_items;
-}
-int
-inclusion_proof_v1_set_n_items(inclusion_proof_v1_t *inp, uint64_t val)
-{
- inp->n_items = val;
- return 0;
-}
-size_t
-inclusion_proof_v1_getlen_hashes(const inclusion_proof_v1_t *inp)
-{
- return TRUNNEL_DYNARRAY_LEN(&inp->hashes);
-}
-
-struct hash_st *
-inclusion_proof_v1_get_hashes(inclusion_proof_v1_t *inp, size_t idx)
-{
- return TRUNNEL_DYNARRAY_GET(&inp->hashes, idx);
-}
-
- const struct hash_st *
-inclusion_proof_v1_getconst_hashes(const inclusion_proof_v1_t *inp, size_t idx)
-{
- return inclusion_proof_v1_get_hashes((inclusion_proof_v1_t*)inp, idx);
-}
-int
-inclusion_proof_v1_set_hashes(inclusion_proof_v1_t *inp, size_t idx, struct hash_st * elt)
-{
- hash_t *oldval = TRUNNEL_DYNARRAY_GET(&inp->hashes, idx);
- if (oldval && oldval != elt)
- hash_free(oldval);
- return inclusion_proof_v1_set0_hashes(inp, idx, elt);
-}
-int
-inclusion_proof_v1_set0_hashes(inclusion_proof_v1_t *inp, size_t idx, struct hash_st * elt)
-{
- TRUNNEL_DYNARRAY_SET(&inp->hashes, idx, elt);
- return 0;
-}
-int
-inclusion_proof_v1_add_hashes(inclusion_proof_v1_t *inp, struct hash_st * elt)
-{
-#if SIZE_MAX >= UINT64_MAX
- if (inp->hashes.n_ == UINT64_MAX)
- goto trunnel_alloc_failed;
-#endif
- TRUNNEL_DYNARRAY_ADD(struct hash_st *, &inp->hashes, elt, {});
- return 0;
- trunnel_alloc_failed:
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
-}
-
-struct hash_st * *
-inclusion_proof_v1_getarray_hashes(inclusion_proof_v1_t *inp)
-{
- return inp->hashes.elts_;
-}
-const struct hash_st * const *
-inclusion_proof_v1_getconstarray_hashes(const inclusion_proof_v1_t *inp)
-{
- return (const struct hash_st * const *)inclusion_proof_v1_getarray_hashes((inclusion_proof_v1_t*)inp);
-}
-int
-inclusion_proof_v1_setlen_hashes(inclusion_proof_v1_t *inp, size_t newlen)
-{
- struct hash_st * *newptr;
-#if UINT64_MAX < SIZE_MAX
- if (newlen > UINT64_MAX)
- goto trunnel_alloc_failed;
-#endif
- newptr = trunnel_dynarray_setlen(&inp->hashes.allocated_,
- &inp->hashes.n_, inp->hashes.elts_, newlen,
- sizeof(inp->hashes.elts_[0]), (trunnel_free_fn_t) hash_free,
- &inp->trunnel_error_code_);
- if (newlen != 0 && newptr == NULL)
- goto trunnel_alloc_failed;
- inp->hashes.elts_ = newptr;
- return 0;
- trunnel_alloc_failed:
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
-}
-const char *
-inclusion_proof_v1_check(const inclusion_proof_v1_t *obj)
-{
- if (obj == NULL)
- return "Object was NULL";
- if (obj->trunnel_error_code_)
- return "A set function failed on this object";
- if (! (obj->magic == MAGIC_V1))
- return "Integer out of bounds";
- if (! (obj->format == T_INCLUSION_PROOF_V1))
- return "Integer out of bounds";
- {
- const char *msg;
-
- unsigned idx;
- for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->hashes); ++idx) {
- if (NULL != (msg = hash_check(TRUNNEL_DYNARRAY_GET(&obj->hashes, idx))))
- return msg;
- }
- }
- if (TRUNNEL_DYNARRAY_LEN(&obj->hashes) != obj->n_items)
- return "Length mismatch for hashes";
- return NULL;
-}
-
-ssize_t
-inclusion_proof_v1_encoded_len(const inclusion_proof_v1_t *obj)
-{
- ssize_t result = 0;
-
- if (NULL != inclusion_proof_v1_check(obj))
- return -1;
-
-
- /* Length of u64 magic IN [MAGIC_V1] */
- result += 8;
-
- /* Length of u64 format IN [T_INCLUSION_PROOF_V1] */
- result += 8;
-
- /* Length of u8 identifier[32] */
- result += 32;
-
- /* Length of u64 tree_size */
- result += 8;
-
- /* Length of u64 leaf_index */
- result += 8;
-
- /* Length of u64 n_items */
- result += 8;
-
- /* Length of struct hash hashes[n_items] */
- {
-
- unsigned idx;
- for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->hashes); ++idx) {
- result += hash_encoded_len(TRUNNEL_DYNARRAY_GET(&obj->hashes, idx));
- }
- }
- return result;
-}
-int
-inclusion_proof_v1_clear_errors(inclusion_proof_v1_t *obj)
-{
- int r = obj->trunnel_error_code_;
- obj->trunnel_error_code_ = 0;
- return r;
-}
-ssize_t
-inclusion_proof_v1_encode(uint8_t *output, const size_t avail, const inclusion_proof_v1_t *obj)
-{
- ssize_t result = 0;
- size_t written = 0;
- uint8_t *ptr = output;
- const char *msg;
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- const ssize_t encoded_len = inclusion_proof_v1_encoded_len(obj);
-#endif
-
- if (NULL != (msg = inclusion_proof_v1_check(obj)))
- goto check_failed;
-
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- trunnel_assert(encoded_len >= 0);
-#endif
-
- /* Encode u64 magic IN [MAGIC_V1] */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->magic));
- written += 8; ptr += 8;
-
- /* Encode u64 format IN [T_INCLUSION_PROOF_V1] */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->format));
- written += 8; ptr += 8;
-
- /* Encode u8 identifier[32] */
- trunnel_assert(written <= avail);
- if (avail - written < 32)
- goto truncated;
- memcpy(ptr, obj->identifier, 32);
- written += 32; ptr += 32;
-
- /* Encode u64 tree_size */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->tree_size));
- written += 8; ptr += 8;
-
- /* Encode u64 leaf_index */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->leaf_index));
- written += 8; ptr += 8;
-
- /* Encode u64 n_items */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->n_items));
- written += 8; ptr += 8;
-
- /* Encode struct hash hashes[n_items] */
- {
-
- unsigned idx;
- for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->hashes); ++idx) {
- trunnel_assert(written <= avail);
- result = hash_encode(ptr, avail - written, TRUNNEL_DYNARRAY_GET(&obj->hashes, idx));
- if (result < 0)
- goto fail; /* XXXXXXX !*/
- written += result; ptr += result;
- }
- }
-
-
- trunnel_assert(ptr == output + written);
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- {
- trunnel_assert(encoded_len >= 0);
- trunnel_assert((size_t)encoded_len == written);
- }
-
-#endif
-
- return written;
-
- truncated:
- result = -2;
- goto fail;
- check_failed:
- (void)msg;
- result = -1;
- goto fail;
- fail:
- trunnel_assert(result < 0);
- return result;
-}
-
-/** As inclusion_proof_v1_parse(), but do not allocate the output
- * object.
- */
-static ssize_t
-inclusion_proof_v1_parse_into(inclusion_proof_v1_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 u64 magic IN [MAGIC_V1] */
- CHECK_REMAINING(8, truncated);
- obj->magic = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
- if (! (obj->magic == MAGIC_V1))
- goto fail;
-
- /* Parse u64 format IN [T_INCLUSION_PROOF_V1] */
- CHECK_REMAINING(8, truncated);
- obj->format = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
- if (! (obj->format == T_INCLUSION_PROOF_V1))
- goto fail;
-
- /* Parse u8 identifier[32] */
- CHECK_REMAINING(32, truncated);
- memcpy(obj->identifier, ptr, 32);
- remaining -= 32; ptr += 32;
-
- /* Parse u64 tree_size */
- CHECK_REMAINING(8, truncated);
- obj->tree_size = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
-
- /* Parse u64 leaf_index */
- CHECK_REMAINING(8, truncated);
- obj->leaf_index = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
-
- /* Parse u64 n_items */
- CHECK_REMAINING(8, truncated);
- obj->n_items = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
-
- /* Parse struct hash hashes[n_items] */
- TRUNNEL_DYNARRAY_EXPAND(hash_t *, &obj->hashes, obj->n_items, {});
- {
- hash_t * elt;
- unsigned idx;
- for (idx = 0; idx < obj->n_items; ++idx) {
- result = hash_parse(&elt, ptr, remaining);
- if (result < 0)
- goto relay_fail;
- trunnel_assert((size_t)result <= remaining);
- remaining -= result; ptr += result;
- TRUNNEL_DYNARRAY_ADD(hash_t *, &obj->hashes, elt, {hash_free(elt);});
- }
- }
- trunnel_assert(ptr + remaining == input + len_in);
- return len_in - remaining;
-
- truncated:
- return -2;
- relay_fail:
- trunnel_assert(result < 0);
- return result;
- trunnel_alloc_failed:
- return -1;
- fail:
- result = -1;
- return result;
-}
-
-ssize_t
-inclusion_proof_v1_parse(inclusion_proof_v1_t **output, const uint8_t *input, const size_t len_in)
-{
- ssize_t result;
- *output = inclusion_proof_v1_new();
- if (NULL == *output)
- return -1;
- result = inclusion_proof_v1_parse_into(*output, input, len_in);
- if (result < 0) {
- inclusion_proof_v1_free(*output);
- *output = NULL;
- }
- return result;
-}
-request_v1_t *
-request_v1_new(void)
-{
- request_v1_t *val = trunnel_calloc(1, sizeof(request_v1_t));
- if (NULL == val)
- return NULL;
- val->magic = MAGIC_V1;
- val->format = T_GET_CONSISTENCY_PROOF_V1;
- return val;
-}
-
-/** Release all storage held inside 'obj', but do not free 'obj'.
- */
-static void
-request_v1_clear(request_v1_t *obj)
-{
- (void) obj;
- req_get_entries_v1_free(obj->request_get_entries);
- obj->request_get_entries = NULL;
- req_get_proof_by_hash_v1_free(obj->request_get_proof_by_hash);
- obj->request_get_proof_by_hash = NULL;
- req_get_consistency_proof_v1_free(obj->request_get_consistency_proof);
- obj->request_get_consistency_proof = NULL;
-}
-
-void
-request_v1_free(request_v1_t *obj)
-{
- if (obj == NULL)
- return;
- request_v1_clear(obj);
- trunnel_memwipe(obj, sizeof(request_v1_t));
- trunnel_free_(obj);
-}
-
-uint64_t
-request_v1_get_magic(const request_v1_t *inp)
-{
- return inp->magic;
-}
-int
-request_v1_set_magic(request_v1_t *inp, uint64_t val)
-{
- if (! ((val == MAGIC_V1))) {
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
- }
- inp->magic = val;
- return 0;
-}
-uint64_t
-request_v1_get_format(const request_v1_t *inp)
-{
- return inp->format;
-}
-int
-request_v1_set_format(request_v1_t *inp, uint64_t val)
-{
- if (! ((val == T_GET_CONSISTENCY_PROOF_V1 || val == T_GET_ENTRIES_V1 || val == T_GET_PROOF_BY_HASH_V1))) {
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
- }
- inp->format = val;
- return 0;
-}
-struct req_get_entries_v1_st *
-request_v1_get_request_get_entries(request_v1_t *inp)
-{
- return inp->request_get_entries;
-}
-const struct req_get_entries_v1_st *
-request_v1_getconst_request_get_entries(const request_v1_t *inp)
-{
- return request_v1_get_request_get_entries((request_v1_t*) inp);
-}
-int
-request_v1_set_request_get_entries(request_v1_t *inp, struct req_get_entries_v1_st *val)
-{
- if (inp->request_get_entries && inp->request_get_entries != val)
- req_get_entries_v1_free(inp->request_get_entries);
- return request_v1_set0_request_get_entries(inp, val);
-}
-int
-request_v1_set0_request_get_entries(request_v1_t *inp, struct req_get_entries_v1_st *val)
-{
- inp->request_get_entries = val;
- return 0;
-}
-struct req_get_proof_by_hash_v1_st *
-request_v1_get_request_get_proof_by_hash(request_v1_t *inp)
-{
- return inp->request_get_proof_by_hash;
-}
-const struct req_get_proof_by_hash_v1_st *
-request_v1_getconst_request_get_proof_by_hash(const request_v1_t *inp)
-{
- return request_v1_get_request_get_proof_by_hash((request_v1_t*) inp);
-}
-int
-request_v1_set_request_get_proof_by_hash(request_v1_t *inp, struct req_get_proof_by_hash_v1_st *val)
-{
- if (inp->request_get_proof_by_hash && inp->request_get_proof_by_hash != val)
- req_get_proof_by_hash_v1_free(inp->request_get_proof_by_hash);
- return request_v1_set0_request_get_proof_by_hash(inp, val);
-}
-int
-request_v1_set0_request_get_proof_by_hash(request_v1_t *inp, struct req_get_proof_by_hash_v1_st *val)
-{
- inp->request_get_proof_by_hash = val;
- return 0;
-}
-struct req_get_consistency_proof_v1_st *
-request_v1_get_request_get_consistency_proof(request_v1_t *inp)
-{
- return inp->request_get_consistency_proof;
-}
-const struct req_get_consistency_proof_v1_st *
-request_v1_getconst_request_get_consistency_proof(const request_v1_t *inp)
-{
- return request_v1_get_request_get_consistency_proof((request_v1_t*) inp);
-}
-int
-request_v1_set_request_get_consistency_proof(request_v1_t *inp, struct req_get_consistency_proof_v1_st *val)
-{
- if (inp->request_get_consistency_proof && inp->request_get_consistency_proof != val)
- req_get_consistency_proof_v1_free(inp->request_get_consistency_proof);
- return request_v1_set0_request_get_consistency_proof(inp, val);
-}
-int
-request_v1_set0_request_get_consistency_proof(request_v1_t *inp, struct req_get_consistency_proof_v1_st *val)
-{
- inp->request_get_consistency_proof = val;
- return 0;
-}
-const char *
-request_v1_check(const request_v1_t *obj)
-{
- if (obj == NULL)
- return "Object was NULL";
- if (obj->trunnel_error_code_)
- return "A set function failed on this object";
- if (! (obj->magic == MAGIC_V1))
- return "Integer out of bounds";
- if (! (obj->format == T_GET_CONSISTENCY_PROOF_V1 || obj->format == T_GET_ENTRIES_V1 || obj->format == T_GET_PROOF_BY_HASH_V1))
- return "Integer out of bounds";
- switch (obj->format) {
-
- case T_GET_ENTRIES_V1:
- {
- const char *msg;
- if (NULL != (msg = req_get_entries_v1_check(obj->request_get_entries)))
- return msg;
- }
- break;
-
- case T_GET_PROOF_BY_HASH_V1:
- {
- const char *msg;
- if (NULL != (msg = req_get_proof_by_hash_v1_check(obj->request_get_proof_by_hash)))
- return msg;
- }
- break;
-
- case T_GET_CONSISTENCY_PROOF_V1:
- {
- const char *msg;
- if (NULL != (msg = req_get_consistency_proof_v1_check(obj->request_get_consistency_proof)))
- return msg;
- }
- break;
-
- default:
- return "Bad tag for union";
- break;
- }
- return NULL;
-}
-
-ssize_t
-request_v1_encoded_len(const request_v1_t *obj)
-{
- ssize_t result = 0;
-
- if (NULL != request_v1_check(obj))
- return -1;
-
-
- /* Length of u64 magic IN [MAGIC_V1] */
- result += 8;
-
- /* Length of u64 format IN [T_GET_CONSISTENCY_PROOF_V1, T_GET_ENTRIES_V1, T_GET_PROOF_BY_HASH_V1] */
- result += 8;
- switch (obj->format) {
-
- case T_GET_ENTRIES_V1:
-
- /* Length of struct req_get_entries_v1 request_get_entries */
- result += req_get_entries_v1_encoded_len(obj->request_get_entries);
- break;
-
- case T_GET_PROOF_BY_HASH_V1:
-
- /* Length of struct req_get_proof_by_hash_v1 request_get_proof_by_hash */
- result += req_get_proof_by_hash_v1_encoded_len(obj->request_get_proof_by_hash);
- break;
-
- case T_GET_CONSISTENCY_PROOF_V1:
-
- /* Length of struct req_get_consistency_proof_v1 request_get_consistency_proof */
- result += req_get_consistency_proof_v1_encoded_len(obj->request_get_consistency_proof);
- break;
-
- default:
- trunnel_assert(0);
- break;
- }
- return result;
-}
-int
-request_v1_clear_errors(request_v1_t *obj)
-{
- int r = obj->trunnel_error_code_;
- obj->trunnel_error_code_ = 0;
- return r;
-}
-ssize_t
-request_v1_encode(uint8_t *output, const size_t avail, const request_v1_t *obj)
-{
- ssize_t result = 0;
- size_t written = 0;
- uint8_t *ptr = output;
- const char *msg;
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- const ssize_t encoded_len = request_v1_encoded_len(obj);
-#endif
-
- if (NULL != (msg = request_v1_check(obj)))
- goto check_failed;
-
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- trunnel_assert(encoded_len >= 0);
-#endif
-
- /* Encode u64 magic IN [MAGIC_V1] */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->magic));
- written += 8; ptr += 8;
-
- /* Encode u64 format IN [T_GET_CONSISTENCY_PROOF_V1, T_GET_ENTRIES_V1, T_GET_PROOF_BY_HASH_V1] */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->format));
- written += 8; ptr += 8;
-
- /* Encode union request[format] */
- trunnel_assert(written <= avail);
- switch (obj->format) {
-
- case T_GET_ENTRIES_V1:
-
- /* Encode struct req_get_entries_v1 request_get_entries */
- trunnel_assert(written <= avail);
- result = req_get_entries_v1_encode(ptr, avail - written, obj->request_get_entries);
- if (result < 0)
- goto fail; /* XXXXXXX !*/
- written += result; ptr += result;
- break;
-
- case T_GET_PROOF_BY_HASH_V1:
-
- /* Encode struct req_get_proof_by_hash_v1 request_get_proof_by_hash */
- trunnel_assert(written <= avail);
- result = req_get_proof_by_hash_v1_encode(ptr, avail - written, obj->request_get_proof_by_hash);
- if (result < 0)
- goto fail; /* XXXXXXX !*/
- written += result; ptr += result;
- break;
-
- case T_GET_CONSISTENCY_PROOF_V1:
-
- /* Encode struct req_get_consistency_proof_v1 request_get_consistency_proof */
- trunnel_assert(written <= avail);
- result = req_get_consistency_proof_v1_encode(ptr, avail - written, obj->request_get_consistency_proof);
- if (result < 0)
- goto fail; /* XXXXXXX !*/
- written += result; ptr += result;
- break;
-
- default:
- trunnel_assert(0);
- break;
- }
-
-
- trunnel_assert(ptr == output + written);
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- {
- trunnel_assert(encoded_len >= 0);
- trunnel_assert((size_t)encoded_len == written);
- }
-
-#endif
-
- return written;
-
- truncated:
- result = -2;
- goto fail;
- check_failed:
- (void)msg;
- result = -1;
- goto fail;
- fail:
- trunnel_assert(result < 0);
- return result;
-}
-
-/** As request_v1_parse(), but do not allocate the output object.
- */
-static ssize_t
-request_v1_parse_into(request_v1_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 u64 magic IN [MAGIC_V1] */
- CHECK_REMAINING(8, truncated);
- obj->magic = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
- if (! (obj->magic == MAGIC_V1))
- goto fail;
-
- /* Parse u64 format IN [T_GET_CONSISTENCY_PROOF_V1, T_GET_ENTRIES_V1, T_GET_PROOF_BY_HASH_V1] */
- CHECK_REMAINING(8, truncated);
- obj->format = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
- if (! (obj->format == T_GET_CONSISTENCY_PROOF_V1 || obj->format == T_GET_ENTRIES_V1 || obj->format == T_GET_PROOF_BY_HASH_V1))
- goto fail;
-
- /* Parse union request[format] */
- switch (obj->format) {
-
- case T_GET_ENTRIES_V1:
-
- /* Parse struct req_get_entries_v1 request_get_entries */
- result = req_get_entries_v1_parse(&obj->request_get_entries, ptr, remaining);
- if (result < 0)
- goto relay_fail;
- trunnel_assert((size_t)result <= remaining);
- remaining -= result; ptr += result;
- break;
-
- case T_GET_PROOF_BY_HASH_V1:
-
- /* Parse struct req_get_proof_by_hash_v1 request_get_proof_by_hash */
- result = req_get_proof_by_hash_v1_parse(&obj->request_get_proof_by_hash, ptr, remaining);
- if (result < 0)
- goto relay_fail;
- trunnel_assert((size_t)result <= remaining);
- remaining -= result; ptr += result;
- break;
-
- case T_GET_CONSISTENCY_PROOF_V1:
-
- /* Parse struct req_get_consistency_proof_v1 request_get_consistency_proof */
- result = req_get_consistency_proof_v1_parse(&obj->request_get_consistency_proof, ptr, remaining);
- if (result < 0)
- goto relay_fail;
- trunnel_assert((size_t)result <= remaining);
- remaining -= result; ptr += result;
- break;
-
- default:
- goto fail;
- break;
- }
- trunnel_assert(ptr + remaining == input + len_in);
- return len_in - remaining;
-
- truncated:
- return -2;
- relay_fail:
- trunnel_assert(result < 0);
- return result;
- fail:
- result = -1;
- return result;
-}
-
-ssize_t
-request_v1_parse(request_v1_t **output, const uint8_t *input, const size_t len_in)
-{
- ssize_t result;
- *output = request_v1_new();
- if (NULL == *output)
- return -1;
- result = request_v1_parse_into(*output, input, len_in);
- if (result < 0) {
- request_v1_free(*output);
- *output = NULL;
- }
- return result;
-}
-signed_tree_head_v1_t *
-signed_tree_head_v1_new(void)
-{
- signed_tree_head_v1_t *val = trunnel_calloc(1, sizeof(signed_tree_head_v1_t));
- if (NULL == val)
- return NULL;
- val->magic = MAGIC_V1;
- val->format = T_SIGNED_TREE_HEAD_V1;
- return val;
-}
-
-/** Release all storage held inside 'obj', but do not free 'obj'.
- */
-static void
-signed_tree_head_v1_clear(signed_tree_head_v1_t *obj)
-{
- (void) obj;
- {
-
- unsigned idx;
- for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->signatures); ++idx) {
- sigident_ed25519_free(TRUNNEL_DYNARRAY_GET(&obj->signatures, idx));
- }
- }
- TRUNNEL_DYNARRAY_WIPE(&obj->signatures);
- TRUNNEL_DYNARRAY_CLEAR(&obj->signatures);
-}
-
-void
-signed_tree_head_v1_free(signed_tree_head_v1_t *obj)
-{
- if (obj == NULL)
- return;
- signed_tree_head_v1_clear(obj);
- trunnel_memwipe(obj, sizeof(signed_tree_head_v1_t));
- trunnel_free_(obj);
-}
-
-uint64_t
-signed_tree_head_v1_get_magic(const signed_tree_head_v1_t *inp)
-{
- return inp->magic;
-}
-int
-signed_tree_head_v1_set_magic(signed_tree_head_v1_t *inp, uint64_t val)
-{
- if (! ((val == MAGIC_V1))) {
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
- }
- inp->magic = val;
- return 0;
-}
-uint64_t
-signed_tree_head_v1_get_format(const signed_tree_head_v1_t *inp)
-{
- return inp->format;
-}
-int
-signed_tree_head_v1_set_format(signed_tree_head_v1_t *inp, uint64_t val)
-{
- if (! ((val == T_SIGNED_TREE_HEAD_V1))) {
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
- }
- inp->format = val;
- return 0;
-}
-uint64_t
-signed_tree_head_v1_get_timestamp(const signed_tree_head_v1_t *inp)
-{
- return inp->timestamp;
-}
-int
-signed_tree_head_v1_set_timestamp(signed_tree_head_v1_t *inp, uint64_t val)
-{
- inp->timestamp = val;
- return 0;
-}
-uint64_t
-signed_tree_head_v1_get_tree_size(const signed_tree_head_v1_t *inp)
-{
- return inp->tree_size;
-}
-int
-signed_tree_head_v1_set_tree_size(signed_tree_head_v1_t *inp, uint64_t val)
-{
- inp->tree_size = val;
- return 0;
-}
-size_t
-signed_tree_head_v1_getlen_root_hash(const signed_tree_head_v1_t *inp)
-{
- (void)inp; return 32;
-}
-
-uint8_t
-signed_tree_head_v1_get_root_hash(signed_tree_head_v1_t *inp, size_t idx)
-{
- trunnel_assert(idx < 32);
- return inp->root_hash[idx];
-}
-
-uint8_t
-signed_tree_head_v1_getconst_root_hash(const signed_tree_head_v1_t *inp, size_t idx)
-{
- return signed_tree_head_v1_get_root_hash((signed_tree_head_v1_t*)inp, idx);
-}
-int
-signed_tree_head_v1_set_root_hash(signed_tree_head_v1_t *inp, size_t idx, uint8_t elt)
-{
- trunnel_assert(idx < 32);
- inp->root_hash[idx] = elt;
- return 0;
-}
-
-uint8_t *
-signed_tree_head_v1_getarray_root_hash(signed_tree_head_v1_t *inp)
-{
- return inp->root_hash;
-}
-const uint8_t *
-signed_tree_head_v1_getconstarray_root_hash(const signed_tree_head_v1_t *inp)
-{
- return (const uint8_t *)signed_tree_head_v1_getarray_root_hash((signed_tree_head_v1_t*)inp);
-}
-uint64_t
-signed_tree_head_v1_get_n_items(const signed_tree_head_v1_t *inp)
-{
- return inp->n_items;
-}
-int
-signed_tree_head_v1_set_n_items(signed_tree_head_v1_t *inp, uint64_t val)
-{
- inp->n_items = val;
- return 0;
-}
-size_t
-signed_tree_head_v1_getlen_signatures(const signed_tree_head_v1_t *inp)
-{
- return TRUNNEL_DYNARRAY_LEN(&inp->signatures);
-}
-
-struct sigident_ed25519_st *
-signed_tree_head_v1_get_signatures(signed_tree_head_v1_t *inp, size_t idx)
-{
- return TRUNNEL_DYNARRAY_GET(&inp->signatures, idx);
-}
-
- const struct sigident_ed25519_st *
-signed_tree_head_v1_getconst_signatures(const signed_tree_head_v1_t *inp, size_t idx)
-{
- return signed_tree_head_v1_get_signatures((signed_tree_head_v1_t*)inp, idx);
-}
-int
-signed_tree_head_v1_set_signatures(signed_tree_head_v1_t *inp, size_t idx, struct sigident_ed25519_st * elt)
-{
- sigident_ed25519_t *oldval = TRUNNEL_DYNARRAY_GET(&inp->signatures, idx);
- if (oldval && oldval != elt)
- sigident_ed25519_free(oldval);
- return signed_tree_head_v1_set0_signatures(inp, idx, elt);
-}
-int
-signed_tree_head_v1_set0_signatures(signed_tree_head_v1_t *inp, size_t idx, struct sigident_ed25519_st * elt)
-{
- TRUNNEL_DYNARRAY_SET(&inp->signatures, idx, elt);
- return 0;
-}
-int
-signed_tree_head_v1_add_signatures(signed_tree_head_v1_t *inp, struct sigident_ed25519_st * elt)
-{
-#if SIZE_MAX >= UINT64_MAX
- if (inp->signatures.n_ == UINT64_MAX)
- goto trunnel_alloc_failed;
-#endif
- TRUNNEL_DYNARRAY_ADD(struct sigident_ed25519_st *, &inp->signatures, elt, {});
- return 0;
- trunnel_alloc_failed:
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
-}
-
-struct sigident_ed25519_st * *
-signed_tree_head_v1_getarray_signatures(signed_tree_head_v1_t *inp)
-{
- return inp->signatures.elts_;
-}
-const struct sigident_ed25519_st * const *
-signed_tree_head_v1_getconstarray_signatures(const signed_tree_head_v1_t *inp)
-{
- return (const struct sigident_ed25519_st * const *)signed_tree_head_v1_getarray_signatures((signed_tree_head_v1_t*)inp);
-}
-int
-signed_tree_head_v1_setlen_signatures(signed_tree_head_v1_t *inp, size_t newlen)
-{
- struct sigident_ed25519_st * *newptr;
-#if UINT64_MAX < SIZE_MAX
- if (newlen > UINT64_MAX)
- goto trunnel_alloc_failed;
-#endif
- newptr = trunnel_dynarray_setlen(&inp->signatures.allocated_,
- &inp->signatures.n_, inp->signatures.elts_, newlen,
- sizeof(inp->signatures.elts_[0]), (trunnel_free_fn_t) sigident_ed25519_free,
- &inp->trunnel_error_code_);
- if (newlen != 0 && newptr == NULL)
- goto trunnel_alloc_failed;
- inp->signatures.elts_ = newptr;
- return 0;
- trunnel_alloc_failed:
- TRUNNEL_SET_ERROR_CODE(inp);
- return -1;
-}
-const char *
-signed_tree_head_v1_check(const signed_tree_head_v1_t *obj)
-{
- if (obj == NULL)
- return "Object was NULL";
- if (obj->trunnel_error_code_)
- return "A set function failed on this object";
- if (! (obj->magic == MAGIC_V1))
- return "Integer out of bounds";
- if (! (obj->format == T_SIGNED_TREE_HEAD_V1))
- return "Integer out of bounds";
- {
- const char *msg;
-
- unsigned idx;
- for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->signatures); ++idx) {
- if (NULL != (msg = sigident_ed25519_check(TRUNNEL_DYNARRAY_GET(&obj->signatures, idx))))
- return msg;
- }
- }
- if (TRUNNEL_DYNARRAY_LEN(&obj->signatures) != obj->n_items)
- return "Length mismatch for signatures";
- return NULL;
-}
-
-ssize_t
-signed_tree_head_v1_encoded_len(const signed_tree_head_v1_t *obj)
-{
- ssize_t result = 0;
-
- if (NULL != signed_tree_head_v1_check(obj))
- return -1;
-
-
- /* Length of u64 magic IN [MAGIC_V1] */
- result += 8;
-
- /* Length of u64 format IN [T_SIGNED_TREE_HEAD_V1] */
- result += 8;
-
- /* Length of u64 timestamp */
- result += 8;
-
- /* Length of u64 tree_size */
- result += 8;
-
- /* Length of u8 root_hash[32] */
- result += 32;
-
- /* Length of u64 n_items */
- result += 8;
-
- /* Length of struct sigident_ed25519 signatures[n_items] */
- {
-
- unsigned idx;
- for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->signatures); ++idx) {
- result += sigident_ed25519_encoded_len(TRUNNEL_DYNARRAY_GET(&obj->signatures, idx));
- }
- }
- return result;
-}
-int
-signed_tree_head_v1_clear_errors(signed_tree_head_v1_t *obj)
-{
- int r = obj->trunnel_error_code_;
- obj->trunnel_error_code_ = 0;
- return r;
-}
-ssize_t
-signed_tree_head_v1_encode(uint8_t *output, const size_t avail, const signed_tree_head_v1_t *obj)
-{
- ssize_t result = 0;
- size_t written = 0;
- uint8_t *ptr = output;
- const char *msg;
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- const ssize_t encoded_len = signed_tree_head_v1_encoded_len(obj);
-#endif
-
- if (NULL != (msg = signed_tree_head_v1_check(obj)))
- goto check_failed;
-
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- trunnel_assert(encoded_len >= 0);
-#endif
-
- /* Encode u64 magic IN [MAGIC_V1] */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->magic));
- written += 8; ptr += 8;
-
- /* Encode u64 format IN [T_SIGNED_TREE_HEAD_V1] */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->format));
- written += 8; ptr += 8;
-
- /* Encode u64 timestamp */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->timestamp));
- written += 8; ptr += 8;
-
- /* Encode u64 tree_size */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->tree_size));
- written += 8; ptr += 8;
-
- /* Encode u8 root_hash[32] */
- trunnel_assert(written <= avail);
- if (avail - written < 32)
- goto truncated;
- memcpy(ptr, obj->root_hash, 32);
- written += 32; ptr += 32;
-
- /* Encode u64 n_items */
- trunnel_assert(written <= avail);
- if (avail - written < 8)
- goto truncated;
- trunnel_set_uint64(ptr, trunnel_htonll(obj->n_items));
- written += 8; ptr += 8;
-
- /* Encode struct sigident_ed25519 signatures[n_items] */
- {
-
- unsigned idx;
- for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->signatures); ++idx) {
- trunnel_assert(written <= avail);
- result = sigident_ed25519_encode(ptr, avail - written, TRUNNEL_DYNARRAY_GET(&obj->signatures, idx));
- if (result < 0)
- goto fail; /* XXXXXXX !*/
- written += result; ptr += result;
- }
- }
-
-
- trunnel_assert(ptr == output + written);
-#ifdef TRUNNEL_CHECK_ENCODED_LEN
- {
- trunnel_assert(encoded_len >= 0);
- trunnel_assert((size_t)encoded_len == written);
- }
-
-#endif
-
- return written;
-
- truncated:
- result = -2;
- goto fail;
- check_failed:
- (void)msg;
- result = -1;
- goto fail;
- fail:
- trunnel_assert(result < 0);
- return result;
-}
-
-/** As signed_tree_head_v1_parse(), but do not allocate the output
- * object.
- */
-static ssize_t
-signed_tree_head_v1_parse_into(signed_tree_head_v1_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 u64 magic IN [MAGIC_V1] */
- CHECK_REMAINING(8, truncated);
- obj->magic = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
- if (! (obj->magic == MAGIC_V1))
- goto fail;
-
- /* Parse u64 format IN [T_SIGNED_TREE_HEAD_V1] */
- CHECK_REMAINING(8, truncated);
- obj->format = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
- if (! (obj->format == T_SIGNED_TREE_HEAD_V1))
- goto fail;
-
- /* Parse u64 timestamp */
- CHECK_REMAINING(8, truncated);
- obj->timestamp = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
-
- /* Parse u64 tree_size */
- CHECK_REMAINING(8, truncated);
- obj->tree_size = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
-
- /* Parse u8 root_hash[32] */
- CHECK_REMAINING(32, truncated);
- memcpy(obj->root_hash, ptr, 32);
- remaining -= 32; ptr += 32;
-
- /* Parse u64 n_items */
- CHECK_REMAINING(8, truncated);
- obj->n_items = trunnel_ntohll(trunnel_get_uint64(ptr));
- remaining -= 8; ptr += 8;
-
- /* Parse struct sigident_ed25519 signatures[n_items] */
- TRUNNEL_DYNARRAY_EXPAND(sigident_ed25519_t *, &obj->signatures, obj->n_items, {});
- {
- sigident_ed25519_t * elt;
- unsigned idx;
- for (idx = 0; idx < obj->n_items; ++idx) {
- result = sigident_ed25519_parse(&elt, ptr, remaining);
- if (result < 0)
- goto relay_fail;
- trunnel_assert((size_t)result <= remaining);
- remaining -= result; ptr += result;
- TRUNNEL_DYNARRAY_ADD(sigident_ed25519_t *, &obj->signatures, elt, {sigident_ed25519_free(elt);});
- }
- }
- trunnel_assert(ptr + remaining == input + len_in);
- return len_in - remaining;
-
- truncated:
- return -2;
- relay_fail:
- trunnel_assert(result < 0);
- return result;
- trunnel_alloc_failed:
- return -1;
- fail:
- result = -1;
- return result;
-}
-
-ssize_t
-signed_tree_head_v1_parse(signed_tree_head_v1_t **output, const uint8_t *input, const size_t len_in)
-{
- ssize_t result;
- *output = signed_tree_head_v1_new();
- if (NULL == *output)
- return -1;
- result = signed_tree_head_v1_parse_into(*output, input, len_in);
- if (result < 0) {
- signed_tree_head_v1_free(*output);
- *output = NULL;
- }
- return result;
-}
diff --git a/trunnel/stfe.h b/trunnel/stfe.h
deleted file mode 100644
index 26ffb09..0000000
--- a/trunnel/stfe.h
+++ /dev/null
@@ -1,1235 +0,0 @@
-/* stfe.h -- generated by Trunnel v1.5.3.
- * https://gitweb.torproject.org/trunnel.git
- * You probably shouldn't edit this file.
- */
-#ifndef TRUNNEL_STFE_H
-#define TRUNNEL_STFE_H
-
-#include <stdint.h>
-#include "trunnel.h"
-
-#define MAGIC_V1 6004501466958485041
-#define T_GET_ENTRIES_V1 1
-#define T_GET_PROOF_BY_HASH_V1 2
-#define T_GET_CONSISTENCY_PROOF_V1 3
-#define T_ENTRIES_V1 4
-#define T_INCLUSION_PROOF_V1 5
-#define T_CONSISTENCY_PROOF_V1 6
-#define T_SIGNED_TREE_HEAD_V1 7
-#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_HASH)
-struct hash_st {
- uint8_t hash[32];
- uint8_t trunnel_error_code_;
-};
-#endif
-typedef struct hash_st hash_t;
-#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_REQ_GET_CONSISTENCY_PROOF_V1)
-struct req_get_consistency_proof_v1_st {
- uint64_t old_size;
- uint64_t new_size;
- uint8_t trunnel_error_code_;
-};
-#endif
-typedef struct req_get_consistency_proof_v1_st req_get_consistency_proof_v1_t;
-#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_REQ_GET_ENTRIES_V1)
-struct req_get_entries_v1_st {
- uint64_t start_size;
- uint64_t end_size;
- uint8_t trunnel_error_code_;
-};
-#endif
-typedef struct req_get_entries_v1_st req_get_entries_v1_t;
-#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_REQ_GET_PROOF_BY_HASH_V1)
-struct req_get_proof_by_hash_v1_st {
- uint64_t tree_size;
- uint8_t leaf_hash[32];
- uint8_t trunnel_error_code_;
-};
-#endif
-typedef struct req_get_proof_by_hash_v1_st req_get_proof_by_hash_v1_t;
-#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_SIGIDENT_ED25519)
-struct sigident_ed25519_st {
- uint8_t signature[64];
- uint8_t identifier[32];
- uint8_t trunnel_error_code_;
-};
-#endif
-typedef struct sigident_ed25519_st sigident_ed25519_t;
-#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_SIGNED_CHECKSUM32_ED25519)
-struct signed_checksum32_ed25519_st {
- uint8_t checksum[32];
- uint64_t length;
- TRUNNEL_DYNARRAY_HEAD(, uint8_t) identifier;
- uint8_t signature[64];
- uint8_t namespace[32];
- uint8_t trunnel_error_code_;
-};
-#endif
-typedef struct signed_checksum32_ed25519_st signed_checksum32_ed25519_t;
-#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_CONSISTENCY_PROOF_V1)
-struct consistency_proof_v1_st {
- uint64_t magic;
- uint64_t format;
- uint8_t identifier[32];
- uint64_t old_size;
- uint64_t new_size;
- uint64_t n_items;
- TRUNNEL_DYNARRAY_HEAD(, struct hash_st *) hashes;
- uint8_t trunnel_error_code_;
-};
-#endif
-typedef struct consistency_proof_v1_st consistency_proof_v1_t;
-#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_ENTRIES_V1)
-struct entries_v1_st {
- uint64_t magic;
- uint64_t format;
- uint64_t n_items;
- TRUNNEL_DYNARRAY_HEAD(, struct signed_checksum32_ed25519_st *) checksums;
- uint8_t trunnel_error_code_;
-};
-#endif
-typedef struct entries_v1_st entries_v1_t;
-#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_INCLUSION_PROOF_V1)
-struct inclusion_proof_v1_st {
- uint64_t magic;
- uint64_t format;
- uint8_t identifier[32];
- uint64_t tree_size;
- uint64_t leaf_index;
- uint64_t n_items;
- TRUNNEL_DYNARRAY_HEAD(, struct hash_st *) hashes;
- uint8_t trunnel_error_code_;
-};
-#endif
-typedef struct inclusion_proof_v1_st inclusion_proof_v1_t;
-#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_REQUEST_V1)
-struct request_v1_st {
- uint64_t magic;
- uint64_t format;
- struct req_get_entries_v1_st *request_get_entries;
- struct req_get_proof_by_hash_v1_st *request_get_proof_by_hash;
- struct req_get_consistency_proof_v1_st *request_get_consistency_proof;
- uint8_t trunnel_error_code_;
-};
-#endif
-typedef struct request_v1_st request_v1_t;
-#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_SIGNED_TREE_HEAD_V1)
-struct signed_tree_head_v1_st {
- uint64_t magic;
- uint64_t format;
- uint64_t timestamp;
- uint64_t tree_size;
- uint8_t root_hash[32];
- uint64_t n_items;
- TRUNNEL_DYNARRAY_HEAD(, struct sigident_ed25519_st *) signatures;
- uint8_t trunnel_error_code_;
-};
-#endif
-typedef struct signed_tree_head_v1_st signed_tree_head_v1_t;
-/** Return a newly allocated hash with all elements set to zero.
- */
-hash_t *hash_new(void);
-/** Release all storage held by the hash in 'victim'. (Do nothing if
- * 'victim' is NULL.)
- */
-void hash_free(hash_t *victim);
-/** Try to parse a hash from the buffer in 'input', using up to
- * 'len_in' bytes from the input buffer. On success, return the number
- * of bytes consumed and set *output to the newly allocated hash_t. On
- * failure, return -2 if the input appears truncated, and -1 if the
- * input is otherwise invalid.
- */
-ssize_t hash_parse(hash_t **output, const uint8_t *input, const size_t len_in);
-/** Return the number of bytes we expect to need to encode the hash in
- * 'obj'. On failure, return a negative value. Note that this value
- * may be an overestimate, and can even be an underestimate for
- * certain unencodeable objects.
- */
-ssize_t hash_encoded_len(const hash_t *obj);
-/** Try to encode the hash from 'input' into the buffer at 'output',
- * using up to 'avail' bytes of the output buffer. On success, return
- * the number of bytes used. On failure, return -2 if the buffer was
- * not long enough, and -1 if the input was invalid.
- */
-ssize_t hash_encode(uint8_t *output, size_t avail, const hash_t *input);
-/** Check whether the internal state of the hash in 'obj' is
- * consistent. Return NULL if it is, and a short message if it is not.
- */
-const char *hash_check(const hash_t *obj);
-/** Clear any errors that were set on the object 'obj' by its setter
- * functions. Return true iff errors were cleared.
- */
-int hash_clear_errors(hash_t *obj);
-/** Return the (constant) length of the array holding the hash field
- * of the hash_t in 'inp'.
- */
-size_t hash_getlen_hash(const hash_t *inp);
-/** Return the element at position 'idx' of the fixed array field hash
- * of the hash_t in 'inp'.
- */
-uint8_t hash_get_hash(hash_t *inp, size_t idx);
-/** As hash_get_hash, but take and return a const pointer
- */
-uint8_t hash_getconst_hash(const hash_t *inp, size_t idx);
-/** Change the element at position 'idx' of the fixed array field hash
- * of the hash_t in 'inp', so that it will hold the value 'elt'.
- */
-int hash_set_hash(hash_t *inp, size_t idx, uint8_t elt);
-/** Return a pointer to the 32-element array field hash of 'inp'.
- */
-uint8_t * hash_getarray_hash(hash_t *inp);
-/** As hash_get_hash, but take and return a const pointer
- */
-const uint8_t * hash_getconstarray_hash(const hash_t *inp);
-/** Return a newly allocated req_get_consistency_proof_v1 with all
- * elements set to zero.
- */
-req_get_consistency_proof_v1_t *req_get_consistency_proof_v1_new(void);
-/** Release all storage held by the req_get_consistency_proof_v1 in
- * 'victim'. (Do nothing if 'victim' is NULL.)
- */
-void req_get_consistency_proof_v1_free(req_get_consistency_proof_v1_t *victim);
-/** Try to parse a req_get_consistency_proof_v1 from the buffer in
- * 'input', using up to 'len_in' bytes from the input buffer. On
- * success, return the number of bytes consumed and set *output to the
- * newly allocated req_get_consistency_proof_v1_t. On failure, return
- * -2 if the input appears truncated, and -1 if the input is otherwise
- * invalid.
- */
-ssize_t req_get_consistency_proof_v1_parse(req_get_consistency_proof_v1_t **output, const uint8_t *input, const size_t len_in);
-/** Return the number of bytes we expect to need to encode the
- * req_get_consistency_proof_v1 in 'obj'. On failure, return a
- * negative value. Note that this value may be an overestimate, and
- * can even be an underestimate for certain unencodeable objects.
- */
-ssize_t req_get_consistency_proof_v1_encoded_len(const req_get_consistency_proof_v1_t *obj);
-/** Try to encode the req_get_consistency_proof_v1 from 'input' into
- * the buffer at 'output', using up to 'avail' bytes of the output
- * buffer. On success, return the number of bytes used. On failure,
- * return -2 if the buffer was not long enough, and -1 if the input
- * was invalid.
- */
-ssize_t req_get_consistency_proof_v1_encode(uint8_t *output, size_t avail, const req_get_consistency_proof_v1_t *input);
-/** Check whether the internal state of the
- * req_get_consistency_proof_v1 in 'obj' is consistent. Return NULL if
- * it is, and a short message if it is not.
- */
-const char *req_get_consistency_proof_v1_check(const req_get_consistency_proof_v1_t *obj);
-/** Clear any errors that were set on the object 'obj' by its setter
- * functions. Return true iff errors were cleared.
- */
-int req_get_consistency_proof_v1_clear_errors(req_get_consistency_proof_v1_t *obj);
-/** Return the value of the old_size field of the
- * req_get_consistency_proof_v1_t in 'inp'
- */
-uint64_t req_get_consistency_proof_v1_get_old_size(const req_get_consistency_proof_v1_t *inp);
-/** Set the value of the old_size field of the
- * req_get_consistency_proof_v1_t in 'inp' to 'val'. Return 0 on
- * success; return -1 and set the error code on 'inp' on failure.
- */
-int req_get_consistency_proof_v1_set_old_size(req_get_consistency_proof_v1_t *inp, uint64_t val);
-/** Return the value of the new_size field of the
- * req_get_consistency_proof_v1_t in 'inp'
- */
-uint64_t req_get_consistency_proof_v1_get_new_size(const req_get_consistency_proof_v1_t *inp);
-/** Set the value of the new_size field of the
- * req_get_consistency_proof_v1_t in 'inp' to 'val'. Return 0 on
- * success; return -1 and set the error code on 'inp' on failure.
- */
-int req_get_consistency_proof_v1_set_new_size(req_get_consistency_proof_v1_t *inp, uint64_t val);
-/** Return a newly allocated req_get_entries_v1 with all elements set
- * to zero.
- */
-req_get_entries_v1_t *req_get_entries_v1_new(void);
-/** Release all storage held by the req_get_entries_v1 in 'victim'.
- * (Do nothing if 'victim' is NULL.)
- */
-void req_get_entries_v1_free(req_get_entries_v1_t *victim);
-/** Try to parse a req_get_entries_v1 from the buffer in 'input',
- * using up to 'len_in' bytes from the input buffer. On success,
- * return the number of bytes consumed and set *output to the newly
- * allocated req_get_entries_v1_t. On failure, return -2 if the input
- * appears truncated, and -1 if the input is otherwise invalid.
- */
-ssize_t req_get_entries_v1_parse(req_get_entries_v1_t **output, const uint8_t *input, const size_t len_in);
-/** Return the number of bytes we expect to need to encode the
- * req_get_entries_v1 in 'obj'. On failure, return a negative value.
- * Note that this value may be an overestimate, and can even be an
- * underestimate for certain unencodeable objects.
- */
-ssize_t req_get_entries_v1_encoded_len(const req_get_entries_v1_t *obj);
-/** Try to encode the req_get_entries_v1 from 'input' into the buffer
- * at 'output', using up to 'avail' bytes of the output buffer. On
- * success, return the number of bytes used. On failure, return -2 if
- * the buffer was not long enough, and -1 if the input was invalid.
- */
-ssize_t req_get_entries_v1_encode(uint8_t *output, size_t avail, const req_get_entries_v1_t *input);
-/** Check whether the internal state of the req_get_entries_v1 in
- * 'obj' is consistent. Return NULL if it is, and a short message if
- * it is not.
- */
-const char *req_get_entries_v1_check(const req_get_entries_v1_t *obj);
-/** Clear any errors that were set on the object 'obj' by its setter
- * functions. Return true iff errors were cleared.
- */
-int req_get_entries_v1_clear_errors(req_get_entries_v1_t *obj);
-/** Return the value of the start_size field of the
- * req_get_entries_v1_t in 'inp'
- */
-uint64_t req_get_entries_v1_get_start_size(const req_get_entries_v1_t *inp);
-/** Set the value of the start_size field of the req_get_entries_v1_t
- * in 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int req_get_entries_v1_set_start_size(req_get_entries_v1_t *inp, uint64_t val);
-/** Return the value of the end_size field of the req_get_entries_v1_t
- * in 'inp'
- */
-uint64_t req_get_entries_v1_get_end_size(const req_get_entries_v1_t *inp);
-/** Set the value of the end_size field of the req_get_entries_v1_t in
- * 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int req_get_entries_v1_set_end_size(req_get_entries_v1_t *inp, uint64_t val);
-/** Return a newly allocated req_get_proof_by_hash_v1 with all
- * elements set to zero.
- */
-req_get_proof_by_hash_v1_t *req_get_proof_by_hash_v1_new(void);
-/** Release all storage held by the req_get_proof_by_hash_v1 in
- * 'victim'. (Do nothing if 'victim' is NULL.)
- */
-void req_get_proof_by_hash_v1_free(req_get_proof_by_hash_v1_t *victim);
-/** Try to parse a req_get_proof_by_hash_v1 from the buffer in
- * 'input', using up to 'len_in' bytes from the input buffer. On
- * success, return the number of bytes consumed and set *output to the
- * newly allocated req_get_proof_by_hash_v1_t. On failure, return -2
- * if the input appears truncated, and -1 if the input is otherwise
- * invalid.
- */
-ssize_t req_get_proof_by_hash_v1_parse(req_get_proof_by_hash_v1_t **output, const uint8_t *input, const size_t len_in);
-/** Return the number of bytes we expect to need to encode the
- * req_get_proof_by_hash_v1 in 'obj'. On failure, return a negative
- * value. Note that this value may be an overestimate, and can even be
- * an underestimate for certain unencodeable objects.
- */
-ssize_t req_get_proof_by_hash_v1_encoded_len(const req_get_proof_by_hash_v1_t *obj);
-/** Try to encode the req_get_proof_by_hash_v1 from 'input' into the
- * buffer at 'output', using up to 'avail' bytes of the output buffer.
- * On success, return the number of bytes used. On failure, return -2
- * if the buffer was not long enough, and -1 if the input was invalid.
- */
-ssize_t req_get_proof_by_hash_v1_encode(uint8_t *output, size_t avail, const req_get_proof_by_hash_v1_t *input);
-/** Check whether the internal state of the req_get_proof_by_hash_v1
- * in 'obj' is consistent. Return NULL if it is, and a short message
- * if it is not.
- */
-const char *req_get_proof_by_hash_v1_check(const req_get_proof_by_hash_v1_t *obj);
-/** Clear any errors that were set on the object 'obj' by its setter
- * functions. Return true iff errors were cleared.
- */
-int req_get_proof_by_hash_v1_clear_errors(req_get_proof_by_hash_v1_t *obj);
-/** Return the value of the tree_size field of the
- * req_get_proof_by_hash_v1_t in 'inp'
- */
-uint64_t req_get_proof_by_hash_v1_get_tree_size(const req_get_proof_by_hash_v1_t *inp);
-/** Set the value of the tree_size field of the
- * req_get_proof_by_hash_v1_t in 'inp' to 'val'. Return 0 on success;
- * return -1 and set the error code on 'inp' on failure.
- */
-int req_get_proof_by_hash_v1_set_tree_size(req_get_proof_by_hash_v1_t *inp, uint64_t val);
-/** Return the (constant) length of the array holding the leaf_hash
- * field of the req_get_proof_by_hash_v1_t in 'inp'.
- */
-size_t req_get_proof_by_hash_v1_getlen_leaf_hash(const req_get_proof_by_hash_v1_t *inp);
-/** Return the element at position 'idx' of the fixed array field
- * leaf_hash of the req_get_proof_by_hash_v1_t in 'inp'.
- */
-uint8_t req_get_proof_by_hash_v1_get_leaf_hash(req_get_proof_by_hash_v1_t *inp, size_t idx);
-/** As req_get_proof_by_hash_v1_get_leaf_hash, but take and return a
- * const pointer
- */
-uint8_t req_get_proof_by_hash_v1_getconst_leaf_hash(const req_get_proof_by_hash_v1_t *inp, size_t idx);
-/** Change the element at position 'idx' of the fixed array field
- * leaf_hash of the req_get_proof_by_hash_v1_t in 'inp', so that it
- * will hold the value 'elt'.
- */
-int req_get_proof_by_hash_v1_set_leaf_hash(req_get_proof_by_hash_v1_t *inp, size_t idx, uint8_t elt);
-/** Return a pointer to the 32-element array field leaf_hash of 'inp'.
- */
-uint8_t * req_get_proof_by_hash_v1_getarray_leaf_hash(req_get_proof_by_hash_v1_t *inp);
-/** As req_get_proof_by_hash_v1_get_leaf_hash, but take and return a
- * const pointer
- */
-const uint8_t * req_get_proof_by_hash_v1_getconstarray_leaf_hash(const req_get_proof_by_hash_v1_t *inp);
-/** Return a newly allocated sigident_ed25519 with all elements set to
- * zero.
- */
-sigident_ed25519_t *sigident_ed25519_new(void);
-/** Release all storage held by the sigident_ed25519 in 'victim'. (Do
- * nothing if 'victim' is NULL.)
- */
-void sigident_ed25519_free(sigident_ed25519_t *victim);
-/** Try to parse a sigident_ed25519 from the buffer in 'input', using
- * up to 'len_in' bytes from the input buffer. On success, return the
- * number of bytes consumed and set *output to the newly allocated
- * sigident_ed25519_t. On failure, return -2 if the input appears
- * truncated, and -1 if the input is otherwise invalid.
- */
-ssize_t sigident_ed25519_parse(sigident_ed25519_t **output, const uint8_t *input, const size_t len_in);
-/** Return the number of bytes we expect to need to encode the
- * sigident_ed25519 in 'obj'. On failure, return a negative value.
- * Note that this value may be an overestimate, and can even be an
- * underestimate for certain unencodeable objects.
- */
-ssize_t sigident_ed25519_encoded_len(const sigident_ed25519_t *obj);
-/** Try to encode the sigident_ed25519 from 'input' into the buffer at
- * 'output', using up to 'avail' bytes of the output buffer. On
- * success, return the number of bytes used. On failure, return -2 if
- * the buffer was not long enough, and -1 if the input was invalid.
- */
-ssize_t sigident_ed25519_encode(uint8_t *output, size_t avail, const sigident_ed25519_t *input);
-/** Check whether the internal state of the sigident_ed25519 in 'obj'
- * is consistent. Return NULL if it is, and a short message if it is
- * not.
- */
-const char *sigident_ed25519_check(const sigident_ed25519_t *obj);
-/** Clear any errors that were set on the object 'obj' by its setter
- * functions. Return true iff errors were cleared.
- */
-int sigident_ed25519_clear_errors(sigident_ed25519_t *obj);
-/** Return the (constant) length of the array holding the signature
- * field of the sigident_ed25519_t in 'inp'.
- */
-size_t sigident_ed25519_getlen_signature(const sigident_ed25519_t *inp);
-/** Return the element at position 'idx' of the fixed array field
- * signature of the sigident_ed25519_t in 'inp'.
- */
-uint8_t sigident_ed25519_get_signature(sigident_ed25519_t *inp, size_t idx);
-/** As sigident_ed25519_get_signature, but take and return a const
- * pointer
- */
-uint8_t sigident_ed25519_getconst_signature(const sigident_ed25519_t *inp, size_t idx);
-/** Change the element at position 'idx' of the fixed array field
- * signature of the sigident_ed25519_t in 'inp', so that it will hold
- * the value 'elt'.
- */
-int sigident_ed25519_set_signature(sigident_ed25519_t *inp, size_t idx, uint8_t elt);
-/** Return a pointer to the 64-element array field signature of 'inp'.
- */
-uint8_t * sigident_ed25519_getarray_signature(sigident_ed25519_t *inp);
-/** As sigident_ed25519_get_signature, but take and return a const
- * pointer
- */
-const uint8_t * sigident_ed25519_getconstarray_signature(const sigident_ed25519_t *inp);
-/** Return the (constant) length of the array holding the identifier
- * field of the sigident_ed25519_t in 'inp'.
- */
-size_t sigident_ed25519_getlen_identifier(const sigident_ed25519_t *inp);
-/** Return the element at position 'idx' of the fixed array field
- * identifier of the sigident_ed25519_t in 'inp'.
- */
-uint8_t sigident_ed25519_get_identifier(sigident_ed25519_t *inp, size_t idx);
-/** As sigident_ed25519_get_identifier, but take and return a const
- * pointer
- */
-uint8_t sigident_ed25519_getconst_identifier(const sigident_ed25519_t *inp, size_t idx);
-/** Change the element at position 'idx' of the fixed array field
- * identifier of the sigident_ed25519_t in 'inp', so that it will hold
- * the value 'elt'.
- */
-int sigident_ed25519_set_identifier(sigident_ed25519_t *inp, size_t idx, uint8_t elt);
-/** Return a pointer to the 32-element array field identifier of
- * 'inp'.
- */
-uint8_t * sigident_ed25519_getarray_identifier(sigident_ed25519_t *inp);
-/** As sigident_ed25519_get_identifier, but take and return a const
- * pointer
- */
-const uint8_t * sigident_ed25519_getconstarray_identifier(const sigident_ed25519_t *inp);
-/** Return a newly allocated signed_checksum32_ed25519 with all
- * elements set to zero.
- */
-signed_checksum32_ed25519_t *signed_checksum32_ed25519_new(void);
-/** Release all storage held by the signed_checksum32_ed25519 in
- * 'victim'. (Do nothing if 'victim' is NULL.)
- */
-void signed_checksum32_ed25519_free(signed_checksum32_ed25519_t *victim);
-/** Try to parse a signed_checksum32_ed25519 from the buffer in
- * 'input', using up to 'len_in' bytes from the input buffer. On
- * success, return the number of bytes consumed and set *output to the
- * newly allocated signed_checksum32_ed25519_t. On failure, return -2
- * if the input appears truncated, and -1 if the input is otherwise
- * invalid.
- */
-ssize_t signed_checksum32_ed25519_parse(signed_checksum32_ed25519_t **output, const uint8_t *input, const size_t len_in);
-/** Return the number of bytes we expect to need to encode the
- * signed_checksum32_ed25519 in 'obj'. On failure, return a negative
- * value. Note that this value may be an overestimate, and can even be
- * an underestimate for certain unencodeable objects.
- */
-ssize_t signed_checksum32_ed25519_encoded_len(const signed_checksum32_ed25519_t *obj);
-/** Try to encode the signed_checksum32_ed25519 from 'input' into the
- * buffer at 'output', using up to 'avail' bytes of the output buffer.
- * On success, return the number of bytes used. On failure, return -2
- * if the buffer was not long enough, and -1 if the input was invalid.
- */
-ssize_t signed_checksum32_ed25519_encode(uint8_t *output, size_t avail, const signed_checksum32_ed25519_t *input);
-/** Check whether the internal state of the signed_checksum32_ed25519
- * in 'obj' is consistent. Return NULL if it is, and a short message
- * if it is not.
- */
-const char *signed_checksum32_ed25519_check(const signed_checksum32_ed25519_t *obj);
-/** Clear any errors that were set on the object 'obj' by its setter
- * functions. Return true iff errors were cleared.
- */
-int signed_checksum32_ed25519_clear_errors(signed_checksum32_ed25519_t *obj);
-/** Return the (constant) length of the array holding the checksum
- * field of the signed_checksum32_ed25519_t in 'inp'.
- */
-size_t signed_checksum32_ed25519_getlen_checksum(const signed_checksum32_ed25519_t *inp);
-/** Return the element at position 'idx' of the fixed array field
- * checksum of the signed_checksum32_ed25519_t in 'inp'.
- */
-uint8_t signed_checksum32_ed25519_get_checksum(signed_checksum32_ed25519_t *inp, size_t idx);
-/** As signed_checksum32_ed25519_get_checksum, but take and return a
- * const pointer
- */
-uint8_t signed_checksum32_ed25519_getconst_checksum(const signed_checksum32_ed25519_t *inp, size_t idx);
-/** Change the element at position 'idx' of the fixed array field
- * checksum of the signed_checksum32_ed25519_t in 'inp', so that it
- * will hold the value 'elt'.
- */
-int signed_checksum32_ed25519_set_checksum(signed_checksum32_ed25519_t *inp, size_t idx, uint8_t elt);
-/** Return a pointer to the 32-element array field checksum of 'inp'.
- */
-uint8_t * signed_checksum32_ed25519_getarray_checksum(signed_checksum32_ed25519_t *inp);
-/** As signed_checksum32_ed25519_get_checksum, but take and return a
- * const pointer
- */
-const uint8_t * signed_checksum32_ed25519_getconstarray_checksum(const signed_checksum32_ed25519_t *inp);
-/** Return the value of the length field of the
- * signed_checksum32_ed25519_t in 'inp'
- */
-uint64_t signed_checksum32_ed25519_get_length(const signed_checksum32_ed25519_t *inp);
-/** Set the value of the length field of the
- * signed_checksum32_ed25519_t in 'inp' to 'val'. Return 0 on success;
- * return -1 and set the error code on 'inp' on failure.
- */
-int signed_checksum32_ed25519_set_length(signed_checksum32_ed25519_t *inp, uint64_t val);
-/** Return the length of the dynamic array holding the identifier
- * field of the signed_checksum32_ed25519_t in 'inp'.
- */
-size_t signed_checksum32_ed25519_getlen_identifier(const signed_checksum32_ed25519_t *inp);
-/** Return the element at position 'idx' of the dynamic array field
- * identifier of the signed_checksum32_ed25519_t in 'inp'.
- */
-uint8_t signed_checksum32_ed25519_get_identifier(signed_checksum32_ed25519_t *inp, size_t idx);
-/** As signed_checksum32_ed25519_get_identifier, but take and return a
- * const pointer
- */
-uint8_t signed_checksum32_ed25519_getconst_identifier(const signed_checksum32_ed25519_t *inp, size_t idx);
-/** Change the element at position 'idx' of the dynamic array field
- * identifier of the signed_checksum32_ed25519_t in 'inp', so that it
- * will hold the value 'elt'.
- */
-int signed_checksum32_ed25519_set_identifier(signed_checksum32_ed25519_t *inp, size_t idx, uint8_t elt);
-/** Append a new element 'elt' to the dynamic array field identifier
- * of the signed_checksum32_ed25519_t in 'inp'.
- */
-int signed_checksum32_ed25519_add_identifier(signed_checksum32_ed25519_t *inp, uint8_t elt);
-/** Return a pointer to the variable-length array field identifier of
- * 'inp'.
- */
-uint8_t * signed_checksum32_ed25519_getarray_identifier(signed_checksum32_ed25519_t *inp);
-/** As signed_checksum32_ed25519_get_identifier, but take and return a
- * const pointer
- */
-const uint8_t * signed_checksum32_ed25519_getconstarray_identifier(const signed_checksum32_ed25519_t *inp);
-/** Change the length of the variable-length array field identifier of
- * 'inp' to 'newlen'.Fill extra elements with 0. Return 0 on success;
- * return -1 and set the error code on 'inp' on failure.
- */
-int signed_checksum32_ed25519_setlen_identifier(signed_checksum32_ed25519_t *inp, size_t newlen);
-/** Return the (constant) length of the array holding the signature
- * field of the signed_checksum32_ed25519_t in 'inp'.
- */
-size_t signed_checksum32_ed25519_getlen_signature(const signed_checksum32_ed25519_t *inp);
-/** Return the element at position 'idx' of the fixed array field
- * signature of the signed_checksum32_ed25519_t in 'inp'.
- */
-uint8_t signed_checksum32_ed25519_get_signature(signed_checksum32_ed25519_t *inp, size_t idx);
-/** As signed_checksum32_ed25519_get_signature, but take and return a
- * const pointer
- */
-uint8_t signed_checksum32_ed25519_getconst_signature(const signed_checksum32_ed25519_t *inp, size_t idx);
-/** Change the element at position 'idx' of the fixed array field
- * signature of the signed_checksum32_ed25519_t in 'inp', so that it
- * will hold the value 'elt'.
- */
-int signed_checksum32_ed25519_set_signature(signed_checksum32_ed25519_t *inp, size_t idx, uint8_t elt);
-/** Return a pointer to the 64-element array field signature of 'inp'.
- */
-uint8_t * signed_checksum32_ed25519_getarray_signature(signed_checksum32_ed25519_t *inp);
-/** As signed_checksum32_ed25519_get_signature, but take and return a
- * const pointer
- */
-const uint8_t * signed_checksum32_ed25519_getconstarray_signature(const signed_checksum32_ed25519_t *inp);
-/** Return the (constant) length of the array holding the namespace
- * field of the signed_checksum32_ed25519_t in 'inp'.
- */
-size_t signed_checksum32_ed25519_getlen_namespace(const signed_checksum32_ed25519_t *inp);
-/** Return the element at position 'idx' of the fixed array field
- * namespace of the signed_checksum32_ed25519_t in 'inp'.
- */
-uint8_t signed_checksum32_ed25519_get_namespace(signed_checksum32_ed25519_t *inp, size_t idx);
-/** As signed_checksum32_ed25519_get_namespace, but take and return a
- * const pointer
- */
-uint8_t signed_checksum32_ed25519_getconst_namespace(const signed_checksum32_ed25519_t *inp, size_t idx);
-/** Change the element at position 'idx' of the fixed array field
- * namespace of the signed_checksum32_ed25519_t in 'inp', so that it
- * will hold the value 'elt'.
- */
-int signed_checksum32_ed25519_set_namespace(signed_checksum32_ed25519_t *inp, size_t idx, uint8_t elt);
-/** Return a pointer to the 32-element array field namespace of 'inp'.
- */
-uint8_t * signed_checksum32_ed25519_getarray_namespace(signed_checksum32_ed25519_t *inp);
-/** As signed_checksum32_ed25519_get_namespace, but take and return a
- * const pointer
- */
-const uint8_t * signed_checksum32_ed25519_getconstarray_namespace(const signed_checksum32_ed25519_t *inp);
-/** Return a newly allocated consistency_proof_v1 with all elements
- * set to zero.
- */
-consistency_proof_v1_t *consistency_proof_v1_new(void);
-/** Release all storage held by the consistency_proof_v1 in 'victim'.
- * (Do nothing if 'victim' is NULL.)
- */
-void consistency_proof_v1_free(consistency_proof_v1_t *victim);
-/** Try to parse a consistency_proof_v1 from the buffer in 'input',
- * using up to 'len_in' bytes from the input buffer. On success,
- * return the number of bytes consumed and set *output to the newly
- * allocated consistency_proof_v1_t. On failure, return -2 if the
- * input appears truncated, and -1 if the input is otherwise invalid.
- */
-ssize_t consistency_proof_v1_parse(consistency_proof_v1_t **output, const uint8_t *input, const size_t len_in);
-/** Return the number of bytes we expect to need to encode the
- * consistency_proof_v1 in 'obj'. On failure, return a negative value.
- * Note that this value may be an overestimate, and can even be an
- * underestimate for certain unencodeable objects.
- */
-ssize_t consistency_proof_v1_encoded_len(const consistency_proof_v1_t *obj);
-/** Try to encode the consistency_proof_v1 from 'input' into the
- * buffer at 'output', using up to 'avail' bytes of the output buffer.
- * On success, return the number of bytes used. On failure, return -2
- * if the buffer was not long enough, and -1 if the input was invalid.
- */
-ssize_t consistency_proof_v1_encode(uint8_t *output, size_t avail, const consistency_proof_v1_t *input);
-/** Check whether the internal state of the consistency_proof_v1 in
- * 'obj' is consistent. Return NULL if it is, and a short message if
- * it is not.
- */
-const char *consistency_proof_v1_check(const consistency_proof_v1_t *obj);
-/** Clear any errors that were set on the object 'obj' by its setter
- * functions. Return true iff errors were cleared.
- */
-int consistency_proof_v1_clear_errors(consistency_proof_v1_t *obj);
-/** Return the value of the magic field of the consistency_proof_v1_t
- * in 'inp'
- */
-uint64_t consistency_proof_v1_get_magic(const consistency_proof_v1_t *inp);
-/** Set the value of the magic field of the consistency_proof_v1_t in
- * 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int consistency_proof_v1_set_magic(consistency_proof_v1_t *inp, uint64_t val);
-/** Return the value of the format field of the consistency_proof_v1_t
- * in 'inp'
- */
-uint64_t consistency_proof_v1_get_format(const consistency_proof_v1_t *inp);
-/** Set the value of the format field of the consistency_proof_v1_t in
- * 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int consistency_proof_v1_set_format(consistency_proof_v1_t *inp, uint64_t val);
-/** Return the (constant) length of the array holding the identifier
- * field of the consistency_proof_v1_t in 'inp'.
- */
-size_t consistency_proof_v1_getlen_identifier(const consistency_proof_v1_t *inp);
-/** Return the element at position 'idx' of the fixed array field
- * identifier of the consistency_proof_v1_t in 'inp'.
- */
-uint8_t consistency_proof_v1_get_identifier(consistency_proof_v1_t *inp, size_t idx);
-/** As consistency_proof_v1_get_identifier, but take and return a
- * const pointer
- */
-uint8_t consistency_proof_v1_getconst_identifier(const consistency_proof_v1_t *inp, size_t idx);
-/** Change the element at position 'idx' of the fixed array field
- * identifier of the consistency_proof_v1_t in 'inp', so that it will
- * hold the value 'elt'.
- */
-int consistency_proof_v1_set_identifier(consistency_proof_v1_t *inp, size_t idx, uint8_t elt);
-/** Return a pointer to the 32-element array field identifier of
- * 'inp'.
- */
-uint8_t * consistency_proof_v1_getarray_identifier(consistency_proof_v1_t *inp);
-/** As consistency_proof_v1_get_identifier, but take and return a
- * const pointer
- */
-const uint8_t * consistency_proof_v1_getconstarray_identifier(const consistency_proof_v1_t *inp);
-/** Return the value of the old_size field of the
- * consistency_proof_v1_t in 'inp'
- */
-uint64_t consistency_proof_v1_get_old_size(const consistency_proof_v1_t *inp);
-/** Set the value of the old_size field of the consistency_proof_v1_t
- * in 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int consistency_proof_v1_set_old_size(consistency_proof_v1_t *inp, uint64_t val);
-/** Return the value of the new_size field of the
- * consistency_proof_v1_t in 'inp'
- */
-uint64_t consistency_proof_v1_get_new_size(const consistency_proof_v1_t *inp);
-/** Set the value of the new_size field of the consistency_proof_v1_t
- * in 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int consistency_proof_v1_set_new_size(consistency_proof_v1_t *inp, uint64_t val);
-/** Return the value of the n_items field of the
- * consistency_proof_v1_t in 'inp'
- */
-uint64_t consistency_proof_v1_get_n_items(const consistency_proof_v1_t *inp);
-/** Set the value of the n_items field of the consistency_proof_v1_t
- * in 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int consistency_proof_v1_set_n_items(consistency_proof_v1_t *inp, uint64_t val);
-/** Return the length of the dynamic array holding the hashes field of
- * the consistency_proof_v1_t in 'inp'.
- */
-size_t consistency_proof_v1_getlen_hashes(const consistency_proof_v1_t *inp);
-/** Return the element at position 'idx' of the dynamic array field
- * hashes of the consistency_proof_v1_t in 'inp'.
- */
-struct hash_st * consistency_proof_v1_get_hashes(consistency_proof_v1_t *inp, size_t idx);
-/** As consistency_proof_v1_get_hashes, but take and return a const
- * pointer
- */
- const struct hash_st * consistency_proof_v1_getconst_hashes(const consistency_proof_v1_t *inp, size_t idx);
-/** Change the element at position 'idx' of the dynamic array field
- * hashes of the consistency_proof_v1_t in 'inp', so that it will hold
- * the value 'elt'. Free the previous value, if any.
- */
-int consistency_proof_v1_set_hashes(consistency_proof_v1_t *inp, size_t idx, struct hash_st * elt);
-/** As consistency_proof_v1_set_hashes, but does not free the previous
- * value.
- */
-int consistency_proof_v1_set0_hashes(consistency_proof_v1_t *inp, size_t idx, struct hash_st * elt);
-/** Append a new element 'elt' to the dynamic array field hashes of
- * the consistency_proof_v1_t in 'inp'.
- */
-int consistency_proof_v1_add_hashes(consistency_proof_v1_t *inp, struct hash_st * elt);
-/** Return a pointer to the variable-length array field hashes of
- * 'inp'.
- */
-struct hash_st * * consistency_proof_v1_getarray_hashes(consistency_proof_v1_t *inp);
-/** As consistency_proof_v1_get_hashes, but take and return a const
- * pointer
- */
-const struct hash_st * const * consistency_proof_v1_getconstarray_hashes(const consistency_proof_v1_t *inp);
-/** Change the length of the variable-length array field hashes of
- * 'inp' to 'newlen'.Fill extra elements with NULL; free removed
- * elements. Return 0 on success; return -1 and set the error code on
- * 'inp' on failure.
- */
-int consistency_proof_v1_setlen_hashes(consistency_proof_v1_t *inp, size_t newlen);
-/** Return a newly allocated entries_v1 with all elements set to zero.
- */
-entries_v1_t *entries_v1_new(void);
-/** Release all storage held by the entries_v1 in 'victim'. (Do
- * nothing if 'victim' is NULL.)
- */
-void entries_v1_free(entries_v1_t *victim);
-/** Try to parse a entries_v1 from the buffer in 'input', using up to
- * 'len_in' bytes from the input buffer. On success, return the number
- * of bytes consumed and set *output to the newly allocated
- * entries_v1_t. On failure, return -2 if the input appears truncated,
- * and -1 if the input is otherwise invalid.
- */
-ssize_t entries_v1_parse(entries_v1_t **output, const uint8_t *input, const size_t len_in);
-/** Return the number of bytes we expect to need to encode the
- * entries_v1 in 'obj'. On failure, return a negative value. Note that
- * this value may be an overestimate, and can even be an underestimate
- * for certain unencodeable objects.
- */
-ssize_t entries_v1_encoded_len(const entries_v1_t *obj);
-/** Try to encode the entries_v1 from 'input' into the buffer at
- * 'output', using up to 'avail' bytes of the output buffer. On
- * success, return the number of bytes used. On failure, return -2 if
- * the buffer was not long enough, and -1 if the input was invalid.
- */
-ssize_t entries_v1_encode(uint8_t *output, size_t avail, const entries_v1_t *input);
-/** Check whether the internal state of the entries_v1 in 'obj' is
- * consistent. Return NULL if it is, and a short message if it is not.
- */
-const char *entries_v1_check(const entries_v1_t *obj);
-/** Clear any errors that were set on the object 'obj' by its setter
- * functions. Return true iff errors were cleared.
- */
-int entries_v1_clear_errors(entries_v1_t *obj);
-/** Return the value of the magic field of the entries_v1_t in 'inp'
- */
-uint64_t entries_v1_get_magic(const entries_v1_t *inp);
-/** Set the value of the magic field of the entries_v1_t in 'inp' to
- * 'val'. Return 0 on success; return -1 and set the error code on
- * 'inp' on failure.
- */
-int entries_v1_set_magic(entries_v1_t *inp, uint64_t val);
-/** Return the value of the format field of the entries_v1_t in 'inp'
- */
-uint64_t entries_v1_get_format(const entries_v1_t *inp);
-/** Set the value of the format field of the entries_v1_t in 'inp' to
- * 'val'. Return 0 on success; return -1 and set the error code on
- * 'inp' on failure.
- */
-int entries_v1_set_format(entries_v1_t *inp, uint64_t val);
-/** Return the value of the n_items field of the entries_v1_t in 'inp'
- */
-uint64_t entries_v1_get_n_items(const entries_v1_t *inp);
-/** Set the value of the n_items field of the entries_v1_t in 'inp' to
- * 'val'. Return 0 on success; return -1 and set the error code on
- * 'inp' on failure.
- */
-int entries_v1_set_n_items(entries_v1_t *inp, uint64_t val);
-/** Return the length of the dynamic array holding the checksums field
- * of the entries_v1_t in 'inp'.
- */
-size_t entries_v1_getlen_checksums(const entries_v1_t *inp);
-/** Return the element at position 'idx' of the dynamic array field
- * checksums of the entries_v1_t in 'inp'.
- */
-struct signed_checksum32_ed25519_st * entries_v1_get_checksums(entries_v1_t *inp, size_t idx);
-/** As entries_v1_get_checksums, but take and return a const pointer
- */
- const struct signed_checksum32_ed25519_st * entries_v1_getconst_checksums(const entries_v1_t *inp, size_t idx);
-/** Change the element at position 'idx' of the dynamic array field
- * checksums of the entries_v1_t in 'inp', so that it will hold the
- * value 'elt'. Free the previous value, if any.
- */
-int entries_v1_set_checksums(entries_v1_t *inp, size_t idx, struct signed_checksum32_ed25519_st * elt);
-/** As entries_v1_set_checksums, but does not free the previous value.
- */
-int entries_v1_set0_checksums(entries_v1_t *inp, size_t idx, struct signed_checksum32_ed25519_st * elt);
-/** Append a new element 'elt' to the dynamic array field checksums of
- * the entries_v1_t in 'inp'.
- */
-int entries_v1_add_checksums(entries_v1_t *inp, struct signed_checksum32_ed25519_st * elt);
-/** Return a pointer to the variable-length array field checksums of
- * 'inp'.
- */
-struct signed_checksum32_ed25519_st * * entries_v1_getarray_checksums(entries_v1_t *inp);
-/** As entries_v1_get_checksums, but take and return a const pointer
- */
-const struct signed_checksum32_ed25519_st * const * entries_v1_getconstarray_checksums(const entries_v1_t *inp);
-/** Change the length of the variable-length array field checksums of
- * 'inp' to 'newlen'.Fill extra elements with NULL; free removed
- * elements. Return 0 on success; return -1 and set the error code on
- * 'inp' on failure.
- */
-int entries_v1_setlen_checksums(entries_v1_t *inp, size_t newlen);
-/** Return a newly allocated inclusion_proof_v1 with all elements set
- * to zero.
- */
-inclusion_proof_v1_t *inclusion_proof_v1_new(void);
-/** Release all storage held by the inclusion_proof_v1 in 'victim'.
- * (Do nothing if 'victim' is NULL.)
- */
-void inclusion_proof_v1_free(inclusion_proof_v1_t *victim);
-/** Try to parse a inclusion_proof_v1 from the buffer in 'input',
- * using up to 'len_in' bytes from the input buffer. On success,
- * return the number of bytes consumed and set *output to the newly
- * allocated inclusion_proof_v1_t. On failure, return -2 if the input
- * appears truncated, and -1 if the input is otherwise invalid.
- */
-ssize_t inclusion_proof_v1_parse(inclusion_proof_v1_t **output, const uint8_t *input, const size_t len_in);
-/** Return the number of bytes we expect to need to encode the
- * inclusion_proof_v1 in 'obj'. On failure, return a negative value.
- * Note that this value may be an overestimate, and can even be an
- * underestimate for certain unencodeable objects.
- */
-ssize_t inclusion_proof_v1_encoded_len(const inclusion_proof_v1_t *obj);
-/** Try to encode the inclusion_proof_v1 from 'input' into the buffer
- * at 'output', using up to 'avail' bytes of the output buffer. On
- * success, return the number of bytes used. On failure, return -2 if
- * the buffer was not long enough, and -1 if the input was invalid.
- */
-ssize_t inclusion_proof_v1_encode(uint8_t *output, size_t avail, const inclusion_proof_v1_t *input);
-/** Check whether the internal state of the inclusion_proof_v1 in
- * 'obj' is consistent. Return NULL if it is, and a short message if
- * it is not.
- */
-const char *inclusion_proof_v1_check(const inclusion_proof_v1_t *obj);
-/** Clear any errors that were set on the object 'obj' by its setter
- * functions. Return true iff errors were cleared.
- */
-int inclusion_proof_v1_clear_errors(inclusion_proof_v1_t *obj);
-/** Return the value of the magic field of the inclusion_proof_v1_t in
- * 'inp'
- */
-uint64_t inclusion_proof_v1_get_magic(const inclusion_proof_v1_t *inp);
-/** Set the value of the magic field of the inclusion_proof_v1_t in
- * 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int inclusion_proof_v1_set_magic(inclusion_proof_v1_t *inp, uint64_t val);
-/** Return the value of the format field of the inclusion_proof_v1_t
- * in 'inp'
- */
-uint64_t inclusion_proof_v1_get_format(const inclusion_proof_v1_t *inp);
-/** Set the value of the format field of the inclusion_proof_v1_t in
- * 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int inclusion_proof_v1_set_format(inclusion_proof_v1_t *inp, uint64_t val);
-/** Return the (constant) length of the array holding the identifier
- * field of the inclusion_proof_v1_t in 'inp'.
- */
-size_t inclusion_proof_v1_getlen_identifier(const inclusion_proof_v1_t *inp);
-/** Return the element at position 'idx' of the fixed array field
- * identifier of the inclusion_proof_v1_t in 'inp'.
- */
-uint8_t inclusion_proof_v1_get_identifier(inclusion_proof_v1_t *inp, size_t idx);
-/** As inclusion_proof_v1_get_identifier, but take and return a const
- * pointer
- */
-uint8_t inclusion_proof_v1_getconst_identifier(const inclusion_proof_v1_t *inp, size_t idx);
-/** Change the element at position 'idx' of the fixed array field
- * identifier of the inclusion_proof_v1_t in 'inp', so that it will
- * hold the value 'elt'.
- */
-int inclusion_proof_v1_set_identifier(inclusion_proof_v1_t *inp, size_t idx, uint8_t elt);
-/** Return a pointer to the 32-element array field identifier of
- * 'inp'.
- */
-uint8_t * inclusion_proof_v1_getarray_identifier(inclusion_proof_v1_t *inp);
-/** As inclusion_proof_v1_get_identifier, but take and return a const
- * pointer
- */
-const uint8_t * inclusion_proof_v1_getconstarray_identifier(const inclusion_proof_v1_t *inp);
-/** Return the value of the tree_size field of the
- * inclusion_proof_v1_t in 'inp'
- */
-uint64_t inclusion_proof_v1_get_tree_size(const inclusion_proof_v1_t *inp);
-/** Set the value of the tree_size field of the inclusion_proof_v1_t
- * in 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int inclusion_proof_v1_set_tree_size(inclusion_proof_v1_t *inp, uint64_t val);
-/** Return the value of the leaf_index field of the
- * inclusion_proof_v1_t in 'inp'
- */
-uint64_t inclusion_proof_v1_get_leaf_index(const inclusion_proof_v1_t *inp);
-/** Set the value of the leaf_index field of the inclusion_proof_v1_t
- * in 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int inclusion_proof_v1_set_leaf_index(inclusion_proof_v1_t *inp, uint64_t val);
-/** Return the value of the n_items field of the inclusion_proof_v1_t
- * in 'inp'
- */
-uint64_t inclusion_proof_v1_get_n_items(const inclusion_proof_v1_t *inp);
-/** Set the value of the n_items field of the inclusion_proof_v1_t in
- * 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int inclusion_proof_v1_set_n_items(inclusion_proof_v1_t *inp, uint64_t val);
-/** Return the length of the dynamic array holding the hashes field of
- * the inclusion_proof_v1_t in 'inp'.
- */
-size_t inclusion_proof_v1_getlen_hashes(const inclusion_proof_v1_t *inp);
-/** Return the element at position 'idx' of the dynamic array field
- * hashes of the inclusion_proof_v1_t in 'inp'.
- */
-struct hash_st * inclusion_proof_v1_get_hashes(inclusion_proof_v1_t *inp, size_t idx);
-/** As inclusion_proof_v1_get_hashes, but take and return a const
- * pointer
- */
- const struct hash_st * inclusion_proof_v1_getconst_hashes(const inclusion_proof_v1_t *inp, size_t idx);
-/** Change the element at position 'idx' of the dynamic array field
- * hashes of the inclusion_proof_v1_t in 'inp', so that it will hold
- * the value 'elt'. Free the previous value, if any.
- */
-int inclusion_proof_v1_set_hashes(inclusion_proof_v1_t *inp, size_t idx, struct hash_st * elt);
-/** As inclusion_proof_v1_set_hashes, but does not free the previous
- * value.
- */
-int inclusion_proof_v1_set0_hashes(inclusion_proof_v1_t *inp, size_t idx, struct hash_st * elt);
-/** Append a new element 'elt' to the dynamic array field hashes of
- * the inclusion_proof_v1_t in 'inp'.
- */
-int inclusion_proof_v1_add_hashes(inclusion_proof_v1_t *inp, struct hash_st * elt);
-/** Return a pointer to the variable-length array field hashes of
- * 'inp'.
- */
-struct hash_st * * inclusion_proof_v1_getarray_hashes(inclusion_proof_v1_t *inp);
-/** As inclusion_proof_v1_get_hashes, but take and return a const
- * pointer
- */
-const struct hash_st * const * inclusion_proof_v1_getconstarray_hashes(const inclusion_proof_v1_t *inp);
-/** Change the length of the variable-length array field hashes of
- * 'inp' to 'newlen'.Fill extra elements with NULL; free removed
- * elements. Return 0 on success; return -1 and set the error code on
- * 'inp' on failure.
- */
-int inclusion_proof_v1_setlen_hashes(inclusion_proof_v1_t *inp, size_t newlen);
-/** Return a newly allocated request_v1 with all elements set to zero.
- */
-request_v1_t *request_v1_new(void);
-/** Release all storage held by the request_v1 in 'victim'. (Do
- * nothing if 'victim' is NULL.)
- */
-void request_v1_free(request_v1_t *victim);
-/** Try to parse a request_v1 from the buffer in 'input', using up to
- * 'len_in' bytes from the input buffer. On success, return the number
- * of bytes consumed and set *output to the newly allocated
- * request_v1_t. On failure, return -2 if the input appears truncated,
- * and -1 if the input is otherwise invalid.
- */
-ssize_t request_v1_parse(request_v1_t **output, const uint8_t *input, const size_t len_in);
-/** Return the number of bytes we expect to need to encode the
- * request_v1 in 'obj'. On failure, return a negative value. Note that
- * this value may be an overestimate, and can even be an underestimate
- * for certain unencodeable objects.
- */
-ssize_t request_v1_encoded_len(const request_v1_t *obj);
-/** Try to encode the request_v1 from 'input' into the buffer at
- * 'output', using up to 'avail' bytes of the output buffer. On
- * success, return the number of bytes used. On failure, return -2 if
- * the buffer was not long enough, and -1 if the input was invalid.
- */
-ssize_t request_v1_encode(uint8_t *output, size_t avail, const request_v1_t *input);
-/** Check whether the internal state of the request_v1 in 'obj' is
- * consistent. Return NULL if it is, and a short message if it is not.
- */
-const char *request_v1_check(const request_v1_t *obj);
-/** Clear any errors that were set on the object 'obj' by its setter
- * functions. Return true iff errors were cleared.
- */
-int request_v1_clear_errors(request_v1_t *obj);
-/** Return the value of the magic field of the request_v1_t in 'inp'
- */
-uint64_t request_v1_get_magic(const request_v1_t *inp);
-/** Set the value of the magic field of the request_v1_t in 'inp' to
- * 'val'. Return 0 on success; return -1 and set the error code on
- * 'inp' on failure.
- */
-int request_v1_set_magic(request_v1_t *inp, uint64_t val);
-/** Return the value of the format field of the request_v1_t in 'inp'
- */
-uint64_t request_v1_get_format(const request_v1_t *inp);
-/** Set the value of the format field of the request_v1_t in 'inp' to
- * 'val'. Return 0 on success; return -1 and set the error code on
- * 'inp' on failure.
- */
-int request_v1_set_format(request_v1_t *inp, uint64_t val);
-/** Return the value of the request_get_entries field of the
- * request_v1_t in 'inp'
- */
-struct req_get_entries_v1_st * request_v1_get_request_get_entries(request_v1_t *inp);
-/** As request_v1_get_request_get_entries, but take and return a const
- * pointer
- */
-const struct req_get_entries_v1_st * request_v1_getconst_request_get_entries(const request_v1_t *inp);
-/** Set the value of the request_get_entries field of the request_v1_t
- * in 'inp' to 'val'. Free the old value if any. Steals the
- * referenceto 'val'.Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int request_v1_set_request_get_entries(request_v1_t *inp, struct req_get_entries_v1_st *val);
-/** As request_v1_set_request_get_entries, but does not free the
- * previous value.
- */
-int request_v1_set0_request_get_entries(request_v1_t *inp, struct req_get_entries_v1_st *val);
-/** Return the value of the request_get_proof_by_hash field of the
- * request_v1_t in 'inp'
- */
-struct req_get_proof_by_hash_v1_st * request_v1_get_request_get_proof_by_hash(request_v1_t *inp);
-/** As request_v1_get_request_get_proof_by_hash, but take and return a
- * const pointer
- */
-const struct req_get_proof_by_hash_v1_st * request_v1_getconst_request_get_proof_by_hash(const request_v1_t *inp);
-/** Set the value of the request_get_proof_by_hash field of the
- * request_v1_t in 'inp' to 'val'. Free the old value if any. Steals
- * the referenceto 'val'.Return 0 on success; return -1 and set the
- * error code on 'inp' on failure.
- */
-int request_v1_set_request_get_proof_by_hash(request_v1_t *inp, struct req_get_proof_by_hash_v1_st *val);
-/** As request_v1_set_request_get_proof_by_hash, but does not free the
- * previous value.
- */
-int request_v1_set0_request_get_proof_by_hash(request_v1_t *inp, struct req_get_proof_by_hash_v1_st *val);
-/** Return the value of the request_get_consistency_proof field of the
- * request_v1_t in 'inp'
- */
-struct req_get_consistency_proof_v1_st * request_v1_get_request_get_consistency_proof(request_v1_t *inp);
-/** As request_v1_get_request_get_consistency_proof, but take and
- * return a const pointer
- */
-const struct req_get_consistency_proof_v1_st * request_v1_getconst_request_get_consistency_proof(const request_v1_t *inp);
-/** Set the value of the request_get_consistency_proof field of the
- * request_v1_t in 'inp' to 'val'. Free the old value if any. Steals
- * the referenceto 'val'.Return 0 on success; return -1 and set the
- * error code on 'inp' on failure.
- */
-int request_v1_set_request_get_consistency_proof(request_v1_t *inp, struct req_get_consistency_proof_v1_st *val);
-/** As request_v1_set_request_get_consistency_proof, but does not free
- * the previous value.
- */
-int request_v1_set0_request_get_consistency_proof(request_v1_t *inp, struct req_get_consistency_proof_v1_st *val);
-/** Return a newly allocated signed_tree_head_v1 with all elements set
- * to zero.
- */
-signed_tree_head_v1_t *signed_tree_head_v1_new(void);
-/** Release all storage held by the signed_tree_head_v1 in 'victim'.
- * (Do nothing if 'victim' is NULL.)
- */
-void signed_tree_head_v1_free(signed_tree_head_v1_t *victim);
-/** Try to parse a signed_tree_head_v1 from the buffer in 'input',
- * using up to 'len_in' bytes from the input buffer. On success,
- * return the number of bytes consumed and set *output to the newly
- * allocated signed_tree_head_v1_t. On failure, return -2 if the input
- * appears truncated, and -1 if the input is otherwise invalid.
- */
-ssize_t signed_tree_head_v1_parse(signed_tree_head_v1_t **output, const uint8_t *input, const size_t len_in);
-/** Return the number of bytes we expect to need to encode the
- * signed_tree_head_v1 in 'obj'. On failure, return a negative value.
- * Note that this value may be an overestimate, and can even be an
- * underestimate for certain unencodeable objects.
- */
-ssize_t signed_tree_head_v1_encoded_len(const signed_tree_head_v1_t *obj);
-/** Try to encode the signed_tree_head_v1 from 'input' into the buffer
- * at 'output', using up to 'avail' bytes of the output buffer. On
- * success, return the number of bytes used. On failure, return -2 if
- * the buffer was not long enough, and -1 if the input was invalid.
- */
-ssize_t signed_tree_head_v1_encode(uint8_t *output, size_t avail, const signed_tree_head_v1_t *input);
-/** Check whether the internal state of the signed_tree_head_v1 in
- * 'obj' is consistent. Return NULL if it is, and a short message if
- * it is not.
- */
-const char *signed_tree_head_v1_check(const signed_tree_head_v1_t *obj);
-/** Clear any errors that were set on the object 'obj' by its setter
- * functions. Return true iff errors were cleared.
- */
-int signed_tree_head_v1_clear_errors(signed_tree_head_v1_t *obj);
-/** Return the value of the magic field of the signed_tree_head_v1_t
- * in 'inp'
- */
-uint64_t signed_tree_head_v1_get_magic(const signed_tree_head_v1_t *inp);
-/** Set the value of the magic field of the signed_tree_head_v1_t in
- * 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int signed_tree_head_v1_set_magic(signed_tree_head_v1_t *inp, uint64_t val);
-/** Return the value of the format field of the signed_tree_head_v1_t
- * in 'inp'
- */
-uint64_t signed_tree_head_v1_get_format(const signed_tree_head_v1_t *inp);
-/** Set the value of the format field of the signed_tree_head_v1_t in
- * 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int signed_tree_head_v1_set_format(signed_tree_head_v1_t *inp, uint64_t val);
-/** Return the value of the timestamp field of the
- * signed_tree_head_v1_t in 'inp'
- */
-uint64_t signed_tree_head_v1_get_timestamp(const signed_tree_head_v1_t *inp);
-/** Set the value of the timestamp field of the signed_tree_head_v1_t
- * in 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int signed_tree_head_v1_set_timestamp(signed_tree_head_v1_t *inp, uint64_t val);
-/** Return the value of the tree_size field of the
- * signed_tree_head_v1_t in 'inp'
- */
-uint64_t signed_tree_head_v1_get_tree_size(const signed_tree_head_v1_t *inp);
-/** Set the value of the tree_size field of the signed_tree_head_v1_t
- * in 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int signed_tree_head_v1_set_tree_size(signed_tree_head_v1_t *inp, uint64_t val);
-/** Return the (constant) length of the array holding the root_hash
- * field of the signed_tree_head_v1_t in 'inp'.
- */
-size_t signed_tree_head_v1_getlen_root_hash(const signed_tree_head_v1_t *inp);
-/** Return the element at position 'idx' of the fixed array field
- * root_hash of the signed_tree_head_v1_t in 'inp'.
- */
-uint8_t signed_tree_head_v1_get_root_hash(signed_tree_head_v1_t *inp, size_t idx);
-/** As signed_tree_head_v1_get_root_hash, but take and return a const
- * pointer
- */
-uint8_t signed_tree_head_v1_getconst_root_hash(const signed_tree_head_v1_t *inp, size_t idx);
-/** Change the element at position 'idx' of the fixed array field
- * root_hash of the signed_tree_head_v1_t in 'inp', so that it will
- * hold the value 'elt'.
- */
-int signed_tree_head_v1_set_root_hash(signed_tree_head_v1_t *inp, size_t idx, uint8_t elt);
-/** Return a pointer to the 32-element array field root_hash of 'inp'.
- */
-uint8_t * signed_tree_head_v1_getarray_root_hash(signed_tree_head_v1_t *inp);
-/** As signed_tree_head_v1_get_root_hash, but take and return a const
- * pointer
- */
-const uint8_t * signed_tree_head_v1_getconstarray_root_hash(const signed_tree_head_v1_t *inp);
-/** Return the value of the n_items field of the signed_tree_head_v1_t
- * in 'inp'
- */
-uint64_t signed_tree_head_v1_get_n_items(const signed_tree_head_v1_t *inp);
-/** Set the value of the n_items field of the signed_tree_head_v1_t in
- * 'inp' to 'val'. Return 0 on success; return -1 and set the error
- * code on 'inp' on failure.
- */
-int signed_tree_head_v1_set_n_items(signed_tree_head_v1_t *inp, uint64_t val);
-/** Return the length of the dynamic array holding the signatures
- * field of the signed_tree_head_v1_t in 'inp'.
- */
-size_t signed_tree_head_v1_getlen_signatures(const signed_tree_head_v1_t *inp);
-/** Return the element at position 'idx' of the dynamic array field
- * signatures of the signed_tree_head_v1_t in 'inp'.
- */
-struct sigident_ed25519_st * signed_tree_head_v1_get_signatures(signed_tree_head_v1_t *inp, size_t idx);
-/** As signed_tree_head_v1_get_signatures, but take and return a const
- * pointer
- */
- const struct sigident_ed25519_st * signed_tree_head_v1_getconst_signatures(const signed_tree_head_v1_t *inp, size_t idx);
-/** Change the element at position 'idx' of the dynamic array field
- * signatures of the signed_tree_head_v1_t in 'inp', so that it will
- * hold the value 'elt'. Free the previous value, if any.
- */
-int signed_tree_head_v1_set_signatures(signed_tree_head_v1_t *inp, size_t idx, struct sigident_ed25519_st * elt);
-/** As signed_tree_head_v1_set_signatures, but does not free the
- * previous value.
- */
-int signed_tree_head_v1_set0_signatures(signed_tree_head_v1_t *inp, size_t idx, struct sigident_ed25519_st * elt);
-/** Append a new element 'elt' to the dynamic array field signatures
- * of the signed_tree_head_v1_t in 'inp'.
- */
-int signed_tree_head_v1_add_signatures(signed_tree_head_v1_t *inp, struct sigident_ed25519_st * elt);
-/** Return a pointer to the variable-length array field signatures of
- * 'inp'.
- */
-struct sigident_ed25519_st * * signed_tree_head_v1_getarray_signatures(signed_tree_head_v1_t *inp);
-/** As signed_tree_head_v1_get_signatures, but take and return a const
- * pointer
- */
-const struct sigident_ed25519_st * const * signed_tree_head_v1_getconstarray_signatures(const signed_tree_head_v1_t *inp);
-/** Change the length of the variable-length array field signatures of
- * 'inp' to 'newlen'.Fill extra elements with NULL; free removed
- * elements. Return 0 on success; return -1 and set the error code on
- * 'inp' on failure.
- */
-int signed_tree_head_v1_setlen_signatures(signed_tree_head_v1_t *inp, size_t newlen);
-
-
-#endif
diff --git a/trunnel/stfe.trunnel b/trunnel/stfe.trunnel
deleted file mode 100644
index 8a26d92..0000000
--- a/trunnel/stfe.trunnel
+++ /dev/null
@@ -1,94 +0,0 @@
-/* always POST for consistency? */
-
-const MAGIC_V1 = 0x535446455f5f5631; /* "STFE__V1" */
-
-const T_GET_ENTRIES_V1 = 1;
-const T_GET_PROOF_BY_HASH_V1 = 2;
-const T_GET_CONSISTENCY_PROOF_V1 = 3;
-
-const T_ENTRIES_V1 = 4;
-const T_INCLUSION_PROOF_V1 = 5;
-const T_CONSISTENCY_PROOF_V1 = 6;
-const T_SIGNED_TREE_HEAD_V1 = 7;
-
-struct req_get_entries_v1 {
- u64 start_size;
- u64 end_size;
-};
-
-struct req_get_proof_by_hash_v1 {
- u64 tree_size;
- u8 leaf_hash[32];
-};
-
-struct req_get_consistency_proof_v1 {
- u64 old_size;
- u64 new_size;
-};
-
-struct request_v1 {
- u64 magic IN [ MAGIC_V1 ];
- u64 format IN [ T_GET_ENTRIES_V1, T_GET_PROOF_BY_HASH_V1, T_GET_CONSISTENCY_PROOF_V1 ];
-
- union request[format] {
- T_GET_ENTRIES_V1: struct req_get_entries_v1 get_entries;
- T_GET_PROOF_BY_HASH_V1: struct req_get_proof_by_hash_v1 get_proof_by_hash;
- T_GET_CONSISTENCY_PROOF_V1: struct req_get_consistency_proof_v1 get_consistency_proof;
- default: fail;
- };
-}
-
-struct sigident_ed25519 {
- u8 signature[64];
- u8 identifier[32];
-};
-
-struct hash {
- u8 hash[32];
-};
-
-struct signed_checksum32_ed25519 {
- u8 checksum[32];
- u64 length IN [ 1..128 ];
- u8 identifier[length];
- u8 signature[64];
- u8 namespace[32];
-};
-
-struct entries_v1 {
- u64 magic IN [ MAGIC_V1 ];
- u64 format IN [ T_ENTRIES_V1 ];
- u64 n_items;
- struct signed_checksum32_ed25519 checksums[n_items];
-};
-
-struct inclusion_proof_v1 {
- u64 magic IN [ MAGIC_V1 ];
- u64 format IN [ T_INCLUSION_PROOF_V1 ];
- u8 identifier[32];
- u64 tree_size;
- u64 leaf_index;
- u64 n_items;
- struct hash hashes[n_items];
-};
-
-struct consistency_proof_v1 {
- u64 magic IN [ MAGIC_V1 ];
- u64 format IN [ T_CONSISTENCY_PROOF_V1 ];
- u8 identifier[32];
- u64 old_size;
- u64 new_size;
- u64 n_items;
- struct hash hashes[n_items];
-};
-
-struct signed_tree_head_v1 {
- u64 magic IN [ MAGIC_V1 ];
- u64 format IN [ T_SIGNED_TREE_HEAD_V1 ];
- u64 timestamp;
- u64 tree_size;
- u8 root_hash[32];
- u64 n_items;
- struct sigident_ed25519 signatures[n_items];
-};
-