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
$t1 = self::fe_sq($t0);
[1000] Fix | Delete
[1001] Fix | Delete
# for (i = 1; i < 10; ++i) {
[1002] Fix | Delete
# fe_sq(t1, t1);
[1003] Fix | Delete
# }
[1004] Fix | Delete
for ($i = 1; $i < 10; ++$i) {
[1005] Fix | Delete
$t1 = self::fe_sq($t1);
[1006] Fix | Delete
}
[1007] Fix | Delete
[1008] Fix | Delete
# fe_mul(t1, t1, t0);
[1009] Fix | Delete
# fe_sq(t2, t1);
[1010] Fix | Delete
$t1 = self::fe_mul($t1, $t0);
[1011] Fix | Delete
$t2 = self::fe_sq($t1);
[1012] Fix | Delete
[1013] Fix | Delete
# for (i = 1; i < 20; ++i) {
[1014] Fix | Delete
# fe_sq(t2, t2);
[1015] Fix | Delete
# }
[1016] Fix | Delete
for ($i = 1; $i < 20; ++$i) {
[1017] Fix | Delete
$t2 = self::fe_sq($t2);
[1018] Fix | Delete
}
[1019] Fix | Delete
[1020] Fix | Delete
# fe_mul(t1, t2, t1);
[1021] Fix | Delete
# fe_sq(t1, t1);
[1022] Fix | Delete
$t1 = self::fe_mul($t2, $t1);
[1023] Fix | Delete
$t1 = self::fe_sq($t1);
[1024] Fix | Delete
[1025] Fix | Delete
# for (i = 1; i < 10; ++i) {
[1026] Fix | Delete
# fe_sq(t1, t1);
[1027] Fix | Delete
# }
[1028] Fix | Delete
for ($i = 1; $i < 10; ++$i) {
[1029] Fix | Delete
$t1 = self::fe_sq($t1);
[1030] Fix | Delete
}
[1031] Fix | Delete
[1032] Fix | Delete
# fe_mul(t0, t1, t0);
[1033] Fix | Delete
# fe_sq(t1, t0);
[1034] Fix | Delete
$t0 = self::fe_mul($t1, $t0);
[1035] Fix | Delete
$t1 = self::fe_sq($t0);
[1036] Fix | Delete
[1037] Fix | Delete
# for (i = 1; i < 50; ++i) {
[1038] Fix | Delete
# fe_sq(t1, t1);
[1039] Fix | Delete
# }
[1040] Fix | Delete
for ($i = 1; $i < 50; ++$i) {
[1041] Fix | Delete
$t1 = self::fe_sq($t1);
[1042] Fix | Delete
}
[1043] Fix | Delete
[1044] Fix | Delete
# fe_mul(t1, t1, t0);
[1045] Fix | Delete
# fe_sq(t2, t1);
[1046] Fix | Delete
$t1 = self::fe_mul($t1, $t0);
[1047] Fix | Delete
$t2 = self::fe_sq($t1);
[1048] Fix | Delete
[1049] Fix | Delete
# for (i = 1; i < 100; ++i) {
[1050] Fix | Delete
# fe_sq(t2, t2);
[1051] Fix | Delete
# }
[1052] Fix | Delete
for ($i = 1; $i < 100; ++$i) {
[1053] Fix | Delete
$t2 = self::fe_sq($t2);
[1054] Fix | Delete
}
[1055] Fix | Delete
[1056] Fix | Delete
# fe_mul(t1, t2, t1);
[1057] Fix | Delete
# fe_sq(t1, t1);
[1058] Fix | Delete
$t1 = self::fe_mul($t2, $t1);
[1059] Fix | Delete
$t1 = self::fe_sq($t1);
[1060] Fix | Delete
[1061] Fix | Delete
# for (i = 1; i < 50; ++i) {
[1062] Fix | Delete
# fe_sq(t1, t1);
[1063] Fix | Delete
# }
[1064] Fix | Delete
for ($i = 1; $i < 50; ++$i) {
[1065] Fix | Delete
$t1 = self::fe_sq($t1);
[1066] Fix | Delete
}
[1067] Fix | Delete
[1068] Fix | Delete
# fe_mul(t0, t1, t0);
[1069] Fix | Delete
# fe_sq(t0, t0);
[1070] Fix | Delete
# fe_sq(t0, t0);
[1071] Fix | Delete
# fe_mul(out, t0, z);
[1072] Fix | Delete
$t0 = self::fe_mul($t1, $t0);
[1073] Fix | Delete
$t0 = self::fe_sq($t0);
[1074] Fix | Delete
$t0 = self::fe_sq($t0);
[1075] Fix | Delete
return self::fe_mul($t0, $z);
[1076] Fix | Delete
}
[1077] Fix | Delete
[1078] Fix | Delete
/**
[1079] Fix | Delete
* Subtract two field elements.
[1080] Fix | Delete
*
[1081] Fix | Delete
* h = f - g
[1082] Fix | Delete
*
[1083] Fix | Delete
* Preconditions:
[1084] Fix | Delete
* |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
[1085] Fix | Delete
* |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
[1086] Fix | Delete
*
[1087] Fix | Delete
* Postconditions:
[1088] Fix | Delete
* |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
[1089] Fix | Delete
*
[1090] Fix | Delete
* @internal You should not use this directly from another application
[1091] Fix | Delete
*
[1092] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Fe $f
[1093] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Fe $g
[1094] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Fe
[1095] Fix | Delete
* @psalm-suppress MixedOperand
[1096] Fix | Delete
*/
[1097] Fix | Delete
public static function fe_sub(ParagonIE_Sodium_Core_Curve25519_Fe $f, ParagonIE_Sodium_Core_Curve25519_Fe $g)
[1098] Fix | Delete
{
[1099] Fix | Delete
return self::fe_normalize(
[1100] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(
[1101] Fix | Delete
array(
[1102] Fix | Delete
(int) ($f[0] - $g[0]),
[1103] Fix | Delete
(int) ($f[1] - $g[1]),
[1104] Fix | Delete
(int) ($f[2] - $g[2]),
[1105] Fix | Delete
(int) ($f[3] - $g[3]),
[1106] Fix | Delete
(int) ($f[4] - $g[4]),
[1107] Fix | Delete
(int) ($f[5] - $g[5]),
[1108] Fix | Delete
(int) ($f[6] - $g[6]),
[1109] Fix | Delete
(int) ($f[7] - $g[7]),
[1110] Fix | Delete
(int) ($f[8] - $g[8]),
[1111] Fix | Delete
(int) ($f[9] - $g[9])
[1112] Fix | Delete
)
[1113] Fix | Delete
)
[1114] Fix | Delete
);
[1115] Fix | Delete
}
[1116] Fix | Delete
[1117] Fix | Delete
/**
[1118] Fix | Delete
* Add two group elements.
[1119] Fix | Delete
*
[1120] Fix | Delete
* r = p + q
[1121] Fix | Delete
*
[1122] Fix | Delete
* @internal You should not use this directly from another application
[1123] Fix | Delete
*
[1124] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p
[1125] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q
[1126] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1
[1127] Fix | Delete
*/
[1128] Fix | Delete
public static function ge_add(
[1129] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p,
[1130] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q
[1131] Fix | Delete
) {
[1132] Fix | Delete
$r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1();
[1133] Fix | Delete
$r->X = self::fe_add($p->Y, $p->X);
[1134] Fix | Delete
$r->Y = self::fe_sub($p->Y, $p->X);
[1135] Fix | Delete
$r->Z = self::fe_mul($r->X, $q->YplusX);
[1136] Fix | Delete
$r->Y = self::fe_mul($r->Y, $q->YminusX);
[1137] Fix | Delete
$r->T = self::fe_mul($q->T2d, $p->T);
[1138] Fix | Delete
$r->X = self::fe_mul($p->Z, $q->Z);
[1139] Fix | Delete
$t0 = self::fe_add($r->X, $r->X);
[1140] Fix | Delete
$r->X = self::fe_sub($r->Z, $r->Y);
[1141] Fix | Delete
$r->Y = self::fe_add($r->Z, $r->Y);
[1142] Fix | Delete
$r->Z = self::fe_add($t0, $r->T);
[1143] Fix | Delete
$r->T = self::fe_sub($t0, $r->T);
[1144] Fix | Delete
return $r;
[1145] Fix | Delete
}
[1146] Fix | Delete
[1147] Fix | Delete
/**
[1148] Fix | Delete
* @internal You should not use this directly from another application
[1149] Fix | Delete
*
[1150] Fix | Delete
* @ref https://github.com/jedisct1/libsodium/blob/157c4a80c13b117608aeae12178b2d38825f9f8f/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1185-L1215
[1151] Fix | Delete
* @param string $a
[1152] Fix | Delete
* @return array<int, mixed>
[1153] Fix | Delete
* @throws SodiumException
[1154] Fix | Delete
* @throws TypeError
[1155] Fix | Delete
*/
[1156] Fix | Delete
public static function slide($a)
[1157] Fix | Delete
{
[1158] Fix | Delete
if (self::strlen($a) < 256) {
[1159] Fix | Delete
if (self::strlen($a) < 16) {
[1160] Fix | Delete
$a = str_pad($a, 256, '0', STR_PAD_RIGHT);
[1161] Fix | Delete
}
[1162] Fix | Delete
}
[1163] Fix | Delete
/** @var array<int, int> $r */
[1164] Fix | Delete
$r = array();
[1165] Fix | Delete
[1166] Fix | Delete
/** @var int $i */
[1167] Fix | Delete
for ($i = 0; $i < 256; ++$i) {
[1168] Fix | Delete
$r[$i] = (int) (
[1169] Fix | Delete
1 & (
[1170] Fix | Delete
self::chrToInt($a[(int) ($i >> 3)])
[1171] Fix | Delete
>>
[1172] Fix | Delete
($i & 7)
[1173] Fix | Delete
)
[1174] Fix | Delete
);
[1175] Fix | Delete
}
[1176] Fix | Delete
[1177] Fix | Delete
for ($i = 0;$i < 256;++$i) {
[1178] Fix | Delete
if ($r[$i]) {
[1179] Fix | Delete
for ($b = 1;$b <= 6 && $i + $b < 256;++$b) {
[1180] Fix | Delete
if ($r[$i + $b]) {
[1181] Fix | Delete
if ($r[$i] + ($r[$i + $b] << $b) <= 15) {
[1182] Fix | Delete
$r[$i] += $r[$i + $b] << $b;
[1183] Fix | Delete
$r[$i + $b] = 0;
[1184] Fix | Delete
} elseif ($r[$i] - ($r[$i + $b] << $b) >= -15) {
[1185] Fix | Delete
$r[$i] -= $r[$i + $b] << $b;
[1186] Fix | Delete
for ($k = $i + $b; $k < 256; ++$k) {
[1187] Fix | Delete
if (!$r[$k]) {
[1188] Fix | Delete
$r[$k] = 1;
[1189] Fix | Delete
break;
[1190] Fix | Delete
}
[1191] Fix | Delete
$r[$k] = 0;
[1192] Fix | Delete
}
[1193] Fix | Delete
} else {
[1194] Fix | Delete
break;
[1195] Fix | Delete
}
[1196] Fix | Delete
}
[1197] Fix | Delete
}
[1198] Fix | Delete
}
[1199] Fix | Delete
}
[1200] Fix | Delete
return $r;
[1201] Fix | Delete
}
[1202] Fix | Delete
[1203] Fix | Delete
/**
[1204] Fix | Delete
* @internal You should not use this directly from another application
[1205] Fix | Delete
*
[1206] Fix | Delete
* @param string $s
[1207] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_P3
[1208] Fix | Delete
* @throws SodiumException
[1209] Fix | Delete
* @throws TypeError
[1210] Fix | Delete
*/
[1211] Fix | Delete
public static function ge_frombytes_negate_vartime($s)
[1212] Fix | Delete
{
[1213] Fix | Delete
static $d = null;
[1214] Fix | Delete
if (!$d) {
[1215] Fix | Delete
$d = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d);
[1216] Fix | Delete
}
[1217] Fix | Delete
[1218] Fix | Delete
# fe_frombytes(h->Y,s);
[1219] Fix | Delete
# fe_1(h->Z);
[1220] Fix | Delete
$h = new ParagonIE_Sodium_Core_Curve25519_Ge_P3(
[1221] Fix | Delete
self::fe_0(),
[1222] Fix | Delete
self::fe_frombytes($s),
[1223] Fix | Delete
self::fe_1()
[1224] Fix | Delete
);
[1225] Fix | Delete
[1226] Fix | Delete
# fe_sq(u,h->Y);
[1227] Fix | Delete
# fe_mul(v,u,d);
[1228] Fix | Delete
# fe_sub(u,u,h->Z); /* u = y^2-1 */
[1229] Fix | Delete
# fe_add(v,v,h->Z); /* v = dy^2+1 */
[1230] Fix | Delete
$u = self::fe_sq($h->Y);
[1231] Fix | Delete
/** @var ParagonIE_Sodium_Core_Curve25519_Fe $d */
[1232] Fix | Delete
$v = self::fe_mul($u, $d);
[1233] Fix | Delete
$u = self::fe_sub($u, $h->Z); /* u = y^2 - 1 */
[1234] Fix | Delete
$v = self::fe_add($v, $h->Z); /* v = dy^2 + 1 */
[1235] Fix | Delete
[1236] Fix | Delete
# fe_sq(v3,v);
[1237] Fix | Delete
# fe_mul(v3,v3,v); /* v3 = v^3 */
[1238] Fix | Delete
# fe_sq(h->X,v3);
[1239] Fix | Delete
# fe_mul(h->X,h->X,v);
[1240] Fix | Delete
# fe_mul(h->X,h->X,u); /* x = uv^7 */
[1241] Fix | Delete
$v3 = self::fe_sq($v);
[1242] Fix | Delete
$v3 = self::fe_mul($v3, $v); /* v3 = v^3 */
[1243] Fix | Delete
$h->X = self::fe_sq($v3);
[1244] Fix | Delete
$h->X = self::fe_mul($h->X, $v);
[1245] Fix | Delete
$h->X = self::fe_mul($h->X, $u); /* x = uv^7 */
[1246] Fix | Delete
[1247] Fix | Delete
# fe_pow22523(h->X,h->X); /* x = (uv^7)^((q-5)/8) */
[1248] Fix | Delete
# fe_mul(h->X,h->X,v3);
[1249] Fix | Delete
# fe_mul(h->X,h->X,u); /* x = uv^3(uv^7)^((q-5)/8) */
[1250] Fix | Delete
$h->X = self::fe_pow22523($h->X); /* x = (uv^7)^((q-5)/8) */
[1251] Fix | Delete
$h->X = self::fe_mul($h->X, $v3);
[1252] Fix | Delete
$h->X = self::fe_mul($h->X, $u); /* x = uv^3(uv^7)^((q-5)/8) */
[1253] Fix | Delete
[1254] Fix | Delete
# fe_sq(vxx,h->X);
[1255] Fix | Delete
# fe_mul(vxx,vxx,v);
[1256] Fix | Delete
# fe_sub(check,vxx,u); /* vx^2-u */
[1257] Fix | Delete
$vxx = self::fe_sq($h->X);
[1258] Fix | Delete
$vxx = self::fe_mul($vxx, $v);
[1259] Fix | Delete
$check = self::fe_sub($vxx, $u); /* vx^2 - u */
[1260] Fix | Delete
[1261] Fix | Delete
# if (fe_isnonzero(check)) {
[1262] Fix | Delete
# fe_add(check,vxx,u); /* vx^2+u */
[1263] Fix | Delete
# if (fe_isnonzero(check)) {
[1264] Fix | Delete
# return -1;
[1265] Fix | Delete
# }
[1266] Fix | Delete
# fe_mul(h->X,h->X,sqrtm1);
[1267] Fix | Delete
# }
[1268] Fix | Delete
if (self::fe_isnonzero($check)) {
[1269] Fix | Delete
$check = self::fe_add($vxx, $u); /* vx^2 + u */
[1270] Fix | Delete
if (self::fe_isnonzero($check)) {
[1271] Fix | Delete
throw new RangeException('Internal check failed.');
[1272] Fix | Delete
}
[1273] Fix | Delete
$h->X = self::fe_mul(
[1274] Fix | Delete
$h->X,
[1275] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtm1)
[1276] Fix | Delete
);
[1277] Fix | Delete
}
[1278] Fix | Delete
[1279] Fix | Delete
# if (fe_isnegative(h->X) == (s[31] >> 7)) {
[1280] Fix | Delete
# fe_neg(h->X,h->X);
[1281] Fix | Delete
# }
[1282] Fix | Delete
$i = self::chrToInt($s[31]);
[1283] Fix | Delete
if (self::fe_isnegative($h->X) === ($i >> 7)) {
[1284] Fix | Delete
$h->X = self::fe_neg($h->X);
[1285] Fix | Delete
}
[1286] Fix | Delete
[1287] Fix | Delete
# fe_mul(h->T,h->X,h->Y);
[1288] Fix | Delete
$h->T = self::fe_mul($h->X, $h->Y);
[1289] Fix | Delete
return $h;
[1290] Fix | Delete
}
[1291] Fix | Delete
[1292] Fix | Delete
/**
[1293] Fix | Delete
* @internal You should not use this directly from another application
[1294] Fix | Delete
*
[1295] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R
[1296] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p
[1297] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q
[1298] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1
[1299] Fix | Delete
*/
[1300] Fix | Delete
public static function ge_madd(
[1301] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R,
[1302] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p,
[1303] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q
[1304] Fix | Delete
) {
[1305] Fix | Delete
$r = clone $R;
[1306] Fix | Delete
$r->X = self::fe_add($p->Y, $p->X);
[1307] Fix | Delete
$r->Y = self::fe_sub($p->Y, $p->X);
[1308] Fix | Delete
$r->Z = self::fe_mul($r->X, $q->yplusx);
[1309] Fix | Delete
$r->Y = self::fe_mul($r->Y, $q->yminusx);
[1310] Fix | Delete
$r->T = self::fe_mul($q->xy2d, $p->T);
[1311] Fix | Delete
$t0 = self::fe_add(clone $p->Z, clone $p->Z);
[1312] Fix | Delete
$r->X = self::fe_sub($r->Z, $r->Y);
[1313] Fix | Delete
$r->Y = self::fe_add($r->Z, $r->Y);
[1314] Fix | Delete
$r->Z = self::fe_add($t0, $r->T);
[1315] Fix | Delete
$r->T = self::fe_sub($t0, $r->T);
[1316] Fix | Delete
[1317] Fix | Delete
return $r;
[1318] Fix | Delete
}
[1319] Fix | Delete
[1320] Fix | Delete
/**
[1321] Fix | Delete
* @internal You should not use this directly from another application
[1322] Fix | Delete
*
[1323] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R
[1324] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p
[1325] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q
[1326] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1
[1327] Fix | Delete
*/
[1328] Fix | Delete
public static function ge_msub(
[1329] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R,
[1330] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p,
[1331] Fix | Delete
ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q
[1332] Fix | Delete
) {
[1333] Fix | Delete
$r = clone $R;
[1334] Fix | Delete
[1335] Fix | Delete
$r->X = self::fe_add($p->Y, $p->X);
[1336] Fix | Delete
$r->Y = self::fe_sub($p->Y, $p->X);
[1337] Fix | Delete
$r->Z = self::fe_mul($r->X, $q->yminusx);
[1338] Fix | Delete
$r->Y = self::fe_mul($r->Y, $q->yplusx);
[1339] Fix | Delete
$r->T = self::fe_mul($q->xy2d, $p->T);
[1340] Fix | Delete
$t0 = self::fe_add($p->Z, $p->Z);
[1341] Fix | Delete
$r->X = self::fe_sub($r->Z, $r->Y);
[1342] Fix | Delete
$r->Y = self::fe_add($r->Z, $r->Y);
[1343] Fix | Delete
$r->Z = self::fe_sub($t0, $r->T);
[1344] Fix | Delete
$r->T = self::fe_add($t0, $r->T);
[1345] Fix | Delete
[1346] Fix | Delete
return $r;
[1347] Fix | Delete
}
[1348] Fix | Delete
[1349] Fix | Delete
/**
[1350] Fix | Delete
* @internal You should not use this directly from another application
[1351] Fix | Delete
*
[1352] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p
[1353] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_P2
[1354] Fix | Delete
*/
[1355] Fix | Delete
public static function ge_p1p1_to_p2(ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p)
[1356] Fix | Delete
{
[1357] Fix | Delete
$r = new ParagonIE_Sodium_Core_Curve25519_Ge_P2();
[1358] Fix | Delete
$r->X = self::fe_mul($p->X, $p->T);
[1359] Fix | Delete
$r->Y = self::fe_mul($p->Y, $p->Z);
[1360] Fix | Delete
$r->Z = self::fe_mul($p->Z, $p->T);
[1361] Fix | Delete
return $r;
[1362] Fix | Delete
}
[1363] Fix | Delete
[1364] Fix | Delete
/**
[1365] Fix | Delete
* @internal You should not use this directly from another application
[1366] Fix | Delete
*
[1367] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p
[1368] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_P3
[1369] Fix | Delete
*/
[1370] Fix | Delete
public static function ge_p1p1_to_p3(ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p)
[1371] Fix | Delete
{
[1372] Fix | Delete
$r = new ParagonIE_Sodium_Core_Curve25519_Ge_P3();
[1373] Fix | Delete
$r->X = self::fe_mul($p->X, $p->T);
[1374] Fix | Delete
$r->Y = self::fe_mul($p->Y, $p->Z);
[1375] Fix | Delete
$r->Z = self::fe_mul($p->Z, $p->T);
[1376] Fix | Delete
$r->T = self::fe_mul($p->X, $p->Y);
[1377] Fix | Delete
return $r;
[1378] Fix | Delete
}
[1379] Fix | Delete
[1380] Fix | Delete
/**
[1381] Fix | Delete
* @internal You should not use this directly from another application
[1382] Fix | Delete
*
[1383] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_P2
[1384] Fix | Delete
*/
[1385] Fix | Delete
public static function ge_p2_0()
[1386] Fix | Delete
{
[1387] Fix | Delete
return new ParagonIE_Sodium_Core_Curve25519_Ge_P2(
[1388] Fix | Delete
self::fe_0(),
[1389] Fix | Delete
self::fe_1(),
[1390] Fix | Delete
self::fe_1()
[1391] Fix | Delete
);
[1392] Fix | Delete
}
[1393] Fix | Delete
[1394] Fix | Delete
/**
[1395] Fix | Delete
* @internal You should not use this directly from another application
[1396] Fix | Delete
*
[1397] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_P2 $p
[1398] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1
[1399] Fix | Delete
*/
[1400] Fix | Delete
public static function ge_p2_dbl(ParagonIE_Sodium_Core_Curve25519_Ge_P2 $p)
[1401] Fix | Delete
{
[1402] Fix | Delete
$r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1();
[1403] Fix | Delete
[1404] Fix | Delete
$r->X = self::fe_sq($p->X);
[1405] Fix | Delete
$r->Z = self::fe_sq($p->Y);
[1406] Fix | Delete
$r->T = self::fe_sq2($p->Z);
[1407] Fix | Delete
$r->Y = self::fe_add($p->X, $p->Y);
[1408] Fix | Delete
$t0 = self::fe_sq($r->Y);
[1409] Fix | Delete
$r->Y = self::fe_add($r->Z, $r->X);
[1410] Fix | Delete
$r->Z = self::fe_sub($r->Z, $r->X);
[1411] Fix | Delete
$r->X = self::fe_sub($t0, $r->Y);
[1412] Fix | Delete
$r->T = self::fe_sub($r->T, $r->Z);
[1413] Fix | Delete
[1414] Fix | Delete
return $r;
[1415] Fix | Delete
}
[1416] Fix | Delete
[1417] Fix | Delete
/**
[1418] Fix | Delete
* @internal You should not use this directly from another application
[1419] Fix | Delete
*
[1420] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_P3
[1421] Fix | Delete
*/
[1422] Fix | Delete
public static function ge_p3_0()
[1423] Fix | Delete
{
[1424] Fix | Delete
return new ParagonIE_Sodium_Core_Curve25519_Ge_P3(
[1425] Fix | Delete
self::fe_0(),
[1426] Fix | Delete
self::fe_1(),
[1427] Fix | Delete
self::fe_1(),
[1428] Fix | Delete
self::fe_0()
[1429] Fix | Delete
);
[1430] Fix | Delete
}
[1431] Fix | Delete
[1432] Fix | Delete
/**
[1433] Fix | Delete
* @internal You should not use this directly from another application
[1434] Fix | Delete
*
[1435] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p
[1436] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_Cached
[1437] Fix | Delete
*/
[1438] Fix | Delete
public static function ge_p3_to_cached(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p)
[1439] Fix | Delete
{
[1440] Fix | Delete
static $d2 = null;
[1441] Fix | Delete
if ($d2 === null) {
[1442] Fix | Delete
$d2 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d2);
[1443] Fix | Delete
}
[1444] Fix | Delete
/** @var ParagonIE_Sodium_Core_Curve25519_Fe $d2 */
[1445] Fix | Delete
$r = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached();
[1446] Fix | Delete
$r->YplusX = self::fe_add($p->Y, $p->X);
[1447] Fix | Delete
$r->YminusX = self::fe_sub($p->Y, $p->X);
[1448] Fix | Delete
$r->Z = self::fe_copy($p->Z);
[1449] Fix | Delete
$r->T2d = self::fe_mul($p->T, $d2);
[1450] Fix | Delete
return $r;
[1451] Fix | Delete
}
[1452] Fix | Delete
[1453] Fix | Delete
/**
[1454] Fix | Delete
* @internal You should not use this directly from another application
[1455] Fix | Delete
*
[1456] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p
[1457] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_P2
[1458] Fix | Delete
*/
[1459] Fix | Delete
public static function ge_p3_to_p2(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p)
[1460] Fix | Delete
{
[1461] Fix | Delete
return new ParagonIE_Sodium_Core_Curve25519_Ge_P2(
[1462] Fix | Delete
self::fe_copy($p->X),
[1463] Fix | Delete
self::fe_copy($p->Y),
[1464] Fix | Delete
self::fe_copy($p->Z)
[1465] Fix | Delete
);
[1466] Fix | Delete
}
[1467] Fix | Delete
[1468] Fix | Delete
/**
[1469] Fix | Delete
* @internal You should not use this directly from another application
[1470] Fix | Delete
*
[1471] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h
[1472] Fix | Delete
* @return string
[1473] Fix | Delete
* @throws SodiumException
[1474] Fix | Delete
* @throws TypeError
[1475] Fix | Delete
*/
[1476] Fix | Delete
public static function ge_p3_tobytes(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h)
[1477] Fix | Delete
{
[1478] Fix | Delete
$recip = self::fe_invert($h->Z);
[1479] Fix | Delete
$x = self::fe_mul($h->X, $recip);
[1480] Fix | Delete
$y = self::fe_mul($h->Y, $recip);
[1481] Fix | Delete
$s = self::fe_tobytes($y);
[1482] Fix | Delete
$s[31] = self::intToChr(
[1483] Fix | Delete
self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7)
[1484] Fix | Delete
);
[1485] Fix | Delete
return $s;
[1486] Fix | Delete
}
[1487] Fix | Delete
[1488] Fix | Delete
/**
[1489] Fix | Delete
* @internal You should not use this directly from another application
[1490] Fix | Delete
*
[1491] Fix | Delete
* @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p
[1492] Fix | Delete
* @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1
[1493] Fix | Delete
*/
[1494] Fix | Delete
public static function ge_p3_dbl(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p)
[1495] Fix | Delete
{
[1496] Fix | Delete
$q = self::ge_p3_to_p2($p);
[1497] Fix | Delete
return self::ge_p2_dbl($q);
[1498] Fix | Delete
}
[1499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function