WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Самая быстрая Тема-конструктор для WordPress
функция не описана

ParagonIE_Sodium_Core32_Curve25519::sc_muladd() public WP 1.0

Calculates (ab + c) mod l where l = 2^252 + 27742317777372353535851937790883648493

{} Это метод класса: ParagonIE_Sodium_Core32_Curve25519{}

Хуков нет.

Возвращает

Строку.

Использование

$result = ParagonIE_Sodium_Core32_Curve25519::sc_muladd( $a, $b, $c );
$a(строка) (обязательный)
$b(строка) (обязательный)
$c(строка) (обязательный)

Код ParagonIE_Sodium_Core32_Curve25519::sc_muladd() WP 5.5.3

<?php
public static function sc_muladd($a, $b, $c)
{
    $a0 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($a, 0, 3)));
    $a1 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($a, 2, 4)) >> 5));
    $a2 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($a, 5, 3)) >> 2));
    $a3 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($a, 7, 4)) >> 7));
    $a4 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($a, 10, 4)) >> 4));
    $a5 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($a, 13, 3)) >> 1));
    $a6 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($a, 15, 4)) >> 6));
    $a7 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($a, 18, 3)) >> 3));
    $a8 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($a, 21, 3)));
    $a9 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($a, 23, 4)) >> 5));
    $a10 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($a, 26, 3)) >> 2));
    $a11 = ParagonIE_Sodium_Core32_Int64::fromInt(0x1fffffff & (self::load_4(self::substr($a, 28, 4)) >> 7));
    $b0 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($b, 0, 3)));
    $b1 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($b, 2, 4)) >> 5));
    $b2 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($b, 5, 3)) >> 2));
    $b3 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($b, 7, 4)) >> 7));
    $b4 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($b, 10, 4)) >> 4));
    $b5 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($b, 13, 3)) >> 1));
    $b6 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($b, 15, 4)) >> 6));
    $b7 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($b, 18, 3)) >> 3));
    $b8 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($b, 21, 3)));
    $b9 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($b, 23, 4)) >> 5));
    $b10 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($b, 26, 3)) >> 2));
    $b11 = ParagonIE_Sodium_Core32_Int64::fromInt(0x1fffffff & (self::load_4(self::substr($b, 28, 4)) >> 7));
    $c0 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($c, 0, 3)));
    $c1 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($c, 2, 4)) >> 5));
    $c2 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($c, 5, 3)) >> 2));
    $c3 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($c, 7, 4)) >> 7));
    $c4 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($c, 10, 4)) >> 4));
    $c5 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($c, 13, 3)) >> 1));
    $c6 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($c, 15, 4)) >> 6));
    $c7 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($c, 18, 3)) >> 3));
    $c8 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($c, 21, 3)));
    $c9 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($c, 23, 4)) >> 5));
    $c10 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($c, 26, 3)) >> 2));
    $c11 = ParagonIE_Sodium_Core32_Int64::fromInt(0x1fffffff & (self::load_4(self::substr($c, 28, 4)) >> 7));

    /* Can't really avoid the pyramid here: */
    /**
     * @var ParagonIE_Sodium_Core32_Int64 $s0
     * @var ParagonIE_Sodium_Core32_Int64 $s1
     * @var ParagonIE_Sodium_Core32_Int64 $s2
     * @var ParagonIE_Sodium_Core32_Int64 $s3
     * @var ParagonIE_Sodium_Core32_Int64 $s4
     * @var ParagonIE_Sodium_Core32_Int64 $s5
     * @var ParagonIE_Sodium_Core32_Int64 $s6
     * @var ParagonIE_Sodium_Core32_Int64 $s7
     * @var ParagonIE_Sodium_Core32_Int64 $s8
     * @var ParagonIE_Sodium_Core32_Int64 $s9
     * @var ParagonIE_Sodium_Core32_Int64 $s10
     * @var ParagonIE_Sodium_Core32_Int64 $s11
     * @var ParagonIE_Sodium_Core32_Int64 $s12
     * @var ParagonIE_Sodium_Core32_Int64 $s13
     * @var ParagonIE_Sodium_Core32_Int64 $s14
     * @var ParagonIE_Sodium_Core32_Int64 $s15
     * @var ParagonIE_Sodium_Core32_Int64 $s16
     * @var ParagonIE_Sodium_Core32_Int64 $s17
     * @var ParagonIE_Sodium_Core32_Int64 $s18
     * @var ParagonIE_Sodium_Core32_Int64 $s19
     * @var ParagonIE_Sodium_Core32_Int64 $s20
     * @var ParagonIE_Sodium_Core32_Int64 $s21
     * @var ParagonIE_Sodium_Core32_Int64 $s22
     * @var ParagonIE_Sodium_Core32_Int64 $s23
     */

    $s0 = $c0->addInt64($a0->mulInt64($b0, 24));
    $s1 = $c1->addInt64($a0->mulInt64($b1, 24))->addInt64($a1->mulInt64($b0, 24));
    $s2 = $c2->addInt64($a0->mulInt64($b2, 24))->addInt64($a1->mulInt64($b1, 24))->addInt64($a2->mulInt64($b0, 24));
    $s3 = $c3->addInt64($a0->mulInt64($b3, 24))->addInt64($a1->mulInt64($b2, 24))->addInt64($a2->mulInt64($b1, 24))
             ->addInt64($a3->mulInt64($b0, 24));
    $s4 = $c4->addInt64($a0->mulInt64($b4, 24))->addInt64($a1->mulInt64($b3, 24))->addInt64($a2->mulInt64($b2, 24))
             ->addInt64($a3->mulInt64($b1, 24))->addInt64($a4->mulInt64($b0, 24));
    $s5 = $c5->addInt64($a0->mulInt64($b5, 24))->addInt64($a1->mulInt64($b4, 24))->addInt64($a2->mulInt64($b3, 24))
             ->addInt64($a3->mulInt64($b2, 24))->addInt64($a4->mulInt64($b1, 24))->addInt64($a5->mulInt64($b0, 24));
    $s6 = $c6->addInt64($a0->mulInt64($b6, 24))->addInt64($a1->mulInt64($b5, 24))->addInt64($a2->mulInt64($b4, 24))
             ->addInt64($a3->mulInt64($b3, 24))->addInt64($a4->mulInt64($b2, 24))->addInt64($a5->mulInt64($b1, 24))
             ->addInt64($a6->mulInt64($b0, 24));
    $s7 = $c7->addInt64($a0->mulInt64($b7, 24))->addInt64($a1->mulInt64($b6, 24))->addInt64($a2->mulInt64($b5, 24))
             ->addInt64($a3->mulInt64($b4, 24))->addInt64($a4->mulInt64($b3, 24))->addInt64($a5->mulInt64($b2, 24))
             ->addInt64($a6->mulInt64($b1, 24))->addInt64($a7->mulInt64($b0, 24));
    $s8 = $c8->addInt64($a0->mulInt64($b8, 24))->addInt64($a1->mulInt64($b7, 24))->addInt64($a2->mulInt64($b6, 24))
             ->addInt64($a3->mulInt64($b5, 24))->addInt64($a4->mulInt64($b4, 24))->addInt64($a5->mulInt64($b3, 24))
             ->addInt64($a6->mulInt64($b2, 24))->addInt64($a7->mulInt64($b1, 24))->addInt64($a8->mulInt64($b0, 24));
    $s9 = $c9->addInt64($a0->mulInt64($b9, 24))->addInt64($a1->mulInt64($b8, 24))->addInt64($a2->mulInt64($b7, 24))
             ->addInt64($a3->mulInt64($b6, 24))->addInt64($a4->mulInt64($b5, 24))->addInt64($a5->mulInt64($b4, 24))
             ->addInt64($a6->mulInt64($b3, 24))->addInt64($a7->mulInt64($b2, 24))->addInt64($a8->mulInt64($b1, 24))
             ->addInt64($a9->mulInt64($b0, 24));
    $s10 = $c10->addInt64($a0->mulInt64($b10, 24))->addInt64($a1->mulInt64($b9, 24))->addInt64($a2->mulInt64($b8, 24))
               ->addInt64($a3->mulInt64($b7, 24))->addInt64($a4->mulInt64($b6, 24))->addInt64($a5->mulInt64($b5, 24))
               ->addInt64($a6->mulInt64($b4, 24))->addInt64($a7->mulInt64($b3, 24))->addInt64($a8->mulInt64($b2, 24))
               ->addInt64($a9->mulInt64($b1, 24))->addInt64($a10->mulInt64($b0, 24));
    $s11 = $c11->addInt64($a0->mulInt64($b11, 24))->addInt64($a1->mulInt64($b10, 24))->addInt64($a2->mulInt64($b9, 24))
               ->addInt64($a3->mulInt64($b8, 24))->addInt64($a4->mulInt64($b7, 24))->addInt64($a5->mulInt64($b6, 24))
               ->addInt64($a6->mulInt64($b5, 24))->addInt64($a7->mulInt64($b4, 24))->addInt64($a8->mulInt64($b3, 24))
               ->addInt64($a9->mulInt64($b2, 24))->addInt64($a10->mulInt64($b1, 24))->addInt64($a11->mulInt64($b0, 24));
    $s12 = $a1->mulInt64($b11, 24)->addInt64($a2->mulInt64($b10, 24))->addInt64($a3->mulInt64($b9, 24))
              ->addInt64($a4->mulInt64($b8, 24))->addInt64($a5->mulInt64($b7, 24))->addInt64($a6->mulInt64($b6, 24))
              ->addInt64($a7->mulInt64($b5, 24))->addInt64($a8->mulInt64($b4, 24))->addInt64($a9->mulInt64($b3, 24))
              ->addInt64($a10->mulInt64($b2, 24))->addInt64($a11->mulInt64($b1, 24));
    $s13 = $a2->mulInt64($b11, 24)->addInt64($a3->mulInt64($b10, 24))->addInt64($a4->mulInt64($b9, 24))
              ->addInt64($a5->mulInt64($b8, 24))->addInt64($a6->mulInt64($b7, 24))->addInt64($a7->mulInt64($b6, 24))
              ->addInt64($a8->mulInt64($b5, 24))->addInt64($a9->mulInt64($b4, 24))->addInt64($a10->mulInt64($b3, 24))
              ->addInt64($a11->mulInt64($b2, 24));
    $s14 = $a3->mulInt64($b11, 24)->addInt64($a4->mulInt64($b10, 24))->addInt64($a5->mulInt64($b9, 24))
              ->addInt64($a6->mulInt64($b8, 24))->addInt64($a7->mulInt64($b7, 24))->addInt64($a8->mulInt64($b6, 24))
              ->addInt64($a9->mulInt64($b5, 24))->addInt64($a10->mulInt64($b4, 24))->addInt64($a11->mulInt64($b3, 24));
    $s15 = $a4->mulInt64($b11, 24)->addInt64($a5->mulInt64($b10, 24))->addInt64($a6->mulInt64($b9, 24))
              ->addInt64($a7->mulInt64($b8, 24))->addInt64($a8->mulInt64($b7, 24))->addInt64($a9->mulInt64($b6, 24))
              ->addInt64($a10->mulInt64($b5, 24))->addInt64($a11->mulInt64($b4, 24));
    $s16 = $a5->mulInt64($b11, 24)->addInt64($a6->mulInt64($b10, 24))->addInt64($a7->mulInt64($b9, 24))
              ->addInt64($a8->mulInt64($b8, 24))->addInt64($a9->mulInt64($b7, 24))->addInt64($a10->mulInt64($b6, 24))
              ->addInt64($a11->mulInt64($b5, 24));
    $s17 = $a6->mulInt64($b11, 24)->addInt64($a7->mulInt64($b10, 24))->addInt64($a8->mulInt64($b9, 24))
              ->addInt64($a9->mulInt64($b8, 24))->addInt64($a10->mulInt64($b7, 24))->addInt64($a11->mulInt64($b6, 24));
    $s18 = $a7->mulInt64($b11, 24)->addInt64($a8->mulInt64($b10, 24))->addInt64($a9->mulInt64($b9, 24))
              ->addInt64($a10->mulInt64($b8, 24))->addInt64($a11->mulInt64($b7, 24));
    $s19 = $a8->mulInt64($b11, 24)->addInt64($a9->mulInt64($b10, 24))->addInt64($a10->mulInt64($b9, 24))
              ->addInt64($a11->mulInt64($b8, 24));
    $s20 = $a9->mulInt64($b11, 24)->addInt64($a10->mulInt64($b10, 24))->addInt64($a11->mulInt64($b9, 24));
    $s21 = $a10->mulInt64($b11, 24)->addInt64($a11->mulInt64($b10, 24));
    $s22 = $a11->mulInt64($b11, 24);
    $s23 = new ParagonIE_Sodium_Core32_Int64();

    $carry0 = $s0->addInt(1 << 20)->shiftRight(21);
    $s1 = $s1->addInt64($carry0);
    $s0 = $s0->subInt64($carry0->shiftLeft(21));
    $carry2 = $s2->addInt(1 << 20)->shiftRight(21);
    $s3 = $s3->addInt64($carry2);
    $s2 = $s2->subInt64($carry2->shiftLeft(21));
    $carry4 = $s4->addInt(1 << 20)->shiftRight(21);
    $s5 = $s5->addInt64($carry4);
    $s4 = $s4->subInt64($carry4->shiftLeft(21));
    $carry6 = $s6->addInt(1 << 20)->shiftRight(21);
    $s7 = $s7->addInt64($carry6);
    $s6 = $s6->subInt64($carry6->shiftLeft(21));
    $carry8 = $s8->addInt(1 << 20)->shiftRight(21);
    $s9 = $s9->addInt64($carry8);
    $s8 = $s8->subInt64($carry8->shiftLeft(21));
    $carry10 = $s10->addInt(1 << 20)->shiftRight(21);
    $s11 = $s11->addInt64($carry10);
    $s10 = $s10->subInt64($carry10->shiftLeft(21));
    $carry12 = $s12->addInt(1 << 20)->shiftRight(21);
    $s13 = $s13->addInt64($carry12);
    $s12 = $s12->subInt64($carry12->shiftLeft(21));
    $carry14 = $s14->addInt(1 << 20)->shiftRight(21);
    $s15 = $s15->addInt64($carry14);
    $s14 = $s14->subInt64($carry14->shiftLeft(21));
    $carry16 = $s16->addInt(1 << 20)->shiftRight(21);
    $s17 = $s17->addInt64($carry16);
    $s16 = $s16->subInt64($carry16->shiftLeft(21));
    $carry18 = $s18->addInt(1 << 20)->shiftRight(21);
    $s19 = $s19->addInt64($carry18);
    $s18 = $s18->subInt64($carry18->shiftLeft(21));
    $carry20 = $s20->addInt(1 << 20)->shiftRight(21);
    $s21 = $s21->addInt64($carry20);
    $s20 = $s20->subInt64($carry20->shiftLeft(21));
    $carry22 = $s22->addInt(1 << 20)->shiftRight(21);
    $s23 = $s23->addInt64($carry22);
    $s22 = $s22->subInt64($carry22->shiftLeft(21));

    $carry1 = $s1->addInt(1 << 20)->shiftRight(21);
    $s2 = $s2->addInt64($carry1);
    $s1 = $s1->subInt64($carry1->shiftLeft(21));
    $carry3 = $s3->addInt(1 << 20)->shiftRight(21);
    $s4 = $s4->addInt64($carry3);
    $s3 = $s3->subInt64($carry3->shiftLeft(21));
    $carry5 = $s5->addInt(1 << 20)->shiftRight(21);
    $s6 = $s6->addInt64($carry5);
    $s5 = $s5->subInt64($carry5->shiftLeft(21));
    $carry7 = $s7->addInt(1 << 20)->shiftRight(21);
    $s8 = $s8->addInt64($carry7);
    $s7 = $s7->subInt64($carry7->shiftLeft(21));
    $carry9 = $s9->addInt(1 << 20)->shiftRight(21);
    $s10 = $s10->addInt64($carry9);
    $s9 = $s9->subInt64($carry9->shiftLeft(21));
    $carry11 = $s11->addInt(1 << 20)->shiftRight(21);
    $s12 = $s12->addInt64($carry11);
    $s11 = $s11->subInt64($carry11->shiftLeft(21));
    $carry13 = $s13->addInt(1 << 20)->shiftRight(21);
    $s14 = $s14->addInt64($carry13);
    $s13 = $s13->subInt64($carry13->shiftLeft(21));
    $carry15 = $s15->addInt(1 << 20)->shiftRight(21);
    $s16 = $s16->addInt64($carry15);
    $s15 = $s15->subInt64($carry15->shiftLeft(21));
    $carry17 = $s17->addInt(1 << 20)->shiftRight(21);
    $s18 = $s18->addInt64($carry17);
    $s17 = $s17->subInt64($carry17->shiftLeft(21));
    $carry19 = $s19->addInt(1 << 20)->shiftRight(21);
    $s20 = $s20->addInt64($carry19);
    $s19 = $s19->subInt64($carry19->shiftLeft(21));
    $carry21 = $s21->addInt(1 << 20)->shiftRight(21);
    $s22 = $s22->addInt64($carry21);
    $s21 = $s21->subInt64($carry21->shiftLeft(21));

    $s11 = $s11->addInt64($s23->mulInt(666643, 20));
    $s12 = $s12->addInt64($s23->mulInt(470296, 19));
    $s13 = $s13->addInt64($s23->mulInt(654183, 20));
    $s14 = $s14->subInt64($s23->mulInt(997805, 20));
    $s15 = $s15->addInt64($s23->mulInt(136657, 18));
    $s16 = $s16->subInt64($s23->mulInt(683901, 20));

    $s10 = $s10->addInt64($s22->mulInt(666643, 20));
    $s11 = $s11->addInt64($s22->mulInt(470296, 19));
    $s12 = $s12->addInt64($s22->mulInt(654183, 20));
    $s13 = $s13->subInt64($s22->mulInt(997805, 20));
    $s14 = $s14->addInt64($s22->mulInt(136657, 18));
    $s15 = $s15->subInt64($s22->mulInt(683901, 20));

    $s9  =  $s9->addInt64($s21->mulInt(666643, 20));
    $s10 = $s10->addInt64($s21->mulInt(470296, 19));
    $s11 = $s11->addInt64($s21->mulInt(654183, 20));
    $s12 = $s12->subInt64($s21->mulInt(997805, 20));
    $s13 = $s13->addInt64($s21->mulInt(136657, 18));
    $s14 = $s14->subInt64($s21->mulInt(683901, 20));

    $s8  =  $s8->addInt64($s20->mulInt(666643, 20));
    $s9  =  $s9->addInt64($s20->mulInt(470296, 19));
    $s10 = $s10->addInt64($s20->mulInt(654183, 20));
    $s11 = $s11->subInt64($s20->mulInt(997805, 20));
    $s12 = $s12->addInt64($s20->mulInt(136657, 18));
    $s13 = $s13->subInt64($s20->mulInt(683901, 20));

    $s7  =  $s7->addInt64($s19->mulInt(666643, 20));
    $s8  =  $s8->addInt64($s19->mulInt(470296, 19));
    $s9  =  $s9->addInt64($s19->mulInt(654183, 20));
    $s10 = $s10->subInt64($s19->mulInt(997805, 20));
    $s11 = $s11->addInt64($s19->mulInt(136657, 18));
    $s12 = $s12->subInt64($s19->mulInt(683901, 20));

    $s6  =  $s6->addInt64($s18->mulInt(666643, 20));
    $s7  =  $s7->addInt64($s18->mulInt(470296, 19));
    $s8  =  $s8->addInt64($s18->mulInt(654183, 20));
    $s9  =  $s9->subInt64($s18->mulInt(997805, 20));
    $s10 = $s10->addInt64($s18->mulInt(136657, 18));
    $s11 = $s11->subInt64($s18->mulInt(683901, 20));

    $carry6 = $s6->addInt(1 << 20)->shiftRight(21);
    $s7 = $s7->addInt64($carry6);
    $s6 = $s6->subInt64($carry6->shiftLeft(21));
    $carry8 = $s8->addInt(1 << 20)->shiftRight(21);
    $s9 = $s9->addInt64($carry8);
    $s8 = $s8->subInt64($carry8->shiftLeft(21));
    $carry10 = $s10->addInt(1 << 20)->shiftRight(21);
    $s11 = $s11->addInt64($carry10);
    $s10 = $s10->subInt64($carry10->shiftLeft(21));
    $carry12 = $s12->addInt(1 << 20)->shiftRight(21);
    $s13 = $s13->addInt64($carry12);
    $s12 = $s12->subInt64($carry12->shiftLeft(21));
    $carry14 = $s14->addInt(1 << 20)->shiftRight(21);
    $s15 = $s15->addInt64($carry14);
    $s14 = $s14->subInt64($carry14->shiftLeft(21));
    $carry16 = $s16->addInt(1 << 20)->shiftRight(21);
    $s17 = $s17->addInt64($carry16);
    $s16 = $s16->subInt64($carry16->shiftLeft(21));

    $carry7 = $s7->addInt(1 << 20)->shiftRight(21);
    $s8 = $s8->addInt64($carry7);
    $s7 = $s7->subInt64($carry7->shiftLeft(21));
    $carry9 = $s9->addInt(1 << 20)->shiftRight(21);
    $s10 = $s10->addInt64($carry9);
    $s9 = $s9->subInt64($carry9->shiftLeft(21));
    $carry11 = $s11->addInt(1 << 20)->shiftRight(21);
    $s12 = $s12->addInt64($carry11);
    $s11 = $s11->subInt64($carry11->shiftLeft(21));
    $carry13 = $s13->addInt(1 << 20)->shiftRight(21);
    $s14 = $s14->addInt64($carry13);
    $s13 = $s13->subInt64($carry13->shiftLeft(21));
    $carry15 = $s15->addInt(1 << 20)->shiftRight(21);
    $s16 = $s16->addInt64($carry15);
    $s15 = $s15->subInt64($carry15->shiftLeft(21));

    $s5  =  $s5->addInt64($s17->mulInt(666643, 20));
    $s6  =  $s6->addInt64($s17->mulInt(470296, 19));
    $s7  =  $s7->addInt64($s17->mulInt(654183, 20));
    $s8  =  $s8->subInt64($s17->mulInt(997805, 20));
    $s9  =  $s9->addInt64($s17->mulInt(136657, 18));
    $s10 = $s10->subInt64($s17->mulInt(683901, 20));

    $s4  =  $s4->addInt64($s16->mulInt(666643, 20));
    $s5  =  $s5->addInt64($s16->mulInt(470296, 19));
    $s6  =  $s6->addInt64($s16->mulInt(654183, 20));
    $s7  =  $s7->subInt64($s16->mulInt(997805, 20));
    $s8  =  $s8->addInt64($s16->mulInt(136657, 18));
    $s9  =  $s9->subInt64($s16->mulInt(683901, 20));

    $s3  =  $s3->addInt64($s15->mulInt(666643, 20));
    $s4  =  $s4->addInt64($s15->mulInt(470296, 19));
    $s5  =  $s5->addInt64($s15->mulInt(654183, 20));
    $s6  =  $s6->subInt64($s15->mulInt(997805, 20));
    $s7  =  $s7->addInt64($s15->mulInt(136657, 18));
    $s8  =  $s8->subInt64($s15->mulInt(683901, 20));

    $s2  =  $s2->addInt64($s14->mulInt(666643, 20));
    $s3  =  $s3->addInt64($s14->mulInt(470296, 19));
    $s4  =  $s4->addInt64($s14->mulInt(654183, 20));
    $s5  =  $s5->subInt64($s14->mulInt(997805, 20));
    $s6  =  $s6->addInt64($s14->mulInt(136657, 18));
    $s7  =  $s7->subInt64($s14->mulInt(683901, 20));

    $s1  =  $s1->addInt64($s13->mulInt(666643, 20));
    $s2  =  $s2->addInt64($s13->mulInt(470296, 19));
    $s3  =  $s3->addInt64($s13->mulInt(654183, 20));
    $s4  =  $s4->subInt64($s13->mulInt(997805, 20));
    $s5  =  $s5->addInt64($s13->mulInt(136657, 18));
    $s6  =  $s6->subInt64($s13->mulInt(683901, 20));

    $s0  =  $s0->addInt64($s12->mulInt(666643, 20));
    $s1  =  $s1->addInt64($s12->mulInt(470296, 19));
    $s2  =  $s2->addInt64($s12->mulInt(654183, 20));
    $s3  =  $s3->subInt64($s12->mulInt(997805, 20));
    $s4  =  $s4->addInt64($s12->mulInt(136657, 18));
    $s5  =  $s5->subInt64($s12->mulInt(683901, 20));
    $s12 = new ParagonIE_Sodium_Core32_Int64();

    $carry0 = $s0->addInt(1 << 20)->shiftRight(21);
    $s1 = $s1->addInt64($carry0);
    $s0 = $s0->subInt64($carry0->shiftLeft(21));
    $carry2 = $s2->addInt(1 << 20)->shiftRight(21);
    $s3 = $s3->addInt64($carry2);
    $s2 = $s2->subInt64($carry2->shiftLeft(21));
    $carry4 = $s4->addInt(1 << 20)->shiftRight(21);
    $s5 = $s5->addInt64($carry4);
    $s4 = $s4->subInt64($carry4->shiftLeft(21));
    $carry6 = $s6->addInt(1 << 20)->shiftRight(21);
    $s7 = $s7->addInt64($carry6);
    $s6 = $s6->subInt64($carry6->shiftLeft(21));
    $carry8 = $s8->addInt(1 << 20)->shiftRight(21);
    $s9 = $s9->addInt64($carry8);
    $s8 = $s8->subInt64($carry8->shiftLeft(21));
    $carry10 = $s10->addInt(1 << 20)->shiftRight(21);
    $s11 = $s11->addInt64($carry10);
    $s10 = $s10->subInt64($carry10->shiftLeft(21));

    $carry1 = $s1->addInt(1 << 20)->shiftRight(21);
    $s2 = $s2->addInt64($carry1);
    $s1 = $s1->subInt64($carry1->shiftLeft(21));
    $carry3 = $s3->addInt(1 << 20)->shiftRight(21);
    $s4 = $s4->addInt64($carry3);
    $s3 = $s3->subInt64($carry3->shiftLeft(21));
    $carry5 = $s5->addInt(1 << 20)->shiftRight(21);
    $s6 = $s6->addInt64($carry5);
    $s5 = $s5->subInt64($carry5->shiftLeft(21));
    $carry7 = $s7->addInt(1 << 20)->shiftRight(21);
    $s8 = $s8->addInt64($carry7);
    $s7 = $s7->subInt64($carry7->shiftLeft(21));
    $carry9 = $s9->addInt(1 << 20)->shiftRight(21);
    $s10 = $s10->addInt64($carry9);
    $s9 = $s9->subInt64($carry9->shiftLeft(21));
    $carry11 = $s11->addInt(1 << 20)->shiftRight(21);
    $s12 = $s12->addInt64($carry11);
    $s11 = $s11->subInt64($carry11->shiftLeft(21));

    $s0  =  $s0->addInt64($s12->mulInt(666643, 20));
    $s1  =  $s1->addInt64($s12->mulInt(470296, 19));
    $s2  =  $s2->addInt64($s12->mulInt(654183, 20));
    $s3  =  $s3->subInt64($s12->mulInt(997805, 20));
    $s4  =  $s4->addInt64($s12->mulInt(136657, 18));
    $s5  =  $s5->subInt64($s12->mulInt(683901, 20));
    $s12 = new ParagonIE_Sodium_Core32_Int64();

    $carry0 = $s0->shiftRight(21);
    $s1 = $s1->addInt64($carry0);
    $s0 = $s0->subInt64($carry0->shiftLeft(21));
    $carry1 = $s1->shiftRight(21);
    $s2 = $s2->addInt64($carry1);
    $s1 = $s1->subInt64($carry1->shiftLeft(21));
    $carry2 = $s2->shiftRight(21);
    $s3 = $s3->addInt64($carry2);
    $s2 = $s2->subInt64($carry2->shiftLeft(21));
    $carry3 = $s3->shiftRight(21);
    $s4 = $s4->addInt64($carry3);
    $s3 = $s3->subInt64($carry3->shiftLeft(21));
    $carry4 = $s4->shiftRight(21);
    $s5 = $s5->addInt64($carry4);
    $s4 = $s4->subInt64($carry4->shiftLeft(21));
    $carry5 = $s5->shiftRight(21);
    $s6 = $s6->addInt64($carry5);
    $s5 = $s5->subInt64($carry5->shiftLeft(21));
    $carry6 = $s6->shiftRight(21);
    $s7 = $s7->addInt64($carry6);
    $s6 = $s6->subInt64($carry6->shiftLeft(21));
    $carry7 = $s7->shiftRight(21);
    $s8 = $s8->addInt64($carry7);
    $s7 = $s7->subInt64($carry7->shiftLeft(21));
    $carry8 = $s8->shiftRight(21);
    $s9 = $s9->addInt64($carry8);
    $s8 = $s8->subInt64($carry8->shiftLeft(21));
    $carry9 = $s9->shiftRight(21);
    $s10 = $s10->addInt64($carry9);
    $s9 = $s9->subInt64($carry9->shiftLeft(21));
    $carry10 = $s10->shiftRight(21);
    $s11 = $s11->addInt64($carry10);
    $s10 = $s10->subInt64($carry10->shiftLeft(21));
    $carry11 = $s11->shiftRight(21);
    $s12 = $s12->addInt64($carry11);
    $s11 = $s11->subInt64($carry11->shiftLeft(21));

    $s0  =  $s0->addInt64($s12->mulInt(666643, 20));
    $s1  =  $s1->addInt64($s12->mulInt(470296, 19));
    $s2  =  $s2->addInt64($s12->mulInt(654183, 20));
    $s3  =  $s3->subInt64($s12->mulInt(997805, 20));
    $s4  =  $s4->addInt64($s12->mulInt(136657, 18));
    $s5  =  $s5->subInt64($s12->mulInt(683901, 20));

    $carry0 = $s0->shiftRight(21);
    $s1 = $s1->addInt64($carry0);
    $s0 = $s0->subInt64($carry0->shiftLeft(21));
    $carry1 = $s1->shiftRight(21);
    $s2 = $s2->addInt64($carry1);
    $s1 = $s1->subInt64($carry1->shiftLeft(21));
    $carry2 = $s2->shiftRight(21);
    $s3 = $s3->addInt64($carry2);
    $s2 = $s2->subInt64($carry2->shiftLeft(21));
    $carry3 = $s3->shiftRight(21);
    $s4 = $s4->addInt64($carry3);
    $s3 = $s3->subInt64($carry3->shiftLeft(21));
    $carry4 = $s4->shiftRight(21);
    $s5 = $s5->addInt64($carry4);
    $s4 = $s4->subInt64($carry4->shiftLeft(21));
    $carry5 = $s5->shiftRight(21);
    $s6 = $s6->addInt64($carry5);
    $s5 = $s5->subInt64($carry5->shiftLeft(21));
    $carry6 = $s6->shiftRight(21);
    $s7 = $s7->addInt64($carry6);
    $s6 = $s6->subInt64($carry6->shiftLeft(21));
    $carry7 = $s7->shiftRight(21);
    $s8 = $s8->addInt64($carry7);
    $s7 = $s7->subInt64($carry7->shiftLeft(21));
    $carry8 = $s10->shiftRight(21);
    $s9 = $s9->addInt64($carry8);
    $s8 = $s8->subInt64($carry8->shiftLeft(21));
    $carry9 = $s9->shiftRight(21);
    $s10 = $s10->addInt64($carry9);
    $s9 = $s9->subInt64($carry9->shiftLeft(21));
    $carry10 = $s10->shiftRight(21);
    $s11 = $s11->addInt64($carry10);
    $s10 = $s10->subInt64($carry10->shiftLeft(21));

    $S0  =  $s0->toInt();
    $S1  =  $s1->toInt();
    $S2  =  $s2->toInt();
    $S3  =  $s3->toInt();
    $S4  =  $s4->toInt();
    $S5  =  $s5->toInt();
    $S6  =  $s6->toInt();
    $S7  =  $s7->toInt();
    $S8  =  $s8->toInt();
    $S9  =  $s9->toInt();
    $S10 = $s10->toInt();
    $S11 = $s11->toInt();

    /**
     * @var array<int, int>
     */
    $arr = array(
        (int) (0xff & ($S0 >> 0)),
        (int) (0xff & ($S0 >> 8)),
        (int) (0xff & (($S0 >> 16) | ($S1 << 5))),
        (int) (0xff & ($S1 >> 3)),
        (int) (0xff & ($S1 >> 11)),
        (int) (0xff & (($S1 >> 19) | ($S2 << 2))),
        (int) (0xff & ($S2 >> 6)),
        (int) (0xff & (($S2 >> 14) | ($S3 << 7))),
        (int) (0xff & ($S3 >> 1)),
        (int) (0xff & ($S3 >> 9)),
        (int) (0xff & (($S3 >> 17) | ($S4 << 4))),
        (int) (0xff & ($S4 >> 4)),
        (int) (0xff & ($S4 >> 12)),
        (int) (0xff & (($S4 >> 20) | ($S5 << 1))),
        (int) (0xff & ($S5 >> 7)),
        (int) (0xff & (($S5 >> 15) | ($S6 << 6))),
        (int) (0xff & ($S6 >> 2)),
        (int) (0xff & ($S6 >> 10)),
        (int) (0xff & (($S6 >> 18) | ($S7 << 3))),
        (int) (0xff & ($S7 >> 5)),
        (int) (0xff & ($S7 >> 13)),
        (int) (0xff & ($S8 >> 0)),
        (int) (0xff & ($S8 >> 8)),
        (int) (0xff & (($S8 >> 16) | ($S9 << 5))),
        (int) (0xff & ($S9 >> 3)),
        (int) (0xff & ($S9 >> 11)),
        (int) (0xff & (($S9 >> 19) | ($S10 << 2))),
        (int) (0xff & ($S10 >> 6)),
        (int) (0xff & (($S10 >> 14) | ($S11 << 7))),
        (int) (0xff & ($S11 >> 1)),
        (int) (0xff & ($S11 >> 9)),
        (int) (0xff & ($S11 >> 17))
    );
    return self::intArrayToString($arr);
}