// ==========================================================================
-static int hash_sha3_copy(const void *ops, void *orig_context, void *dest_context)
-{
- PHP_SHA3_CTX* orig = (PHP_SHA3_CTX*)orig_context;
- PHP_SHA3_CTX* dest = (PHP_SHA3_CTX*)dest_context;
- memcpy(dest->hashinstance, orig->hashinstance, sizeof(Keccak_HashInstance));
- return SUCCESS;
-}
-
#define DECLARE_SHA3_OPS(bits) \
void PHP_SHA3##bits##Init(PHP_SHA3_##bits##_CTX* ctx) { \
- ctx->hashinstance = emalloc(sizeof(Keccak_HashInstance)); \
- Keccak_HashInitialize_SHA3_##bits((Keccak_HashInstance *)ctx->hashinstance); \
+ ZEND_ASSERT(sizeof(Keccak_HashInstance) <= sizeof(PHP_SHA3_##bits##_CTX)); \
+ Keccak_HashInitialize_SHA3_##bits((Keccak_HashInstance *)ctx); \
} \
void PHP_SHA3##bits##Update(PHP_SHA3_##bits##_CTX* ctx, \
const unsigned char* input, \
size_t inputLen) { \
- Keccak_HashUpdate((Keccak_HashInstance *)ctx->hashinstance, input, inputLen * 8); \
+ Keccak_HashUpdate((Keccak_HashInstance *)ctx, input, inputLen * 8); \
} \
void PHP_SHA3##bits##Final(unsigned char* digest, \
PHP_SHA3_##bits##_CTX* ctx) { \
- Keccak_HashFinal((Keccak_HashInstance *)ctx->hashinstance, digest); \
- efree(ctx->hashinstance); \
- ctx->hashinstance = NULL; \
+ Keccak_HashFinal((Keccak_HashInstance *)ctx, digest); \
} \
const php_hash_ops php_hash_sha3_##bits##_ops = { \
(php_hash_init_func_t) PHP_SHA3##bits##Init, \
(php_hash_update_func_t) PHP_SHA3##bits##Update, \
(php_hash_final_func_t) PHP_SHA3##bits##Final, \
- hash_sha3_copy, \
+ php_hash_copy, \
bits >> 3, \
(1600 - (2 * bits)) >> 3, \
- sizeof(PHP_SHA3_##bits##_CTX), \
+ sizeof(PHP_SHA3_CTX), \
1 \
}