]> granicus.if.org Git - php/commitdiff
ext/sodium: add crypto_pwhash_str_needs_rehash()
authorFrank Denis <github@pureftpd.org>
Mon, 2 Oct 2017 19:54:50 +0000 (21:54 +0200)
committerFrank Denis <github@pureftpd.org>
Mon, 2 Oct 2017 19:54:50 +0000 (21:54 +0200)
Also properly define xchacha20poly1305_ietf_keygen()

ext/sodium/libsodium.c
ext/sodium/php_libsodium.h

index 07d2c5e038b49d832f89d6e7e613012721b3e822..6b192bc69db4191699cce96ceebfaa47ded427c7 100644 (file)
@@ -240,9 +240,10 @@ const zend_function_entry sodium_functions[] = {
        PHP_FE(sodium_crypto_aead_chacha20poly1305_keygen, AI_None)
        PHP_FE(sodium_crypto_aead_chacha20poly1305_ietf_decrypt, AI_StringAndADAndNonceAndKey)
        PHP_FE(sodium_crypto_aead_chacha20poly1305_ietf_encrypt, AI_StringAndADAndNonceAndKey)
+       PHP_FE(sodium_crypto_aead_chacha20poly1305_ietf_keygen, AI_None)
 #ifdef crypto_aead_xchacha20poly1305_IETF_NPUBBYTES
        PHP_FE(sodium_crypto_aead_xchacha20poly1305_ietf_decrypt, AI_StringAndADAndNonceAndKey)
-       PHP_FE(sodium_crypto_aead_chacha20poly1305_ietf_keygen, AI_None)
+       PHP_FE(sodium_crypto_aead_xchacha20poly1305_ietf_keygen, AI_None)
        PHP_FE(sodium_crypto_aead_xchacha20poly1305_ietf_encrypt, AI_StringAndADAndNonceAndKey)
 #endif
        PHP_FE(sodium_crypto_auth, AI_StringAndKey)
@@ -276,6 +277,9 @@ const zend_function_entry sodium_functions[] = {
        PHP_FE(sodium_crypto_pwhash_str, AI_PasswordAndOpsLimitAndMemLimit)
        PHP_FE(sodium_crypto_pwhash_str_verify, AI_HashAndPassword)
 #endif
+#if SODIUM_LIBRARY_VERSION_MAJOR > 9 || (SODIUM_LIBRARY_VERSION_MAJOR == 9 && SODIUM_LIBRARY_VERSION_MINOR >= 6)
+       PHP_FE(sodium_crypto_pwhash_str_needs_rehash, AI_PasswordAndOpsLimitAndMemLimit)
+#endif
 #ifdef crypto_pwhash_scryptsalsa208sha256_SALTBYTES
        PHP_FE(sodium_crypto_pwhash_scryptsalsa208sha256, AI_LengthAndPasswordAndSaltAndOpsLimitAndMemLimit)
        PHP_FE(sodium_crypto_pwhash_scryptsalsa208sha256_str, AI_PasswordAndOpsLimitAndMemLimit)
@@ -2025,6 +2029,25 @@ PHP_FUNCTION(sodium_crypto_pwhash_str)
        RETURN_STR(hash_str);
 }
 
+#if SODIUM_LIBRARY_VERSION_MAJOR > 9 || (SODIUM_LIBRARY_VERSION_MAJOR == 9 && SODIUM_LIBRARY_VERSION_MINOR >= 6)
+PHP_FUNCTION(sodium_crypto_pwhash_str_needs_rehash)
+{
+       char      *hash_str;
+       zend_long  memlimit;
+       zend_long  opslimit;
+       size_t     hash_str_len;
+
+       if (zend_parse_parameters(ZEND_NUM_ARGS(), "sll",
+                                                         &hash_str, &hash_str_len) == FAILURE) {
+               return;
+       }
+       if (crypto_pwhash_str_needs_rehash(hash_str, opslimit, memlimit) == 0) {
+               RETURN_FALSE;
+       }
+       RETURN_TRUE;
+}
+#endif
+
 PHP_FUNCTION(sodium_crypto_pwhash_str_verify)
 {
        char      *hash_str;
index d586a2b7dcb28ff5fc70d64c7cd6b392a4c7ddbe..adfe40e8ae540681e426f710fc92a6158ae0cfbe 100644 (file)
@@ -83,6 +83,7 @@ PHP_FUNCTION(sodium_crypto_pwhash_scryptsalsa208sha256);
 PHP_FUNCTION(sodium_crypto_pwhash_scryptsalsa208sha256_str);
 PHP_FUNCTION(sodium_crypto_pwhash_scryptsalsa208sha256_str_verify);
 PHP_FUNCTION(sodium_crypto_pwhash_str);
+PHP_FUNCTION(sodium_crypto_pwhash_str_needs_rehash);
 PHP_FUNCTION(sodium_crypto_pwhash_str_verify);
 PHP_FUNCTION(sodium_crypto_scalarmult);
 PHP_FUNCTION(sodium_crypto_scalarmult_base);