You are here

public static function ParagonIE_Sodium_Core32_Curve25519::fe_sq2 in Automatic Updates 7

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

Square and double a field element

h = 2 * f * f

@internal You should not use this directly from another application

@psalm-suppress MixedMethodCall

Parameters

ParagonIE_Sodium_Core32_Curve25519_Fe $f:

Return value

ParagonIE_Sodium_Core32_Curve25519_Fe

Throws

SodiumException

TypeError

1 call to ParagonIE_Sodium_Core32_Curve25519::fe_sq2()
ParagonIE_Sodium_Core32_Curve25519::ge_p2_dbl in vendor/paragonie/sodium_compat/src/Core32/Curve25519.php
@internal You should not use this directly from another application

File

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

Class

ParagonIE_Sodium_Core32_Curve25519
Class ParagonIE_Sodium_Core32_Curve25519

Code

public static function fe_sq2(ParagonIE_Sodium_Core32_Curve25519_Fe $f) {

  /** @var ParagonIE_Sodium_Core32_Int64 $f0 */
  $f0 = $f[0]
    ->toInt64();

  /** @var ParagonIE_Sodium_Core32_Int64 $f1 */
  $f1 = $f[1]
    ->toInt64();

  /** @var ParagonIE_Sodium_Core32_Int64 $f2 */
  $f2 = $f[2]
    ->toInt64();

  /** @var ParagonIE_Sodium_Core32_Int64 $f3 */
  $f3 = $f[3]
    ->toInt64();

  /** @var ParagonIE_Sodium_Core32_Int64 $f4 */
  $f4 = $f[4]
    ->toInt64();

  /** @var ParagonIE_Sodium_Core32_Int64 $f5 */
  $f5 = $f[5]
    ->toInt64();

  /** @var ParagonIE_Sodium_Core32_Int64 $f6 */
  $f6 = $f[6]
    ->toInt64();

  /** @var ParagonIE_Sodium_Core32_Int64 $f7 */
  $f7 = $f[7]
    ->toInt64();

  /** @var ParagonIE_Sodium_Core32_Int64 $f8 */
  $f8 = $f[8]
    ->toInt64();

  /** @var ParagonIE_Sodium_Core32_Int64 $f9 */
  $f9 = $f[9]
    ->toInt64();
  $f0_2 = $f0
    ->shiftLeft(1);
  $f1_2 = $f1
    ->shiftLeft(1);
  $f2_2 = $f2
    ->shiftLeft(1);
  $f3_2 = $f3
    ->shiftLeft(1);
  $f4_2 = $f4
    ->shiftLeft(1);
  $f5_2 = $f5
    ->shiftLeft(1);
  $f6_2 = $f6
    ->shiftLeft(1);
  $f7_2 = $f7
    ->shiftLeft(1);
  $f5_38 = $f5
    ->mulInt(38, 6);

  /* 1.959375*2^30 */
  $f6_19 = $f6
    ->mulInt(19, 5);

  /* 1.959375*2^30 */
  $f7_38 = $f7
    ->mulInt(38, 6);

  /* 1.959375*2^30 */
  $f8_19 = $f8
    ->mulInt(19, 5);

  /* 1.959375*2^30 */
  $f9_38 = $f9
    ->mulInt(38, 6);

  /* 1.959375*2^30 */
  $f0f0 = $f0
    ->mulInt64($f0, 28);
  $f0f1_2 = $f0_2
    ->mulInt64($f1, 28);
  $f0f2_2 = $f0_2
    ->mulInt64($f2, 28);
  $f0f3_2 = $f0_2
    ->mulInt64($f3, 28);
  $f0f4_2 = $f0_2
    ->mulInt64($f4, 28);
  $f0f5_2 = $f0_2
    ->mulInt64($f5, 28);
  $f0f6_2 = $f0_2
    ->mulInt64($f6, 28);
  $f0f7_2 = $f0_2
    ->mulInt64($f7, 28);
  $f0f8_2 = $f0_2
    ->mulInt64($f8, 28);
  $f0f9_2 = $f0_2
    ->mulInt64($f9, 28);
  $f1f1_2 = $f1_2
    ->mulInt64($f1, 28);
  $f1f2_2 = $f1_2
    ->mulInt64($f2, 28);
  $f1f3_4 = $f1_2
    ->mulInt64($f3_2, 29);
  $f1f4_2 = $f1_2
    ->mulInt64($f4, 28);
  $f1f5_4 = $f1_2
    ->mulInt64($f5_2, 29);
  $f1f6_2 = $f1_2
    ->mulInt64($f6, 28);
  $f1f7_4 = $f1_2
    ->mulInt64($f7_2, 29);
  $f1f8_2 = $f1_2
    ->mulInt64($f8, 28);
  $f1f9_76 = $f9_38
    ->mulInt64($f1_2, 29);
  $f2f2 = $f2
    ->mulInt64($f2, 28);
  $f2f3_2 = $f2_2
    ->mulInt64($f3, 28);
  $f2f4_2 = $f2_2
    ->mulInt64($f4, 28);
  $f2f5_2 = $f2_2
    ->mulInt64($f5, 28);
  $f2f6_2 = $f2_2
    ->mulInt64($f6, 28);
  $f2f7_2 = $f2_2
    ->mulInt64($f7, 28);
  $f2f8_38 = $f8_19
    ->mulInt64($f2_2, 29);
  $f2f9_38 = $f9_38
    ->mulInt64($f2, 29);
  $f3f3_2 = $f3_2
    ->mulInt64($f3, 28);
  $f3f4_2 = $f3_2
    ->mulInt64($f4, 28);
  $f3f5_4 = $f3_2
    ->mulInt64($f5_2, 28);
  $f3f6_2 = $f3_2
    ->mulInt64($f6, 28);
  $f3f7_76 = $f7_38
    ->mulInt64($f3_2, 29);
  $f3f8_38 = $f8_19
    ->mulInt64($f3_2, 29);
  $f3f9_76 = $f9_38
    ->mulInt64($f3_2, 29);
  $f4f4 = $f4
    ->mulInt64($f4, 28);
  $f4f5_2 = $f4_2
    ->mulInt64($f5, 28);
  $f4f6_38 = $f6_19
    ->mulInt64($f4_2, 29);
  $f4f7_38 = $f7_38
    ->mulInt64($f4, 29);
  $f4f8_38 = $f8_19
    ->mulInt64($f4_2, 29);
  $f4f9_38 = $f9_38
    ->mulInt64($f4, 29);
  $f5f5_38 = $f5_38
    ->mulInt64($f5, 29);
  $f5f6_38 = $f6_19
    ->mulInt64($f5_2, 29);
  $f5f7_76 = $f7_38
    ->mulInt64($f5_2, 29);
  $f5f8_38 = $f8_19
    ->mulInt64($f5_2, 29);
  $f5f9_76 = $f9_38
    ->mulInt64($f5_2, 29);
  $f6f6_19 = $f6_19
    ->mulInt64($f6, 29);
  $f6f7_38 = $f7_38
    ->mulInt64($f6, 29);
  $f6f8_38 = $f8_19
    ->mulInt64($f6_2, 29);
  $f6f9_38 = $f9_38
    ->mulInt64($f6, 29);
  $f7f7_38 = $f7_38
    ->mulInt64($f7, 29);
  $f7f8_38 = $f8_19
    ->mulInt64($f7_2, 29);
  $f7f9_76 = $f9_38
    ->mulInt64($f7_2, 29);
  $f8f8_19 = $f8_19
    ->mulInt64($f8, 29);
  $f8f9_38 = $f9_38
    ->mulInt64($f8, 29);
  $f9f9_38 = $f9_38
    ->mulInt64($f9, 29);
  $h0 = $f0f0
    ->addInt64($f1f9_76)
    ->addInt64($f2f8_38)
    ->addInt64($f3f7_76)
    ->addInt64($f4f6_38)
    ->addInt64($f5f5_38);
  $h1 = $f0f1_2
    ->addInt64($f2f9_38)
    ->addInt64($f3f8_38)
    ->addInt64($f4f7_38)
    ->addInt64($f5f6_38);
  $h2 = $f0f2_2
    ->addInt64($f1f1_2)
    ->addInt64($f3f9_76)
    ->addInt64($f4f8_38)
    ->addInt64($f5f7_76)
    ->addInt64($f6f6_19);
  $h3 = $f0f3_2
    ->addInt64($f1f2_2)
    ->addInt64($f4f9_38)
    ->addInt64($f5f8_38)
    ->addInt64($f6f7_38);
  $h4 = $f0f4_2
    ->addInt64($f1f3_4)
    ->addInt64($f2f2)
    ->addInt64($f5f9_76)
    ->addInt64($f6f8_38)
    ->addInt64($f7f7_38);
  $h5 = $f0f5_2
    ->addInt64($f1f4_2)
    ->addInt64($f2f3_2)
    ->addInt64($f6f9_38)
    ->addInt64($f7f8_38);
  $h6 = $f0f6_2
    ->addInt64($f1f5_4)
    ->addInt64($f2f4_2)
    ->addInt64($f3f3_2)
    ->addInt64($f7f9_76)
    ->addInt64($f8f8_19);
  $h7 = $f0f7_2
    ->addInt64($f1f6_2)
    ->addInt64($f2f5_2)
    ->addInt64($f3f4_2)
    ->addInt64($f8f9_38);
  $h8 = $f0f8_2
    ->addInt64($f1f7_4)
    ->addInt64($f2f6_2)
    ->addInt64($f3f5_4)
    ->addInt64($f4f4)
    ->addInt64($f9f9_38);
  $h9 = $f0f9_2
    ->addInt64($f1f8_2)
    ->addInt64($f2f7_2)
    ->addInt64($f3f6_2)
    ->addInt64($f4f5_2);

  /**
   * @var ParagonIE_Sodium_Core32_Int64 $h0
   * @var ParagonIE_Sodium_Core32_Int64 $h1
   * @var ParagonIE_Sodium_Core32_Int64 $h2
   * @var ParagonIE_Sodium_Core32_Int64 $h3
   * @var ParagonIE_Sodium_Core32_Int64 $h4
   * @var ParagonIE_Sodium_Core32_Int64 $h5
   * @var ParagonIE_Sodium_Core32_Int64 $h6
   * @var ParagonIE_Sodium_Core32_Int64 $h7
   * @var ParagonIE_Sodium_Core32_Int64 $h8
   * @var ParagonIE_Sodium_Core32_Int64 $h9
   */
  $h0 = $h0
    ->shiftLeft(1);
  $h1 = $h1
    ->shiftLeft(1);
  $h2 = $h2
    ->shiftLeft(1);
  $h3 = $h3
    ->shiftLeft(1);
  $h4 = $h4
    ->shiftLeft(1);
  $h5 = $h5
    ->shiftLeft(1);
  $h6 = $h6
    ->shiftLeft(1);
  $h7 = $h7
    ->shiftLeft(1);
  $h8 = $h8
    ->shiftLeft(1);
  $h9 = $h9
    ->shiftLeft(1);
  $carry0 = $h0
    ->addInt(1 << 25)
    ->shiftRight(26);
  $h1 = $h1
    ->addInt64($carry0);
  $h0 = $h0
    ->subInt64($carry0
    ->shiftLeft(26));
  $carry4 = $h4
    ->addInt(1 << 25)
    ->shiftRight(26);
  $h5 = $h5
    ->addInt64($carry4);
  $h4 = $h4
    ->subInt64($carry4
    ->shiftLeft(26));
  $carry1 = $h1
    ->addInt(1 << 24)
    ->shiftRight(25);
  $h2 = $h2
    ->addInt64($carry1);
  $h1 = $h1
    ->subInt64($carry1
    ->shiftLeft(25));
  $carry5 = $h5
    ->addInt(1 << 24)
    ->shiftRight(25);
  $h6 = $h6
    ->addInt64($carry5);
  $h5 = $h5
    ->subInt64($carry5
    ->shiftLeft(25));
  $carry2 = $h2
    ->addInt(1 << 25)
    ->shiftRight(26);
  $h3 = $h3
    ->addInt64($carry2);
  $h2 = $h2
    ->subInt64($carry2
    ->shiftLeft(26));
  $carry6 = $h6
    ->addInt(1 << 25)
    ->shiftRight(26);
  $h7 = $h7
    ->addInt64($carry6);
  $h6 = $h6
    ->subInt64($carry6
    ->shiftLeft(26));
  $carry3 = $h3
    ->addInt(1 << 24)
    ->shiftRight(25);
  $h4 = $h4
    ->addInt64($carry3);
  $h3 = $h3
    ->subInt64($carry3
    ->shiftLeft(25));
  $carry7 = $h7
    ->addInt(1 << 24)
    ->shiftRight(25);
  $h8 = $h8
    ->addInt64($carry7);
  $h7 = $h7
    ->subInt64($carry7
    ->shiftLeft(25));
  $carry4 = $h4
    ->addInt(1 << 25)
    ->shiftRight(26);
  $h5 = $h5
    ->addInt64($carry4);
  $h4 = $h4
    ->subInt64($carry4
    ->shiftLeft(26));
  $carry8 = $h8
    ->addInt(1 << 25)
    ->shiftRight(26);
  $h9 = $h9
    ->addInt64($carry8);
  $h8 = $h8
    ->subInt64($carry8
    ->shiftLeft(26));
  $carry9 = $h9
    ->addInt(1 << 24)
    ->shiftRight(25);
  $h0 = $h0
    ->addInt64($carry9
    ->mulInt(19, 5));
  $h9 = $h9
    ->subInt64($carry9
    ->shiftLeft(25));
  $carry0 = $h0
    ->addInt(1 << 25)
    ->shiftRight(26);
  $h1 = $h1
    ->addInt64($carry0);
  $h0 = $h0
    ->subInt64($carry0
    ->shiftLeft(26));
  return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(array(
    $h0
      ->toInt32(),
    $h1
      ->toInt32(),
    $h2
      ->toInt32(),
    $h3
      ->toInt32(),
    $h4
      ->toInt32(),
    $h5
      ->toInt32(),
    $h6
      ->toInt32(),
    $h7
      ->toInt32(),
    $h8
      ->toInt32(),
    $h9
      ->toInt32(),
  ));
}