.htaccess
1 year ago
Curve25519.php
1 year ago
Curve448.php
1 year ago
Ed25519.php
1 year ago
Ed448.php
1 year ago
brainpoolP160r1.php
1 year ago
brainpoolP160t1.php
1 year ago
brainpoolP192r1.php
1 year ago
brainpoolP192t1.php
1 year ago
brainpoolP224r1.php
1 year ago
brainpoolP224t1.php
1 year ago
brainpoolP256r1.php
1 year ago
brainpoolP256t1.php
1 year ago
brainpoolP320r1.php
1 year ago
brainpoolP320t1.php
1 year ago
brainpoolP384r1.php
1 year ago
brainpoolP384t1.php
1 year ago
brainpoolP512r1.php
1 year ago
brainpoolP512t1.php
1 year ago
index.html
1 year ago
nistb233.php
1 year ago
nistb409.php
1 year ago
nistk163.php
1 year ago
nistk233.php
1 year ago
nistk283.php
1 year ago
nistk409.php
1 year ago
nistp192.php
1 year ago
nistp224.php
1 year ago
nistp256.php
1 year ago
nistp384.php
1 year ago
nistp521.php
1 year ago
nistt571.php
1 year ago
prime192v1.php
1 year ago
prime192v2.php
1 year ago
prime192v3.php
1 year ago
prime239v1.php
1 year ago
prime239v2.php
1 year ago
prime239v3.php
1 year ago
prime256v1.php
1 year ago
secp112r1.php
1 year ago
secp112r2.php
1 year ago
secp128r1.php
1 year ago
secp128r2.php
1 year ago
secp160k1.php
1 year ago
secp160r1.php
1 year ago
secp160r2.php
1 year ago
secp192k1.php
1 year ago
secp192r1.php
1 year ago
secp224k1.php
1 year ago
secp224r1.php
1 year ago
secp256k1.php
1 year ago
secp256r1.php
1 year ago
secp384r1.php
1 year ago
secp521r1.php
1 year ago
sect113r1.php
1 year ago
sect113r2.php
1 year ago
sect131r1.php
1 year ago
sect131r2.php
1 year ago
sect163k1.php
1 year ago
sect163r1.php
1 year ago
sect163r2.php
1 year ago
sect193r1.php
1 year ago
sect193r2.php
1 year ago
sect233k1.php
1 year ago
sect233r1.php
1 year ago
sect239k1.php
1 year ago
sect283k1.php
1 year ago
sect283r1.php
1 year ago
sect409k1.php
1 year ago
sect409r1.php
1 year ago
sect571k1.php
1 year ago
sect571r1.php
1 year ago
web.config
1 year ago
Curve448.php
92 lines
| 1 | <?php |
| 2 | |
| 3 | /** |
| 4 | * Curve448 |
| 5 | * |
| 6 | * PHP version 5 and 7 |
| 7 | * |
| 8 | * @author Jim Wigginton <terrafrost@php.net> |
| 9 | * @copyright 2019 Jim Wigginton |
| 10 | * @license http://www.opensource.org/licenses/mit-license.html MIT License |
| 11 | * @link http://pear.php.net/package/Math_BigInteger |
| 12 | */ |
| 13 | |
| 14 | declare(strict_types=1); |
| 15 | |
| 16 | namespace phpseclib3\Crypt\EC\Curves; |
| 17 | |
| 18 | use phpseclib3\Crypt\EC\BaseCurves\Montgomery; |
| 19 | use phpseclib3\Exception\RangeException; |
| 20 | use phpseclib3\Math\BigInteger; |
| 21 | |
| 22 | class Curve448 extends Montgomery |
| 23 | { |
| 24 | public function __construct() |
| 25 | { |
| 26 | // 2^448 - 2^224 - 1 |
| 27 | $this->setModulo(new BigInteger( |
| 28 | 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE' . |
| 29 | 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', |
| 30 | 16 |
| 31 | )); |
| 32 | $this->a24 = $this->factory->newInteger(new BigInteger('39081')); |
| 33 | $this->p = [$this->factory->newInteger(new BigInteger(5))]; |
| 34 | // 2^446 - 0x8335dc163bb124b65129c96fde933d8d723a70aadc873d6d54a7bb0d |
| 35 | $this->setOrder(new BigInteger( |
| 36 | '3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' . |
| 37 | '7CCA23E9C44EDB49AED63690216CC2728DC58F552378C292AB5844F3', |
| 38 | 16 |
| 39 | )); |
| 40 | |
| 41 | /* |
| 42 | $this->setCoefficients( |
| 43 | new BigInteger('156326'), // a |
| 44 | ); |
| 45 | $this->setBasePoint( |
| 46 | new BigInteger(5), |
| 47 | new BigInteger( |
| 48 | '355293926785568175264127502063783334808976399387714271831880898' . |
| 49 | '435169088786967410002932673765864550910142774147268105838985595290' . |
| 50 | '606362') |
| 51 | ); |
| 52 | */ |
| 53 | } |
| 54 | |
| 55 | /** |
| 56 | * Multiply a point on the curve by a scalar |
| 57 | * |
| 58 | * Modifies the scalar as described at https://tools.ietf.org/html/rfc7748#page-8 |
| 59 | */ |
| 60 | public function multiplyPoint(array $p, BigInteger $d): array |
| 61 | { |
| 62 | //$r = strrev(sodium_crypto_scalarmult($d->toBytes(), strrev($p[0]->toBytes()))); |
| 63 | //return [$this->factory->newInteger(new BigInteger($r, 256))]; |
| 64 | |
| 65 | $d = $d->toBytes(); |
| 66 | $d[0] = $d[0] & "\xFC"; |
| 67 | $d = strrev($d); |
| 68 | $d |= "\x80"; |
| 69 | $d = new BigInteger($d, 256); |
| 70 | |
| 71 | return parent::multiplyPoint($p, $d); |
| 72 | } |
| 73 | |
| 74 | /** |
| 75 | * Creates a random scalar multiplier |
| 76 | */ |
| 77 | public function createRandomMultiplier(): BigInteger |
| 78 | { |
| 79 | return BigInteger::random(446); |
| 80 | } |
| 81 | |
| 82 | /** |
| 83 | * Performs range check |
| 84 | */ |
| 85 | public function rangeCheck(BigInteger $x): void |
| 86 | { |
| 87 | if ($x->getLength() > 448 || $x->isNegative()) { |
| 88 | throw new RangeException('x must be a positive integer less than 446 bytes in length'); |
| 89 | } |
| 90 | } |
| 91 | } |
| 92 |