예제 #1
0
<?php

require "../vendor/autoload.php";
use Mdanter\Ecc\Serializer\PublicKey\DerPublicKeySerializer;
use Mdanter\X509\Serializer\Certificates\CertificateSubjectSerializer;
use Mdanter\X509\Serializer\Signature\DerSignatureSerializer;
$curveName = 'secp256k1';
$hasherName = 'sha512';
$serialNo = 0;
$math = \Mdanter\Ecc\EccFactory::getAdapter();
$f = new \Mdanter\X509\Factory();
$domain = $f->getDomain($math, $curveName, $hasherName);
$G = $domain->getGenerator();
$randomInt = \Mdanter\Ecc\Random\RandomGeneratorFactory::getUrandomGenerator()->generate($G->getOrder());
$k = $G->getPrivateKeyFrom($randomInt);
$issuerDetails = ['commonName' => 'test CA'];
$issuerSubject = new \Mdanter\X509\Certificates\CertificateSubject($issuerDetails);
$ca = $f->getCA($math, $domain, $issuerSubject);
$serializer = new \Mdanter\X509\Serializer\Certificates\CertificateSerializer(new CertificateSubjectSerializer(), new DerPublicKeySerializer(), new DerSignatureSerializer());
$validityStart = new DateTime('now');
$validityEnd = new DateTime('now');
$validityEnd->modify("+1 year");
$info = new \Mdanter\X509\Certificates\CertificateInfo(0, $domain->getSigAlgorithm(), $issuerSubject, $issuerSubject, $k->getPublicKey(), $validityStart, $validityEnd);
$usage = new \Mdanter\X509\Extensions\Extension\KeyUsage(null);
$usage->addKeyUsage(0);
$usage->addKeyUsage(1);
$usage->addKeyUsage(5);
var_dump($usage->getBitString());
$certificate = $ca->createCertificate($serializer, $info, $k);
echo $serializer->serialize($certificate);