.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
secp192r1.php
81 lines
| 1 | <?php |
| 2 | |
| 3 | /** |
| 4 | * secp192r1 |
| 5 | * |
| 6 | * This is the NIST P-192 curve |
| 7 | * |
| 8 | * PHP version 5 and 7 |
| 9 | * |
| 10 | * @author Jim Wigginton <terrafrost@php.net> |
| 11 | * @copyright 2017 Jim Wigginton |
| 12 | * @license http://www.opensource.org/licenses/mit-license.html MIT License |
| 13 | * @link http://pear.php.net/package/Math_BigInteger |
| 14 | */ |
| 15 | |
| 16 | declare(strict_types=1); |
| 17 | |
| 18 | namespace phpseclib3\Crypt\EC\Curves; |
| 19 | |
| 20 | use phpseclib3\Crypt\EC\BaseCurves\Prime; |
| 21 | use phpseclib3\Math\BigInteger; |
| 22 | |
| 23 | class secp192r1 extends Prime |
| 24 | { |
| 25 | public function __construct() |
| 26 | { |
| 27 | $modulo = new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF', 16); |
| 28 | $this->setModulo($modulo); |
| 29 | |
| 30 | // algorithm 2.27 from http://diamond.boisestate.edu/~liljanab/MATH308/GuideToECC.pdf#page=66 |
| 31 | /* in theory this should be faster than regular modular reductions save for one small issue. |
| 32 | to convert to / from base-2**8 with BCMath you have to call bcmul() and bcdiv() a lot. |
| 33 | to convert to / from base-2**8 with PHP64 you have to call base256_rshift() a lot. |
| 34 | in short, converting to / from base-2**8 is pretty expensive and that expense is |
| 35 | enough to offset whatever else might be gained by a simplified reduction algorithm. |
| 36 | now, if PHP supported unsigned integers things might be different. no bit-shifting |
| 37 | would be required for the PHP engine and it'd be a lot faster. but as is, BigInteger |
| 38 | uses base-2**31 or base-2**26 depending on whether or not the system is has a 32-bit |
| 39 | or a 64-bit OS. |
| 40 | */ |
| 41 | /* |
| 42 | $m_length = $this->getLengthInBytes(); |
| 43 | $this->setReduction(function($c) use ($m_length) { |
| 44 | $cBytes = $c->toBytes(); |
| 45 | $className = $this->className; |
| 46 | |
| 47 | if (strlen($cBytes) > 2 * $m_length) { |
| 48 | list(, $r) = $c->divide($className::$modulo); |
| 49 | return $r; |
| 50 | } |
| 51 | |
| 52 | $c = str_pad($cBytes, 48, "\0", STR_PAD_LEFT); |
| 53 | $c = array_reverse(str_split($c, 8)); |
| 54 | |
| 55 | $null = "\0\0\0\0\0\0\0\0"; |
| 56 | $s1 = new BigInteger($c[2] . $c[1] . $c[0], 256); |
| 57 | $s2 = new BigInteger($null . $c[3] . $c[3], 256); |
| 58 | $s3 = new BigInteger($c[4] . $c[4] . $null, 256); |
| 59 | $s4 = new BigInteger($c[5] . $c[5] . $c[5], 256); |
| 60 | |
| 61 | $r = $s1->add($s2)->add($s3)->add($s4); |
| 62 | while ($r->compare($className::$modulo) >= 0) { |
| 63 | $r = $r->subtract($className::$modulo); |
| 64 | } |
| 65 | |
| 66 | return $r; |
| 67 | }); |
| 68 | */ |
| 69 | |
| 70 | $this->setCoefficients( |
| 71 | new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC', 16), |
| 72 | new BigInteger('64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1', 16) |
| 73 | ); |
| 74 | $this->setBasePoint( |
| 75 | new BigInteger('188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012', 16), |
| 76 | new BigInteger('07192B95FFC8DA78631011ED6B24CDD573F977A11E794811', 16) |
| 77 | ); |
| 78 | $this->setOrder(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831', 16)); |
| 79 | } |
| 80 | } |
| 81 |