<?php namespace Mdanter\Ecc\Serializer\PrivateKey; use Mdanter\Ecc\Crypto\Key\PrivateKeyInterface; /** * PEM Private key formatter * * @link https://tools.ietf.org/html/rfc5915 */ class PemPrivateKeySerializer implements PrivateKeySerializerInterface { /** * @var DerPrivateKeySerializer */ private $derSerializer; /** * @param DerPrivateKeySerializer $derSerializer */ public function __construct(DerPrivateKeySerializer $derSerializer) { $this->derSerializer = $derSerializer; } /** * {@inheritDoc} * @see \Mdanter\Ecc\Serializer\PrivateKeySerializerInterface::serialize() */ public function serialize(PrivateKeyInterface $key) { $privateKeyInfo = $this->derSerializer->serialize($key); $content = '-----BEGIN EC PRIVATE KEY-----'.PHP_EOL; $content .= trim(chunk_split(base64_encode($privateKeyInfo), 64, PHP_EOL)).PHP_EOL; $content .= '-----END EC PRIVATE KEY-----'; return $content; } /** * {@inheritDoc} * @see \Mdanter\Ecc\Serializer\PrivateKeySerializerInterface::parse() */ public function parse($formattedKey) { $formattedKey = str_replace('-----BEGIN EC PRIVATE KEY-----', '', $formattedKey); $formattedKey = str_replace('-----END EC PRIVATE KEY-----', '', $formattedKey); $data = base64_decode($formattedKey); return $this->derSerializer->parse($data); } }