123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- <?php
- /*
- * This file is part of the PHPASN1 library.
- *
- * Copyright © Friedrich Große <friedrich.grosse@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace FG\X509\CSR;
- use FG\ASN1\OID;
- use FG\ASN1\Universal\Integer;
- use FG\ASN1\Universal\BitString;
- use FG\ASN1\Universal\Sequence;
- use FG\X509\CertificateSubject;
- use FG\X509\AlgorithmIdentifier;
- use FG\X509\PublicKey;
- class CSR extends Sequence
- {
- const CSR_VERSION_NR = 0;
- protected $subject;
- protected $publicKey;
- protected $signature;
- protected $signatureAlgorithm;
- protected $startSequence;
- /**
- * @param string $commonName
- * @param string $email
- * @param string $organization
- * @param string $locality
- * @param string $state
- * @param string $country
- * @param string $organizationalUnit
- * @param string $publicKey
- * @param string $signature
- * @param string $signatureAlgorithm
- */
- public function __construct($commonName, $email, $organization, $locality, $state, $country, $organizationalUnit, $publicKey, $signature = null, $signatureAlgorithm = OID::SHA1_WITH_RSA_SIGNATURE)
- {
- $this->subject = new CertificateSubject(
- $commonName,
- $email,
- $organization,
- $locality,
- $state,
- $country,
- $organizationalUnit
- );
- $this->publicKey = $publicKey;
- $this->signature = $signature;
- $this->signatureAlgorithm = $signatureAlgorithm;
- if (isset($signature)) {
- $this->createCSRSequence();
- }
- }
- protected function createCSRSequence()
- {
- $versionNr = new Integer(self::CSR_VERSION_NR);
- $publicKey = new PublicKey($this->publicKey);
- $signature = new BitString($this->signature);
- $signatureAlgorithm = new AlgorithmIdentifier($this->signatureAlgorithm);
- $certRequestInfo = new Sequence($versionNr, $this->subject, $publicKey);
- // Clear the underlying Construct
- $this->rewind();
- $this->children = [];
- $this->addChild($certRequestInfo);
- $this->addChild($signatureAlgorithm);
- $this->addChild($signature);
- }
- public function getSignatureSubject()
- {
- $versionNr = new Integer(self::CSR_VERSION_NR);
- $publicKey = new PublicKey($this->publicKey);
- $certRequestInfo = new Sequence($versionNr, $this->subject, $publicKey);
- return $certRequestInfo->getBinary();
- }
- public function setSignature($signature, $signatureAlgorithm = OID::SHA1_WITH_RSA_SIGNATURE)
- {
- $this->signature = $signature;
- $this->signatureAlgorithm = $signatureAlgorithm;
- $this->createCSRSequence();
- }
- public function __toString()
- {
- $tmp = base64_encode($this->getBinary());
- for ($i = 0; $i < strlen($tmp); $i++) {
- if (($i + 2) % 65 == 0) {
- $tmp = substr($tmp, 0, $i + 1)."\n".substr($tmp, $i + 1);
- }
- }
- $result = '-----BEGIN CERTIFICATE REQUEST-----'.PHP_EOL;
- $result .= $tmp.PHP_EOL;
- $result .= '-----END CERTIFICATE REQUEST-----';
- return $result;
- }
- public function getVersion()
- {
- return self::CSR_VERSION_NR;
- }
- public function getOrganizationName()
- {
- return $this->subject->getOrganization();
- }
- public function getLocalName()
- {
- return $this->subject->getLocality();
- }
- public function getState()
- {
- return $this->subject->getState();
- }
- public function getCountry()
- {
- return $this->subject->getCountry();
- }
- public function getOrganizationalUnit()
- {
- return $this->subject->getOrganizationalUnit();
- }
- public function getPublicKey()
- {
- return $this->publicKey;
- }
- public function getSignature()
- {
- return $this->signature;
- }
- public function getSignatureAlgorithm()
- {
- return $this->signatureAlgorithm;
- }
- }
|