File "UncompressedPointSerializer.php"
Full Path: /home/digidjwy/public_html/wp-content/plugins/mycryptocheckout/vendor/mdanter/ecc/src/Serializer/Point/UncompressedPointSerializer.php
File size: 1.65 KB
MIME-type: text/x-php
Charset: utf-8
<?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);
}
}