Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-inclu.../sodium_c.../src/Core
File: Curve25519.php
[1500] Fix | Delete
/**
[1501] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp
[1502] Fix | Delete
*/
[1503] Fix | Delete
public static function ge_precomp_0()
[1504] Fix | Delete
{
[1505] Fix | Delete
return new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp(
[1506] Fix | Delete
self::fe_1(),
[1507] Fix | Delete
self::fe_1(),
[1508] Fix | Delete
self::fe_0()
[1509] Fix | Delete
);
[1510] Fix | Delete
}
[1511] Fix | Delete
[1512] Fix | Delete
/**
[1513] Fix | Delete
* @internal You should not use this directly from another application
[1514] Fix | Delete
*
[1515] Fix | Delete
* @param int $b
[1516] Fix | Delete
* @param int $c
[1517] Fix | Delete
* @return int
[1518] Fix | Delete
*/
[1519] Fix | Delete
public static function equal($b, $c)
[1520] Fix | Delete
{
[1521] Fix | Delete
return (int) ((($b ^ $c) - 1) >> 31) & 1;
[1522] Fix | Delete
}
[1523] Fix | Delete
[1524] Fix | Delete
/**
[1525] Fix | Delete
* @internal You should not use this directly from another application
[1526] Fix | Delete
*
[1527] Fix | Delete
* @param int|string $char
[1528] Fix | Delete
* @return int (1 = yes, 0 = no)
[1529] Fix | Delete
* @throws SodiumException
[1530] Fix | Delete
* @throws TypeError
[1531] Fix | Delete
*/
[1532] Fix | Delete
public static function negative($char)
[1533] Fix | Delete
{
[1534] Fix | Delete
if (is_int($char)) {
[1535] Fix | Delete
return ($char >> 63) & 1;
[1536] Fix | Delete
}
[1537] Fix | Delete
$x = self::chrToInt(self::substr($char, 0, 1));
[1538] Fix | Delete
return (int) ($x >> 63);
[1539] Fix | Delete
}
[1540] Fix | Delete
[1541] Fix | Delete
/**
[1542] Fix | Delete
* Conditional move
[1543] Fix | Delete
*
[1544] Fix | Delete
* @internal You should not use this directly from another application
[1545] Fix | Delete
*
[1546] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $t
[1547] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $u
[1548] Fix | Delete
* @param int $b
[1549] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp
[1550] Fix | Delete
*/
[1551] Fix | Delete
public static function cmov(
[1552] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $t,
[1553] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $u,
[1554] Fix | Delete
$b
[1555] Fix | Delete
) {
[1556] Fix | Delete
if (!is_int($b)) {
[1557] Fix | Delete
throw new InvalidArgumentException('Expected an integer.');
[1558] Fix | Delete
}
[1559] Fix | Delete
return new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp(
[1560] Fix | Delete
self::fe_cmov($t->yplusx, $u->yplusx, $b),
[1561] Fix | Delete
self::fe_cmov($t->yminusx, $u->yminusx, $b),
[1562] Fix | Delete
self::fe_cmov($t->xy2d, $u->xy2d, $b)
[1563] Fix | Delete
);
[1564] Fix | Delete
}
[1565] Fix | Delete
[1566] Fix | Delete
/**
[1567] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $t
[1568] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $u
[1569] Fix | Delete
* @param int $b
[1570] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_Cached
[1571] Fix | Delete
*/
[1572] Fix | Delete
public static function ge_cmov_cached(
[1573] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Ge_Cached $t,
[1574] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Ge_Cached $u,
[1575] Fix | Delete
$b
[1576] Fix | Delete
) {
[1577] Fix | Delete
$b &= 1;
[1578] Fix | Delete
$ret = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached();
[1579] Fix | Delete
$ret->YplusX = self::fe_cmov($t->YplusX, $u->YplusX, $b);
[1580] Fix | Delete
$ret->YminusX = self::fe_cmov($t->YminusX, $u->YminusX, $b);
[1581] Fix | Delete
$ret->Z = self::fe_cmov($t->Z, $u->Z, $b);
[1582] Fix | Delete
$ret->T2d = self::fe_cmov($t->T2d, $u->T2d, $b);
[1583] Fix | Delete
return $ret;
[1584] Fix | Delete
}
[1585] Fix | Delete
[1586] Fix | Delete
/**
[1587] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached[] $cached
[1588] Fix | Delete
* @param int $b
[1589] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_Cached
[1590] Fix | Delete
* @throws SodiumException
[1591] Fix | Delete
*/
[1592] Fix | Delete
public static function ge_cmov8_cached(array $cached, $b)
[1593] Fix | Delete
{
[1594] Fix | Delete
// const unsigned char bnegative = negative(b);
[1595] Fix | Delete
// const unsigned char babs = b - (((-bnegative) & b) * ((signed char) 1 << 1));
[1596] Fix | Delete
$bnegative = self::negative($b);
[1597] Fix | Delete
$babs = $b - (((-$bnegative) & $b) << 1);
[1598] Fix | Delete
[1599] Fix | Delete
// ge25519_cached_0(t);
[1600] Fix | Delete
$t = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached(
[1601] Fix | Delete
self::fe_1(),
[1602] Fix | Delete
self::fe_1(),
[1603] Fix | Delete
self::fe_1(),
[1604] Fix | Delete
self::fe_0()
[1605] Fix | Delete
);
[1606] Fix | Delete
[1607] Fix | Delete
// ge25519_cmov_cached(t, &cached[0], equal(babs, 1));
[1608] Fix | Delete
// ge25519_cmov_cached(t, &cached[1], equal(babs, 2));
[1609] Fix | Delete
// ge25519_cmov_cached(t, &cached[2], equal(babs, 3));
[1610] Fix | Delete
// ge25519_cmov_cached(t, &cached[3], equal(babs, 4));
[1611] Fix | Delete
// ge25519_cmov_cached(t, &cached[4], equal(babs, 5));
[1612] Fix | Delete
// ge25519_cmov_cached(t, &cached[5], equal(babs, 6));
[1613] Fix | Delete
// ge25519_cmov_cached(t, &cached[6], equal(babs, 7));
[1614] Fix | Delete
// ge25519_cmov_cached(t, &cached[7], equal(babs, 8));
[1615] Fix | Delete
for ($x = 0; $x < 8; ++$x) {
[1616] Fix | Delete
$t = self::ge_cmov_cached($t, $cached[$x], self::equal($babs, $x + 1));
[1617] Fix | Delete
}
[1618] Fix | Delete
[1619] Fix | Delete
// fe25519_copy(minust.YplusX, t->YminusX);
[1620] Fix | Delete
// fe25519_copy(minust.YminusX, t->YplusX);
[1621] Fix | Delete
// fe25519_copy(minust.Z, t->Z);
[1622] Fix | Delete
// fe25519_neg(minust.T2d, t->T2d);
[1623] Fix | Delete
$minust = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached(
[1624] Fix | Delete
self::fe_copy($t->YminusX),
[1625] Fix | Delete
self::fe_copy($t->YplusX),
[1626] Fix | Delete
self::fe_copy($t->Z),
[1627] Fix | Delete
self::fe_neg($t->T2d)
[1628] Fix | Delete
);
[1629] Fix | Delete
return self::ge_cmov_cached($t, $minust, $bnegative);
[1630] Fix | Delete
}
[1631] Fix | Delete
[1632] Fix | Delete
/**
[1633] Fix | Delete
* @internal You should not use this directly from another application
[1634] Fix | Delete
*
[1635] Fix | Delete
* @param int $pos
[1636] Fix | Delete
* @param int $b
[1637] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp
[1638] Fix | Delete
* @throws SodiumException
[1639] Fix | Delete
* @throws TypeError
[1640] Fix | Delete
* @psalm-suppress MixedArgument
[1641] Fix | Delete
* @psalm-suppress MixedArrayAccess
[1642] Fix | Delete
* @psalm-suppress MixedArrayOffset
[1643] Fix | Delete
*/
[1644] Fix | Delete
public static function ge_select($pos = 0, $b = 0)
[1645] Fix | Delete
{
[1646] Fix | Delete
static $base = null;
[1647] Fix | Delete
if ($base === null) {
[1648] Fix | Delete
$base = array();
[1649] Fix | Delete
/** @var int $i */
[1650] Fix | Delete
foreach (self::$base as $i => $bas) {
[1651] Fix | Delete
for ($j = 0; $j < 8; ++$j) {
[1652] Fix | Delete
$base[$i][$j] = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp(
[1653] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][0]),
[1654] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][1]),
[1655] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][2])
[1656] Fix | Delete
);
[1657] Fix | Delete
}
[1658] Fix | Delete
}
[1659] Fix | Delete
}
[1660] Fix | Delete
/** @var array<int, array<int, ParagonIE_Sodium_Core_Curve25519_Ge_Precomp>> $base */
[1661] Fix | Delete
if (!is_int($pos)) {
[1662] Fix | Delete
throw new InvalidArgumentException('Position must be an integer');
[1663] Fix | Delete
}
[1664] Fix | Delete
if ($pos < 0 || $pos > 31) {
[1665] Fix | Delete
throw new RangeException('Position is out of range [0, 31]');
[1666] Fix | Delete
}
[1667] Fix | Delete
[1668] Fix | Delete
$bnegative = self::negative($b);
[1669] Fix | Delete
$babs = $b - (((-$bnegative) & $b) << 1);
[1670] Fix | Delete
[1671] Fix | Delete
$t = self::ge_precomp_0();
[1672] Fix | Delete
for ($i = 0; $i < 8; ++$i) {
[1673] Fix | Delete
$t = self::cmov(
[1674] Fix | Delete
$t,
[1675] Fix | Delete
$base[$pos][$i],
[1676] Fix | Delete
self::equal($babs, $i + 1)
[1677] Fix | Delete
);
[1678] Fix | Delete
}
[1679] Fix | Delete
$minusT = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp(
[1680] Fix | Delete
self::fe_copy($t->yminusx),
[1681] Fix | Delete
self::fe_copy($t->yplusx),
[1682] Fix | Delete
self::fe_neg($t->xy2d)
[1683] Fix | Delete
);
[1684] Fix | Delete
return self::cmov($t, $minusT, $bnegative);
[1685] Fix | Delete
}
[1686] Fix | Delete
[1687] Fix | Delete
/**
[1688] Fix | Delete
* Subtract two group elements.
[1689] Fix | Delete
*
[1690] Fix | Delete
* r = p - q
[1691] Fix | Delete
*
[1692] Fix | Delete
* @internal You should not use this directly from another application
[1693] Fix | Delete
*
[1694] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p
[1695] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q
[1696] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1
[1697] Fix | Delete
*/
[1698] Fix | Delete
public static function ge_sub(
[1699] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p,
[1700] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q
[1701] Fix | Delete
) {
[1702] Fix | Delete
$r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1();
[1703] Fix | Delete
[1704] Fix | Delete
$r->X = self::fe_add($p->Y, $p->X);
[1705] Fix | Delete
$r->Y = self::fe_sub($p->Y, $p->X);
[1706] Fix | Delete
$r->Z = self::fe_mul($r->X, $q->YminusX);
[1707] Fix | Delete
$r->Y = self::fe_mul($r->Y, $q->YplusX);
[1708] Fix | Delete
$r->T = self::fe_mul($q->T2d, $p->T);
[1709] Fix | Delete
$r->X = self::fe_mul($p->Z, $q->Z);
[1710] Fix | Delete
$t0 = self::fe_add($r->X, $r->X);
[1711] Fix | Delete
$r->X = self::fe_sub($r->Z, $r->Y);
[1712] Fix | Delete
$r->Y = self::fe_add($r->Z, $r->Y);
[1713] Fix | Delete
$r->Z = self::fe_sub($t0, $r->T);
[1714] Fix | Delete
$r->T = self::fe_add($t0, $r->T);
[1715] Fix | Delete
[1716] Fix | Delete
return $r;
[1717] Fix | Delete
}
[1718] Fix | Delete
[1719] Fix | Delete
/**
[1720] Fix | Delete
* Convert a group element to a byte string.
[1721] Fix | Delete
*
[1722] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_P2 $h
[1723] Fix | Delete
* @return string
[1724] Fix | Delete
* @throws SodiumException
[1725] Fix | Delete
* @throws TypeError
[1726] Fix | Delete
*/
[1727] Fix | Delete
public static function ge_tobytes(ParagonIE_Sodium_Core_Curve25519_Ge_P2 $h)
[1728] Fix | Delete
{
[1729] Fix | Delete
$recip = self::fe_invert($h->Z);
[1730] Fix | Delete
$x = self::fe_mul($h->X, $recip);
[1731] Fix | Delete
$y = self::fe_mul($h->Y, $recip);
[1732] Fix | Delete
$s = self::fe_tobytes($y);
[1733] Fix | Delete
$s[31] = self::intToChr(
[1734] Fix | Delete
self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7)
[1735] Fix | Delete
);
[1736] Fix | Delete
return $s;
[1737] Fix | Delete
}
[1738] Fix | Delete
[1739] Fix | Delete
/**
[1740] Fix | Delete
* @internal You should not use this directly from another application
[1741] Fix | Delete
*
[1742] Fix | Delete
* @param string $a
[1743] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A
[1744] Fix | Delete
* @param string $b
[1745] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_P2
[1746] Fix | Delete
* @throws SodiumException
[1747] Fix | Delete
* @throws TypeError
[1748] Fix | Delete
* @psalm-suppress MixedArgument
[1749] Fix | Delete
* @psalm-suppress MixedArrayAccess
[1750] Fix | Delete
*/
[1751] Fix | Delete
public static function ge_double_scalarmult_vartime(
[1752] Fix | Delete
$a,
[1753] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A,
[1754] Fix | Delete
$b
[1755] Fix | Delete
) {
[1756] Fix | Delete
/** @var array<int, ParagonIE_Sodium_Core_Curve25519_Ge_Cached> $Ai */
[1757] Fix | Delete
$Ai = array();
[1758] Fix | Delete
[1759] Fix | Delete
/** @var array<int, ParagonIE_Sodium_Core_Curve25519_Ge_Precomp> $Bi */
[1760] Fix | Delete
static $Bi = array();
[1761] Fix | Delete
if (!$Bi) {
[1762] Fix | Delete
for ($i = 0; $i < 8; ++$i) {
[1763] Fix | Delete
$Bi[$i] = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp(
[1764] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][0]),
[1765] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][1]),
[1766] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][2])
[1767] Fix | Delete
);
[1768] Fix | Delete
}
[1769] Fix | Delete
}
[1770] Fix | Delete
for ($i = 0; $i < 8; ++$i) {
[1771] Fix | Delete
$Ai[$i] = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached(
[1772] Fix | Delete
self::fe_0(),
[1773] Fix | Delete
self::fe_0(),
[1774] Fix | Delete
self::fe_0(),
[1775] Fix | Delete
self::fe_0()
[1776] Fix | Delete
);
[1777] Fix | Delete
}
[1778] Fix | Delete
[1779] Fix | Delete
# slide(aslide,a);
[1780] Fix | Delete
# slide(bslide,b);
[1781] Fix | Delete
/** @var array<int, int> $aslide */
[1782] Fix | Delete
$aslide = self::slide($a);
[1783] Fix | Delete
/** @var array<int, int> $bslide */
[1784] Fix | Delete
$bslide = self::slide($b);
[1785] Fix | Delete
[1786] Fix | Delete
# ge_p3_to_cached(&Ai[0],A);
[1787] Fix | Delete
# ge_p3_dbl(&t,A); ge_p1p1_to_p3(&A2,&t);
[1788] Fix | Delete
$Ai[0] = self::ge_p3_to_cached($A);
[1789] Fix | Delete
$t = self::ge_p3_dbl($A);
[1790] Fix | Delete
$A2 = self::ge_p1p1_to_p3($t);
[1791] Fix | Delete
[1792] Fix | Delete
# ge_add(&t,&A2,&Ai[0]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[1],&u);
[1793] Fix | Delete
# ge_add(&t,&A2,&Ai[1]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[2],&u);
[1794] Fix | Delete
# ge_add(&t,&A2,&Ai[2]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[3],&u);
[1795] Fix | Delete
# ge_add(&t,&A2,&Ai[3]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[4],&u);
[1796] Fix | Delete
# ge_add(&t,&A2,&Ai[4]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[5],&u);
[1797] Fix | Delete
# ge_add(&t,&A2,&Ai[5]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[6],&u);
[1798] Fix | Delete
# ge_add(&t,&A2,&Ai[6]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[7],&u);
[1799] Fix | Delete
for ($i = 0; $i < 7; ++$i) {
[1800] Fix | Delete
$t = self::ge_add($A2, $Ai[$i]);
[1801] Fix | Delete
$u = self::ge_p1p1_to_p3($t);
[1802] Fix | Delete
$Ai[$i + 1] = self::ge_p3_to_cached($u);
[1803] Fix | Delete
}
[1804] Fix | Delete
[1805] Fix | Delete
# ge_p2_0(r);
[1806] Fix | Delete
$r = self::ge_p2_0();
[1807] Fix | Delete
[1808] Fix | Delete
# for (i = 255;i >= 0;--i) {
[1809] Fix | Delete
# if (aslide[i] || bslide[i]) break;
[1810] Fix | Delete
# }
[1811] Fix | Delete
$i = 255;
[1812] Fix | Delete
for (; $i >= 0; --$i) {
[1813] Fix | Delete
if ($aslide[$i] || $bslide[$i]) {
[1814] Fix | Delete
break;
[1815] Fix | Delete
}
[1816] Fix | Delete
}
[1817] Fix | Delete
[1818] Fix | Delete
# for (;i >= 0;--i) {
[1819] Fix | Delete
for (; $i >= 0; --$i) {
[1820] Fix | Delete
# ge_p2_dbl(&t,r);
[1821] Fix | Delete
$t = self::ge_p2_dbl($r);
[1822] Fix | Delete
[1823] Fix | Delete
# if (aslide[i] > 0) {
[1824] Fix | Delete
if ($aslide[$i] > 0) {
[1825] Fix | Delete
# ge_p1p1_to_p3(&u,&t);
[1826] Fix | Delete
# ge_add(&t,&u,&Ai[aslide[i]/2]);
[1827] Fix | Delete
$u = self::ge_p1p1_to_p3($t);
[1828] Fix | Delete
$t = self::ge_add(
[1829] Fix | Delete
$u,
[1830] Fix | Delete
$Ai[(int) floor($aslide[$i] / 2)]
[1831] Fix | Delete
);
[1832] Fix | Delete
# } else if (aslide[i] < 0) {
[1833] Fix | Delete
} elseif ($aslide[$i] < 0) {
[1834] Fix | Delete
# ge_p1p1_to_p3(&u,&t);
[1835] Fix | Delete
# ge_sub(&t,&u,&Ai[(-aslide[i])/2]);
[1836] Fix | Delete
$u = self::ge_p1p1_to_p3($t);
[1837] Fix | Delete
$t = self::ge_sub(
[1838] Fix | Delete
$u,
[1839] Fix | Delete
$Ai[(int) floor(-$aslide[$i] / 2)]
[1840] Fix | Delete
);
[1841] Fix | Delete
}
[1842] Fix | Delete
[1843] Fix | Delete
# if (bslide[i] > 0) {
[1844] Fix | Delete
if ($bslide[$i] > 0) {
[1845] Fix | Delete
/** @var int $index */
[1846] Fix | Delete
$index = (int) floor($bslide[$i] / 2);
[1847] Fix | Delete
# ge_p1p1_to_p3(&u,&t);
[1848] Fix | Delete
# ge_madd(&t,&u,&Bi[bslide[i]/2]);
[1849] Fix | Delete
$u = self::ge_p1p1_to_p3($t);
[1850] Fix | Delete
$t = self::ge_madd($t, $u, $Bi[$index]);
[1851] Fix | Delete
# } else if (bslide[i] < 0) {
[1852] Fix | Delete
} elseif ($bslide[$i] < 0) {
[1853] Fix | Delete
/** @var int $index */
[1854] Fix | Delete
$index = (int) floor(-$bslide[$i] / 2);
[1855] Fix | Delete
# ge_p1p1_to_p3(&u,&t);
[1856] Fix | Delete
# ge_msub(&t,&u,&Bi[(-bslide[i])/2]);
[1857] Fix | Delete
$u = self::ge_p1p1_to_p3($t);
[1858] Fix | Delete
$t = self::ge_msub($t, $u, $Bi[$index]);
[1859] Fix | Delete
}
[1860] Fix | Delete
# ge_p1p1_to_p2(r,&t);
[1861] Fix | Delete
$r = self::ge_p1p1_to_p2($t);
[1862] Fix | Delete
}
[1863] Fix | Delete
return $r;
[1864] Fix | Delete
}
[1865] Fix | Delete
[1866] Fix | Delete
/**
[1867] Fix | Delete
* @internal You should not use this directly from another application
[1868] Fix | Delete
*
[1869] Fix | Delete
* @param string $a
[1870] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p
[1871] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_P3
[1872] Fix | Delete
* @throws SodiumException
[1873] Fix | Delete
* @throws TypeError
[1874] Fix | Delete
* @psalm-suppress MixedAssignment
[1875] Fix | Delete
* @psalm-suppress MixedOperand
[1876] Fix | Delete
*/
[1877] Fix | Delete
public static function ge_scalarmult($a, $p)
[1878] Fix | Delete
{
[1879] Fix | Delete
$e = array_fill(0, 64, 0);
[1880] Fix | Delete
[1881] Fix | Delete
/** @var ParagonIE_Sodium_Core_Curve25519_Ge_Cached[] $pi */
[1882] Fix | Delete
$pi = array();
[1883] Fix | Delete
[1884] Fix | Delete
// ge25519_p3_to_cached(&pi[1 - 1], p); /* p */
[1885] Fix | Delete
$pi[0] = self::ge_p3_to_cached($p);
[1886] Fix | Delete
[1887] Fix | Delete
// ge25519_p3_dbl(&t2, p);
[1888] Fix | Delete
// ge25519_p1p1_to_p3(&p2, &t2);
[1889] Fix | Delete
// ge25519_p3_to_cached(&pi[2 - 1], &p2); /* 2p = 2*p */
[1890] Fix | Delete
$t2 = self::ge_p3_dbl($p);
[1891] Fix | Delete
$p2 = self::ge_p1p1_to_p3($t2);
[1892] Fix | Delete
$pi[1] = self::ge_p3_to_cached($p2);
[1893] Fix | Delete
[1894] Fix | Delete
// ge25519_add_cached(&t3, p, &pi[2 - 1]);
[1895] Fix | Delete
// ge25519_p1p1_to_p3(&p3, &t3);
[1896] Fix | Delete
// ge25519_p3_to_cached(&pi[3 - 1], &p3); /* 3p = 2p+p */
[1897] Fix | Delete
$t3 = self::ge_add($p, $pi[1]);
[1898] Fix | Delete
$p3 = self::ge_p1p1_to_p3($t3);
[1899] Fix | Delete
$pi[2] = self::ge_p3_to_cached($p3);
[1900] Fix | Delete
[1901] Fix | Delete
// ge25519_p3_dbl(&t4, &p2);
[1902] Fix | Delete
// ge25519_p1p1_to_p3(&p4, &t4);
[1903] Fix | Delete
// ge25519_p3_to_cached(&pi[4 - 1], &p4); /* 4p = 2*2p */
[1904] Fix | Delete
$t4 = self::ge_p3_dbl($p2);
[1905] Fix | Delete
$p4 = self::ge_p1p1_to_p3($t4);
[1906] Fix | Delete
$pi[3] = self::ge_p3_to_cached($p4);
[1907] Fix | Delete
[1908] Fix | Delete
// ge25519_add_cached(&t5, p, &pi[4 - 1]);
[1909] Fix | Delete
// ge25519_p1p1_to_p3(&p5, &t5);
[1910] Fix | Delete
// ge25519_p3_to_cached(&pi[5 - 1], &p5); /* 5p = 4p+p */
[1911] Fix | Delete
$t5 = self::ge_add($p, $pi[3]);
[1912] Fix | Delete
$p5 = self::ge_p1p1_to_p3($t5);
[1913] Fix | Delete
$pi[4] = self::ge_p3_to_cached($p5);
[1914] Fix | Delete
[1915] Fix | Delete
// ge25519_p3_dbl(&t6, &p3);
[1916] Fix | Delete
// ge25519_p1p1_to_p3(&p6, &t6);
[1917] Fix | Delete
// ge25519_p3_to_cached(&pi[6 - 1], &p6); /* 6p = 2*3p */
[1918] Fix | Delete
$t6 = self::ge_p3_dbl($p3);
[1919] Fix | Delete
$p6 = self::ge_p1p1_to_p3($t6);
[1920] Fix | Delete
$pi[5] = self::ge_p3_to_cached($p6);
[1921] Fix | Delete
[1922] Fix | Delete
// ge25519_add_cached(&t7, p, &pi[6 - 1]);
[1923] Fix | Delete
// ge25519_p1p1_to_p3(&p7, &t7);
[1924] Fix | Delete
// ge25519_p3_to_cached(&pi[7 - 1], &p7); /* 7p = 6p+p */
[1925] Fix | Delete
$t7 = self::ge_add($p, $pi[5]);
[1926] Fix | Delete
$p7 = self::ge_p1p1_to_p3($t7);
[1927] Fix | Delete
$pi[6] = self::ge_p3_to_cached($p7);
[1928] Fix | Delete
[1929] Fix | Delete
// ge25519_p3_dbl(&t8, &p4);
[1930] Fix | Delete
// ge25519_p1p1_to_p3(&p8, &t8);
[1931] Fix | Delete
// ge25519_p3_to_cached(&pi[8 - 1], &p8); /* 8p = 2*4p */
[1932] Fix | Delete
$t8 = self::ge_p3_dbl($p4);
[1933] Fix | Delete
$p8 = self::ge_p1p1_to_p3($t8);
[1934] Fix | Delete
$pi[7] = self::ge_p3_to_cached($p8);
[1935] Fix | Delete
[1936] Fix | Delete
[1937] Fix | Delete
// for (i = 0; i < 32; ++i) {
[1938] Fix | Delete
// e[2 * i + 0] = (a[i] >> 0) & 15;
[1939] Fix | Delete
// e[2 * i + 1] = (a[i] >> 4) & 15;
[1940] Fix | Delete
// }
[1941] Fix | Delete
for ($i = 0; $i < 32; ++$i) {
[1942] Fix | Delete
$e[($i << 1) ] = self::chrToInt($a[$i]) & 15;
[1943] Fix | Delete
$e[($i << 1) + 1] = (self::chrToInt($a[$i]) >> 4) & 15;
[1944] Fix | Delete
}
[1945] Fix | Delete
// /* each e[i] is between 0 and 15 */
[1946] Fix | Delete
// /* e[63] is between 0 and 7 */
[1947] Fix | Delete
[1948] Fix | Delete
// carry = 0;
[1949] Fix | Delete
// for (i = 0; i < 63; ++i) {
[1950] Fix | Delete
// e[i] += carry;
[1951] Fix | Delete
// carry = e[i] + 8;
[1952] Fix | Delete
// carry >>= 4;
[1953] Fix | Delete
// e[i] -= carry * ((signed char) 1 << 4);
[1954] Fix | Delete
// }
[1955] Fix | Delete
$carry = 0;
[1956] Fix | Delete
for ($i = 0; $i < 63; ++$i) {
[1957] Fix | Delete
$e[$i] += $carry;
[1958] Fix | Delete
$carry = $e[$i] + 8;
[1959] Fix | Delete
$carry >>= 4;
[1960] Fix | Delete
$e[$i] -= $carry << 4;
[1961] Fix | Delete
}
[1962] Fix | Delete
// e[63] += carry;
[1963] Fix | Delete
// /* each e[i] is between -8 and 8 */
[1964] Fix | Delete
$e[63] += $carry;
[1965] Fix | Delete
[1966] Fix | Delete
// ge25519_p3_0(h);
[1967] Fix | Delete
$h = self::ge_p3_0();
[1968] Fix | Delete
[1969] Fix | Delete
// for (i = 63; i != 0; i--) {
[1970] Fix | Delete
for ($i = 63; $i != 0; --$i) {
[1971] Fix | Delete
// ge25519_cmov8_cached(&t, pi, e[i]);
[1972] Fix | Delete
$t = self::ge_cmov8_cached($pi, $e[$i]);
[1973] Fix | Delete
// ge25519_add_cached(&r, h, &t);
[1974] Fix | Delete
$r = self::ge_add($h, $t);
[1975] Fix | Delete
[1976] Fix | Delete
// ge25519_p1p1_to_p2(&s, &r);
[1977] Fix | Delete
// ge25519_p2_dbl(&r, &s);
[1978] Fix | Delete
// ge25519_p1p1_to_p2(&s, &r);
[1979] Fix | Delete
// ge25519_p2_dbl(&r, &s);
[1980] Fix | Delete
// ge25519_p1p1_to_p2(&s, &r);
[1981] Fix | Delete
// ge25519_p2_dbl(&r, &s);
[1982] Fix | Delete
// ge25519_p1p1_to_p2(&s, &r);
[1983] Fix | Delete
// ge25519_p2_dbl(&r, &s);
[1984] Fix | Delete
$s = self::ge_p1p1_to_p2($r);
[1985] Fix | Delete
$r = self::ge_p2_dbl($s);
[1986] Fix | Delete
$s = self::ge_p1p1_to_p2($r);
[1987] Fix | Delete
$r = self::ge_p2_dbl($s);
[1988] Fix | Delete
$s = self::ge_p1p1_to_p2($r);
[1989] Fix | Delete
$r = self::ge_p2_dbl($s);
[1990] Fix | Delete
$s = self::ge_p1p1_to_p2($r);
[1991] Fix | Delete
$r = self::ge_p2_dbl($s);
[1992] Fix | Delete
[1993] Fix | Delete
// ge25519_p1p1_to_p3(h, &r); /* *16 */
[1994] Fix | Delete
$h = self::ge_p1p1_to_p3($r); /* *16 */
[1995] Fix | Delete
}
[1996] Fix | Delete
[1997] Fix | Delete
// ge25519_cmov8_cached(&t, pi, e[i]);
[1998] Fix | Delete
// ge25519_add_cached(&r, h, &t);
[1999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function