hash = zend_string_alloc(crypto_shorthash_BYTES, 0);
if (crypto_shorthash((unsigned char *) ZSTR_VAL(hash), msg,
(unsigned long long) msg_len, key) != 0) {
- zend_string_free(hash);
+ zend_string_efree(hash);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
ZSTR_VAL(hash)[crypto_shorthash_BYTES] = 0;
- RETURN_STR(hash);
+ RETURN_NEW_STR(hash);
}
PHP_FUNCTION(sodium_crypto_secretbox)
if (crypto_secretbox_easy((unsigned char *) ZSTR_VAL(ciphertext),
msg, (unsigned long long) msg_len,
nonce, key) != 0) {
- zend_string_free(ciphertext);
+ zend_string_efree(ciphertext);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
ZSTR_VAL(ciphertext)[msg_len + crypto_secretbox_MACBYTES] = 0;
- RETURN_STR(ciphertext);
+ RETURN_NEW_STR(ciphertext);
}
PHP_FUNCTION(sodium_crypto_secretbox_open)
if (crypto_secretbox_open_easy((unsigned char *) ZSTR_VAL(msg), ciphertext,
(unsigned long long) ciphertext_len,
nonce, key) != 0) {
- zend_string_free(msg);
+ zend_string_efree(msg);
RETURN_FALSE;
} else {
ZSTR_VAL(msg)[ciphertext_len - crypto_secretbox_MACBYTES] = 0;
- RETURN_STR(msg);
+ RETURN_NEW_STR(msg);
}
}
if (crypto_generichash((unsigned char *) ZSTR_VAL(hash), (size_t) hash_len,
msg, (unsigned long long) msg_len,
key, (size_t) key_len) != 0) {
- zend_string_free(hash);
+ zend_string_efree(hash);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
ZSTR_VAL(hash)[hash_len] = 0;
- RETURN_STR(hash);
+ RETURN_NEW_STR(hash);
}
PHP_FUNCTION(sodium_crypto_generichash_init)
(unsigned char *) ZSTR_VAL(hash),
(size_t) hash_len) != 0) {
sodium_memzero(&state_tmp, sizeof state_tmp);
- zend_string_free(hash);
+ zend_string_efree(hash);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
convert_to_null(state_zv);
ZSTR_VAL(hash)[hash_len] = 0;
- RETURN_STR(hash);
+ RETURN_NEW_STR(hash);
}
PHP_FUNCTION(sodium_crypto_box_keypair)
if (crypto_box_keypair((unsigned char *) ZSTR_VAL(keypair) +
crypto_box_SECRETKEYBYTES,
(unsigned char *) ZSTR_VAL(keypair)) != 0) {
- zend_string_free(keypair);
+ zend_string_efree(keypair);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
ZSTR_VAL(keypair)[keypair_len] = 0;
- RETURN_STR(keypair);
+ RETURN_NEW_STR(keypair);
}
PHP_FUNCTION(sodium_crypto_box_seed_keypair)
crypto_box_SECRETKEYBYTES,
(unsigned char *) ZSTR_VAL(keypair),
seed) != 0) {
- zend_string_free(keypair);
+ zend_string_efree(keypair);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
ZSTR_VAL(keypair)[keypair_len] = 0;
- RETURN_STR(keypair);
+ RETURN_NEW_STR(keypair);
}
PHP_FUNCTION(sodium_crypto_box_keypair_from_secretkey_and_publickey)
if (crypto_box_easy((unsigned char *) ZSTR_VAL(ciphertext), msg,
(unsigned long long) msg_len,
nonce, publickey, secretkey) != 0) {
- zend_string_free(ciphertext);
+ zend_string_efree(ciphertext);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
ZSTR_VAL(ciphertext)[msg_len + crypto_box_MACBYTES] = 0;
- RETURN_STR(ciphertext);
+ RETURN_NEW_STR(ciphertext);
}
PHP_FUNCTION(sodium_crypto_box_open)
if (crypto_box_open_easy((unsigned char *) ZSTR_VAL(msg), ciphertext,
(unsigned long long) ciphertext_len,
nonce, publickey, secretkey) != 0) {
- zend_string_free(msg);
+ zend_string_efree(msg);
RETURN_FALSE;
} else {
ZSTR_VAL(msg)[ciphertext_len - crypto_box_MACBYTES] = 0;
- RETURN_STR(msg);
+ RETURN_NEW_STR(msg);
}
}
ciphertext = zend_string_alloc((size_t) msg_len + crypto_box_SEALBYTES, 0);
if (crypto_box_seal((unsigned char *) ZSTR_VAL(ciphertext), msg,
(unsigned long long) msg_len, publickey) != 0) {
- zend_string_free(ciphertext);
+ zend_string_efree(ciphertext);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
ZSTR_VAL(ciphertext)[msg_len + crypto_box_SEALBYTES] = 0;
- RETURN_STR(ciphertext);
+ RETURN_NEW_STR(ciphertext);
}
PHP_FUNCTION(sodium_crypto_box_seal_open)
if (crypto_box_seal_open((unsigned char *) ZSTR_VAL(msg), ciphertext,
(unsigned long long) ciphertext_len,
publickey, secretkey) != 0) {
- zend_string_free(msg);
+ zend_string_efree(msg);
RETURN_FALSE;
} else {
ZSTR_VAL(msg)[ciphertext_len - crypto_box_SEALBYTES] = 0;
- RETURN_STR(msg);
+ RETURN_NEW_STR(msg);
}
}
if (crypto_sign_keypair((unsigned char *) ZSTR_VAL(keypair) +
crypto_sign_SECRETKEYBYTES,
(unsigned char *) ZSTR_VAL(keypair)) != 0) {
- zend_string_free(keypair);
+ zend_string_efree(keypair);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
ZSTR_VAL(keypair)[keypair_len] = 0;
- RETURN_STR(keypair);
+ RETURN_NEW_STR(keypair);
}
PHP_FUNCTION(sodium_crypto_sign_seed_keypair)
crypto_sign_SECRETKEYBYTES,
(unsigned char *) ZSTR_VAL(keypair),
seed) != 0) {
- zend_string_free(keypair);
+ zend_string_efree(keypair);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
ZSTR_VAL(keypair)[keypair_len] = 0;
- RETURN_STR(keypair);
+ RETURN_NEW_STR(keypair);
}
PHP_FUNCTION(sodium_crypto_sign_keypair_from_secretkey_and_publickey)
if (crypto_sign((unsigned char *) ZSTR_VAL(msg_signed),
&msg_signed_real_len, msg,
(unsigned long long) msg_len, secretkey) != 0) {
- zend_string_free(msg_signed);
+ zend_string_efree(msg_signed);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
if (msg_signed_real_len >= SIZE_MAX || msg_signed_real_len > msg_signed_len) {
- zend_string_free(msg_signed);
+ zend_string_efree(msg_signed);
zend_throw_exception(sodium_exception_ce, "arithmetic overflow", 0);
return;
}
PHP_SODIUM_ZSTR_TRUNCATE(msg_signed, (size_t) msg_signed_real_len);
ZSTR_VAL(msg_signed)[msg_signed_real_len] = 0;
- RETURN_STR(msg_signed);
+ RETURN_NEW_STR(msg_signed);
}
PHP_FUNCTION(sodium_crypto_sign_open)
if (crypto_sign_open((unsigned char *) ZSTR_VAL(msg), &msg_real_len,
msg_signed, (unsigned long long) msg_signed_len,
publickey) != 0) {
- zend_string_free(msg);
+ zend_string_efree(msg);
RETURN_FALSE;
}
if (msg_real_len >= SIZE_MAX || msg_real_len > msg_signed_len) {
- zend_string_free(msg);
+ zend_string_efree(msg);
zend_throw_exception(sodium_exception_ce, "arithmetic overflow", 0);
return;
}
PHP_SODIUM_ZSTR_TRUNCATE(msg, (size_t) msg_real_len);
ZSTR_VAL(msg)[msg_real_len] = 0;
- RETURN_STR(msg);
+ RETURN_NEW_STR(msg);
}
PHP_FUNCTION(sodium_crypto_sign_detached)
if (crypto_sign_detached((unsigned char *) ZSTR_VAL(signature),
&signature_real_len, msg,
(unsigned long long) msg_len, secretkey) != 0) {
- zend_string_free(signature);
+ zend_string_efree(signature);
zend_throw_exception(sodium_exception_ce, "signature creation failed", 0);
return;
}
if (signature_real_len <= 0U || signature_real_len > crypto_sign_BYTES) {
- zend_string_free(signature);
+ zend_string_efree(signature);
zend_throw_exception(sodium_exception_ce, "signature has a bogus size", 0);
return;
}
ZEND_ASSERT(ZSTR_VAL(signature)[signature_real_len] == 0);
- RETURN_STR(signature);
+ RETURN_NEW_STR(signature);
}
PHP_FUNCTION(sodium_crypto_sign_verify_detached)
ciphertext = zend_string_alloc((size_t) ciphertext_len, 0);
if (crypto_stream((unsigned char *) ZSTR_VAL(ciphertext),
(unsigned long long) ciphertext_len, nonce, key) != 0) {
- zend_string_free(ciphertext);
+ zend_string_efree(ciphertext);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
ZSTR_VAL(ciphertext)[ciphertext_len] = 0;
- RETURN_STR(ciphertext);
+ RETURN_NEW_STR(ciphertext);
}
PHP_FUNCTION(sodium_crypto_stream_xor)
ciphertext = zend_string_alloc((size_t) ciphertext_len, 0);
if (crypto_stream_xor((unsigned char *) ZSTR_VAL(ciphertext), msg,
(unsigned long long) msg_len, nonce, key) != 0) {
- zend_string_free(ciphertext);
+ zend_string_efree(ciphertext);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
ZSTR_VAL(ciphertext)[ciphertext_len] = 0;
- RETURN_STR(ciphertext);
+ RETURN_NEW_STR(ciphertext);
}
#ifdef crypto_pwhash_SALTBYTES
(unsigned long long) opslimit, (size_t) memlimit, (int) alg);
}
if (ret != 0) {
- zend_string_free(hash);
+ zend_string_efree(hash);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
ZSTR_VAL(hash)[hash_len] = 0;
- RETURN_STR(hash);
+ RETURN_NEW_STR(hash);
}
PHP_FUNCTION(sodium_crypto_pwhash_str)
if (crypto_pwhash_str
(ZSTR_VAL(hash_str), passwd, (unsigned long long) passwd_len,
(unsigned long long) opslimit, (size_t) memlimit) != 0) {
- zend_string_free(hash_str);
+ zend_string_efree(hash_str);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
len = strlen(ZSTR_VAL(hash_str));
PHP_SODIUM_ZSTR_TRUNCATE(hash_str, len);
- RETURN_STR(hash_str);
+ RETURN_NEW_STR(hash_str);
}
#if SODIUM_LIBRARY_VERSION_MAJOR > 9 || (SODIUM_LIBRARY_VERSION_MAJOR == 9 && SODIUM_LIBRARY_VERSION_MINOR >= 6)
((unsigned char *) ZSTR_VAL(hash), (unsigned long long) hash_len,
passwd, (unsigned long long) passwd_len, salt,
(unsigned long long) opslimit, (size_t) memlimit) != 0) {
- zend_string_free(hash);
+ zend_string_efree(hash);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
ZSTR_VAL(hash)[hash_len] = 0;
- RETURN_STR(hash);
+ RETURN_NEW_STR(hash);
}
PHP_FUNCTION(sodium_crypto_pwhash_scryptsalsa208sha256_str)
if (crypto_pwhash_scryptsalsa208sha256_str
(ZSTR_VAL(hash_str), passwd, (unsigned long long) passwd_len,
(unsigned long long) opslimit, (size_t) memlimit) != 0) {
- zend_string_free(hash_str);
+ zend_string_efree(hash_str);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
ZSTR_VAL(hash_str)[crypto_pwhash_scryptsalsa208sha256_STRBYTES - 1] = 0;
- RETURN_STR(hash_str);
+ RETURN_NEW_STR(hash_str);
}
PHP_FUNCTION(sodium_crypto_pwhash_scryptsalsa208sha256_str_verify)
((unsigned char *) ZSTR_VAL(ciphertext), &ciphertext_real_len, msg,
(unsigned long long) msg_len,
ad, (unsigned long long) ad_len, NULL, npub, secretkey) != 0) {
- zend_string_free(ciphertext);
+ zend_string_efree(ciphertext);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
if (ciphertext_real_len <= 0U || ciphertext_real_len >= SIZE_MAX ||
ciphertext_real_len > ciphertext_len) {
- zend_string_free(ciphertext);
+ zend_string_efree(ciphertext);
zend_throw_exception(sodium_exception_ce, "arithmetic overflow", 0);
return;
}
PHP_SODIUM_ZSTR_TRUNCATE(ciphertext, (size_t) ciphertext_real_len);
ZSTR_VAL(ciphertext)[ciphertext_real_len] = 0;
- RETURN_STR(ciphertext);
+ RETURN_NEW_STR(ciphertext);
}
PHP_FUNCTION(sodium_crypto_aead_aes256gcm_decrypt)
((unsigned char *) ZSTR_VAL(msg), &msg_real_len, NULL,
ciphertext, (unsigned long long) ciphertext_len,
ad, (unsigned long long) ad_len, npub, secretkey) != 0) {
- zend_string_free(msg);
+ zend_string_efree(msg);
RETURN_FALSE;
}
if (msg_real_len >= SIZE_MAX || msg_real_len > msg_len) {
- zend_string_free(msg);
+ zend_string_efree(msg);
zend_throw_exception(sodium_exception_ce, "arithmetic overflow", 0);
return;
}
PHP_SODIUM_ZSTR_TRUNCATE(msg, (size_t) msg_real_len);
ZSTR_VAL(msg)[msg_real_len] = 0;
- RETURN_STR(msg);
+ RETURN_NEW_STR(msg);
}
#endif
((unsigned char *) ZSTR_VAL(ciphertext), &ciphertext_real_len, msg,
(unsigned long long) msg_len,
ad, (unsigned long long) ad_len, NULL, npub, secretkey) != 0) {
- zend_string_free(ciphertext);
+ zend_string_efree(ciphertext);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
if (ciphertext_real_len <= 0U || ciphertext_real_len >= SIZE_MAX ||
ciphertext_real_len > ciphertext_len) {
- zend_string_free(ciphertext);
+ zend_string_efree(ciphertext);
zend_throw_exception(sodium_exception_ce, "arithmetic overflow", 0);
return;
}
PHP_SODIUM_ZSTR_TRUNCATE(ciphertext, (size_t) ciphertext_real_len);
ZSTR_VAL(ciphertext)[ciphertext_real_len] = 0;
- RETURN_STR(ciphertext);
+ RETURN_NEW_STR(ciphertext);
}
PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_decrypt)
((unsigned char *) ZSTR_VAL(msg), &msg_real_len, NULL,
ciphertext, (unsigned long long) ciphertext_len,
ad, (unsigned long long) ad_len, npub, secretkey) != 0) {
- zend_string_free(msg);
+ zend_string_efree(msg);
RETURN_FALSE;
}
if (msg_real_len >= SIZE_MAX || msg_real_len > msg_len) {
- zend_string_free(msg);
+ zend_string_efree(msg);
zend_throw_exception(sodium_exception_ce, "arithmetic overflow", 0);
return;
}
PHP_SODIUM_ZSTR_TRUNCATE(msg, (size_t) msg_real_len);
ZSTR_VAL(msg)[msg_real_len] = 0;
- RETURN_STR(msg);
+ RETURN_NEW_STR(msg);
}
PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_ietf_encrypt)
((unsigned char *) ZSTR_VAL(ciphertext), &ciphertext_real_len, msg,
(unsigned long long) msg_len,
ad, (unsigned long long) ad_len, NULL, npub, secretkey) != 0) {
- zend_string_free(ciphertext);
+ zend_string_efree(ciphertext);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
if (ciphertext_real_len <= 0U || ciphertext_real_len >= SIZE_MAX ||
ciphertext_real_len > ciphertext_len) {
- zend_string_free(ciphertext);
+ zend_string_efree(ciphertext);
zend_throw_exception(sodium_exception_ce, "arithmetic overflow", 0);
return;
}
PHP_SODIUM_ZSTR_TRUNCATE(ciphertext, (size_t) ciphertext_real_len);
ZSTR_VAL(ciphertext)[ciphertext_real_len] = 0;
- RETURN_STR(ciphertext);
+ RETURN_NEW_STR(ciphertext);
}
PHP_FUNCTION(sodium_crypto_aead_chacha20poly1305_ietf_decrypt)
((unsigned char *) ZSTR_VAL(msg), &msg_real_len, NULL,
ciphertext, (unsigned long long) ciphertext_len,
ad, (unsigned long long) ad_len, npub, secretkey) != 0) {
- zend_string_free(msg);
+ zend_string_efree(msg);
RETURN_FALSE;
}
if (msg_real_len >= SIZE_MAX || msg_real_len > msg_len) {
- zend_string_free(msg);
+ zend_string_efree(msg);
zend_throw_exception(sodium_exception_ce, "arithmetic overflow", 0);
return;
}
PHP_SODIUM_ZSTR_TRUNCATE(msg, (size_t) msg_real_len);
ZSTR_VAL(msg)[msg_real_len] = 0;
- RETURN_STR(msg);
+ RETURN_NEW_STR(msg);
}
#ifdef crypto_aead_xchacha20poly1305_IETF_NPUBBYTES
((unsigned char *) ZSTR_VAL(ciphertext), &ciphertext_real_len, msg,
(unsigned long long) msg_len,
ad, (unsigned long long) ad_len, NULL, npub, secretkey) != 0) {
- zend_string_free(ciphertext);
+ zend_string_efree(ciphertext);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
if (ciphertext_real_len <= 0U || ciphertext_real_len >= SIZE_MAX ||
ciphertext_real_len > ciphertext_len) {
- zend_string_free(ciphertext);
+ zend_string_efree(ciphertext);
zend_throw_exception(sodium_exception_ce, "arithmetic overflow", 0);
return;
}
PHP_SODIUM_ZSTR_TRUNCATE(ciphertext, (size_t) ciphertext_real_len);
ZSTR_VAL(ciphertext)[ciphertext_real_len] = 0;
- RETURN_STR(ciphertext);
+ RETURN_NEW_STR(ciphertext);
}
PHP_FUNCTION(sodium_crypto_aead_xchacha20poly1305_ietf_decrypt)
((unsigned char *) ZSTR_VAL(msg), &msg_real_len, NULL,
ciphertext, (unsigned long long) ciphertext_len,
ad, (unsigned long long) ad_len, npub, secretkey) != 0) {
- zend_string_free(msg);
+ zend_string_efree(msg);
RETURN_FALSE;
}
if (msg_real_len >= SIZE_MAX || msg_real_len > msg_len) {
- zend_string_free(msg);
+ zend_string_efree(msg);
zend_throw_exception(sodium_exception_ce, "arithmetic overflow", 0);
return;
}
PHP_SODIUM_ZSTR_TRUNCATE(msg, (size_t) msg_real_len);
ZSTR_VAL(msg)[msg_real_len] = 0;
- RETURN_STR(msg);
+ RETURN_NEW_STR(msg);
}
#endif
if (sodium_hex2bin((unsigned char *) ZSTR_VAL(bin), bin_len, hex, hex_len,
ignore, &bin_real_len, &end) != 0 ||
end != hex + hex_len) {
- zend_string_free(bin);
+ zend_string_efree(bin);
zend_throw_exception(sodium_exception_ce, "invalid hex string", 0);
return;
}
if (bin_real_len >= SIZE_MAX || bin_real_len > bin_len) {
- zend_string_free(bin);
+ zend_string_efree(bin);
zend_throw_exception(sodium_exception_ce, "arithmetic overflow", 0);
return;
}
PHP_SODIUM_ZSTR_TRUNCATE(bin, (size_t) bin_real_len);
ZSTR_VAL(bin)[bin_real_len] = 0;
- RETURN_STR(bin);
+ RETURN_NEW_STR(bin);
}
#ifdef sodium_base64_VARIANT_ORIGINAL
b64, b64_len,
ignore, &bin_real_len, &end, (int) variant) != 0 ||
end != b64 + b64_len) {
- zend_string_free(bin);
+ zend_string_efree(bin);
zend_throw_exception(sodium_exception_ce, "invalid base64 string", 0);
return;
}
if (bin_real_len >= SIZE_MAX || bin_real_len > bin_len) {
- zend_string_free(bin);
+ zend_string_efree(bin);
zend_throw_exception(sodium_exception_ce, "arithmetic overflow", 0);
return;
}
PHP_SODIUM_ZSTR_TRUNCATE(bin, (size_t) bin_real_len);
ZSTR_VAL(bin)[bin_real_len] = 0;
- RETURN_STR(bin);
+ RETURN_NEW_STR(bin);
}
#endif
}
q = zend_string_alloc(crypto_scalarmult_BYTES, 0);
if (crypto_scalarmult((unsigned char *) ZSTR_VAL(q), n, p) != 0) {
- zend_string_free(q);
+ zend_string_efree(q);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
ZSTR_VAL(q)[crypto_scalarmult_BYTES] = 0;
- RETURN_STR(q);
+ RETURN_NEW_STR(q);
}
PHP_FUNCTION(sodium_crypto_kx_seed_keypair)
((void *) state, (unsigned char *) ZSTR_VAL(c), &c_real_len,
msg, (unsigned long long) msg_len, ad, (unsigned long long) ad_len,
(unsigned char) tag) != 0) {
- zend_string_free(c);
+ zend_string_efree(c);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;
}
if (c_real_len <= 0U || c_real_len >= SIZE_MAX || c_real_len > c_len) {
- zend_string_free(c);
+ zend_string_efree(c);
zend_throw_exception(sodium_exception_ce, "arithmetic overflow", 0);
return;
}
PHP_SODIUM_ZSTR_TRUNCATE(c, (size_t) c_real_len);
ZSTR_VAL(c)[c_real_len] = 0;
- RETURN_STR(c);
+ RETURN_NEW_STR(c);
}
PHP_FUNCTION(sodium_crypto_secretstream_xchacha20poly1305_init_pull)
if (crypto_secretstream_xchacha20poly1305_pull
((void *) state, (unsigned char *) ZSTR_VAL(msg), &msg_real_len, &tag,
c, (unsigned long long) c_len, ad, (unsigned long long) ad_len) != 0) {
- zend_string_free(msg);
+ zend_string_efree(msg);
RETURN_FALSE;
}
if (msg_real_len >= SIZE_MAX || msg_real_len > msg_len) {
- zend_string_free(msg);
+ zend_string_efree(msg);
zend_throw_exception(sodium_exception_ce, "arithmetic overflow", 0);
return;
}