/var/www/hkosl.com/aga/wp-includes/sodium_compat/src/Core/HSalsa20.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php

if (class_exists('ParagonIE_Sodium_Core_HSalsa20'false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_HSalsa20
 */
abstract class ParagonIE_Sodium_Core_HSalsa20 extends ParagonIE_Sodium_Core_Salsa20
{
    
/**
     * Calculate an hsalsa20 hash of a single block
     *
     * HSalsa20 doesn't have a counter and will never be used for more than
     * one block (used to derive a subkey for xsalsa20).
     *
     * @internal You should not use this directly from another application
     *
     * @param string $in
     * @param string $k
     * @param string|null $c
     * @return string
     * @throws TypeError
     */
    
public static function hsalsa20($in$k$c null)
    {
        if (
$c === null) {
            
$x0  0x61707865;
            
$x5  0x3320646e;
            
$x10 0x79622d32;
            
$x15 0x6b206574;
        } else {
            
$x0  self::load_4(self::substr($c04));
            
$x5  self::load_4(self::substr($c44));
            
$x10 self::load_4(self::substr($c84));
            
$x15 self::load_4(self::substr($c124));
        }
        
$x1  self::load_4(self::substr($k04));
        
$x2  self::load_4(self::substr($k44));
        
$x3  self::load_4(self::substr($k84));
        
$x4  self::load_4(self::substr($k124));
        
$x11 self::load_4(self::substr($k164));
        
$x12 self::load_4(self::substr($k204));
        
$x13 self::load_4(self::substr($k244));
        
$x14 self::load_4(self::substr($k284));
        
$x6  self::load_4(self::substr($in04));
        
$x7  self::load_4(self::substr($in44));
        
$x8  self::load_4(self::substr($in84));
        
$x9  self::load_4(self::substr($in124));

        for (
$i self::ROUNDS$i 0$i -= 2) {
            
$x4 ^= self::rotate($x0 $x127);
            
$x8 ^= self::rotate($x4 $x09);
            
$x12 ^= self::rotate($x8 $x413);
            
$x0 ^= self::rotate($x12 $x818);
            
$x9 ^= self::rotate($x5 $x17);
            
$x13 ^= self::rotate($x9 $x59);
            
$x1 ^= self::rotate($x13 $x913);
            
$x5 ^= self::rotate($x1 $x1318);
            
$x14 ^= self::rotate($x10 $x67);
            
$x2 ^= self::rotate($x14 $x109);
            
$x6 ^= self::rotate($x2 $x1413);
            
$x10 ^= self::rotate($x6 $x218);
            
$x3 ^= self::rotate($x15 $x117);
            
$x7 ^= self::rotate($x3 $x159);
            
$x11 ^= self::rotate($x7 $x313);
            
$x15 ^= self::rotate($x11 $x718);
            
$x1 ^= self::rotate($x0 $x37);
            
$x2 ^= self::rotate($x1 $x09);
            
$x3 ^= self::rotate($x2 $x113);
            
$x0 ^= self::rotate($x3 $x218);
            
$x6 ^= self::rotate($x5 $x47);
            
$x7 ^= self::rotate($x6 $x59);
            
$x4 ^= self::rotate($x7 $x613);
            
$x5 ^= self::rotate($x4 $x718);
            
$x11 ^= self::rotate($x10 $x97);
            
$x8 ^= self::rotate($x11 $x109);
            
$x9 ^= self::rotate($x8 $x1113);
            
$x10 ^= self::rotate($x9 $x818);
            
$x12 ^= self::rotate($x15 $x147);
            
$x13 ^= self::rotate($x12 $x159);
            
$x14 ^= self::rotate($x13 $x1213);
            
$x15 ^= self::rotate($x14 $x1318);
        }

        return 
self::store32_le($x0) .
            
self::store32_le($x5) .
            
self::store32_le($x10) .
            
self::store32_le($x15) .
            
self::store32_le($x6) .
            
self::store32_le($x7) .
            
self::store32_le($x8) .
            
self::store32_le($x9);
    }
}