From 8839be641ae86d35cf05e0143c06be63c20dd126 Mon Sep 17 00:00:00 2001 From: Christian Decker Date: Thu, 23 Jan 2020 15:06:02 +0100 Subject: [PATCH] sha256: Add primitive to add a varint-encoded int to a hash We're about to push a couple of varints as part of the dynafed blockparsing, so we might as well make it easier for us. --- bitcoin/block.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/bitcoin/block.c b/bitcoin/block.c index ee929b2f2..7415f7bad 100644 --- a/bitcoin/block.c +++ b/bitcoin/block.c @@ -4,6 +4,14 @@ #include #include +static void sha256_varint(struct sha256_ctx *ctx, u64 val) +{ + u8 vt[VARINT_MAX_LEN]; + size_t vtlen; + vtlen = varint_put(vt, val); + sha256_update(ctx, vt, vtlen); +} + /* Encoding is ... */ struct bitcoin_block * bitcoin_block_from_hex(const tal_t *ctx, const struct chainparams *chainparams, @@ -81,8 +89,6 @@ void bitcoin_block_blkid(const struct bitcoin_block *b, struct bitcoin_blkid *out) { struct sha256_ctx shactx; - u8 vt[VARINT_MAX_LEN]; - size_t vtlen; sha256_init(&shactx); sha256_le32(&shactx, b->hdr.version); @@ -94,8 +100,7 @@ void bitcoin_block_blkid(const struct bitcoin_block *b, size_t clen = tal_bytelen(b->elements_hdr->proof.challenge); sha256_le32(&shactx, b->elements_hdr->block_height); - vtlen = varint_put(vt, clen); - sha256_update(&shactx, vt, vtlen); + sha256_varint(&shactx, clen); sha256_update(&shactx, b->elements_hdr->proof.challenge, clen); /* The solution is skipped, since that'd create a circular * dependency apparently */