diff options
Diffstat (limited to 'ext/hash/hash_sha.c')
| -rw-r--r-- | ext/hash/hash_sha.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/ext/hash/hash_sha.c b/ext/hash/hash_sha.c index 6bb6931c35..d158faaa64 100644 --- a/ext/hash/hash_sha.c +++ b/ext/hash/hash_sha.c @@ -939,6 +939,42 @@ PHP_HASH_API void PHP_SHA512Init(PHP_SHA512_CTX * context) } /* }}} */ +/* {{{ PHP_SHA512_256Init + * SHA512/245 initialization. Identical algorithm to SHA512, using alternate initval and truncation + */ +PHP_HASH_API void PHP_SHA512_256Init(PHP_SHA512_CTX * context) +{ + context->count[0] = context->count[1] = 0; + + context->state[0] = L64(0x22312194FC2BF72C); + context->state[1] = L64(0x9F555FA3C84C64C2); + context->state[2] = L64(0x2393B86B6F53B151); + context->state[3] = L64(0x963877195940EABD); + context->state[4] = L64(0x96283EE2A88EFFE3); + context->state[5] = L64(0xBE5E1E2553863992); + context->state[6] = L64(0x2B0199FC2C85B8AA); + context->state[7] = L64(0x0EB72DDC81C52CA2); +} +/* }}} */ + +/* {{{ PHP_SHA512_224Init + * SHA512/224 initialization. Identical algorithm to SHA512, using alternate initval and truncation + */ +PHP_HASH_API void PHP_SHA512_224Init(PHP_SHA512_CTX * context) +{ + context->count[0] = context->count[1] = 0; + + context->state[0] = L64(0x8C3D37C819544DA2); + context->state[1] = L64(0x73E1996689DCD4D6); + context->state[2] = L64(0x1DFAB7AE32FF9C82); + context->state[3] = L64(0x679DD514582F9FCF); + context->state[4] = L64(0x0F6D2B697BD44DA8); + context->state[5] = L64(0x77E36F7304C48942); + context->state[6] = L64(0x3F9D85A86A1D36C8); + context->state[7] = L64(0x1112E6AD91D692A1); +} +/* }}} */ + /* {{{ PHP_SHA512Update SHA512 block update operation. Continues an SHA512 message-digest operation, processing another message block, and updating the @@ -1024,6 +1060,28 @@ PHP_HASH_API void PHP_SHA512Final(unsigned char digest[64], PHP_SHA512_CTX * con } /* }}} */ +/* {{{ PHP_SHA512_256Final + SHA512/256 finalization. Identical to SHA512Final, but with truncation + */ +PHP_HASH_API void PHP_SHA512_256Final(unsigned char digest[32], PHP_SHA512_CTX * context) +{ + unsigned char full_digest[64]; + PHP_SHA512Final(full_digest, context); + memcpy(digest, full_digest, 32); +} +/* }}} */ + +/* {{{ PHP_SHA512_224Final + SHA512/224 finalization. Identical to SHA512Final, but with truncation + */ +PHP_HASH_API void PHP_SHA512_224Final(unsigned char digest[28], PHP_SHA512_CTX * context) +{ + unsigned char full_digest[64]; + PHP_SHA512Final(full_digest, context); + memcpy(digest, full_digest, 28); +} +/* }}} */ + const php_hash_ops php_hash_sha512_ops = { (php_hash_init_func_t) PHP_SHA512Init, (php_hash_update_func_t) PHP_SHA512Update, @@ -1034,6 +1092,26 @@ const php_hash_ops php_hash_sha512_ops = { sizeof(PHP_SHA512_CTX) }; +const php_hash_ops php_hash_sha512_256_ops = { + (php_hash_init_func_t) PHP_SHA512_256Init, + (php_hash_update_func_t) PHP_SHA512_256Update, + (php_hash_final_func_t) PHP_SHA512_256Final, + (php_hash_copy_func_t) php_hash_copy, + 32, + 128, + sizeof(PHP_SHA512_CTX) +}; + +const php_hash_ops php_hash_sha512_224_ops = { + (php_hash_init_func_t) PHP_SHA512_224Init, + (php_hash_update_func_t) PHP_SHA512_224Update, + (php_hash_final_func_t) PHP_SHA512_224Final, + (php_hash_copy_func_t) php_hash_copy, + 28, + 128, + sizeof(PHP_SHA512_CTX) +}; + /* * Local variables: * tab-width: 4 |
