Lines Matching refs:ops

109 	php_hash_ops *ops = zend_hash_find_ptr(&php_hash_hashtable, lower);  in php_hash_fetch_ops()  local
112 return ops; in php_hash_fetch_ops()
116 PHP_HASH_API void php_hash_register_algo(const char *algo, const php_hash_ops *ops) /* {{{ */ in php_hash_register_algo() argument
120 …zend_hash_add_ptr(&php_hash_hashtable, zend_string_init_interned(lower, algo_len, 1), (void *) ops in php_hash_register_algo()
125 PHP_HASH_API int php_hash_copy(const void *ops, void *orig_context, void *dest_context) /* {{{ */ in php_hash_copy() argument
127 php_hash_ops *hash_ops = (php_hash_ops *)ops; in php_hash_copy()
245 if (pos + count * sz > hash->ops->context_size) { in php_hash_serialize_spec()
268 if (*spec == '.' && align_to(pos, max_alignment) != hash->ops->context_size) { in php_hash_serialize_spec()
292 if (pos + count * sz > hash->ops->context_size) { in php_hash_unserialize_spec()
328 if (*spec == '.' && align_to(pos, max_alignment) != hash->ops->context_size) { in php_hash_unserialize_spec()
337 if (hash->ops->serialize_spec) { in php_hash_serialize()
339 return php_hash_serialize_spec(hash, zv, hash->ops->serialize_spec); in php_hash_serialize()
348 if (hash->ops->serialize_spec in php_hash_unserialize()
350 return php_hash_unserialize_spec(hash, zv, hash->ops->serialize_spec); in php_hash_unserialize()
363 const php_hash_ops *ops; in php_hash_do_hash() local
367 ops = php_hash_fetch_ops(algo); in php_hash_do_hash()
368 if (!ops) { in php_hash_do_hash()
384 context = php_hash_alloc_context(ops); in php_hash_do_hash()
385 ops->hash_init(context, args); in php_hash_do_hash()
392 ops->hash_update(context, (unsigned char *) buf, n); in php_hash_do_hash()
400 ops->hash_update(context, (unsigned char *) data, data_len); in php_hash_do_hash()
403 digest = zend_string_alloc(ops->digest_size, 0); in php_hash_do_hash()
404 ops->hash_final((unsigned char *) ZSTR_VAL(digest), context); in php_hash_do_hash()
408 ZSTR_VAL(digest)[ops->digest_size] = 0; in php_hash_do_hash()
411 zend_string *hex_digest = zend_string_safe_alloc(ops->digest_size, 2, 0, 0); in php_hash_do_hash()
413 php_hash_bin2hex(ZSTR_VAL(hex_digest), (unsigned char *) ZSTR_VAL(digest), ops->digest_size); in php_hash_do_hash()
414 ZSTR_VAL(hex_digest)[2 * ops->digest_size] = 0; in php_hash_do_hash()
479 static inline void php_hash_hmac_prep_key(unsigned char *K, const php_hash_ops *ops, void *context,… in php_hash_hmac_prep_key() argument
480 memset(K, 0, ops->block_size); in php_hash_hmac_prep_key()
481 if (key_len > ops->block_size) { in php_hash_hmac_prep_key()
483 ops->hash_init(context, NULL); in php_hash_hmac_prep_key()
484 ops->hash_update(context, key, key_len); in php_hash_hmac_prep_key()
485 ops->hash_final(K, context); in php_hash_hmac_prep_key()
490 php_hash_string_xor_char(K, K, 0x36, ops->block_size); in php_hash_hmac_prep_key()
493 static inline void php_hash_hmac_round(unsigned char *final, const php_hash_ops *ops, void *context… in php_hash_hmac_round() argument
494 ops->hash_init(context, NULL); in php_hash_hmac_round()
495 ops->hash_update(context, key, ops->block_size); in php_hash_hmac_round()
496 ops->hash_update(context, data, data_size); in php_hash_hmac_round()
497 ops->hash_final(final, context); in php_hash_hmac_round()
505 const php_hash_ops *ops; in php_hash_do_hash_hmac() local
509 ops = php_hash_fetch_ops(algo); in php_hash_do_hash_hmac()
510 if (!ops || !ops->is_crypto) { in php_hash_do_hash_hmac()
527 context = php_hash_alloc_context(ops); in php_hash_do_hash_hmac()
529 K = emalloc(ops->block_size); in php_hash_do_hash_hmac()
530 digest = zend_string_alloc(ops->digest_size, 0); in php_hash_do_hash_hmac()
532 php_hash_hmac_prep_key(K, ops, context, (unsigned char *) key, key_len); in php_hash_do_hash_hmac()
537 ops->hash_init(context, NULL); in php_hash_do_hash_hmac()
538 ops->hash_update(context, K, ops->block_size); in php_hash_do_hash_hmac()
540 ops->hash_update(context, (unsigned char *) buf, n); in php_hash_do_hash_hmac()
550 ops->hash_final((unsigned char *) ZSTR_VAL(digest), context); in php_hash_do_hash_hmac()
552 …php_hash_hmac_round((unsigned char *) ZSTR_VAL(digest), ops, context, K, (unsigned char *) data, d… in php_hash_do_hash_hmac()
555 php_hash_string_xor_char(K, K, 0x6A, ops->block_size); in php_hash_do_hash_hmac()
557 …_hmac_round((unsigned char *) ZSTR_VAL(digest), ops, context, K, (unsigned char *) ZSTR_VAL(digest… in php_hash_do_hash_hmac()
560 ZEND_SECURE_ZERO(K, ops->block_size); in php_hash_do_hash_hmac()
565 ZSTR_VAL(digest)[ops->digest_size] = 0; in php_hash_do_hash_hmac()
568 zend_string *hex_digest = zend_string_safe_alloc(ops->digest_size, 2, 0, 0); in php_hash_do_hash_hmac()
570 php_hash_bin2hex(ZSTR_VAL(hex_digest), (unsigned char *) ZSTR_VAL(digest), ops->digest_size); in php_hash_do_hash_hmac()
571 ZSTR_VAL(hex_digest)[2 * ops->digest_size] = 0; in php_hash_do_hash_hmac()
618 const php_hash_ops *ops; in PHP_FUNCTION() local
626 ops = php_hash_fetch_ops(algo); in PHP_FUNCTION()
627 if (!ops) { in PHP_FUNCTION()
633 if (!ops->is_crypto) { in PHP_FUNCTION()
647 context = php_hash_alloc_context(ops); in PHP_FUNCTION()
648 ops->hash_init(context, args); in PHP_FUNCTION()
650 hash->ops = ops; in PHP_FUNCTION()
656 char *K = emalloc(ops->block_size); in PHP_FUNCTION()
659 memset(K, 0, ops->block_size); in PHP_FUNCTION()
661 if (ZSTR_LEN(key) > ops->block_size) { in PHP_FUNCTION()
663 ops->hash_update(context, (unsigned char *) ZSTR_VAL(key), ZSTR_LEN(key)); in PHP_FUNCTION()
664 ops->hash_final((unsigned char *) K, context); in PHP_FUNCTION()
666 ops->hash_init(context, args); in PHP_FUNCTION()
672 block_size = ops->block_size; in PHP_FUNCTION()
676 ops->hash_update(context, (unsigned char *) K, ops->block_size); in PHP_FUNCTION()
702 hash->ops->hash_update(hash->context, (unsigned char *) ZSTR_VAL(data), ZSTR_LEN(data)); in PHP_FUNCTION()
736 hash->ops->hash_update(hash->context, (unsigned char *) buf, n); in PHP_FUNCTION()
771 hash->ops->hash_update(hash->context, (unsigned char *) buf, n); in PHP_FUNCTION()
795 digest_len = hash->ops->digest_size; in PHP_FUNCTION()
797 hash->ops->hash_final((unsigned char *) ZSTR_VAL(digest), hash->context); in PHP_FUNCTION()
802 block_size = hash->ops->block_size; in PHP_FUNCTION()
808 hash->ops->hash_init(hash->context, NULL); in PHP_FUNCTION()
809 hash->ops->hash_update(hash->context, hash->key, hash->ops->block_size); in PHP_FUNCTION()
810 hash->ops->hash_update(hash->context, (unsigned char *) ZSTR_VAL(digest), hash->ops->digest_size); in PHP_FUNCTION()
811 hash->ops->hash_final((unsigned char *) ZSTR_VAL(digest), hash->context); in PHP_FUNCTION()
814 ZEND_SECURE_ZERO(hash->key, hash->ops->block_size); in PHP_FUNCTION()
881 const php_hash_ops *ops; in PHP_FUNCTION() local
888 ZEND_HASH_MAP_FOREACH_STR_KEY_PTR(&php_hash_hashtable, str, ops) { in PHP_FUNCTION()
889 if (ops->is_crypto) { in PHP_FUNCTION()
904 const php_hash_ops *ops; in PHP_FUNCTION() local
911 ops = php_hash_fetch_ops(algo); in PHP_FUNCTION()
912 if (!ops || !ops->is_crypto) { in PHP_FUNCTION()
926 length = ops->digest_size; in PHP_FUNCTION()
927 } else if (length > (zend_long) (ops->digest_size * 255)) { in PHP_FUNCTION()
928 zend_argument_value_error(3, "must be less than or equal to %zd", ops->digest_size * 255); in PHP_FUNCTION()
932 context = php_hash_alloc_context(ops); in PHP_FUNCTION()
935 ops->hash_init(context, NULL); in PHP_FUNCTION()
936 K = emalloc(ops->block_size); in PHP_FUNCTION()
937 php_hash_hmac_prep_key(K, ops, context, in PHP_FUNCTION()
940 prk = emalloc(ops->digest_size); in PHP_FUNCTION()
941 php_hash_hmac_round(prk, ops, context, K, (unsigned char *) ZSTR_VAL(ikm), ZSTR_LEN(ikm)); in PHP_FUNCTION()
942 php_hash_string_xor_char(K, K, 0x6A, ops->block_size); in PHP_FUNCTION()
943 php_hash_hmac_round(prk, ops, context, K, prk, ops->digest_size); in PHP_FUNCTION()
944 ZEND_SECURE_ZERO(K, ops->block_size); in PHP_FUNCTION()
948 digest = emalloc(ops->digest_size); in PHP_FUNCTION()
949 for (i = 1, rounds = (length - 1) / ops->digest_size + 1; i <= rounds; i++) { in PHP_FUNCTION()
954 php_hash_hmac_prep_key(K, ops, context, prk, ops->digest_size); in PHP_FUNCTION()
955 ops->hash_init(context, NULL); in PHP_FUNCTION()
956 ops->hash_update(context, K, ops->block_size); in PHP_FUNCTION()
959 ops->hash_update(context, digest, ops->digest_size); in PHP_FUNCTION()
963 ops->hash_update(context, (unsigned char *) ZSTR_VAL(info), ZSTR_LEN(info)); in PHP_FUNCTION()
966 ops->hash_update(context, c, 1); in PHP_FUNCTION()
967 ops->hash_final(digest, context); in PHP_FUNCTION()
968 php_hash_string_xor_char(K, K, 0x6A, ops->block_size); in PHP_FUNCTION()
969 php_hash_hmac_round(digest, ops, context, K, digest, ops->digest_size); in PHP_FUNCTION()
971 ZSTR_VAL(returnval) + ((i - 1) * ops->digest_size), in PHP_FUNCTION()
973 (i == rounds ? length - ((i - 1) * ops->digest_size) : ops->digest_size) in PHP_FUNCTION()
977 ZEND_SECURE_ZERO(K, ops->block_size); in PHP_FUNCTION()
978 ZEND_SECURE_ZERO(digest, ops->digest_size); in PHP_FUNCTION()
979 ZEND_SECURE_ZERO(prk, ops->digest_size); in PHP_FUNCTION()
998 const php_hash_ops *ops; in PHP_FUNCTION() local
1006 ops = php_hash_fetch_ops(algo); in PHP_FUNCTION()
1007 if (!ops || !ops->is_crypto) { in PHP_FUNCTION()
1027 context = php_hash_alloc_context(ops); in PHP_FUNCTION()
1028 ops->hash_init(context, args); in PHP_FUNCTION()
1030 K1 = emalloc(ops->block_size); in PHP_FUNCTION()
1031 K2 = emalloc(ops->block_size); in PHP_FUNCTION()
1032 digest = emalloc(ops->digest_size); in PHP_FUNCTION()
1033 temp = emalloc(ops->digest_size); in PHP_FUNCTION()
1036 php_hash_hmac_prep_key(K1, ops, context, (unsigned char *) pass, pass_len); in PHP_FUNCTION()
1038 php_hash_string_xor_char(K2, K1, 0x6A, ops->block_size); in PHP_FUNCTION()
1042 length = ops->digest_size; in PHP_FUNCTION()
1052 loops = (zend_long) ceil((float) digest_length / (float) ops->digest_size); in PHP_FUNCTION()
1054 result = safe_emalloc(loops, ops->digest_size, 0); in PHP_FUNCTION()
1068 php_hash_hmac_round(digest, ops, context, K1, computed_salt, (zend_long) salt_len + 4); in PHP_FUNCTION()
1069 php_hash_hmac_round(digest, ops, context, K2, digest, ops->digest_size); in PHP_FUNCTION()
1073 memcpy(temp, digest, ops->digest_size); in PHP_FUNCTION()
1081 php_hash_hmac_round(digest, ops, context, K1, digest, ops->digest_size); in PHP_FUNCTION()
1082 php_hash_hmac_round(digest, ops, context, K2, digest, ops->digest_size); in PHP_FUNCTION()
1085 php_hash_string_xor(temp, temp, digest, ops->digest_size); in PHP_FUNCTION()
1088 memcpy(result + ((i - 1) * ops->digest_size), temp, ops->digest_size); in PHP_FUNCTION()
1091 ZEND_SECURE_ZERO(K1, ops->block_size); in PHP_FUNCTION()
1092 ZEND_SECURE_ZERO(K2, ops->block_size); in PHP_FUNCTION()
1273 …const php_hash_ops *ops = zend_hash_str_find_ptr(&php_hash_hashtable, algorithm_lookup.hash_name, … in PHP_FUNCTION() local
1274 if (ops) { in PHP_FUNCTION()
1275 RETVAL_LONG(ops->digest_size); in PHP_FUNCTION()
1315 …const php_hash_ops *ops = zend_hash_str_find_ptr(&php_hash_hashtable, algorithm_lookup.hash_name, … in PHP_FUNCTION() local
1316 if (ops) { in PHP_FUNCTION()
1321 size_t block_size = ops->digest_size; in PHP_FUNCTION()
1328 context = php_hash_alloc_context(ops); in PHP_FUNCTION()
1329 ops->hash_init(context, NULL); in PHP_FUNCTION()
1332 digest = emalloc(ops->digest_size + 1); in PHP_FUNCTION()
1335 ops->hash_init(context, NULL); in PHP_FUNCTION()
1338 ops->hash_update(context, &null, 1); in PHP_FUNCTION()
1340 ops->hash_update(context, (unsigned char *)padded_salt, salt_len); in PHP_FUNCTION()
1341 ops->hash_update(context, (unsigned char *)password, password_len); in PHP_FUNCTION()
1342 ops->hash_final((unsigned char *)digest, context); in PHP_FUNCTION()
1384 ZEND_SECURE_ZERO(hash->key, hash->ops->block_size); in php_hashcontext_dtor()
1409 newobj->ops = oldobj->ops; in php_hashcontext_clone()
1411 newobj->context = php_hash_alloc_context(newobj->ops); in php_hashcontext_clone()
1412 newobj->ops->hash_init(newobj->context, NULL); in php_hashcontext_clone()
1414 if (SUCCESS != newobj->ops->hash_copy(newobj->ops, oldobj->context, newobj->context)) { in php_hashcontext_clone()
1420 newobj->key = ecalloc(1, newobj->ops->block_size); in php_hashcontext_clone()
1422 memcpy(newobj->key, oldobj->key, newobj->ops->block_size); in php_hashcontext_clone()
1462 if (!hash->ops->hash_serialize) { in PHP_METHOD()
1469 ZVAL_STRING(&tmp, hash->ops->algo); in PHP_METHOD()
1475 if (hash->ops->hash_serialize(hash, &magic, &tmp) != SUCCESS) { in PHP_METHOD()
1491 …ow_exception_ex(NULL, 0, "HashContext for algorithm \"%s\" cannot be serialized", hash->ops->algo); in PHP_METHOD()
1505 const php_hash_ops *ops; in PHP_METHOD() local
1538 ops = php_hash_fetch_ops(Z_STR_P(algo_zv)); in PHP_METHOD()
1539 if (!ops) { in PHP_METHOD()
1542 } else if (!ops->hash_unserialize) { in PHP_METHOD()
1543 zend_throw_exception_ex(NULL, 0, "Hash algorithm \"%s\" cannot be unserialized", ops->algo); in PHP_METHOD()
1547 hash->ops = ops; in PHP_METHOD()
1548 hash->context = php_hash_alloc_context(ops); in PHP_METHOD()
1550 ops->hash_init(hash->context, NULL); in PHP_METHOD()
1552 unserialize_result = ops->hash_unserialize(hash, magic, hash_zv); in PHP_METHOD()
1554 …x(NULL, 0, "Incomplete or ill-formed serialization data (\"%s\" code %d)", ops->algo, unserialize_… in PHP_METHOD()