Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
metropolite
/
wp-content
/
plugins
/
mycryptocheckout
/
vendor
/
mdanter
/
ecc
/
src
/
Serializer
/
Point
:
UncompressedPointSerializer.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace Mdanter\Ecc\Serializer\Point; use Mdanter\Ecc\Math\GmpMathInterface; use Mdanter\Ecc\Primitives\PointInterface; use Mdanter\Ecc\Primitives\CurveFpInterface; use Mdanter\Ecc\Serializer\Util\CurveOidMapper; use Mdanter\Ecc\Util\BinaryString; class UncompressedPointSerializer implements PointSerializerInterface { /** * @var GmpMathInterface */ private $adapter; /** * @param GmpMathInterface $adapter */ public function __construct(GmpMathInterface $adapter) { $this->adapter = $adapter; } /** * @param PointInterface $point * @return string */ public function serialize(PointInterface $point) { $length = CurveOidMapper::getByteSize($point->getCurve()) * 2; $hexString = '04'; $hexString .= str_pad(gmp_strval($point->getX(), 16), $length, '0', STR_PAD_LEFT); $hexString .= str_pad(gmp_strval($point->getY(), 16), $length, '0', STR_PAD_LEFT); return $hexString; } /** * @param CurveFpInterface $curve * @param string $data * @return PointInterface */ public function unserialize(CurveFpInterface $curve, $data) { if (BinaryString::substring($data, 0, 2) != '04') { throw new \InvalidArgumentException('Invalid data: only uncompressed keys are supported.'); } $data = BinaryString::substring($data, 2); $dataLength = BinaryString::length($data); $x = gmp_init(BinaryString::substring($data, 0, $dataLength / 2), 16); $y = gmp_init(BinaryString::substring($data, $dataLength / 2), 16); return $curve->getPoint($x, $y); } }