Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/wp-inclu.../sodium_c.../src
File: Crypto.php
$ciphertext = ParagonIE_Sodium_Core_Util::substr($message, 32);
[500] Fix | Delete
[501] Fix | Delete
/** @var string $secretKey */
[502] Fix | Delete
$secretKey = self::box_secretkey($keypair);
[503] Fix | Delete
[504] Fix | Delete
/** @var string $publicKey */
[505] Fix | Delete
$publicKey = self::box_publickey($keypair);
[506] Fix | Delete
[507] Fix | Delete
/** @var string $nonce */
[508] Fix | Delete
$nonce = self::generichash(
[509] Fix | Delete
$ephemeralPK . $publicKey,
[510] Fix | Delete
'',
[511] Fix | Delete
24
[512] Fix | Delete
);
[513] Fix | Delete
[514] Fix | Delete
/** @var string $keypair */
[515] Fix | Delete
$keypair = self::box_keypair_from_secretkey_and_publickey($secretKey, $ephemeralPK);
[516] Fix | Delete
[517] Fix | Delete
/** @var string $m */
[518] Fix | Delete
$m = self::box_open($ciphertext, $nonce, $keypair);
[519] Fix | Delete
try {
[520] Fix | Delete
ParagonIE_Sodium_Compat::memzero($secretKey);
[521] Fix | Delete
ParagonIE_Sodium_Compat::memzero($ephemeralPK);
[522] Fix | Delete
ParagonIE_Sodium_Compat::memzero($nonce);
[523] Fix | Delete
} catch (SodiumException $ex) {
[524] Fix | Delete
$secretKey = null;
[525] Fix | Delete
$ephemeralPK = null;
[526] Fix | Delete
$nonce = null;
[527] Fix | Delete
}
[528] Fix | Delete
return $m;
[529] Fix | Delete
}
[530] Fix | Delete
[531] Fix | Delete
/**
[532] Fix | Delete
* Used by crypto_box() to get the crypto_secretbox() key.
[533] Fix | Delete
*
[534] Fix | Delete
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
[535] Fix | Delete
*
[536] Fix | Delete
* @param string $sk
[537] Fix | Delete
* @param string $pk
[538] Fix | Delete
* @return string
[539] Fix | Delete
* @throws SodiumException
[540] Fix | Delete
* @throws TypeError
[541] Fix | Delete
*/
[542] Fix | Delete
public static function box_beforenm($sk, $pk)
[543] Fix | Delete
{
[544] Fix | Delete
return ParagonIE_Sodium_Core_HSalsa20::hsalsa20(
[545] Fix | Delete
str_repeat("\x00", 16),
[546] Fix | Delete
self::scalarmult($sk, $pk)
[547] Fix | Delete
);
[548] Fix | Delete
}
[549] Fix | Delete
[550] Fix | Delete
/**
[551] Fix | Delete
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
[552] Fix | Delete
*
[553] Fix | Delete
* @return string
[554] Fix | Delete
* @throws Exception
[555] Fix | Delete
* @throws SodiumException
[556] Fix | Delete
* @throws TypeError
[557] Fix | Delete
*/
[558] Fix | Delete
public static function box_keypair()
[559] Fix | Delete
{
[560] Fix | Delete
$sKey = random_bytes(32);
[561] Fix | Delete
$pKey = self::scalarmult_base($sKey);
[562] Fix | Delete
return $sKey . $pKey;
[563] Fix | Delete
}
[564] Fix | Delete
[565] Fix | Delete
/**
[566] Fix | Delete
* @param string $seed
[567] Fix | Delete
* @return string
[568] Fix | Delete
* @throws SodiumException
[569] Fix | Delete
* @throws TypeError
[570] Fix | Delete
*/
[571] Fix | Delete
public static function box_seed_keypair($seed)
[572] Fix | Delete
{
[573] Fix | Delete
$sKey = ParagonIE_Sodium_Core_Util::substr(
[574] Fix | Delete
hash('sha512', $seed, true),
[575] Fix | Delete
0,
[576] Fix | Delete
32
[577] Fix | Delete
);
[578] Fix | Delete
$pKey = self::scalarmult_base($sKey);
[579] Fix | Delete
return $sKey . $pKey;
[580] Fix | Delete
}
[581] Fix | Delete
[582] Fix | Delete
/**
[583] Fix | Delete
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
[584] Fix | Delete
*
[585] Fix | Delete
* @param string $sKey
[586] Fix | Delete
* @param string $pKey
[587] Fix | Delete
* @return string
[588] Fix | Delete
* @throws TypeError
[589] Fix | Delete
*/
[590] Fix | Delete
public static function box_keypair_from_secretkey_and_publickey($sKey, $pKey)
[591] Fix | Delete
{
[592] Fix | Delete
return ParagonIE_Sodium_Core_Util::substr($sKey, 0, 32) .
[593] Fix | Delete
ParagonIE_Sodium_Core_Util::substr($pKey, 0, 32);
[594] Fix | Delete
}
[595] Fix | Delete
[596] Fix | Delete
/**
[597] Fix | Delete
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
[598] Fix | Delete
*
[599] Fix | Delete
* @param string $keypair
[600] Fix | Delete
* @return string
[601] Fix | Delete
* @throws RangeException
[602] Fix | Delete
* @throws TypeError
[603] Fix | Delete
*/
[604] Fix | Delete
public static function box_secretkey($keypair)
[605] Fix | Delete
{
[606] Fix | Delete
if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== 64) {
[607] Fix | Delete
throw new RangeException(
[608] Fix | Delete
'Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES bytes long.'
[609] Fix | Delete
);
[610] Fix | Delete
}
[611] Fix | Delete
return ParagonIE_Sodium_Core_Util::substr($keypair, 0, 32);
[612] Fix | Delete
}
[613] Fix | Delete
[614] Fix | Delete
/**
[615] Fix | Delete
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
[616] Fix | Delete
*
[617] Fix | Delete
* @param string $keypair
[618] Fix | Delete
* @return string
[619] Fix | Delete
* @throws RangeException
[620] Fix | Delete
* @throws TypeError
[621] Fix | Delete
*/
[622] Fix | Delete
public static function box_publickey($keypair)
[623] Fix | Delete
{
[624] Fix | Delete
if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES) {
[625] Fix | Delete
throw new RangeException(
[626] Fix | Delete
'Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES bytes long.'
[627] Fix | Delete
);
[628] Fix | Delete
}
[629] Fix | Delete
return ParagonIE_Sodium_Core_Util::substr($keypair, 32, 32);
[630] Fix | Delete
}
[631] Fix | Delete
[632] Fix | Delete
/**
[633] Fix | Delete
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
[634] Fix | Delete
*
[635] Fix | Delete
* @param string $sKey
[636] Fix | Delete
* @return string
[637] Fix | Delete
* @throws RangeException
[638] Fix | Delete
* @throws SodiumException
[639] Fix | Delete
* @throws TypeError
[640] Fix | Delete
*/
[641] Fix | Delete
public static function box_publickey_from_secretkey($sKey)
[642] Fix | Delete
{
[643] Fix | Delete
if (ParagonIE_Sodium_Core_Util::strlen($sKey) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_SECRETKEYBYTES) {
[644] Fix | Delete
throw new RangeException(
[645] Fix | Delete
'Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_SECRETKEYBYTES bytes long.'
[646] Fix | Delete
);
[647] Fix | Delete
}
[648] Fix | Delete
return self::scalarmult_base($sKey);
[649] Fix | Delete
}
[650] Fix | Delete
[651] Fix | Delete
/**
[652] Fix | Delete
* Decrypt a message encrypted with box().
[653] Fix | Delete
*
[654] Fix | Delete
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
[655] Fix | Delete
*
[656] Fix | Delete
* @param string $ciphertext
[657] Fix | Delete
* @param string $nonce
[658] Fix | Delete
* @param string $keypair
[659] Fix | Delete
* @return string
[660] Fix | Delete
* @throws SodiumException
[661] Fix | Delete
* @throws TypeError
[662] Fix | Delete
*/
[663] Fix | Delete
public static function box_open($ciphertext, $nonce, $keypair)
[664] Fix | Delete
{
[665] Fix | Delete
return self::secretbox_open(
[666] Fix | Delete
$ciphertext,
[667] Fix | Delete
$nonce,
[668] Fix | Delete
self::box_beforenm(
[669] Fix | Delete
self::box_secretkey($keypair),
[670] Fix | Delete
self::box_publickey($keypair)
[671] Fix | Delete
)
[672] Fix | Delete
);
[673] Fix | Delete
}
[674] Fix | Delete
[675] Fix | Delete
/**
[676] Fix | Delete
* Calculate a BLAKE2b hash.
[677] Fix | Delete
*
[678] Fix | Delete
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
[679] Fix | Delete
*
[680] Fix | Delete
* @param string $message
[681] Fix | Delete
* @param string|null $key
[682] Fix | Delete
* @param int $outlen
[683] Fix | Delete
* @return string
[684] Fix | Delete
* @throws RangeException
[685] Fix | Delete
* @throws SodiumException
[686] Fix | Delete
* @throws TypeError
[687] Fix | Delete
*/
[688] Fix | Delete
public static function generichash($message, $key = '', $outlen = 32)
[689] Fix | Delete
{
[690] Fix | Delete
// This ensures that ParagonIE_Sodium_Core_BLAKE2b::$iv is initialized
[691] Fix | Delete
ParagonIE_Sodium_Core_BLAKE2b::pseudoConstructor();
[692] Fix | Delete
[693] Fix | Delete
$k = null;
[694] Fix | Delete
if (!empty($key)) {
[695] Fix | Delete
/** @var SplFixedArray $k */
[696] Fix | Delete
$k = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($key);
[697] Fix | Delete
if ($k->count() > ParagonIE_Sodium_Core_BLAKE2b::KEYBYTES) {
[698] Fix | Delete
throw new RangeException('Invalid key size');
[699] Fix | Delete
}
[700] Fix | Delete
}
[701] Fix | Delete
[702] Fix | Delete
/** @var SplFixedArray $in */
[703] Fix | Delete
$in = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($message);
[704] Fix | Delete
[705] Fix | Delete
/** @var SplFixedArray $ctx */
[706] Fix | Delete
$ctx = ParagonIE_Sodium_Core_BLAKE2b::init($k, $outlen);
[707] Fix | Delete
ParagonIE_Sodium_Core_BLAKE2b::update($ctx, $in, $in->count());
[708] Fix | Delete
[709] Fix | Delete
/** @var SplFixedArray $out */
[710] Fix | Delete
$out = new SplFixedArray($outlen);
[711] Fix | Delete
$out = ParagonIE_Sodium_Core_BLAKE2b::finish($ctx, $out);
[712] Fix | Delete
[713] Fix | Delete
/** @var array<int, int> */
[714] Fix | Delete
$outArray = $out->toArray();
[715] Fix | Delete
return ParagonIE_Sodium_Core_Util::intArrayToString($outArray);
[716] Fix | Delete
}
[717] Fix | Delete
[718] Fix | Delete
/**
[719] Fix | Delete
* Finalize a BLAKE2b hashing context, returning the hash.
[720] Fix | Delete
*
[721] Fix | Delete
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
[722] Fix | Delete
*
[723] Fix | Delete
* @param string $ctx
[724] Fix | Delete
* @param int $outlen
[725] Fix | Delete
* @return string
[726] Fix | Delete
* @throws SodiumException
[727] Fix | Delete
* @throws TypeError
[728] Fix | Delete
*/
[729] Fix | Delete
public static function generichash_final($ctx, $outlen = 32)
[730] Fix | Delete
{
[731] Fix | Delete
if (!is_string($ctx)) {
[732] Fix | Delete
throw new TypeError('Context must be a string');
[733] Fix | Delete
}
[734] Fix | Delete
$out = new SplFixedArray($outlen);
[735] Fix | Delete
[736] Fix | Delete
/** @var SplFixedArray $context */
[737] Fix | Delete
$context = ParagonIE_Sodium_Core_BLAKE2b::stringToContext($ctx);
[738] Fix | Delete
[739] Fix | Delete
/** @var SplFixedArray $out */
[740] Fix | Delete
$out = ParagonIE_Sodium_Core_BLAKE2b::finish($context, $out);
[741] Fix | Delete
[742] Fix | Delete
/** @var array<int, int> */
[743] Fix | Delete
$outArray = $out->toArray();
[744] Fix | Delete
return ParagonIE_Sodium_Core_Util::intArrayToString($outArray);
[745] Fix | Delete
}
[746] Fix | Delete
[747] Fix | Delete
/**
[748] Fix | Delete
* Initialize a hashing context for BLAKE2b.
[749] Fix | Delete
*
[750] Fix | Delete
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
[751] Fix | Delete
*
[752] Fix | Delete
* @param string $key
[753] Fix | Delete
* @param int $outputLength
[754] Fix | Delete
* @return string
[755] Fix | Delete
* @throws RangeException
[756] Fix | Delete
* @throws SodiumException
[757] Fix | Delete
* @throws TypeError
[758] Fix | Delete
*/
[759] Fix | Delete
public static function generichash_init($key = '', $outputLength = 32)
[760] Fix | Delete
{
[761] Fix | Delete
// This ensures that ParagonIE_Sodium_Core_BLAKE2b::$iv is initialized
[762] Fix | Delete
ParagonIE_Sodium_Core_BLAKE2b::pseudoConstructor();
[763] Fix | Delete
[764] Fix | Delete
$k = null;
[765] Fix | Delete
if (!empty($key)) {
[766] Fix | Delete
$k = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($key);
[767] Fix | Delete
if ($k->count() > ParagonIE_Sodium_Core_BLAKE2b::KEYBYTES) {
[768] Fix | Delete
throw new RangeException('Invalid key size');
[769] Fix | Delete
}
[770] Fix | Delete
}
[771] Fix | Delete
[772] Fix | Delete
/** @var SplFixedArray $ctx */
[773] Fix | Delete
$ctx = ParagonIE_Sodium_Core_BLAKE2b::init($k, $outputLength);
[774] Fix | Delete
[775] Fix | Delete
return ParagonIE_Sodium_Core_BLAKE2b::contextToString($ctx);
[776] Fix | Delete
}
[777] Fix | Delete
[778] Fix | Delete
/**
[779] Fix | Delete
* Initialize a hashing context for BLAKE2b.
[780] Fix | Delete
*
[781] Fix | Delete
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
[782] Fix | Delete
*
[783] Fix | Delete
* @param string $key
[784] Fix | Delete
* @param int $outputLength
[785] Fix | Delete
* @param string $salt
[786] Fix | Delete
* @param string $personal
[787] Fix | Delete
* @return string
[788] Fix | Delete
* @throws RangeException
[789] Fix | Delete
* @throws SodiumException
[790] Fix | Delete
* @throws TypeError
[791] Fix | Delete
*/
[792] Fix | Delete
public static function generichash_init_salt_personal(
[793] Fix | Delete
$key = '',
[794] Fix | Delete
$outputLength = 32,
[795] Fix | Delete
$salt = '',
[796] Fix | Delete
$personal = ''
[797] Fix | Delete
) {
[798] Fix | Delete
// This ensures that ParagonIE_Sodium_Core_BLAKE2b::$iv is initialized
[799] Fix | Delete
ParagonIE_Sodium_Core_BLAKE2b::pseudoConstructor();
[800] Fix | Delete
[801] Fix | Delete
$k = null;
[802] Fix | Delete
if (!empty($key)) {
[803] Fix | Delete
$k = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($key);
[804] Fix | Delete
if ($k->count() > ParagonIE_Sodium_Core_BLAKE2b::KEYBYTES) {
[805] Fix | Delete
throw new RangeException('Invalid key size');
[806] Fix | Delete
}
[807] Fix | Delete
}
[808] Fix | Delete
if (!empty($salt)) {
[809] Fix | Delete
$s = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($salt);
[810] Fix | Delete
} else {
[811] Fix | Delete
$s = null;
[812] Fix | Delete
}
[813] Fix | Delete
if (!empty($salt)) {
[814] Fix | Delete
$p = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($personal);
[815] Fix | Delete
} else {
[816] Fix | Delete
$p = null;
[817] Fix | Delete
}
[818] Fix | Delete
[819] Fix | Delete
/** @var SplFixedArray $ctx */
[820] Fix | Delete
$ctx = ParagonIE_Sodium_Core_BLAKE2b::init($k, $outputLength, $s, $p);
[821] Fix | Delete
[822] Fix | Delete
return ParagonIE_Sodium_Core_BLAKE2b::contextToString($ctx);
[823] Fix | Delete
}
[824] Fix | Delete
[825] Fix | Delete
/**
[826] Fix | Delete
* Update a hashing context for BLAKE2b with $message
[827] Fix | Delete
*
[828] Fix | Delete
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
[829] Fix | Delete
*
[830] Fix | Delete
* @param string $ctx
[831] Fix | Delete
* @param string $message
[832] Fix | Delete
* @return string
[833] Fix | Delete
* @throws SodiumException
[834] Fix | Delete
* @throws TypeError
[835] Fix | Delete
*/
[836] Fix | Delete
public static function generichash_update($ctx, $message)
[837] Fix | Delete
{
[838] Fix | Delete
// This ensures that ParagonIE_Sodium_Core_BLAKE2b::$iv is initialized
[839] Fix | Delete
ParagonIE_Sodium_Core_BLAKE2b::pseudoConstructor();
[840] Fix | Delete
[841] Fix | Delete
/** @var SplFixedArray $context */
[842] Fix | Delete
$context = ParagonIE_Sodium_Core_BLAKE2b::stringToContext($ctx);
[843] Fix | Delete
[844] Fix | Delete
/** @var SplFixedArray $in */
[845] Fix | Delete
$in = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($message);
[846] Fix | Delete
[847] Fix | Delete
ParagonIE_Sodium_Core_BLAKE2b::update($context, $in, $in->count());
[848] Fix | Delete
[849] Fix | Delete
return ParagonIE_Sodium_Core_BLAKE2b::contextToString($context);
[850] Fix | Delete
}
[851] Fix | Delete
[852] Fix | Delete
/**
[853] Fix | Delete
* Libsodium's crypto_kx().
[854] Fix | Delete
*
[855] Fix | Delete
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
[856] Fix | Delete
*
[857] Fix | Delete
* @param string $my_sk
[858] Fix | Delete
* @param string $their_pk
[859] Fix | Delete
* @param string $client_pk
[860] Fix | Delete
* @param string $server_pk
[861] Fix | Delete
* @return string
[862] Fix | Delete
* @throws SodiumException
[863] Fix | Delete
* @throws TypeError
[864] Fix | Delete
*/
[865] Fix | Delete
public static function keyExchange($my_sk, $their_pk, $client_pk, $server_pk)
[866] Fix | Delete
{
[867] Fix | Delete
return ParagonIE_Sodium_Compat::crypto_generichash(
[868] Fix | Delete
ParagonIE_Sodium_Compat::crypto_scalarmult($my_sk, $their_pk) .
[869] Fix | Delete
$client_pk .
[870] Fix | Delete
$server_pk
[871] Fix | Delete
);
[872] Fix | Delete
}
[873] Fix | Delete
[874] Fix | Delete
/**
[875] Fix | Delete
* ECDH over Curve25519
[876] Fix | Delete
*
[877] Fix | Delete
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
[878] Fix | Delete
*
[879] Fix | Delete
* @param string $sKey
[880] Fix | Delete
* @param string $pKey
[881] Fix | Delete
* @return string
[882] Fix | Delete
*
[883] Fix | Delete
* @throws SodiumException
[884] Fix | Delete
* @throws TypeError
[885] Fix | Delete
*/
[886] Fix | Delete
public static function scalarmult($sKey, $pKey)
[887] Fix | Delete
{
[888] Fix | Delete
$q = ParagonIE_Sodium_Core_X25519::crypto_scalarmult_curve25519_ref10($sKey, $pKey);
[889] Fix | Delete
self::scalarmult_throw_if_zero($q);
[890] Fix | Delete
return $q;
[891] Fix | Delete
}
[892] Fix | Delete
[893] Fix | Delete
/**
[894] Fix | Delete
* ECDH over Curve25519, using the basepoint.
[895] Fix | Delete
* Used to get a secret key from a public key.
[896] Fix | Delete
*
[897] Fix | Delete
* @param string $secret
[898] Fix | Delete
* @return string
[899] Fix | Delete
*
[900] Fix | Delete
* @throws SodiumException
[901] Fix | Delete
* @throws TypeError
[902] Fix | Delete
*/
[903] Fix | Delete
public static function scalarmult_base($secret)
[904] Fix | Delete
{
[905] Fix | Delete
$q = ParagonIE_Sodium_Core_X25519::crypto_scalarmult_curve25519_ref10_base($secret);
[906] Fix | Delete
self::scalarmult_throw_if_zero($q);
[907] Fix | Delete
return $q;
[908] Fix | Delete
}
[909] Fix | Delete
[910] Fix | Delete
/**
[911] Fix | Delete
* This throws an Error if a zero public key was passed to the function.
[912] Fix | Delete
*
[913] Fix | Delete
* @param string $q
[914] Fix | Delete
* @return void
[915] Fix | Delete
* @throws SodiumException
[916] Fix | Delete
* @throws TypeError
[917] Fix | Delete
*/
[918] Fix | Delete
protected static function scalarmult_throw_if_zero($q)
[919] Fix | Delete
{
[920] Fix | Delete
$d = 0;
[921] Fix | Delete
for ($i = 0; $i < self::box_curve25519xsalsa20poly1305_SECRETKEYBYTES; ++$i) {
[922] Fix | Delete
$d |= ParagonIE_Sodium_Core_Util::chrToInt($q[$i]);
[923] Fix | Delete
}
[924] Fix | Delete
[925] Fix | Delete
/* branch-free variant of === 0 */
[926] Fix | Delete
if (-(1 & (($d - 1) >> 8))) {
[927] Fix | Delete
throw new SodiumException('Zero public key is not allowed');
[928] Fix | Delete
}
[929] Fix | Delete
}
[930] Fix | Delete
[931] Fix | Delete
/**
[932] Fix | Delete
* XSalsa20-Poly1305 authenticated symmetric-key encryption.
[933] Fix | Delete
*
[934] Fix | Delete
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
[935] Fix | Delete
*
[936] Fix | Delete
* @param string $plaintext
[937] Fix | Delete
* @param string $nonce
[938] Fix | Delete
* @param string $key
[939] Fix | Delete
* @return string
[940] Fix | Delete
* @throws SodiumException
[941] Fix | Delete
* @throws TypeError
[942] Fix | Delete
*/
[943] Fix | Delete
public static function secretbox($plaintext, $nonce, $key)
[944] Fix | Delete
{
[945] Fix | Delete
/** @var string $subkey */
[946] Fix | Delete
$subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key);
[947] Fix | Delete
[948] Fix | Delete
/** @var string $block0 */
[949] Fix | Delete
$block0 = str_repeat("\x00", 32);
[950] Fix | Delete
[951] Fix | Delete
/** @var int $mlen - Length of the plaintext message */
[952] Fix | Delete
$mlen = ParagonIE_Sodium_Core_Util::strlen($plaintext);
[953] Fix | Delete
$mlen0 = $mlen;
[954] Fix | Delete
if ($mlen0 > 64 - self::secretbox_xsalsa20poly1305_ZEROBYTES) {
[955] Fix | Delete
$mlen0 = 64 - self::secretbox_xsalsa20poly1305_ZEROBYTES;
[956] Fix | Delete
}
[957] Fix | Delete
$block0 .= ParagonIE_Sodium_Core_Util::substr($plaintext, 0, $mlen0);
[958] Fix | Delete
[959] Fix | Delete
/** @var string $block0 */
[960] Fix | Delete
$block0 = ParagonIE_Sodium_Core_Salsa20::salsa20_xor(
[961] Fix | Delete
$block0,
[962] Fix | Delete
ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8),
[963] Fix | Delete
$subkey
[964] Fix | Delete
);
[965] Fix | Delete
[966] Fix | Delete
/** @var string $c */
[967] Fix | Delete
$c = ParagonIE_Sodium_Core_Util::substr(
[968] Fix | Delete
$block0,
[969] Fix | Delete
self::secretbox_xsalsa20poly1305_ZEROBYTES
[970] Fix | Delete
);
[971] Fix | Delete
if ($mlen > $mlen0) {
[972] Fix | Delete
$c .= ParagonIE_Sodium_Core_Salsa20::salsa20_xor_ic(
[973] Fix | Delete
ParagonIE_Sodium_Core_Util::substr(
[974] Fix | Delete
$plaintext,
[975] Fix | Delete
self::secretbox_xsalsa20poly1305_ZEROBYTES
[976] Fix | Delete
),
[977] Fix | Delete
ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8),
[978] Fix | Delete
1,
[979] Fix | Delete
$subkey
[980] Fix | Delete
);
[981] Fix | Delete
}
[982] Fix | Delete
$state = new ParagonIE_Sodium_Core_Poly1305_State(
[983] Fix | Delete
ParagonIE_Sodium_Core_Util::substr(
[984] Fix | Delete
$block0,
[985] Fix | Delete
0,
[986] Fix | Delete
self::onetimeauth_poly1305_KEYBYTES
[987] Fix | Delete
)
[988] Fix | Delete
);
[989] Fix | Delete
try {
[990] Fix | Delete
ParagonIE_Sodium_Compat::memzero($block0);
[991] Fix | Delete
ParagonIE_Sodium_Compat::memzero($subkey);
[992] Fix | Delete
} catch (SodiumException $ex) {
[993] Fix | Delete
$block0 = null;
[994] Fix | Delete
$subkey = null;
[995] Fix | Delete
}
[996] Fix | Delete
[997] Fix | Delete
$state->update($c);
[998] Fix | Delete
[999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function