You are here

public static function ParagonIE_Sodium_Core32_Curve25519::sc_reduce in Automatic Updates 8

Same name and namespace in other branches
  1. 7 vendor/paragonie/sodium_compat/src/Core32/Curve25519.php \ParagonIE_Sodium_Core32_Curve25519::sc_reduce()

@internal You should not use this directly from another application

Parameters

string $s:

Return value

string

Throws

SodiumException

TypeError

2 calls to ParagonIE_Sodium_Core32_Curve25519::sc_reduce()
ParagonIE_Sodium_Core32_Ed25519::sign_detached in vendor/paragonie/sodium_compat/src/Core32/Ed25519.php
@internal You should not use this directly from another application
ParagonIE_Sodium_Core32_Ed25519::verify_detached in vendor/paragonie/sodium_compat/src/Core32/Ed25519.php
@internal You should not use this directly from another application

File

vendor/paragonie/sodium_compat/src/Core32/Curve25519.php, line 2784

Class

ParagonIE_Sodium_Core32_Curve25519
Class ParagonIE_Sodium_Core32_Curve25519

Code

public static function sc_reduce($s) {

  /**
   * @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 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 0, 3)));
  $s1 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_4(self::substr($s, 2, 4)) >> 5);
  $s2 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 5, 3)) >> 2);
  $s3 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_4(self::substr($s, 7, 4)) >> 7);
  $s4 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_4(self::substr($s, 10, 4)) >> 4);
  $s5 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 13, 3)) >> 1);
  $s6 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_4(self::substr($s, 15, 4)) >> 6);
  $s7 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 18, 4)) >> 3);
  $s8 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 21, 3)));
  $s9 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_4(self::substr($s, 23, 4)) >> 5);
  $s10 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 26, 3)) >> 2);
  $s11 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_4(self::substr($s, 28, 4)) >> 7);
  $s12 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_4(self::substr($s, 31, 4)) >> 4);
  $s13 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 34, 3)) >> 1);
  $s14 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_4(self::substr($s, 36, 4)) >> 6);
  $s15 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 39, 4)) >> 3);
  $s16 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 42, 3)));
  $s17 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_4(self::substr($s, 44, 4)) >> 5);
  $s18 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 47, 3)) >> 2);
  $s19 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_4(self::substr($s, 49, 4)) >> 7);
  $s20 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_4(self::substr($s, 52, 4)) >> 4);
  $s21 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 55, 3)) >> 1);
  $s22 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_4(self::substr($s, 57, 4)) >> 6);
  $s23 = ParagonIE_Sodium_Core32_Int64::fromInt(0x1fffffff & self::load_4(self::substr($s, 60, 4)) >> 3);
  $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 = $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));
  $S0 = $s0
    ->toInt32()
    ->toInt();
  $S1 = $s1
    ->toInt32()
    ->toInt();
  $S2 = $s2
    ->toInt32()
    ->toInt();
  $S3 = $s3
    ->toInt32()
    ->toInt();
  $S4 = $s4
    ->toInt32()
    ->toInt();
  $S5 = $s5
    ->toInt32()
    ->toInt();
  $S6 = $s6
    ->toInt32()
    ->toInt();
  $S7 = $s7
    ->toInt32()
    ->toInt();
  $S8 = $s8
    ->toInt32()
    ->toInt();
  $S9 = $s9
    ->toInt32()
    ->toInt();
  $S10 = $s10
    ->toInt32()
    ->toInt();
  $S11 = $s11
    ->toInt32()
    ->toInt();

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