1 | # Constant-Time Encoding
|
---|
2 |
|
---|
3 | [![Build Status](https://github.com/paragonie/constant_time_encoding/actions/workflows/ci.yml/badge.svg)](https://github.com/paragonie/constant_time_encoding/actions)
|
---|
4 | [![Static Analysis](https://github.com/paragonie/constant_time_encoding/actions/workflows/psalm.yml/badge.svg)](https://github.com/paragonie/constant_time_encoding/actions)
|
---|
5 | [![Latest Stable Version](https://poser.pugx.org/paragonie/constant_time_encoding/v/stable)](https://packagist.org/packages/paragonie/constant_time_encoding)
|
---|
6 | [![Latest Unstable Version](https://poser.pugx.org/paragonie/constant_time_encoding/v/unstable)](https://packagist.org/packages/paragonie/constant_time_encoding)
|
---|
7 | [![License](https://poser.pugx.org/paragonie/constant_time_encoding/license)](https://packagist.org/packages/paragonie/constant_time_encoding)
|
---|
8 | [![Downloads](https://img.shields.io/packagist/dt/paragonie/constant_time_encoding.svg)](https://packagist.org/packages/paragonie/constant_time_encoding)
|
---|
9 |
|
---|
10 | Based on the [constant-time base64 implementation made by Steve "Sc00bz" Thomas](https://github.com/Sc00bz/ConstTimeEncoding),
|
---|
11 | this library aims to offer character encoding functions that do not leak
|
---|
12 | information about what you are encoding/decoding via processor cache
|
---|
13 | misses. Further reading on [cache-timing attacks](http://blog.ircmaxell.com/2014/11/its-all-about-time.html).
|
---|
14 |
|
---|
15 | Our fork offers the following enhancements:
|
---|
16 |
|
---|
17 | * `mbstring.func_overload` resistance
|
---|
18 | * Unit tests
|
---|
19 | * Composer- and Packagist-ready
|
---|
20 | * Base16 encoding
|
---|
21 | * Base32 encoding
|
---|
22 | * Uses `pack()` and `unpack()` instead of `chr()` and `ord()`
|
---|
23 |
|
---|
24 | ## PHP Version Requirements
|
---|
25 |
|
---|
26 | Version 3 of this library should work on **PHP 8** or newer.
|
---|
27 |
|
---|
28 | Version 2 of this library should work on **PHP 7** or newer. See [the v2.x branch](https://github.com/paragonie/constant_time_encoding/tree/v2.x).
|
---|
29 |
|
---|
30 | For PHP 5 support, see [the v1.x branch](https://github.com/paragonie/constant_time_encoding/tree/v1.x).
|
---|
31 |
|
---|
32 | If you are adding this as a dependency to a project intended to work on PHP 5 through 8.4, please set the required version to `^1|^2|^3`.
|
---|
33 |
|
---|
34 | ## How to Install
|
---|
35 |
|
---|
36 | ```sh
|
---|
37 | composer require paragonie/constant_time_encoding
|
---|
38 | ```
|
---|
39 |
|
---|
40 | ## How to Use
|
---|
41 |
|
---|
42 | ```php
|
---|
43 | use ParagonIE\ConstantTime\Encoding;
|
---|
44 |
|
---|
45 | // possibly (if applicable):
|
---|
46 | // require 'vendor/autoload.php';
|
---|
47 |
|
---|
48 | $data = random_bytes(32);
|
---|
49 | echo Encoding::base64Encode($data), "\n";
|
---|
50 | echo Encoding::base32EncodeUpper($data), "\n";
|
---|
51 | echo Encoding::base32Encode($data), "\n";
|
---|
52 | echo Encoding::hexEncode($data), "\n";
|
---|
53 | echo Encoding::hexEncodeUpper($data), "\n";
|
---|
54 | ```
|
---|
55 |
|
---|
56 | Example output:
|
---|
57 |
|
---|
58 | ```
|
---|
59 | 1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=
|
---|
60 | 2VMKKPSHSWVCVZJ6E7SONRY3ZXCNG3GE6ZZFU7TGJSX7KUKFNLAQ====
|
---|
61 | 2vmkkpshswvcvzj6e7sonry3zxcng3ge6zzfu7tgjsx7kukfnlaq====
|
---|
62 | d558a53e4795aa2ae53e27e4e6c71bcdc4d36cc4f6725a7e664caff551456ac1
|
---|
63 | D558A53E4795AA2AE53E27E4E6C71BDCC4D36CC4F6725A7E664CAFF551456AC1
|
---|
64 | ```
|
---|
65 |
|
---|
66 | If you only need a particular variant, you can just reference the
|
---|
67 | required class like so:
|
---|
68 |
|
---|
69 | ```php
|
---|
70 | use ParagonIE\ConstantTime\Base64;
|
---|
71 | use ParagonIE\ConstantTime\Base32;
|
---|
72 |
|
---|
73 | $data = random_bytes(32);
|
---|
74 | echo Base64::encode($data), "\n";
|
---|
75 | echo Base32::encode($data), "\n";
|
---|
76 | ```
|
---|
77 |
|
---|
78 | Example output:
|
---|
79 |
|
---|
80 | ```
|
---|
81 | 1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=
|
---|
82 | 2vmkkpshswvcvzj6e7sonry3zxcng3ge6zzfu7tgjsx7kukfnlaq====
|
---|
83 | ```
|
---|
84 |
|
---|
85 | ## Support Contracts
|
---|
86 |
|
---|
87 | If your company uses this library in their products or services, you may be
|
---|
88 | interested in [purchasing a support contract from Paragon Initiative Enterprises](https://paragonie.com/enterprise).
|
---|