From: Anthony Ferrara Date: Mon, 25 Jun 2012 03:35:26 +0000 (-0400) Subject: Implement password_verify X-Git-Tag: php-5.5.0alpha1~18^2~17^2~2^2~45 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=657402832b7884f52bf07b2e6f704510395fd413;p=php Implement password_verify --- diff --git a/ext/standard/password.c b/ext/standard/password.c index 9201ff3f8d..665e69f28c 100644 --- a/ext/standard/password.c +++ b/ext/standard/password.c @@ -112,6 +112,33 @@ static int php_password_make_salt(int length, int raw, char *ret) PHP_FUNCTION(password_verify) { + zval *password, *hash, *ret; + int status = 0, i; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &password, &hash) == FAILURE) { + RETURN_FALSE; + } + + zend_call_method_with_2_params(NULL, NULL, NULL, "crypt", &ret, password, hash); + + if (Z_TYPE_P(ret) != IS_STRING) { + zval_ptr_dtor(&ret); + RETURN_FALSE; + } + + if (Z_STRLEN_P(ret) != Z_STRLEN_P(hash)) { + zval_ptr_dtor(&ret); + RETURN_FALSE; + } + + for (i = 0; i < Z_STRLEN_P(ret); i++) { + status |= (Z_STRVAL_P(ret)[i] ^ Z_STRVAL_P(hash)[i]); + } + + zval_ptr_dtor(&ret); + + RETURN_BOOL(status == 0); + } PHP_FUNCTION(password_make_salt)