* it must NOT be freed. */
extern void buf_append_string(struct buffer_if *buf, cstring_t s);
+ /* Append a two-byte length and the string to the buffer. Length is in
+ * network byte order. */
-extern string_t hex_encode(const uint8_t *bin, int binsize);
- /* Convert a byte array to hex, returning the result in a freshly allocated
- * string.
- */
+static inline int hex_encode_size(int binsize) { return binsize*2 + 1; }
+extern void hex_encode(const uint8_t *bin, int binsize, char *buf);
+ /* Convert a byte array to hex into a supplied buffer. */
+extern string_t hex_encode_alloc(const uint8_t *bin, int binsize);
+ /* Returns the result in a freshly allocated string. */
extern bool_t hex_decode(uint8_t *buffer, int32_t buflen, int32_t *outlen,
cstring_t hb, bool_t allow_odd_nibble);
* The input is processed left to right until it is consumed, the buffer is
* full, or an error is encountered in the input. The length of output
* produced is stored in *outlen. Returns true if the entire input was
- * processed without error; otherwise false.
- */
+ * processed without error; otherwise false. */
extern void read_mpbin(MP_INT *a, uint8_t *bin, int binsize);
+ /* Convert a buffer into its MP_INT representation */
extern char *write_mpstring(MP_INT *a);
+ /* Convert a MP_INT into a hex string */
extern int32_t write_mpbin(MP_INT *a, uint8_t *buffer, int32_t buflen);
+ /* Convert a MP_INT into a buffer; return length; truncate if necessary */
extern struct log_if *init_log(list_t *loglist);
extern int consttime_memeq(const void *s1, const void *s2, size_t n);
+void hash_hash(const struct hash_if *hashi, const void *msg, int32_t len,
+ uint8_t *digest /* hi->hlen bytes */);
+
const char *iaddr_to_string(const union iaddr *ia);
int iaddr_socklen(const union iaddr *ia);