PHP Classes

File: src/Core/XChaCha20.php

Recommend this page to a friend!
  Classes of Scott Arciszewski   PHP Sodium Compat   src/Core/XChaCha20.php   Download  
File: src/Core/XChaCha20.php
Role: Class source
Content type: text/plain
Description: Class source
Class: PHP Sodium Compat
Cryptographic functions of libsodium in pure PHP
Author: By
Last change: Stricter typing
Clean up code warnings
Set minimum PHP version to 8.1 for v2.x
Merge pull request #91 from szepeviktor/patch-1

WIP: Let's see phpstan in CI
Date: Yesterday
Size: 3,789 bytes
 

Contents

Class file image Download
<?php
declare(strict_types=1);

if (
class_exists('ParagonIE_Sodium_Core_XChaCha20', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_XChaCha20
 */
class ParagonIE_Sodium_Core_XChaCha20 extends ParagonIE_Sodium_Core_HChaCha20
{
   
/**
     * @internal You should not use this directly from another application
     *
     * @param int $len
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
   
public static function stream(
       
int $len = 64,
       
string $nonce = '',
       
#[SensitiveParameter]
       
string $key = ''
   
): string {
        if (
self::strlen($nonce) !== 24) {
            throw new
SodiumException('Nonce must be 24 bytes long');
        }
        return
self::encryptBytes(
            new
ParagonIE_Sodium_Core_ChaCha20_Ctx(
               
self::hChaCha20(
                   
self::substr($nonce, 0, 16),
                   
$key
               
),
               
self::substr($nonce, 16, 8)
            ),
           
str_repeat("\x00", $len)
        );
    }

   
/**
     * @internal You should not use this directly from another application
     *
     * @param int $len
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
   
public static function ietfStream(
       
int $len = 64,
       
string $nonce = '',
       
#[SensitiveParameter]
       
string $key = ''
   
): string {
        if (
self::strlen($nonce) !== 24) {
            throw new
SodiumException('Nonce must be 24 bytes long');
        }
        return
self::encryptBytes(
            new
ParagonIE_Sodium_Core_ChaCha20_IetfCtx(
               
self::hChaCha20(
                   
self::substr($nonce, 0, 16),
                   
$key
               
),
               
"\x00\x00\x00\x00" . self::substr($nonce, 16, 8)
            ),
           
str_repeat("\x00", $len)
        );
    }

   
/**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @param string $ic
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
   
public static function streamXorIc(
       
#[SensitiveParameter]
       
string $message,
       
string $nonce = '',
       
#[SensitiveParameter]
       
string $key = '',
       
string $ic = ''
   
): string {
        if (
self::strlen($nonce) !== 24) {
            throw new
SodiumException('Nonce must be 24 bytes long');
        }
        return
self::encryptBytes(
            new
ParagonIE_Sodium_Core_ChaCha20_Ctx(
               
self::hChaCha20(self::substr($nonce, 0, 16), $key),
               
self::substr($nonce, 16, 8),
               
$ic
           
),
           
$message
       
);
    }

   
/**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @param string $ic
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
   
public static function ietfStreamXorIc(
       
#[SensitiveParameter]
       
string $message,
       
string $nonce = '',
       
string $key = '',
       
string $ic = ''
   
): string {
        if (
self::strlen($nonce) !== 24) {
            throw new
SodiumException('Nonce must be 24 bytes long');
        }
        return
self::encryptBytes(
            new
ParagonIE_Sodium_Core_ChaCha20_IetfCtx(
               
self::hChaCha20(self::substr($nonce, 0, 16), $key),
               
"\x00\x00\x00\x00" . self::substr($nonce, 16, 8),
               
$ic
           
),
           
$message
       
);
    }
}