|
1 <?php |
|
2 |
|
3 if (class_exists('ParagonIE_Sodium_Core32_XChaCha20', false)) { |
|
4 return; |
|
5 } |
|
6 |
|
7 /** |
|
8 * Class ParagonIE_Sodium_Core32_XChaCha20 |
|
9 */ |
|
10 class ParagonIE_Sodium_Core32_XChaCha20 extends ParagonIE_Sodium_Core32_HChaCha20 |
|
11 { |
|
12 /** |
|
13 * @internal You should not use this directly from another application |
|
14 * |
|
15 * @param int $len |
|
16 * @param string $nonce |
|
17 * @param string $key |
|
18 * @return string |
|
19 * @throws SodiumException |
|
20 * @throws TypeError |
|
21 */ |
|
22 public static function stream($len = 64, $nonce = '', $key = '') |
|
23 { |
|
24 if (self::strlen($nonce) !== 24) { |
|
25 throw new SodiumException('Nonce must be 24 bytes long'); |
|
26 } |
|
27 return self::encryptBytes( |
|
28 new ParagonIE_Sodium_Core32_ChaCha20_Ctx( |
|
29 self::hChaCha20( |
|
30 self::substr($nonce, 0, 16), |
|
31 $key |
|
32 ), |
|
33 self::substr($nonce, 16, 8) |
|
34 ), |
|
35 str_repeat("\x00", $len) |
|
36 ); |
|
37 } |
|
38 |
|
39 /** |
|
40 * @internal You should not use this directly from another application |
|
41 * |
|
42 * @param string $message |
|
43 * @param string $nonce |
|
44 * @param string $key |
|
45 * @param string $ic |
|
46 * @return string |
|
47 * @throws SodiumException |
|
48 * @throws TypeError |
|
49 */ |
|
50 public static function streamXorIc($message, $nonce = '', $key = '', $ic = '') |
|
51 { |
|
52 if (self::strlen($nonce) !== 24) { |
|
53 throw new SodiumException('Nonce must be 24 bytes long'); |
|
54 } |
|
55 return self::encryptBytes( |
|
56 new ParagonIE_Sodium_Core32_ChaCha20_Ctx( |
|
57 self::hChaCha20(self::substr($nonce, 0, 16), $key), |
|
58 self::substr($nonce, 16, 8), |
|
59 $ic |
|
60 ), |
|
61 $message |
|
62 ); |
|
63 } |
|
64 } |