Example #1
0
 /**
  * Convert EC public key to PEM.
  *
  * @return PEM
  */
 public function toPEM()
 {
     $curve_oid = CurveParameter::nameToOID($this->curveParameter()->value());
     $x = ECConversion::octetsToNumber($this->XCoordinateParameter()->coordinateOctets());
     $y = ECConversion::octetsToNumber($this->YCoordinateParameter()->coordinateOctets());
     $ec = ECPublicKey::fromCoordinates($x, $y, $curve_oid);
     return $ec->publicKeyInfo()->toPEM();
 }
Example #2
0
 /**
  *
  * @see \JWX\JWS\Algorithm\OpenSSLSignatureAlgorithm::validateSignature()
  * @return bool
  */
 public function validateSignature($data, $signature)
 {
     if (strlen($signature) != $this->_signatureSize) {
         throw new \UnexpectedValueException("Invalid signature length.");
     }
     list($r_octets, $s_octets) = str_split($signature, intval(floor($this->_signatureSize / 2)));
     // convert signature to DER sequence for OpenSSL
     $r = ECConversion::octetsToNumber($r_octets);
     $s = ECConversion::octetsToNumber($s_octets);
     $sig = new ECDSASigValue($r, $s);
     return parent::validateSignature($data, $sig->toDER());
 }
Example #3
0
 /**
  * Convert EC private key to PEM.
  *
  * @return PEM
  */
 public function toPEM()
 {
     $curve_oid = CurveParameter::nameToOID($this->curveParameter()->value());
     $x = ECConversion::octetsToNumber($this->XCoordinateParameter()->coordinateOctets());
     $y = ECConversion::octetsToNumber($this->YCoordinateParameter()->coordinateOctets());
     $pubkey = ECPublicKey::fromCoordinates($x, $y, $curve_oid);
     $priv = $this->ECCPrivateKeyParameter()->privateKeyOctets();
     $ec = new ECPrivateKey($priv, $curve_oid, $pubkey->ECPoint());
     return $ec->privateKeyInfo()->toPEM();
 }
Example #4
0
 /**
  * Get curve point coordinates.
  *
  * @return string[] Tuple of X and Y coordinates as base-10 numbers
  */
 public function curvePoint()
 {
     return array_map(function ($str) {
         return ECConversion::octetsToNumber($str);
     }, $this->curvePointOctets());
 }