/** * {@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; }
/** * @param EncryptedPrivateKey $key * @param string $password * @return string */ public function serialize(EncryptedPrivateKey $key, $password) { $privateKey = $key->getKey(); $iv = $key->getIv(); $method = $key->getMethod(); $plaintext = $this->derSerializer->serialize($privateKey); $key = md5($password . substr($iv, 0, 8), true); $ciphertext = openssl_encrypt($plaintext, $method, $key, OPENSSL_RAW_DATA, $iv); if (false === $ciphertext) { throw new \RuntimeException('Failed to encrypt key'); } return "-----BEGIN EC PRIVATE KEY-----" . "\n" . "Proc-Type: 4,ENCRYPTED" . "\n" . "DEK-Info: " . strtoupper($method) . "," . strtoupper(unpack("H*", $iv)[1]) . "\n\n" . implode("\n", str_split(base64_encode($ciphertext), 64)) . "\n" . "-----END EC PRIVATE KEY-----"; }
/** * @return Binary */ public function generateKey() { $generator = EccFactory::getNistCurves()->generator256(); $key = $generator->createPrivateKey(); $serializer = new DerPrivateKeySerializer(); $serialized = $serializer->serialize($key); return new Binary($serialized); }
/** * {@inheritDoc} * @see \Mdanter\Ecc\Serializer\PrivateKeySerializerInterface::serialize() */ public function getPrivateKeyInfo(PrivateKeyInterface $key) { $keyData = $this->serializer->serialize($key); $privateKeyInfo = new Sequence(new Integer(self::VERSION), new Sequence(new ObjectIdentifier(DerPublicKeySerializer::X509_ECDSA_OID), CurveOidMapper::getCurveOid($key->getPoint()->getCurve())), new OctetString(bin2hex($keyData))); return $privateKeyInfo; }