Diogo Cordeiro a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 4 years ago
..
src a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 4 years ago
tests a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 4 years ago
.gitignore a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 4 years ago
.travis.yml a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 4 years ago
LICENSE.txt a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 4 years ago
README.md a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 4 years ago
composer.json a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 4 years ago
phpunit.xml.dist a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 4 years ago
psalm.xml a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 4 years ago

README.md

Constant-Time Encoding

Build Status

Based on the constant-time base64 implementation made by Steve "Sc00bz" Thomas, this library aims to offer character encoding functions that do not leak information about what you are encoding/decoding via processor cache misses. Further reading on cache-timing attacks.

Our fork offers the following enchancements:

  • mbstring.func_overload resistance
  • Unit tests
  • Composer- and Packagist-ready
  • Base16 encoding
  • Base32 encoding
  • Uses pack() and unpack() instead of chr() and ord()

PHP Version Requirements

This library should work on any supported version of PHP. It may work on earlier versions, but we do not guarantee it. If it doesn't, we will not fix it to work on earlier versions of PHP.

How to Install

composer require paragonie/constant_time_encoding

How to Use

use \ParagonIE\ConstantTime\Encoding;

// possibly (if applicable): 
// require 'vendor/autoload.php';

$data = random_bytes(32);
echo Encoding::base64Encode($data), "\n";
echo Encoding::base32EncodeUpper($data), "\n";
echo Encoding::base32Encode($data), "\n";
echo Encoding::hexEncode($data), "\n";
echo Encoding::hexEncodeUpper($data), "\n";

Example output:

1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=
2VMKKPSHSWVCVZJ6E7SONRY3ZXCNG3GE6ZZFU7TGJSX7KUKFNLAQ====
2vmkkpshswvcvzj6e7sonry3zxcng3ge6zzfu7tgjsx7kukfnlaq====
d558a53e4795aa2ae53e27e4e6c71bcdc4d36cc4f6725a7e664caff551456ac1
D558A53E4795AA2AE53E27E4E6C71BDCC4D36CC4F6725A7E664CAFF551456AC1

If you only need a particular variant, you can just reference the required class like so:

use \ParagonIE\ConstantTime\Base64;
use \ParagonIE\ConstantTime\Base32;

$data = random_bytes(32);
echo Base64::encode($data), "\n";
echo Base32::encode($data), "\n";

Example output:

1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=
2vmkkpshswvcvzj6e7sonry3zxcng3ge6zzfu7tgjsx7kukfnlaq====