Installation

Cryptal relies on Composer for its installation. It also uses plugins to provide implementations for the various algorithms.

Cryptal can be installed by itself using the following command:

$ php composer.php require fpoirotte/cryptal

However, the core package only provides a few algorithms using mostly PHP code. Therefore, you will usually want to install additional plugins to get access to more algorithms.

Which plugin to install depends on the algorithms you need to use and whether you’re willing to sacrifice a bit of speed and security to get additionnal algorithms.

Cryptal supports 3 types of implementations:

Choosing the plugin(s) to install

The following tables list the algorithms provided by each plugin, with their implementation type. “Core” means the algorithm is provided by the Cryptal package itself and does not require any additional plugin to work.

Please note that these lists are only given as an indication of what the underlying library supports. The actual supported algorithms may vary due to differing compilation options or differing versions being used.

Modes of operation

Algorithm Core Mcrypt OpenSSL LibTomCrypt LibSodium Hash PHP-Crypto
CBC PHP code compiled compiled compiled n/a n/a compiled
CCM PHP code n/a compiled [1] compiled n/a n/a compiled
CFB PHP code compiled compiled compiled n/a n/a compiled
CTR PHP code compiled compiled [1] compiled n/a n/a compiled
EAX PHP code n/a n/a compiled n/a n/a n/a
ECB PHP code compiled compiled compiled n/a n/a compiled
GCM PHP code n/a compiled [1] compiled compiled [2] n/a compiled
OCB PHP code n/a compiled [1] compiled n/a n/a n/a
OFB PHP code compiled compiled compiled n/a n/a compiled

Cipher algorithms

Algorithm Core Mcrypt OpenSSL LibTomCrypt LibSodium Hash PHP-Crypto
TripleDES (3DES) n/a compiled compiled compiled n/a n/a compiled
AES-128 n/a compiled compiled compiled n/a n/a compiled
AES-192 n/a compiled compiled compiled n/a n/a compiled
AES-256 n/a compiled compiled compiled compiled [2] n/a compiled
Blowfish n/a compiled compiled compiled n/a n/a compiled
Camellia-128 PHP code n/a compiled compiled [3] [4] n/a n/a compiled
Camellia-192 PHP code n/a compiled compiled [3] [4] n/a n/a compiled
Camellia-256 PHP code n/a compiled compiled [3] [4] n/a n/a compiled
CAST5 n/a compiled compiled compiled n/a n/a compiled
ChaCha20 (IETF variant) PHP code n/a n/a compiled [3] [4] compiled n/a n/a
ChaCha20 (OpenSSH variant) PHP code n/a n/a n/a n/a n/a n/a
DES n/a compiled compiled compiled n/a n/a compiled
RC2 n/a compiled compiled compiled n/a n/a compiled
RC4 n/a compiled compiled compiled [3] [4] n/a n/a compiled
SEED n/a n/a compiled compiled n/a n/a compiled
Twofish n/a compiled n/a compiled n/a n/a compiled

Hashing algorithms

Algorithm Core Mcrypt OpenSSL LibTomCrypt LibSodium Hash PHP-Crypto
MD2 n/a n/a compiled compiled n/a compiled compiled
MD4 n/a n/a compiled compiled n/a compiled compiled
MD5 compiled n/a compiled compiled n/a compiled compiled
RIPEMD160 n/a n/a compiled compiled n/a compiled compiled
SHA1 compiled n/a compiled compiled n/a compiled compiled
SHA224 n/a n/a compiled compiled n/a compiled compiled
SHA256 n/a n/a compiled compiled n/a compiled compiled
SHA384 n/a n/a compiled compiled n/a compiled compiled
SHA512 n/a n/a compiled compiled n/a compiled compiled

Message authentication algorithms

Algorithm Core Mcrypt OpenSSL LibTomCrypt LibSodium Hash PHP-Crypto
CMAC PHP code n/a n/a compiled n/a n/a compiled
HMAC n/a n/a n/a compiled n/a compiled compiled
Poly1305 PHP code n/a n/a compiled [3] [4] n/a n/a n/a
UMAC-32 PHP code n/a n/a n/a n/a n/a n/a
UMAC-64 PHP code n/a n/a n/a n/a n/a n/a
UMAC-92 PHP code n/a n/a n/a n/a n/a n/a
UMAC-128 PHP code n/a n/a compiled n/a n/a n/a

Installing the plugins

Once you have determined the algorithms you are going to use and the plugins providing these algorithms that you want to use, execute the following commands to install the appropriate plugins:

$ # Plugin based on the old Mcrypt PHP extension (PHP <= 7.1)
$ php composer.php require fpoirotte/cryptal-mcrypt
$
$ # Plugin based on the OpenSSL PHP extension
$ php composer.php require fpoirotte/cryptal-openssl
$
$ # Plugin based on the LibTomCrypt PHP extension
$ php composer.php require fpoirotte/cryptal-tomcrypt
$
$ # Plugin based on the new LibSodium PHP extension (PHP >= 7.2)
$ php composer.php require fpoirotte/cryptal-sodium
$
$ # Plugin based on the Hash PHP extension
$ php composer.php require fpoirotte/cryptal-hash
$
$ # Plugin based on the PHP-Crypto extension
$ php composer.php require fpoirotte/cryptal-php-crypto

Footnotes

[1](1, 2, 3, 4) Availability is highly dependent on OpenSSL version, hardware, compilation options and selected cipher. Your mileage may vary.
[2](1, 2) libsodium only supports AES-256 in GCM mode. Also, this cipher/mode combination is not available unless the processor of the machine running the code has support for the AES-NI instruction set.
[3](1, 2, 3, 4, 5, 6) Requires version 1.18 or later of LibTomCrypt.
[4](1, 2, 3, 4, 5, 6) Requires version 0.3.0 or later of the PHP tomcrypt extension.