23
23
#include "aich.h"
24
24
#include "blake2b.h"
25
25
#include "blake2s.h"
26
+ #include "blake3.h"
26
27
#include "crc32.h"
27
28
#include "ed2k.h"
28
29
#include "edonr.h"
@@ -91,6 +92,7 @@ rhash_info info_snf128 = { EXTENDED_HASH_ID(27), F_BE32, 16, "SNEFRU-128", "
91
92
rhash_info info_snf256 = { EXTENDED_HASH_ID (28 ), F_BE32 , 32 , "SNEFRU-256" , "snefru256" };
92
93
rhash_info info_blake2s = { EXTENDED_HASH_ID (29 ), F_LE32 , 32 , "BLAKE2S" , "blake2s" };
93
94
rhash_info info_blake2b = { EXTENDED_HASH_ID (30 ), F_LE64 , 64 , "BLAKE2B" , "blake2b" };
95
+ rhash_info info_blake3 = { EXTENDED_HASH_ID (31 ), F_LE32 | F_SPCEXP , 32 , "BLAKE3" , "blake3" };
94
96
95
97
/* some helper macros */
96
98
#define dgshft (name ) ((uintptr_t)((char*)&((name##_ctx*)0)->hash))
@@ -135,6 +137,7 @@ rhash_hash_info rhash_hash_info_default[] =
135
137
{ & info_snf256 , sizeof (snefru_ctx ), dgshft (snefru ), iuf2 (rhash_snefru256 , rhash_snefru ), 0 }, /* 256 bit */
136
138
{ & info_blake2s , sizeof (blake2s_ctx ), dgshft (blake2s ), iuf (rhash_blake2s ), 0 }, /* 256 bit */
137
139
{ & info_blake2b , sizeof (blake2b_ctx ), dgshft (blake2b ), iuf (rhash_blake2b ), 0 }, /* 512 bit */
140
+ { & info_blake3 , sizeof (blake3_ctx ), dgshft2 (blake3 , root .hash ), iuf (rhash_blake3 ), 0 } /* 256 bit */
138
141
};
139
142
140
143
#if defined(RHASH_SSE4_SHANI ) && !defined(RHASH_DISABLE_SHANI )
@@ -218,7 +221,7 @@ const unsigned* rhash_get_all_hash_ids(unsigned all_id, size_t* count)
218
221
EXTENDED_HASH_ID (16 ), EXTENDED_HASH_ID (17 ), EXTENDED_HASH_ID (18 ), EXTENDED_HASH_ID (19 ),
219
222
EXTENDED_HASH_ID (20 ), EXTENDED_HASH_ID (21 ), EXTENDED_HASH_ID (22 ), EXTENDED_HASH_ID (23 ),
220
223
EXTENDED_HASH_ID (24 ), EXTENDED_HASH_ID (25 ), EXTENDED_HASH_ID (26 ), EXTENDED_HASH_ID (27 ),
221
- EXTENDED_HASH_ID (28 ), EXTENDED_HASH_ID (29 ), EXTENDED_HASH_ID (30 )
224
+ EXTENDED_HASH_ID (28 ), EXTENDED_HASH_ID (29 ), EXTENDED_HASH_ID (30 ), EXTENDED_HASH_ID ( 31 )
222
225
};
223
226
static const unsigned count_low = rhash_popcount (RHASH_LOW_HASHES_MASK );
224
227
RHASH_ASSERT (RHASH_COUNTOF (all_ids ) == RHASH_HASH_COUNT );
@@ -311,6 +314,9 @@ static void rhash_crc32c_final(uint32_t* crc32c, unsigned char* result)
311
314
}
312
315
313
316
#if !defined(NO_IMPORT_EXPORT )
317
+ #define EXTENDED_TTH EXTENDED_HASH_ID(5)
318
+ #define EXTENDED_AICH EXTENDED_HASH_ID(8)
319
+
314
320
/**
315
321
* Export a hash function context to a memory region,
316
322
* or calculate the size required for context export.
@@ -323,16 +329,19 @@ static void rhash_crc32c_final(uint32_t* crc32c, unsigned char* result)
323
329
*/
324
330
size_t rhash_export_alg (unsigned hash_id , const void * ctx , void * out , size_t size )
325
331
{
326
- if (IS_EXTENDED_HASH_ID (hash_id ))
327
- hash_id = 1 << GET_EXTENDED_HASH_ID_INDEX (hash_id );
328
332
switch (hash_id )
329
333
{
330
334
case RHASH_TTH :
335
+ case EXTENDED_TTH :
331
336
return rhash_tth_export ((const tth_ctx * )ctx , out , size );
332
337
case RHASH_BTIH :
338
+ case EXTENDED_BTIH :
333
339
return bt_export ((const torrent_ctx * )ctx , out , size );
334
340
case RHASH_AICH :
341
+ case EXTENDED_AICH :
335
342
return rhash_aich_export ((const aich_ctx * )ctx , out , size );
343
+ case RHASH_BLAKE3 :
344
+ return rhash_blake3_export ((const blake3_ctx * )ctx , out , size );
336
345
}
337
346
return 0 ;
338
347
}
@@ -348,16 +357,19 @@ size_t rhash_export_alg(unsigned hash_id, const void* ctx, void* out, size_t siz
348
357
*/
349
358
size_t rhash_import_alg (unsigned hash_id , void * ctx , const void * in , size_t size )
350
359
{
351
- if (IS_EXTENDED_HASH_ID (hash_id ))
352
- hash_id = 1 << GET_EXTENDED_HASH_ID_INDEX (hash_id );
353
360
switch (hash_id )
354
361
{
355
362
case RHASH_TTH :
363
+ case EXTENDED_TTH :
356
364
return rhash_tth_import ((tth_ctx * )ctx , in , size );
357
365
case RHASH_BTIH :
366
+ case EXTENDED_BTIH :
358
367
return bt_import ((torrent_ctx * )ctx , in , size );
359
368
case RHASH_AICH :
369
+ case EXTENDED_AICH :
360
370
return rhash_aich_import ((aich_ctx * )ctx , in , size );
371
+ case RHASH_BLAKE3 :
372
+ return rhash_blake3_import ((blake3_ctx * )ctx , in , size );
361
373
}
362
374
return 0 ;
363
375
}
0 commit comments