# ParagonIE_Sodium_Core_Curve25519::fe_sq2

## #Summery Summery

Square and double a field element

## #Syntax Syntax

ParagonIE_Sodium_Core_Curve25519::fe_sq2( ParagonIE_Sodium_Core_Curve25519_Fe \$f )

h = 2 f f

\$f

(Required)

## #Source Source

```    public static function fe_sq2(ParagonIE_Sodium_Core_Curve25519_Fe \$f)
{
\$f0 = (int) \$f[0];
\$f1 = (int) \$f[1];
\$f2 = (int) \$f[2];
\$f3 = (int) \$f[3];
\$f4 = (int) \$f[4];
\$f5 = (int) \$f[5];
\$f6 = (int) \$f[6];
\$f7 = (int) \$f[7];
\$f8 = (int) \$f[8];
\$f9 = (int) \$f[9];

/** @var int \$f0_2 */
\$f0_2 = \$f0 << 1;
/** @var int \$f1_2 */
\$f1_2 = \$f1 << 1;
/** @var int \$f2_2 */
\$f2_2 = \$f2 << 1;
/** @var int \$f3_2 */
\$f3_2 = \$f3 << 1;
/** @var int \$f4_2 */
\$f4_2 = \$f4 << 1;
/** @var int \$f5_2 */
\$f5_2 = \$f5 << 1;
/** @var int \$f6_2 */
\$f6_2 = \$f6 << 1;
/** @var int \$f7_2 */
\$f7_2 = \$f7 << 1;
\$f5_38 = self::mul(\$f5, 38, 6); /* 1.959375*2^30 */
\$f6_19 = self::mul(\$f6, 19, 5); /* 1.959375*2^30 */
\$f7_38 = self::mul(\$f7, 38, 6); /* 1.959375*2^30 */
\$f8_19 = self::mul(\$f8, 19, 5); /* 1.959375*2^30 */
\$f9_38 = self::mul(\$f9, 38, 6); /* 1.959375*2^30 */
\$f0f0 = self::mul(\$f0, \$f0, 24);
\$f0f1_2 = self::mul(\$f0_2, \$f1, 24);
\$f0f2_2 = self::mul(\$f0_2, \$f2, 24);
\$f0f3_2 = self::mul(\$f0_2, \$f3, 24);
\$f0f4_2 = self::mul(\$f0_2, \$f4, 24);
\$f0f5_2 = self::mul(\$f0_2, \$f5, 24);
\$f0f6_2 = self::mul(\$f0_2, \$f6, 24);
\$f0f7_2 = self::mul(\$f0_2, \$f7, 24);
\$f0f8_2 = self::mul(\$f0_2, \$f8, 24);
\$f0f9_2 = self::mul(\$f0_2, \$f9, 24);
\$f1f1_2 = self::mul(\$f1_2,  \$f1, 24);
\$f1f2_2 = self::mul(\$f1_2,  \$f2, 24);
\$f1f3_4 = self::mul(\$f1_2,  \$f3_2, 24);
\$f1f4_2 = self::mul(\$f1_2,  \$f4, 24);
\$f1f5_4 = self::mul(\$f1_2,  \$f5_2, 24);
\$f1f6_2 = self::mul(\$f1_2,  \$f6, 24);
\$f1f7_4 = self::mul(\$f1_2,  \$f7_2, 24);
\$f1f8_2 = self::mul(\$f1_2,  \$f8, 24);
\$f1f9_76 = self::mul(\$f9_38, \$f1_2, 24);
\$f2f2 = self::mul(\$f2,  \$f2, 24);
\$f2f3_2 = self::mul(\$f2_2,  \$f3, 24);
\$f2f4_2 = self::mul(\$f2_2,  \$f4, 24);
\$f2f5_2 = self::mul(\$f2_2,  \$f5, 24);
\$f2f6_2 = self::mul(\$f2_2,  \$f6, 24);
\$f2f7_2 = self::mul(\$f2_2,  \$f7, 24);
\$f2f8_38 = self::mul(\$f8_19, \$f2_2, 25);
\$f2f9_38 = self::mul(\$f9_38, \$f2, 24);
\$f3f3_2 = self::mul(\$f3_2,  \$f3, 24);
\$f3f4_2 = self::mul(\$f3_2,  \$f4, 24);
\$f3f5_4 = self::mul(\$f3_2,  \$f5_2, 24);
\$f3f6_2 = self::mul(\$f3_2,  \$f6, 24);
\$f3f7_76 = self::mul(\$f7_38, \$f3_2, 24);
\$f3f8_38 = self::mul(\$f8_19, \$f3_2, 24);
\$f3f9_76 = self::mul(\$f9_38, \$f3_2, 24);
\$f4f4 = self::mul(\$f4,  \$f4, 24);
\$f4f5_2 = self::mul(\$f4_2,  \$f5, 24);
\$f4f6_38 = self::mul(\$f6_19, \$f4_2, 25);
\$f4f7_38 = self::mul(\$f7_38, \$f4, 24);
\$f4f8_38 = self::mul(\$f8_19, \$f4_2, 25);
\$f4f9_38 = self::mul(\$f9_38, \$f4, 24);
\$f5f5_38 = self::mul(\$f5_38, \$f5, 24);
\$f5f6_38 = self::mul(\$f6_19, \$f5_2, 24);
\$f5f7_76 = self::mul(\$f7_38, \$f5_2, 24);
\$f5f8_38 = self::mul(\$f8_19, \$f5_2, 24);
\$f5f9_76 = self::mul(\$f9_38, \$f5_2, 24);
\$f6f6_19 = self::mul(\$f6_19, \$f6, 24);
\$f6f7_38 = self::mul(\$f7_38, \$f6, 24);
\$f6f8_38 = self::mul(\$f8_19, \$f6_2, 25);
\$f6f9_38 = self::mul(\$f9_38, \$f6, 24);
\$f7f7_38 = self::mul(\$f7_38, \$f7, 24);
\$f7f8_38 = self::mul(\$f8_19, \$f7_2, 24);
\$f7f9_76 = self::mul(\$f9_38, \$f7_2, 24);
\$f8f8_19 = self::mul(\$f8_19, \$f8, 24);
\$f8f9_38 = self::mul(\$f9_38, \$f8, 24);
\$f9f9_38 = self::mul(\$f9_38, \$f9, 24);

/** @var int \$h0 */
\$h0 = (int) (\$f0f0 + \$f1f9_76 + \$f2f8_38 + \$f3f7_76 + \$f4f6_38 + \$f5f5_38) << 1;
/** @var int \$h1 */
\$h1 = (int) (\$f0f1_2 + \$f2f9_38 + \$f3f8_38 + \$f4f7_38 + \$f5f6_38) << 1;
/** @var int \$h2 */
\$h2 = (int) (\$f0f2_2 + \$f1f1_2  + \$f3f9_76 + \$f4f8_38 + \$f5f7_76 + \$f6f6_19) << 1;
/** @var int \$h3 */
\$h3 = (int) (\$f0f3_2 + \$f1f2_2  + \$f4f9_38 + \$f5f8_38 + \$f6f7_38) << 1;
/** @var int \$h4 */
\$h4 = (int) (\$f0f4_2 + \$f1f3_4  + \$f2f2    + \$f5f9_76 + \$f6f8_38 + \$f7f7_38) << 1;
/** @var int \$h5 */
\$h5 = (int) (\$f0f5_2 + \$f1f4_2  + \$f2f3_2  + \$f6f9_38 + \$f7f8_38) << 1;
/** @var int \$h6 */
\$h6 = (int) (\$f0f6_2 + \$f1f5_4  + \$f2f4_2  + \$f3f3_2  + \$f7f9_76 + \$f8f8_19) << 1;
/** @var int \$h7 */
\$h7 = (int) (\$f0f7_2 + \$f1f6_2  + \$f2f5_2  + \$f3f4_2  + \$f8f9_38) << 1;
/** @var int \$h8 */
\$h8 = (int) (\$f0f8_2 + \$f1f7_4  + \$f2f6_2  + \$f3f5_4  + \$f4f4    + \$f9f9_38) << 1;
/** @var int \$h9 */
\$h9 = (int) (\$f0f9_2 + \$f1f8_2  + \$f2f7_2  + \$f3f6_2  + \$f4f5_2) << 1;

/** @var int \$carry0 */
\$carry0 = (\$h0 + (1 << 25)) >> 26;
\$h1 += \$carry0;
\$h0 -= \$carry0 << 26;
/** @var int \$carry4 */
\$carry4 = (\$h4 + (1 << 25)) >> 26;
\$h5 += \$carry4;
\$h4 -= \$carry4 << 26;

/** @var int \$carry1 */
\$carry1 = (\$h1 + (1 << 24)) >> 25;
\$h2 += \$carry1;
\$h1 -= \$carry1 << 25;
/** @var int \$carry5 */
\$carry5 = (\$h5 + (1 << 24)) >> 25;
\$h6 += \$carry5;
\$h5 -= \$carry5 << 25;

/** @var int \$carry2 */
\$carry2 = (\$h2 + (1 << 25)) >> 26;
\$h3 += \$carry2;
\$h2 -= \$carry2 << 26;
/** @var int \$carry6 */
\$carry6 = (\$h6 + (1 << 25)) >> 26;
\$h7 += \$carry6;
\$h6 -= \$carry6 << 26;

/** @var int \$carry3 */
\$carry3 = (\$h3 + (1 << 24)) >> 25;
\$h4 += \$carry3;
\$h3 -= \$carry3 << 25;
/** @var int \$carry7 */
\$carry7 = (\$h7 + (1 << 24)) >> 25;
\$h8 += \$carry7;
\$h7 -= \$carry7 << 25;

/** @var int \$carry4 */
\$carry4 = (\$h4 + (1 << 25)) >> 26;
\$h5 += \$carry4;
\$h4 -= \$carry4 << 26;
/** @var int \$carry8 */
\$carry8 = (\$h8 + (1 << 25)) >> 26;
\$h9 += \$carry8;
\$h8 -= \$carry8 << 26;

/** @var int \$carry9 */
\$carry9 = (\$h9 + (1 << 24)) >> 25;
\$h0 += self::mul(\$carry9, 19, 5);
\$h9 -= \$carry9 << 25;

/** @var int \$carry0 */
\$carry0 = (\$h0 + (1 << 25)) >> 26;
\$h1 += \$carry0;
\$h0 -= \$carry0 << 26;

return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(
array(
(int) \$h0,
(int) \$h1,
(int) \$h2,
(int) \$h3,
(int) \$h4,
(int) \$h5,
(int) \$h6,
(int) \$h7,
(int) \$h8,
(int) \$h9
)
);
}
```