public function __construct($key = '',
$iv = '',
$counter = ''
) { if (self::
strlen($key) !== 32
) { throw new InvalidArgumentException('ChaCha20 expects a 256-bit key.'
);
} if (self::
strlen($iv) !== 8
) { throw new InvalidArgumentException('ChaCha20 expects a 64-bit nonce.'
);
} $this->container =
new SplFixedArray(16
);
/* "expand 32-byte k" as per ChaCha20 spec */
$this->container
[0
] =
new ParagonIE_Sodium_Core32_Int32(array
(0x6170, 0x7865
));
$this->container
[1
] =
new ParagonIE_Sodium_Core32_Int32(array
(0x3320, 0x646e
));
$this->container
[2
] =
new ParagonIE_Sodium_Core32_Int32(array
(0x7962, 0x2d32
));
$this->container
[3
] =
new ParagonIE_Sodium_Core32_Int32(array
(0x6b20, 0x6574
));
$this->container
[4
] = ParagonIE_Sodium_Core32_Int32::
fromReverseString(self::
substr($key, 0, 4
));
$this->container
[5
] = ParagonIE_Sodium_Core32_Int32::
fromReverseString(self::
substr($key, 4, 4
));
$this->container
[6
] = ParagonIE_Sodium_Core32_Int32::
fromReverseString(self::
substr($key, 8, 4
));
$this->container
[7
] = ParagonIE_Sodium_Core32_Int32::
fromReverseString(self::
substr($key, 12, 4
));
$this->container
[8
] = ParagonIE_Sodium_Core32_Int32::
fromReverseString(self::
substr($key, 16, 4
));
$this->container
[9
] = ParagonIE_Sodium_Core32_Int32::
fromReverseString(self::
substr($key, 20, 4
));
$this->container
[10
] = ParagonIE_Sodium_Core32_Int32::
fromReverseString(self::
substr($key, 24, 4
));