/** * * @see PublicKey::fromPEM() * @param PEM $pem * @throws \UnexpectedValueException * @return self */ public static function fromPEM(PEM $pem) { if ($pem->type() == PEM::TYPE_RSA_PUBLIC_KEY) { return self::fromDER($pem->data()); } if ($pem->type() != PEM::TYPE_PUBLIC_KEY) { throw new \UnexpectedValueException("Invalid PEM type."); } $pki = PublicKeyInfo::fromDER($pem->data()); if ($pki->algorithmIdentifier()->oid() != AlgorithmIdentifier::OID_RSA_ENCRYPTION) { throw new \UnexpectedValueException("Not an RSA public key."); } return self::fromDER($pki->publicKeyData()); }
/** * * @see PublicKey::fromPEM() * @param PEM $pem * @throws \UnexpectedValueException * @return self */ public static function fromPEM(PEM $pem) { if ($pem->type() != PEM::TYPE_PUBLIC_KEY) { throw new \UnexpectedValueException("Not a public key."); } $pki = PublicKeyInfo::fromDER($pem->data()); $algo = $pki->algorithmIdentifier(); if ($algo->oid() != AlgorithmIdentifier::OID_EC_PUBLIC_KEY) { throw new \UnexpectedValueException("Not an elliptic curve key."); } // ECPoint is directly mapped into public key data return new self($pki->publicKeyData(), $algo->namedCurve()); }