Skip to content

Commit 20c49f8

Browse files
authored
Move PASSWORD constants to stubs (#13349)
1 parent c160997 commit 20c49f8

File tree

7 files changed

+171
-36
lines changed

7 files changed

+171
-36
lines changed

ext/sodium/php_libsodium.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,34 @@ extern zend_module_entry sodium_module_entry;
3434

3535
#define SODIUM_CRYPTO_SIGN_KEYPAIRBYTES() crypto_sign_SECRETKEYBYTES + crypto_sign_PUBLICKEYBYTES
3636

37+
#if SODIUM_LIBRARY_VERSION_MAJOR > 9 || (SODIUM_LIBRARY_VERSION_MAJOR == 9 && SODIUM_LIBRARY_VERSION_MINOR >= 6)
38+
39+
/**
40+
* MEMLIMIT is normalized to KB even though sodium uses Bytes in order to
41+
* present a consistent user-facing API.
42+
*
43+
* Threads are fixed at 1 by libsodium.
44+
*
45+
* When updating these values, synchronize ext/standard/php_password.h values.
46+
*/
47+
#if defined(PHP_PASSWORD_ARGON2_MEMORY_COST)
48+
#define PHP_SODIUM_PWHASH_MEMLIMIT PHP_PASSWORD_ARGON2_MEMORY_COST
49+
#else
50+
#define PHP_SODIUM_PWHASH_MEMLIMIT (64 << 10)
51+
#endif
52+
#if defined(PHP_PASSWORD_ARGON2_TIME_COST)
53+
#define PHP_SODIUM_PWHASH_OPSLIMIT PHP_PASSWORD_ARGON2_TIME_COST
54+
#else
55+
#define PHP_SODIUM_PWHASH_OPSLIMIT 4
56+
#endif
57+
#if defined(PHP_SODIUM_PWHASH_THREADS)
58+
#define PHP_SODIUM_PWHASH_THREADS PHP_SODIUM_PWHASH_THREADS
59+
#else
60+
#define PHP_SODIUM_PWHASH_THREADS 1
61+
#endif
62+
63+
#endif
64+
3765
PHP_MINIT_FUNCTION(sodium);
3866
PHP_MINIT_FUNCTION(sodium_password_hash);
3967
PHP_MSHUTDOWN_FUNCTION(sodium);

ext/sodium/sodium_pwhash.c

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,14 @@
1919
#endif
2020

2121
#include "php.h"
22-
#include "php_libsodium.h"
2322
#include "ext/standard/php_password.h"
2423

2524
#include <sodium.h>
2625

27-
#if SODIUM_LIBRARY_VERSION_MAJOR > 9 || (SODIUM_LIBRARY_VERSION_MAJOR == 9 && SODIUM_LIBRARY_VERSION_MINOR >= 6)
26+
#include "php_libsodium.h"
27+
#include "sodium_pwhash_arginfo.h"
2828

29-
/**
30-
* MEMLIMIT is normalized to KB even though sodium uses Bytes in order to
31-
* present a consistent user-facing API.
32-
*
33-
* Threads are fixed at 1 by libsodium.
34-
*
35-
* When updating these values, synchronize ext/standard/php_password.h values.
36-
*/
37-
#define PHP_SODIUM_PWHASH_MEMLIMIT (64 << 10)
38-
#define PHP_SODIUM_PWHASH_OPSLIMIT 4
39-
#define PHP_SODIUM_PWHASH_THREADS 1
29+
#if SODIUM_LIBRARY_VERSION_MAJOR > 9 || (SODIUM_LIBRARY_VERSION_MAJOR == 9 && SODIUM_LIBRARY_VERSION_MINOR >= 6)
4030

4131
static inline int get_options(zend_array *options, size_t *memlimit, size_t *opslimit) {
4232
zval *opt;
@@ -180,21 +170,14 @@ PHP_MINIT_FUNCTION(sodium_password_hash) /* {{{ */ {
180170
}
181171
zend_string_release(argon2i);
182172

173+
register_sodium_pwhash_symbols(module_number);
174+
183175
if (FAILURE == php_password_algo_register("argon2i", &sodium_algo_argon2i)) {
184176
return FAILURE;
185177
}
186-
REGISTER_STRING_CONSTANT("PASSWORD_ARGON2I", "argon2i", CONST_PERSISTENT);
187-
188178
if (FAILURE == php_password_algo_register("argon2id", &sodium_algo_argon2id)) {
189179
return FAILURE;
190180
}
191-
REGISTER_STRING_CONSTANT("PASSWORD_ARGON2ID", "argon2id", CONST_PERSISTENT);
192-
193-
REGISTER_LONG_CONSTANT("PASSWORD_ARGON2_DEFAULT_MEMORY_COST", PHP_SODIUM_PWHASH_MEMLIMIT, CONST_PERSISTENT);
194-
REGISTER_LONG_CONSTANT("PASSWORD_ARGON2_DEFAULT_TIME_COST", PHP_SODIUM_PWHASH_OPSLIMIT, CONST_PERSISTENT);
195-
REGISTER_LONG_CONSTANT("PASSWORD_ARGON2_DEFAULT_THREADS", PHP_SODIUM_PWHASH_THREADS, CONST_PERSISTENT);
196-
197-
REGISTER_STRING_CONSTANT("PASSWORD_ARGON2_PROVIDER", "sodium", CONST_PERSISTENT);
198181

199182
return SUCCESS;
200183
}

ext/sodium/sodium_pwhash.stub.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
/** @generate-class-entries */
4+
5+
#if SODIUM_LIBRARY_VERSION_MAJOR > 9 || (SODIUM_LIBRARY_VERSION_MAJOR == 9 && SODIUM_LIBRARY_VERSION_MINOR >= 6)
6+
/**
7+
* @var string
8+
*/
9+
const PASSWORD_ARGON2I = "argon2i";
10+
/**
11+
* @var string
12+
*/
13+
const PASSWORD_ARGON2ID = "argon2id";
14+
/**
15+
* @var int
16+
* @cvalue PHP_SODIUM_PWHASH_MEMLIMIT
17+
*/
18+
const PASSWORD_ARGON2_DEFAULT_MEMORY_COST = UNKNOWN;
19+
/**
20+
* @var int
21+
* @cvalue PHP_SODIUM_PWHASH_OPSLIMIT
22+
*/
23+
const PASSWORD_ARGON2_DEFAULT_TIME_COST = UNKNOWN;
24+
/**
25+
* @var int
26+
* @cvalue PHP_SODIUM_PWHASH_THREADS
27+
*/
28+
const PASSWORD_ARGON2_DEFAULT_THREADS = UNKNOWN;
29+
/**
30+
* @var string
31+
*/
32+
const PASSWORD_ARGON2_PROVIDER = "sodium";
33+
#endif

ext/sodium/sodium_pwhash_arginfo.h

Lines changed: 26 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ext/standard/password.c

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "zend_interfaces.h"
2727
#include "info.h"
2828
#include "ext/random/php_random_csprng.h"
29+
#include "password_arginfo.h"
2930
#ifdef HAVE_ARGON2LIB
3031
#include "argon2.h"
3132
#endif
@@ -416,32 +417,20 @@ const php_password_algo php_password_algo_argon2id = {
416417
PHP_MINIT_FUNCTION(password) /* {{{ */
417418
{
418419
zend_hash_init(&php_password_algos, 4, NULL, ZVAL_PTR_DTOR, 1);
419-
REGISTER_STRING_CONSTANT("PASSWORD_DEFAULT", "2y", CONST_PERSISTENT);
420+
421+
register_password_symbols(module_number);
420422

421423
if (FAILURE == php_password_algo_register("2y", &php_password_algo_bcrypt)) {
422424
return FAILURE;
423425
}
424-
REGISTER_STRING_CONSTANT("PASSWORD_BCRYPT", "2y", CONST_PERSISTENT);
425426

426427
#ifdef HAVE_ARGON2LIB
427428
if (FAILURE == php_password_algo_register("argon2i", &php_password_algo_argon2i)) {
428429
return FAILURE;
429430
}
430-
REGISTER_STRING_CONSTANT("PASSWORD_ARGON2I", "argon2i", CONST_PERSISTENT);
431-
432431
if (FAILURE == php_password_algo_register("argon2id", &php_password_algo_argon2id)) {
433432
return FAILURE;
434433
}
435-
REGISTER_STRING_CONSTANT("PASSWORD_ARGON2ID", "argon2id", CONST_PERSISTENT);
436-
#endif
437-
438-
REGISTER_LONG_CONSTANT("PASSWORD_BCRYPT_DEFAULT_COST", PHP_PASSWORD_BCRYPT_COST, CONST_PERSISTENT);
439-
#ifdef HAVE_ARGON2LIB
440-
REGISTER_LONG_CONSTANT("PASSWORD_ARGON2_DEFAULT_MEMORY_COST", PHP_PASSWORD_ARGON2_MEMORY_COST, CONST_PERSISTENT);
441-
REGISTER_LONG_CONSTANT("PASSWORD_ARGON2_DEFAULT_TIME_COST", PHP_PASSWORD_ARGON2_TIME_COST, CONST_PERSISTENT);
442-
REGISTER_LONG_CONSTANT("PASSWORD_ARGON2_DEFAULT_THREADS", PHP_PASSWORD_ARGON2_THREADS, CONST_PERSISTENT);
443-
444-
REGISTER_STRING_CONSTANT("PASSWORD_ARGON2_PROVIDER", "standard", CONST_PERSISTENT);
445434
#endif
446435

447436
return SUCCESS;

ext/standard/password.stub.php

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
/** @generate-class-entries */
4+
5+
/**
6+
* @var string
7+
*/
8+
const PASSWORD_DEFAULT = "2y";
9+
/**
10+
* @var string
11+
*/
12+
const PASSWORD_BCRYPT = "2y";
13+
/**
14+
* @var int
15+
* @cvalue PHP_PASSWORD_BCRYPT_COST
16+
*/
17+
const PASSWORD_BCRYPT_DEFAULT_COST = UNKNOWN;
18+
19+
#ifdef HAVE_ARGON2LIB
20+
/**
21+
* @var string
22+
*/
23+
const PASSWORD_ARGON2I = "argon2i";
24+
/**
25+
* @var string
26+
*/
27+
const PASSWORD_ARGON2ID = "argon2id";
28+
/**
29+
* @var string
30+
*/
31+
const PASSWORD_ARGON2_PROVIDER = "standard";
32+
/**
33+
* @var int
34+
* @cvalue PHP_PASSWORD_ARGON2_MEMORY_COST
35+
*/
36+
const PASSWORD_ARGON2_DEFAULT_MEMORY_COST = UNKNOWN;
37+
/**
38+
* @var int
39+
* @cvalue PHP_PASSWORD_ARGON2_TIME_COST
40+
*/
41+
const PASSWORD_ARGON2_DEFAULT_TIME_COST = UNKNOWN;
42+
/**
43+
* @var int
44+
* @cvalue PHP_PASSWORD_ARGON2_THREADS
45+
*/
46+
const PASSWORD_ARGON2_DEFAULT_THREADS = UNKNOWN;
47+
#endif

ext/standard/password_arginfo.h

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)