/** * * @see \CryptoUtil\Crypto\Crypto::sign() */ public function sign($data, PrivateKeyInfo $privkey_info, SignatureAlgorithmIdentifier $algo) { $this->_checkSignatureAlgoAndKey($algo, $privkey_info->algorithmIdentifier()); $result = openssl_sign($data, $signature, $privkey_info->toPEM(), $this->_algoToDigest($algo)); if (false === $result) { throw new \RuntimeException("openssl_sign() failed: " . $this->_getLastError()); } return new Signature($signature); }
/** * Convert JWK to PEM. * * @return PEM PRIVATE KEY */ public function toPEM() { $n = $this->modulusParameter()->number()->base10(); $e = $this->exponentParameter()->number()->base10(); $d = $this->privateExponentParameter()->number()->base10(); $p = $this->firstPrimeFactorParameter()->number()->base10(); $q = $this->secondPrimeFactorParameter()->number()->base10(); $dp = $this->firstFactorCRTExponentParameter()->number()->base10(); $dq = $this->secondFactorCRTExponentParameter()->number()->base10(); $qi = $this->firstCRTCoefficientParameter()->number()->base10(); $pk = new RSAPrivateKey($n, $e, $d, $p, $q, $dp, $dq, $qi); $pki = new PrivateKeyInfo(new RSAEncryptionAlgorithmIdentifier(), $pk->toDER()); return $pki->toPEM(); }