mirror of
https://github.com/php/php-src.git
synced 2024-09-22 10:27:25 +00:00
sodium ext: add bindings for keygen() functions
This is the recommended way to generate keys correctly for all operations using a single key, since libsodium 1.0.12.
This commit is contained in:
parent
8e8fbf51f7
commit
b071fcb81d
@ -252,6 +252,20 @@ const zend_function_entry sodium_functions[] = {
|
||||
PHP_FE(sodium_memcmp, AI_TwoStrings)
|
||||
PHP_FE(sodium_memzero, AI_FirstArgByReferenceSecondLength)
|
||||
|
||||
#ifdef HAVE_AESGCM
|
||||
PHP_FE(sodium_crypto_aead_aes256gcm_keygen, AI_None)
|
||||
#endif
|
||||
PHP_FE(sodium_crypto_aead_chacha20poly1305_keygen, AI_None)
|
||||
PHP_FE(sodium_crypto_aead_chacha20poly1305_ietf_keygen, AI_None)
|
||||
#ifdef crypto_aead_xchacha20poly1305_IETF_NPUBBYTES
|
||||
PHP_FE(sodium_crypto_aead_xchacha20poly1305_ietf_keygen, AI_None)
|
||||
#endif
|
||||
PHP_FE(sodium_crypto_auth_keygen, AI_None)
|
||||
PHP_FE(sodium_crypto_generichash_keygen, AI_None)
|
||||
PHP_FE(sodium_crypto_secretbox_keygen, AI_None)
|
||||
PHP_FE(sodium_crypto_shorthash_keygen, AI_None)
|
||||
PHP_FE(sodium_crypto_stream_keygen, AI_None)
|
||||
|
||||
PHP_FALIAS(sodium_crypto_scalarmult_base, sodium_crypto_box_publickey_from_secretkey, AI_TwoStrings)
|
||||
|
||||
PHP_FE_END
|
||||
@ -2794,6 +2808,73 @@ PHP_FUNCTION(sodium_compare)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_AESGCM
|
||||
PHP_FUNCTION(sodium_crypto_aead_aes256gcm_keygen)
|
||||
{
|
||||
unsigned char key[crypto_aead_aes256gcm_KEYBYTES];
|
||||
randombytes_buf(key, sizeof key);
|
||||
RETURN_STRINGL((const char *) key, sizeof key);
|
||||
}
|
||||
#endif
|
||||
|
||||
PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_keygen)
|
||||
{
|
||||
unsigned char key[crypto_aead_chacha20poly1305_KEYBYTES];
|
||||
randombytes_buf(key, sizeof key);
|
||||
RETURN_STRINGL((const char *) key, sizeof key);
|
||||
}
|
||||
|
||||
PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_ietf_keygen)
|
||||
{
|
||||
unsigned char key[crypto_aead_chacha20poly1305_ietf_KEYBYTES];
|
||||
randombytes_buf(key, sizeof key);
|
||||
RETURN_STRINGL((const char *) key, sizeof key);
|
||||
}
|
||||
|
||||
#ifdef crypto_aead_xchacha20poly1305_IETF_NPUBBYTES
|
||||
PHP_FUNCTION(sodium_crypto_aead_xchacha20poly1305_ietf_keygen)
|
||||
{
|
||||
unsigned char key[crypto_aead_xchacha20poly1305_ietf_KEYBYTES];
|
||||
randombytes_buf(key, sizeof key);
|
||||
RETURN_STRINGL((const char *) key, sizeof key);
|
||||
}
|
||||
#endif
|
||||
|
||||
PHP_FUNCTION(sodium_crypto_auth_keygen)
|
||||
{
|
||||
unsigned char key[crypto_auth_KEYBYTES];
|
||||
randombytes_buf(key, sizeof key);
|
||||
RETURN_STRINGL((const char *) key, sizeof key);
|
||||
}
|
||||
|
||||
PHP_FUNCTION(sodium_crypto_generichash_keygen)
|
||||
{
|
||||
unsigned char key[crypto_generichash_KEYBYTES];
|
||||
randombytes_buf(key, sizeof key);
|
||||
RETURN_STRINGL((const char *) key, sizeof key);
|
||||
}
|
||||
|
||||
PHP_FUNCTION(sodium_crypto_secretbox_keygen)
|
||||
{
|
||||
unsigned char key[crypto_secretbox_KEYBYTES];
|
||||
randombytes_buf(key, sizeof key);
|
||||
RETURN_STRINGL((const char *) key, sizeof key);
|
||||
}
|
||||
|
||||
PHP_FUNCTION(sodium_crypto_shorthash_keygen)
|
||||
{
|
||||
unsigned char key[crypto_shorthash_KEYBYTES];
|
||||
randombytes_buf(key, sizeof key);
|
||||
RETURN_STRINGL((const char *) key, sizeof key);
|
||||
}
|
||||
|
||||
PHP_FUNCTION(sodium_crypto_stream_keygen)
|
||||
{
|
||||
unsigned char key[crypto_stream_KEYBYTES];
|
||||
randombytes_buf(key, sizeof key);
|
||||
RETURN_STRINGL((const char *) key, sizeof key);
|
||||
}
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* tab-width: 4
|
||||
|
@ -40,13 +40,18 @@ PHP_FUNCTION(sodium_compare);
|
||||
PHP_FUNCTION(sodium_crypto_aead_aes256gcm_decrypt);
|
||||
PHP_FUNCTION(sodium_crypto_aead_aes256gcm_encrypt);
|
||||
PHP_FUNCTION(sodium_crypto_aead_aes256gcm_is_available);
|
||||
PHP_FUNCTION(sodium_crypto_aead_aes256gcm_keygen);
|
||||
PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_decrypt);
|
||||
PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_encrypt);
|
||||
PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_keygen);
|
||||
PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_ietf_decrypt);
|
||||
PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_ietf_encrypt);
|
||||
PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_ietf_keygen);
|
||||
PHP_FUNCTION(sodium_crypto_aead_xchacha20poly1305_ietf_decrypt);
|
||||
PHP_FUNCTION(sodium_crypto_aead_xchacha20poly1305_ietf_encrypt);
|
||||
PHP_FUNCTION(sodium_crypto_aead_xchacha20poly1305_ietf_keygen);
|
||||
PHP_FUNCTION(sodium_crypto_auth);
|
||||
PHP_FUNCTION(sodium_crypto_auth_keygen);
|
||||
PHP_FUNCTION(sodium_crypto_auth_verify);
|
||||
PHP_FUNCTION(sodium_crypto_box);
|
||||
PHP_FUNCTION(sodium_crypto_box_keypair);
|
||||
@ -61,6 +66,7 @@ PHP_FUNCTION(sodium_crypto_box_seed_keypair);
|
||||
PHP_FUNCTION(sodium_crypto_generichash);
|
||||
PHP_FUNCTION(sodium_crypto_generichash_final);
|
||||
PHP_FUNCTION(sodium_crypto_generichash_init);
|
||||
PHP_FUNCTION(sodium_crypto_generichash_keygen);
|
||||
PHP_FUNCTION(sodium_crypto_generichash_update);
|
||||
PHP_FUNCTION(sodium_crypto_kx_client_session_keys);
|
||||
PHP_FUNCTION(sodium_crypto_kx_keypair);
|
||||
@ -77,8 +83,10 @@ PHP_FUNCTION(sodium_crypto_pwhash_str_verify);
|
||||
PHP_FUNCTION(sodium_crypto_scalarmult);
|
||||
PHP_FUNCTION(sodium_crypto_scalarmult_base);
|
||||
PHP_FUNCTION(sodium_crypto_secretbox);
|
||||
PHP_FUNCTION(sodium_crypto_secretbox_keygen);
|
||||
PHP_FUNCTION(sodium_crypto_secretbox_open);
|
||||
PHP_FUNCTION(sodium_crypto_shorthash);
|
||||
PHP_FUNCTION(sodium_crypto_shorthash_keygen);
|
||||
PHP_FUNCTION(sodium_crypto_sign);
|
||||
PHP_FUNCTION(sodium_crypto_sign_detached);
|
||||
PHP_FUNCTION(sodium_crypto_sign_ed25519_pk_to_curve25519);
|
||||
@ -92,6 +100,7 @@ PHP_FUNCTION(sodium_crypto_sign_secretkey);
|
||||
PHP_FUNCTION(sodium_crypto_sign_seed_keypair);
|
||||
PHP_FUNCTION(sodium_crypto_sign_verify_detached);
|
||||
PHP_FUNCTION(sodium_crypto_stream);
|
||||
PHP_FUNCTION(sodium_crypto_stream_keygen);
|
||||
PHP_FUNCTION(sodium_crypto_stream_xor);
|
||||
PHP_FUNCTION(sodium_hex2bin);
|
||||
PHP_FUNCTION(sodium_increment);
|
||||
|
@ -11,7 +11,7 @@ echo "aead_chacha20poly1305:\n";
|
||||
|
||||
$msg = random_bytes(random_int(1, 1000));
|
||||
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES);
|
||||
$key = random_bytes(SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES);
|
||||
$key = sodium_crypto_aead_chacha20poly1305_keygen();
|
||||
$ad = random_bytes(random_int(1, 1000));
|
||||
|
||||
$ciphertext = sodium_crypto_aead_chacha20poly1305_encrypt($msg, $ad, $nonce, $key);
|
||||
@ -34,7 +34,7 @@ if (SODIUM_LIBRARY_MAJOR_VERSION > 7 ||
|
||||
SODIUM_LIBRARY_MINOR_VERSION >= 6)) {
|
||||
$msg = random_bytes(random_int(1, 1000));
|
||||
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES);
|
||||
$key = random_bytes(SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES);
|
||||
$key = sodium_crypto_aead_chacha20poly1305_ietf_keygen();
|
||||
$ad = random_bytes(random_int(1, 1000));
|
||||
|
||||
$ciphertext = sodium_crypto_aead_chacha20poly1305_ietf_encrypt($msg, $ad, $nonce, $key);
|
||||
@ -63,7 +63,7 @@ if (SODIUM_LIBRARY_MAJOR_VERSION > 9 ||
|
||||
SODIUM_LIBRARY_MINOR_VERSION >= 4)) {
|
||||
$msg = random_bytes(random_int(1, 1000));
|
||||
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES);
|
||||
$key = random_bytes(SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES);
|
||||
$key = sodium_crypto_aead_xchacha20poly1305_ietf_keygen();
|
||||
$ad = random_bytes(random_int(1, 1000));
|
||||
|
||||
$ciphertext = sodium_crypto_aead_xchacha20poly1305_ietf_encrypt($msg, $ad, $nonce, $key);
|
||||
@ -87,12 +87,11 @@ if (SODIUM_LIBRARY_MAJOR_VERSION > 9 ||
|
||||
|
||||
echo "aead_aes256gcm:\n";
|
||||
|
||||
$msg = random_bytes(random_int(1, 1000));
|
||||
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES);
|
||||
$key = random_bytes(SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES);
|
||||
$ad = random_bytes(random_int(1, 1000));
|
||||
|
||||
if (sodium_crypto_aead_aes256gcm_is_available()) {
|
||||
$msg = random_bytes(random_int(1, 1000));
|
||||
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES);
|
||||
$ad = random_bytes(random_int(1, 1000));
|
||||
$key = sodium_crypto_aead_aes256gcm_keygen();
|
||||
$ciphertext = sodium_crypto_aead_aes256gcm_encrypt($msg, $ad, $nonce, $key);
|
||||
$msg2 = sodium_crypto_aead_aes256gcm_decrypt($ciphertext, $ad, $nonce, $key);
|
||||
var_dump($ciphertext !== $msg);
|
||||
|
@ -5,7 +5,7 @@ Check for libsodium auth
|
||||
--FILE--
|
||||
<?php
|
||||
$msg = random_bytes(1000);
|
||||
$key = random_bytes(SODIUM_CRYPTO_AUTH_KEYBYTES);
|
||||
$key = sodium_crypto_auth_keygen();
|
||||
$mac = sodium_crypto_auth($msg, $key);
|
||||
|
||||
// This should validate
|
||||
|
@ -5,7 +5,7 @@ Check for libsodium secretbox
|
||||
--FILE--
|
||||
<?php
|
||||
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
|
||||
$key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
|
||||
$key = sodium_crypto_secretbox_keygen();
|
||||
|
||||
$a = sodium_crypto_secretbox('test', $nonce, $key);
|
||||
$x = sodium_crypto_secretbox_open($a, $nonce, $key);
|
||||
|
@ -5,7 +5,7 @@ Check for libsodium stream
|
||||
--FILE--
|
||||
<?php
|
||||
$nonce = random_bytes(SODIUM_CRYPTO_STREAM_NONCEBYTES);
|
||||
$key = random_bytes(SODIUM_CRYPTO_STREAM_KEYBYTES);
|
||||
$key = sodium_crypto_stream_keygen();
|
||||
|
||||
$len = 100;
|
||||
$stream = sodium_crypto_stream($len, $nonce, $key);
|
||||
@ -16,7 +16,7 @@ $stream2 = sodium_crypto_stream($len, $nonce, $key);
|
||||
$nonce = random_bytes(SODIUM_CRYPTO_STREAM_NONCEBYTES);
|
||||
$stream3 = sodium_crypto_stream($len, $nonce, $key);
|
||||
|
||||
$key = random_bytes(SODIUM_CRYPTO_STREAM_KEYBYTES);
|
||||
$key = sodium_crypto_stream_keygen();
|
||||
$stream4 = sodium_crypto_stream($len, $nonce, $key);
|
||||
|
||||
var_dump($stream === $stream2);
|
||||
|
Loading…
Reference in New Issue
Block a user