Beispiel #1
0
 public function format(PublicKeyInterface $key)
 {
     if (!$key->getCurve() instanceof NamedCurveFp) {
         throw new \RuntimeException('Not implemented for unnamed curves');
     }
     $sequence = new Sequence(new Sequence(new ObjectIdentifier(DerPublicKeySerializer::X509_ECDSA_OID), CurveOidMapper::getCurveOid($key->getCurve())), new BitString($this->encodePoint($key->getPoint())));
     return $sequence->getBinary();
 }
Beispiel #2
0
 /**
  * @param NamedCurveFp $c
  * @param GeneratorPoint $G
  * @return string
  */
 public function serialize(NamedCurveFp $c, GeneratorPoint $G)
 {
     $math = $G->getAdapter();
     $fieldID = $this->getFieldIdAsn($math, $c);
     $curve = $this->getCurveAsn($math, $c);
     $domain = new Sequence(new Integer(1), $fieldID, $curve, new OctetString($this->pointSerializer->serialize($G)), new Integer($G->getOrder()), new Integer(1));
     $payload = $domain->getBinary();
     $content = self::HEADER . PHP_EOL . trim(chunk_split(base64_encode($payload), 64, PHP_EOL)) . PHP_EOL . self::FOOTER;
     return $content;
 }
Beispiel #3
0
 public function testParseBase64()
 {
     $sequence = new Sequence(new Set(new ObjectIdentifier('1.2.250.1.16.9'), new Sequence(new Integer(42), new BitString('A0 12 00 43'))));
     $data = base64_encode($sequence->getBinary());
     $template = [Identifier::SEQUENCE => [Identifier::SET => [Identifier::OBJECT_IDENTIFIER, Identifier::SEQUENCE => [Identifier::INTEGER, Identifier::BITSTRING]]]];
     $parser = new TemplateParser();
     $object = $parser->parseBase64($data, $template);
     $this->assertInstanceOf(Set::class, $object[0]);
     $this->assertInstanceOf(ObjectIdentifier::class, $object[0][0]);
     $this->assertInstanceOf(Sequence::class, $object[0][1]);
     $this->assertInstanceOf(Integer::class, $object[0][1][0]);
     $this->assertInstanceOf(BitString::class, $object[0][1][1]);
 }
 public function testREADME_encoding()
 {
     $this->expectOutputString('MBgCAwHiQAEB/woBARYLSGVsbG8gd29ybGQxODAYAgMB4kABAf8KAQEWC0hlbGxvIHdvcmxkBQAGBiqBegEQCQYJKoZIhvcNAQEBEwdGb28gYmFy');
     $integer = new Integer(123456);
     $boolean = new Boolean(true);
     $enum = new Enumerated(1);
     $ia5String = new IA5String('Hello world');
     $asnNull = new NullObject();
     $objectIdentifier1 = new ObjectIdentifier('1.2.250.1.16.9');
     $objectIdentifier2 = new ObjectIdentifier(OID::RSA_ENCRYPTION);
     $printableString = new PrintableString('Foo bar');
     $sequence = new Sequence($integer, $boolean, $enum, $ia5String);
     $set = new Set($sequence, $asnNull, $objectIdentifier1, $objectIdentifier2, $printableString);
     $myBinary = $sequence->getBinary();
     $myBinary .= $set->getBinary();
     echo base64_encode($myBinary);
 }
Beispiel #5
0
 /**
  * @depends testFromBinary
  */
 public function testFromBinaryWithOffset()
 {
     $originalObject1 = new Sequence(new Boolean(true), new Integer(123));
     $originalObject2 = new Sequence(new Integer(64), new Boolean(false));
     $binaryData = $originalObject1->getBinary();
     $binaryData .= $originalObject2->getBinary();
     $offset = 0;
     $parsedObject = Sequence::fromBinary($binaryData, $offset);
     $this->assertEquals($originalObject1, $parsedObject);
     $this->assertEquals(8, $offset);
     $parsedObject = Sequence::fromBinary($binaryData, $offset);
     $this->assertEquals($originalObject2, $parsedObject);
     $this->assertEquals(16, $offset);
 }
Beispiel #6
0
 /**
  * @param Sequence $object
  * @return \Mdanter\Ecc\Crypto\Key\PublicKeyInterface
  */
 public function parseSubjectKeyInfo(Sequence $object)
 {
     $pubkey = $this->pubKeySer->parse($object->getBinary());
     return $pubkey;
 }
Beispiel #7
0
 /**
  * @param \Jose\Object\JWKInterface $key
  * @param string                    $data
  * @param string                    $R
  * @param string                    $S
  *
  * @return bool
  */
 private function verifyOpenSSLSignature(JWKInterface $key, $data, $R, $S)
 {
     $pem = ECKey::toPublic(new ECKey($key))->toPEM();
     $oid_sequence = new Sequence();
     $oid_sequence->addChildren([new Integer(gmp_strval($this->convertHexToGmp($R), 10)), new Integer(gmp_strval($this->convertHexToGmp($S), 10))]);
     return 1 === openssl_verify($data, $oid_sequence->getBinary(), $pem, $this->getHashAlgorithm());
 }
Beispiel #8
0
<?php

require_once __DIR__ . '/../vendor/autoload.php';
use FG\ASN1\OID;
use FG\ASN1\Universal\Integer;
use FG\ASN1\Universal\Boolean;
use FG\ASN1\Universal\Enumerated;
use FG\ASN1\Universal\IA5String;
use FG\ASN1\Universal\ObjectIdentifier;
use FG\ASN1\Universal\PrintableString;
use FG\ASN1\Universal\Sequence;
use FG\ASN1\Universal\Set;
use FG\ASN1\Universal\NullObject;
$integer = new Integer(123456);
$boolean = new Boolean(true);
$enum = new Enumerated(1);
$ia5String = new IA5String('Hello world');
$asnNull = new NullObject();
$objectIdentifier1 = new ObjectIdentifier('1.2.250.1.16.9');
$objectIdentifier2 = new ObjectIdentifier(OID::RSA_ENCRYPTION);
$printableString = new PrintableString('Foo bar');
$sequence = new Sequence($integer, $boolean, $enum, $ia5String);
$set = new Set($sequence, $asnNull, $objectIdentifier1, $objectIdentifier2, $printableString);
$myBinary = $sequence->getBinary();
$myBinary .= $set->getBinary();
echo base64_encode($myBinary);
 /**
  * {@inheritDoc}
  * @see \Mdanter\Ecc\Serializer\PrivateKeySerializerInterface::serialize()
  */
 public function serialize(PrivateKeyInterface $key)
 {
     $privateKeyInfo = new Sequence(new Integer(self::VERSION), new OctetString($this->formatKey($key)), new ExplicitlyTaggedObject(0, CurveOidMapper::getCurveOid($key->getPoint()->getCurve())), new ExplicitlyTaggedObject(1, $this->encodePubKey($key)));
     return $privateKeyInfo->getBinary();
 }
Beispiel #10
0
 /**
  *
  */
 private function initPrivateKey()
 {
     $this->addChild(new Integer(0));
     $oid_sequence = new Sequence();
     $oid_sequence->addChild(new ObjectIdentifier('1.2.840.113549.1.1.1'));
     $oid_sequence->addChild(new NullObject());
     $this->addChild($oid_sequence);
     $v = new Integer(0);
     $n = new Integer($this->fromBase64ToInteger($this->n));
     $e = new Integer($this->fromBase64ToInteger($this->e));
     $d = new Integer($this->fromBase64ToInteger($this->d));
     $p = new Integer($this->fromBase64ToInteger($this->p));
     $q = new Integer($this->fromBase64ToInteger($this->q));
     $dp = new Integer($this->fromBase64ToInteger($this->dp));
     $dq = new Integer($this->fromBase64ToInteger($this->dq));
     $qi = new Integer($this->fromBase64ToInteger($this->qi));
     $key_sequence = new Sequence();
     $key_sequence->addChild($v);
     $key_sequence->addChild($n);
     $key_sequence->addChild($e);
     $key_sequence->addChild($d);
     $key_sequence->addChild($p);
     $key_sequence->addChild($q);
     $key_sequence->addChild($dp);
     $key_sequence->addChild($dq);
     $key_sequence->addChild($qi);
     $key_octet_string = new OctetString(bin2hex($key_sequence->getBinary()));
     $this->addChild($key_octet_string);
 }
Beispiel #11
0
 private function initPrivateKey()
 {
     $this->addChild(new Integer(0));
     $oid_sequence = new Sequence();
     $oid_sequence->addChild(new ObjectIdentifier('1.2.840.113549.1.1.1'));
     $oid_sequence->addChild(new NullObject());
     $this->addChild($oid_sequence);
     $v = new Integer(0);
     $n = new Integer($this->fromBase64ToInteger($this->values['n']));
     $e = new Integer($this->fromBase64ToInteger($this->values['e']));
     $d = new Integer($this->fromBase64ToInteger($this->values['d']));
     $p = new Integer($this->fromBase64ToInteger($this->values['p']));
     $q = new Integer($this->fromBase64ToInteger($this->values['q']));
     $dp = array_key_exists('dp', $this->values) ? new Integer($this->fromBase64ToInteger($this->values['dp'])) : new Integer(0);
     $dq = array_key_exists('dq', $this->values) ? new Integer($this->fromBase64ToInteger($this->values['dq'])) : new Integer(0);
     $qi = array_key_exists('qi', $this->values) ? new Integer($this->fromBase64ToInteger($this->values['qi'])) : new Integer(0);
     $key_sequence = new Sequence();
     $key_sequence->addChild($v);
     $key_sequence->addChild($n);
     $key_sequence->addChild($e);
     $key_sequence->addChild($d);
     $key_sequence->addChild($p);
     $key_sequence->addChild($q);
     $key_sequence->addChild($dp);
     $key_sequence->addChild($dq);
     $key_sequence->addChild($qi);
     $key_octet_string = new OctetString(bin2hex($key_sequence->getBinary()));
     $this->addChild($key_octet_string);
 }