Generate Domain#
Namespace: Infocyph\\Epicrypt\\Generate
Scope#
random bytes
random strings
nonces
salts
key material
derived key material
token material
Random Bytes and Strings#
use Infocyph\Epicrypt\Generate\RandomBytesGenerator;
$random = new RandomBytesGenerator();
$bytes = $random->bytes(32);
$string = $random->string(40, prefix: 'ep_', postfix: '_v1');
Nonce and Salt#
use Infocyph\Epicrypt\Generate\NonceGenerator;
use Infocyph\Epicrypt\Generate\SaltGenerator;
$nonce = (new NonceGenerator())->generate();
$salt = (new SaltGenerator())->generate();
Key and Token Material#
use Infocyph\Epicrypt\Generate\KeyMaterial\KeyMaterialGenerator;
use Infocyph\Epicrypt\Generate\KeyMaterial\TokenMaterialGenerator;
$keyMaterial = (new KeyMaterialGenerator())->generate(32); // Base64URL by default
$tokenMaterial = (new TokenMaterialGenerator())->generate(48);
Purpose-Aware Key Material#
use Infocyph\Epicrypt\Generate\KeyMaterial\Enum\KeyPurpose;
use Infocyph\Epicrypt\Generate\KeyMaterial\KeyMaterialGenerator;
use Infocyph\Epicrypt\Security\Policy\SecurityProfile;
$generator = new KeyMaterialGenerator();
$aeadKey = $generator->forPurpose(KeyPurpose::AEAD, SecurityProfile::MODERN);
$masterSecret = $generator->forMasterSecret();
Key Derivation#
use Infocyph\Epicrypt\Generate\KeyMaterial\KeyDeriver;
$deriver = new KeyDeriver();
$hkdfKey = $deriver->hkdf($inputKeyMaterial, 32, [
'info' => 'app:encryption',
'salt' => $salt,
]);
$passwordKey = $deriver->deriveFromPassword('password', $salt, 32);
$subkey = $deriver->subkey($rootKey, 1, 32, ['context' => 'EPCKDF01']);