From bb187c2fb75f3878f9ee539a61d9994f20be14d3 Mon Sep 17 00:00:00 2001 From: Dan Sheppard Date: Fri, 11 Apr 2025 16:17:46 +0100 Subject: [PATCH] More superblock work! --- .gitignore | 2 +- constants.h | 3 +++ coquet | Bin 33752 -> 56704 bytes superblock.c | 42 +++++++++++++++++++++++++++++------------- superblock.h | 6 ++++-- 5 files changed, 37 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 4c50c97..93b9aff 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ *.o -*.coquet +*.coquet.* a.out diff --git a/constants.h b/constants.h index 4a7fc05..9b68597 100644 --- a/constants.h +++ b/constants.h @@ -3,6 +3,9 @@ #include +#define COQUET_MAGIC 0xC0CEF11ECABBA9E5ULL +#define COQUET_VERSION 0x0000000000000001ULL + #define COQUET_FILE_MAIN 0 #define COQUET_FILE_OLD 1 #define COQUET_FILE_TMP 2 diff --git a/coquet b/coquet index 2a2d542b019c61c2c8838dc232f8088f1d23d7e4..e1cd0bb4be760199edf70c9d93b183e16cd65089 100755 GIT binary patch literal 56704 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 bi{6bByQQ<{fD73hzr%?I;hzkUC5!(7qyOtl literal 33752 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 F{{neTu7Usn diff --git a/superblock.c b/superblock.c index 6409fbf..1c9a146 100644 --- a/superblock.c +++ b/superblock.c @@ -11,10 +11,12 @@ * * offset length * +-------------------+ - * | sb_hash | 0 32 - * | sb_serial | 32 8 + * | magic | 0 8 + * | version | 8 8 + * | sb_hash | 16 32 + * | sb_serial | 48 8 * +-------------------+ - * | unused | 40 984 + * | unused | 56 968 * +-------------------+ * | current | 1024 512 * +-------------------+ @@ -26,10 +28,10 @@ * offset length * +-------------------+ * | global_iv | 0 32 - * +-------------------+ * | block_size | 32 1 + * | nursery_size | 33 1 * +-------------------+ - * | unused | 33 478 + * | unused | 34 477 * +-------------------+ * | reserved | 511 1 * +-------------------+ @@ -40,10 +42,11 @@ */ struct cq_super default_super = { - .current = {{0,},12}, - .desired = {{0,},12}, + .current = {{0,},12,10}, + .desired = {{0,},12,10}, .sb_serial = 0, .sb_hash = {0,}, + .version = COQUET_VERSION, .from_b = 1 }; @@ -53,21 +56,30 @@ struct cq_super default_super = { static void extract_config(uint8_t *data, struct cq_super_config *sc) { memcpy(sc->global_iv,data,HASH_LEN); sc->block_size = be_decode(data+32,1); + sc->nursery_size = be_decode(data+33,1); } static int extract_half(uint8_t *data, struct cq_super *super) { struct sha2_ctx_t sha2; uint8_t hash[HASH_LEN],cmp[HASH_LEN]; + uint64_t magic; /* extract */ + magic = be_decode(data,8); + if(magic!=COQUET_MAGIC) { + return 0; + } + super->version = be_decode(data+8,8); + /* All versions are fine for now. */ memset(super->sb_hash,0,HASH_LEN); - super->sb_serial = be_decode(data+32,8); + super->sb_serial = be_decode(data+48,8); + extract_config(data+1024,&(super->current)); extract_config(data+1536,&(super->desired)); /* verify */ - memcpy(hash,data,HASH_LEN); - memset(data,0,HASH_LEN); + memcpy(hash,data+16,HASH_LEN); + memset(data+16,0,HASH_LEN); sha2_init_hmac(&sha2, SHA2_VARIETY_512_256, super->current.global_iv, GLOBAL_IV_LEN); sha2_more(&sha2,data,HALF_BYTES); @@ -146,14 +158,18 @@ static void intract_config(uint8_t *data, struct cq_super_config *sc) { memcpy(data,sc->global_iv,HASH_LEN); be_encode(data+32,sc->block_size,1); + be_encode(data+33,sc->nursery_size,1); } static void intract(uint8_t *data, struct cq_super *super, uint64_t serial) { struct sha2_ctx_t sha2; /* intract */ - memset(data,0,HALF_BYTES); - be_encode(data+32,serial,8); + memset(data,0,HASH_LEN); + be_encode(data,COQUET_MAGIC,8); + be_encode(data+8,COQUET_VERSION,8); + be_encode(data+48,serial,8); + intract_config(data+1024,&(super->current)); intract_config(data+1536,&(super->desired)); @@ -161,7 +177,7 @@ static void intract(uint8_t *data, struct cq_super *super, uint64_t serial) { sha2_init_hmac(&sha2, SHA2_VARIETY_512_256, super->current.global_iv, GLOBAL_IV_LEN); sha2_more(&sha2,data,HALF_BYTES); - sha2_finish(&sha2,data,HASH_LEN); + sha2_finish(&sha2,data+16,HASH_LEN); } static int super_write(coquet_t *cq, struct cq_super *super, diff --git a/superblock.h b/superblock.h index 1cffe05..e95008f 100644 --- a/superblock.h +++ b/superblock.h @@ -9,12 +9,14 @@ #define SUPERBLOCK_LAST_OFFSET (SUPER_BYTES-1) struct cq_super_config { - uint8_t global_iv[GLOBAL_IV_LEN]; /* (0 : GLOBAL_IV_LEN) */ - uint8_t block_size; /* log bits (GLOBAL_IV_LEN: 1) */ + uint8_t global_iv[GLOBAL_IV_LEN]; + uint8_t block_size; /* log bits */ + uint8_t nursery_size; /* log blocks */ }; struct cq_super { struct cq_super_config current, desired; + uint64_t version; uint64_t sb_serial; uint8_t sb_hash[32]; /* HMAC SHA512-256 using global_iv */ int from_b; /* true if loaded from b, false if from a */ -- 2.30.2