diff --git a/src/XML/ds/AbstractKeyInfoType.php b/src/XML/ds/AbstractKeyInfoType.php index b266045f..3753e670 100644 --- a/src/XML/ds/AbstractKeyInfoType.php +++ b/src/XML/ds/AbstractKeyInfoType.php @@ -35,6 +35,7 @@ abstract class AbstractKeyInfoType extends AbstractDsElement * \SimpleSAML\XMLSecurity\XML\ds\KeyValue| * \SimpleSAML\XMLSecurity\XML\ds\RetrievalMethod| * \SimpleSAML\XMLSecurity\XML\ds\X509Data| + * \SimpleSAML\XMLSecurity\XML\ds\PGPData| * \SimpleSAML\XML\SerializableElementInterface * )[] $info * @param string|null $Id @@ -64,7 +65,7 @@ final public function __construct( if ($item instanceof AbstractDsElement) { Assert::isInstanceOfAny( $item, - [KeyName::class, KeyValue::class, RetrievalMethod::class, X509Data::class], + [KeyName::class, KeyValue::class, RetrievalMethod::class, X509Data::class, PGPData::class], SchemaViolationException::class, ); } diff --git a/src/XML/ds/AbstractPGPDataType.php b/src/XML/ds/AbstractPGPDataType.php new file mode 100644 index 00000000..b526fc47 --- /dev/null +++ b/src/XML/ds/AbstractPGPDataType.php @@ -0,0 +1,120 @@ + $children + */ + final public function __construct( + protected ?PGPKeyID $pgpKeyId = null, + protected ?PGPKeyPacket $pgpKeyPacket = null, + array $children = [], + ) { + if ($pgpKeyId === null && $pgpKeyPacket === null) { + throw new SchemaViolationException("ds:PGPKeyID and ds:PGPKeyPacket can't both be null."); + } + + $this->setElements($children); + } + + + /** + * Collect the value of the PGPKeyID-property + * + * @return \SimpleSAML\XMLSecurity\XML\ds\PGPKeyID|null + */ + public function getPGPKeyID(): ?PGPKeyID + { + return $this->pgpKeyId; + } + + + /** + * Collect the value of the PGPKeyPacket-property + * + * @return \SimpleSAML\XMLSecurity\XML\ds\PGPKeyPacket|null + */ + public function getPGPKeyPacket(): ?PGPKeyPacket + { + return $this->pgpKeyPacket; + } + + + /** + * Convert XML into a PGPData + * + * @param \DOMElement $xml The XML element we should load + * @return static + * + * @throws \SimpleSAML\XML\Exception\InvalidDOMElementException + * If the qualified name of the supplied element is wrong + */ + public static function fromXML(DOMElement $xml): static + { + Assert::same($xml->localName, static::getLocalName(), InvalidDOMElementException::class); + Assert::same($xml->namespaceURI, static::NS, InvalidDOMElementException::class); + + $pgpKeyId = PGPKeyID::getChildrenOfClass($xml); + Assert::maxCount($pgpKeyId, 1, TooManyElementsException::class); + + $pgpKeyPacket = PGPKeyPacket::getChildrenOfClass($xml); + Assert::maxCount($pgpKeyPacket, 1, TooManyElementsException::class); + + return new static( + array_pop($pgpKeyId), + array_pop($pgpKeyPacket), + self::getChildElementsFromXML($xml), + ); + } + + + /** + * Convert this PGPData to XML. + * + * @param \DOMElement|null $parent The element we should append this PGPData to. + * @return \DOMElement + */ + public function toXML(DOMElement $parent = null): DOMElement + { + $e = $this->instantiateParentElement($parent); + + $this->getPGPKeyId()?->toXML($e); + $this->getPGPKeyPacket()?->toXML($e); + + foreach ($this->getElements() as $elt) { + $elt->toXML($e); + } + + return $e; + } +} diff --git a/src/XML/ds/KeyInfo.php b/src/XML/ds/KeyInfo.php index 079fde5e..59cd4fce 100644 --- a/src/XML/ds/KeyInfo.php +++ b/src/XML/ds/KeyInfo.php @@ -37,7 +37,7 @@ public static function fromXML(DOMElement $xml): static $keyValue = KeyValue::getChildrenOfClass($xml); $retrievalMethod = RetrievalMethod::getChildrenOfClass($xml); $x509Data = X509Data::getChildrenOfClass($xml); - //$pgpData = PGPData::getChildrenOfClass($xml); + $pgpData = PGPData::getChildrenOfClass($xml); //$spkiData = SPKIData::getChildrenOfClass($xml); $mgmtData = MgmtData::getChildrenOfClass($xml); $other = self::getChildElementsFromXML($xml); @@ -47,7 +47,7 @@ public static function fromXML(DOMElement $xml): static $keyValue, $retrievalMethod, $x509Data, - //$pgpData, + $pgpData, //$spkiData, $mgmtData, $other, diff --git a/src/XML/ds/PGPData.php b/src/XML/ds/PGPData.php new file mode 100644 index 00000000..f8a2c3b9 --- /dev/null +++ b/src/XML/ds/PGPData.php @@ -0,0 +1,14 @@ + '\SimpleSAML\XMLSecurity\XML\ds\Manifest', 'MgmtData' => '\SimpleSAML\XMLSecurity\XML\ds\MgmtData', 'Object' => '\SimpleSAML\XMLSecurity\XML\ds\DsObject', -// 'PGPData' => '\SimpleSAML\XMLSecurity\XML\ds\PGPData', + 'PGPData' => '\SimpleSAML\XMLSecurity\XML\ds\PGPData', 'Reference' => '\SimpleSAML\XMLSecurity\XML\ds\Reference', 'RetrievalMethod' => '\SimpleSAML\XMLSecurity\XML\ds\RetrievalMethod', 'RSAKeyValue' => '\SimpleSAML\XMLSecurity\XML\ds\RSAKeyValue', diff --git a/src/XML/xenc/OriginatorKeyInfo.php b/src/XML/xenc/OriginatorKeyInfo.php index 2aba0d3e..413d9e19 100644 --- a/src/XML/xenc/OriginatorKeyInfo.php +++ b/src/XML/xenc/OriginatorKeyInfo.php @@ -12,6 +12,7 @@ use SimpleSAML\XMLSecurity\XML\ds\KeyName; use SimpleSAML\XMLSecurity\XML\ds\KeyValue; use SimpleSAML\XMLSecurity\XML\ds\MgmtData; +use SimpleSAML\XMLSecurity\XML\ds\PGPData; use SimpleSAML\XMLSecurity\XML\ds\RetrievalMethod; use SimpleSAML\XMLSecurity\XML\ds\X509Data; @@ -51,7 +52,7 @@ public static function fromXML(DOMElement $xml): static $keyValue = KeyValue::getChildrenOfClass($xml); $retrievalMethod = RetrievalMethod::getChildrenOfClass($xml); $x509Data = X509Data::getChildrenOfClass($xml); - //$pgpData = PGPData::getChildrenOfClass($xml); + $pgpData = PGPData::getChildrenOfClass($xml); //$spkiData = SPKIData::getChildrenOfClass($xml); $mgmtData = MgmtData::getChildrenOfClass($xml); $other = self::getChildElementsFromXML($xml); @@ -61,7 +62,7 @@ public static function fromXML(DOMElement $xml): static $keyValue, $retrievalMethod, $x509Data, - //$pgpData, + $pgpData, //$spkiData, $mgmtData, $other, diff --git a/src/XML/xenc/RecipientKeyInfo.php b/src/XML/xenc/RecipientKeyInfo.php index 4d8d6136..e6af6857 100644 --- a/src/XML/xenc/RecipientKeyInfo.php +++ b/src/XML/xenc/RecipientKeyInfo.php @@ -12,6 +12,7 @@ use SimpleSAML\XMLSecurity\XML\ds\KeyName; use SimpleSAML\XMLSecurity\XML\ds\KeyValue; use SimpleSAML\XMLSecurity\XML\ds\MgmtData; +use SimpleSAML\XMLSecurity\XML\ds\PGPData; use SimpleSAML\XMLSecurity\XML\ds\RetrievalMethod; use SimpleSAML\XMLSecurity\XML\ds\X509Data; @@ -51,7 +52,7 @@ public static function fromXML(DOMElement $xml): static $keyValue = KeyValue::getChildrenOfClass($xml); $retrievalMethod = RetrievalMethod::getChildrenOfClass($xml); $x509Data = X509Data::getChildrenOfClass($xml); - //$pgpData = PGPData::getChildrenOfClass($xml); + $pgpData = PGPData::getChildrenOfClass($xml); //$spkiData = SPKIData::getChildrenOfClass($xml); $mgmtData = MgmtData::getChildrenOfClass($xml); $other = self::getChildElementsFromXML($xml); @@ -61,7 +62,7 @@ public static function fromXML(DOMElement $xml): static $keyValue, $retrievalMethod, $x509Data, - //$pgpData, + $pgpData, //$spkiData, $mgmtData, $other, diff --git a/tests/XML/ds/KeyInfoTest.php b/tests/XML/ds/KeyInfoTest.php index 44e25513..1ba1c1a2 100644 --- a/tests/XML/ds/KeyInfoTest.php +++ b/tests/XML/ds/KeyInfoTest.php @@ -16,9 +16,13 @@ use SimpleSAML\XMLSecurity\XML\ds\AbstractKeyInfoType; use SimpleSAML\XMLSecurity\XML\ds\KeyInfo; use SimpleSAML\XMLSecurity\XML\ds\KeyName; +use SimpleSAML\XMLSecurity\XML\ds\PGPData; +use SimpleSAML\XMLSecurity\XML\ds\PGPKeyID; +use SimpleSAML\XMLSecurity\XML\ds\PGPKeyPacket; use SimpleSAML\XMLSecurity\XML\ds\X509Certificate; use SimpleSAML\XMLSecurity\XML\ds\X509Data; use SimpleSAML\XMLSecurity\XML\ds\X509SubjectName; +use SimpleSAML\XMLSecurity\XML\xenc\P; use function dirname; use function openssl_x509_parse; @@ -96,6 +100,11 @@ public function testMarshalling(): void new X509SubjectName(self::$certData['name']), ], ), + new PGPData( + new PGPKeyID('GpM7'), + new PGPKeyPacket('GpM8'), + [new P('/CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI=')], + ), new Chunk(DOMDocumentFactory::fromString( 'some', )->documentElement), diff --git a/tests/XML/ds/PGPDataTest.php b/tests/XML/ds/PGPDataTest.php new file mode 100644 index 00000000..cc56a803 --- /dev/null +++ b/tests/XML/ds/PGPDataTest.php @@ -0,0 +1,95 @@ +assertEquals( + self::$xmlRepresentation->saveXML(self::$xmlRepresentation->documentElement), + strval($pgpData), + ); + } + + + /** + */ + public function testMarshallingBothIdAndPacketNullThrowsException(): void + { + $this->expectException(SchemaViolationException::class); + + new PGPData(null, null, []); + } + + + /** + */ + public function testMarshallingReferenceElementOrdering(): void + { + $pgpKeyId = new PGPKeyID('GpM7'); + $pgpKeyPacket = new PGPKeyPacket('GpM8'); + $p = new P('/CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI='); + + $pgpData = new PGPData($pgpKeyId, $pgpKeyPacket, [$p]); + + $pgpDataElement = $pgpData->toXML(); + /** @var \DOMElement[] $children */ + $children = $pgpDataElement->childNodes; + + $this->assertEquals('ds:PGPKeyID', $children[0]->tagName); + $this->assertEquals('ds:PGPKeyPacket', $children[1]->tagName); + $this->assertEquals('xenc:P', $children[2]->tagName); + } +} diff --git a/tests/XML/xenc/OriginatorKeyInfoTest.php b/tests/XML/xenc/OriginatorKeyInfoTest.php index 69522d79..947f9d61 100644 --- a/tests/XML/xenc/OriginatorKeyInfoTest.php +++ b/tests/XML/xenc/OriginatorKeyInfoTest.php @@ -14,10 +14,14 @@ use SimpleSAML\XMLSecurity\XML\ds\AbstractDsElement; use SimpleSAML\XMLSecurity\XML\ds\AbstractKeyInfoType; use SimpleSAML\XMLSecurity\XML\ds\KeyName; +use SimpleSAML\XMLSecurity\XML\ds\PGPData; +use SimpleSAML\XMLSecurity\XML\ds\PGPKeyID; +use SimpleSAML\XMLSecurity\XML\ds\PGPKeyPacket; use SimpleSAML\XMLSecurity\XML\ds\X509Certificate; use SimpleSAML\XMLSecurity\XML\ds\X509Data; use SimpleSAML\XMLSecurity\XML\ds\X509SubjectName; use SimpleSAML\XMLSecurity\XML\xenc\OriginatorKeyInfo; +use SimpleSAML\XMLSecurity\XML\xenc\P; use function dirname; use function openssl_x509_parse; @@ -92,6 +96,11 @@ public function testMarshalling(): void new X509SubjectName(self::$certData['name']), ], ), + new PGPData( + new PGPKeyID('GpM7'), + new PGPKeyPacket('GpM8'), + [new P('/CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI=')], + ), new Chunk(DOMDocumentFactory::fromString( 'some', )->documentElement), diff --git a/tests/XML/xenc/RecipientKeyInfoTest.php b/tests/XML/xenc/RecipientKeyInfoTest.php index 3fdce621..7197a0e0 100644 --- a/tests/XML/xenc/RecipientKeyInfoTest.php +++ b/tests/XML/xenc/RecipientKeyInfoTest.php @@ -14,9 +14,13 @@ use SimpleSAML\XMLSecurity\XML\ds\AbstractDsElement; use SimpleSAML\XMLSecurity\XML\ds\AbstractKeyInfoType; use SimpleSAML\XMLSecurity\XML\ds\KeyName; +use SimpleSAML\XMLSecurity\XML\ds\PGPData; +use SimpleSAML\XMLSecurity\XML\ds\PGPKeyID; +use SimpleSAML\XMLSecurity\XML\ds\PGPKeyPacket; use SimpleSAML\XMLSecurity\XML\ds\X509Certificate; use SimpleSAML\XMLSecurity\XML\ds\X509Data; use SimpleSAML\XMLSecurity\XML\ds\X509SubjectName; +use SimpleSAML\XMLSecurity\XML\xenc\P; use SimpleSAML\XMLSecurity\XML\xenc\RecipientKeyInfo; use function dirname; @@ -92,6 +96,11 @@ public function testMarshalling(): void new X509SubjectName(self::$certData['name']), ], ), + new PGPData( + new PGPKeyID('GpM7'), + new PGPKeyPacket('GpM8'), + [new P('/CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI=')], + ), new Chunk(DOMDocumentFactory::fromString( 'some', )->documentElement), diff --git a/tests/resources/xml/ds_KeyInfo.xml b/tests/resources/xml/ds_KeyInfo.xml index 7b06e7e5..4a051ea7 100644 --- a/tests/resources/xml/ds_KeyInfo.xml +++ b/tests/resources/xml/ds_KeyInfo.xml @@ -4,5 +4,10 @@ MIICxDCCAi2gAwIBAgIUZ9QDx+SBFHednUWDFGm9tyVKrgQwDQYJKoZIhvcNAQELBQAwczElMCMGA1UEAwwcc2VsZnNpZ25lZC5zaW1wbGVzYW1scGhwLm9yZzEZMBcGA1UECgwQU2ltcGxlU0FNTHBocCBIUTERMA8GA1UEBwwISG9ub2x1bHUxDzANBgNVBAgMBkhhd2FpaTELMAkGA1UEBhMCVVMwIBcNMjIxMjAzMTAzNTQwWhgPMjEyMjExMDkxMDM1NDBaMHMxJTAjBgNVBAMMHHNlbGZzaWduZWQuc2ltcGxlc2FtbHBocC5vcmcxGTAXBgNVBAoMEFNpbXBsZVNBTUxwaHAgSFExETAPBgNVBAcMCEhvbm9sdWx1MQ8wDQYDVQQIDAZIYXdhaWkxCzAJBgNVBAYTAlVTMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDessdFRVDTMQQW3Na81B1CjJV1tmY3nopoIhZrkbDxLa+pv7jGDRcYreyu1DoQxEs06V2nHLoyOPhqJXSFivqtUwVYhR6NYgbNI6RRSsIJCweH0YOdlHna7gULPcLX0Bfbi4odStaFwG9yzDySwSEPtsKxm5pENPjNVGh+jJ+H/QIDAQABo1MwUTAdBgNVHQ4EFgQUvV75t8EoQo2fVa0E9otdtIGK5X0wHwYDVR0jBBgwFoAUvV75t8EoQo2fVa0E9otdtIGK5X0wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQANQUeiwPJXkWMXuaDHToEBKcezYGqGEYnGUi9LMjeb+Kln7X8nn5iknlz4k77rWCbSwLPC/WDr0ySYQA+HagaeUaFpoiYFJKS6uFlK1HYWnM3W4PUiGHg1/xeZlMO44wTwybXVo0y9KMhchfB5XNbDdoJcqWYvi6xtmZZNRbxUyw== /CN=selfsigned.simplesamlphp.org/O=SimpleSAMLphp HQ/L=Honolulu/ST=Hawaii/C=US + + GpM7 + GpM8 + /CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI= + some diff --git a/tests/resources/xml/ds_PGPData.xml b/tests/resources/xml/ds_PGPData.xml new file mode 100644 index 00000000..bde1884e --- /dev/null +++ b/tests/resources/xml/ds_PGPData.xml @@ -0,0 +1,5 @@ + + GpM7 + GpM8 + /CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI= + diff --git a/tests/resources/xml/ds_Signature.xml b/tests/resources/xml/ds_Signature.xml index 1081fb30..66b7595f 100644 --- a/tests/resources/xml/ds_Signature.xml +++ b/tests/resources/xml/ds_Signature.xml @@ -18,6 +18,11 @@ MIICxDCCAi2gAwIBAgIUZ9QDx+SBFHednUWDFGm9tyVKrgQwDQYJKoZIhvcNAQELBQAwczElMCMGA1UEAwwcc2VsZnNpZ25lZC5zaW1wbGVzYW1scGhwLm9yZzEZMBcGA1UECgwQU2ltcGxlU0FNTHBocCBIUTERMA8GA1UEBwwISG9ub2x1bHUxDzANBgNVBAgMBkhhd2FpaTELMAkGA1UEBhMCVVMwIBcNMjIxMjAzMTAzNTQwWhgPMjEyMjExMDkxMDM1NDBaMHMxJTAjBgNVBAMMHHNlbGZzaWduZWQuc2ltcGxlc2FtbHBocC5vcmcxGTAXBgNVBAoMEFNpbXBsZVNBTUxwaHAgSFExETAPBgNVBAcMCEhvbm9sdWx1MQ8wDQYDVQQIDAZIYXdhaWkxCzAJBgNVBAYTAlVTMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDessdFRVDTMQQW3Na81B1CjJV1tmY3nopoIhZrkbDxLa+pv7jGDRcYreyu1DoQxEs06V2nHLoyOPhqJXSFivqtUwVYhR6NYgbNI6RRSsIJCweH0YOdlHna7gULPcLX0Bfbi4odStaFwG9yzDySwSEPtsKxm5pENPjNVGh+jJ+H/QIDAQABo1MwUTAdBgNVHQ4EFgQUvV75t8EoQo2fVa0E9otdtIGK5X0wHwYDVR0jBBgwFoAUvV75t8EoQo2fVa0E9otdtIGK5X0wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQANQUeiwPJXkWMXuaDHToEBKcezYGqGEYnGUi9LMjeb+Kln7X8nn5iknlz4k77rWCbSwLPC/WDr0ySYQA+HagaeUaFpoiYFJKS6uFlK1HYWnM3W4PUiGHg1/xeZlMO44wTwybXVo0y9KMhchfB5XNbDdoJcqWYvi6xtmZZNRbxUyw== /CN=selfsigned.simplesamlphp.org/O=SimpleSAMLphp HQ/L=Honolulu/ST=Hawaii/C=US + + GpM7 + GpM8 + /CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI= + some diff --git a/tests/resources/xml/xenc_OriginatorKeyInfo.xml b/tests/resources/xml/xenc_OriginatorKeyInfo.xml index 080836d0..121f7edf 100644 --- a/tests/resources/xml/xenc_OriginatorKeyInfo.xml +++ b/tests/resources/xml/xenc_OriginatorKeyInfo.xml @@ -4,5 +4,10 @@ MIICxDCCAi2gAwIBAgIUZ9QDx+SBFHednUWDFGm9tyVKrgQwDQYJKoZIhvcNAQELBQAwczElMCMGA1UEAwwcc2VsZnNpZ25lZC5zaW1wbGVzYW1scGhwLm9yZzEZMBcGA1UECgwQU2ltcGxlU0FNTHBocCBIUTERMA8GA1UEBwwISG9ub2x1bHUxDzANBgNVBAgMBkhhd2FpaTELMAkGA1UEBhMCVVMwIBcNMjIxMjAzMTAzNTQwWhgPMjEyMjExMDkxMDM1NDBaMHMxJTAjBgNVBAMMHHNlbGZzaWduZWQuc2ltcGxlc2FtbHBocC5vcmcxGTAXBgNVBAoMEFNpbXBsZVNBTUxwaHAgSFExETAPBgNVBAcMCEhvbm9sdWx1MQ8wDQYDVQQIDAZIYXdhaWkxCzAJBgNVBAYTAlVTMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDessdFRVDTMQQW3Na81B1CjJV1tmY3nopoIhZrkbDxLa+pv7jGDRcYreyu1DoQxEs06V2nHLoyOPhqJXSFivqtUwVYhR6NYgbNI6RRSsIJCweH0YOdlHna7gULPcLX0Bfbi4odStaFwG9yzDySwSEPtsKxm5pENPjNVGh+jJ+H/QIDAQABo1MwUTAdBgNVHQ4EFgQUvV75t8EoQo2fVa0E9otdtIGK5X0wHwYDVR0jBBgwFoAUvV75t8EoQo2fVa0E9otdtIGK5X0wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQANQUeiwPJXkWMXuaDHToEBKcezYGqGEYnGUi9LMjeb+Kln7X8nn5iknlz4k77rWCbSwLPC/WDr0ySYQA+HagaeUaFpoiYFJKS6uFlK1HYWnM3W4PUiGHg1/xeZlMO44wTwybXVo0y9KMhchfB5XNbDdoJcqWYvi6xtmZZNRbxUyw== /CN=selfsigned.simplesamlphp.org/O=SimpleSAMLphp HQ/L=Honolulu/ST=Hawaii/C=US + + GpM7 + GpM8 + /CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI= + some diff --git a/tests/resources/xml/xenc_RecipientKeyInfo.xml b/tests/resources/xml/xenc_RecipientKeyInfo.xml index bee00ede..36a43030 100644 --- a/tests/resources/xml/xenc_RecipientKeyInfo.xml +++ b/tests/resources/xml/xenc_RecipientKeyInfo.xml @@ -4,5 +4,10 @@ MIICxDCCAi2gAwIBAgIUZ9QDx+SBFHednUWDFGm9tyVKrgQwDQYJKoZIhvcNAQELBQAwczElMCMGA1UEAwwcc2VsZnNpZ25lZC5zaW1wbGVzYW1scGhwLm9yZzEZMBcGA1UECgwQU2ltcGxlU0FNTHBocCBIUTERMA8GA1UEBwwISG9ub2x1bHUxDzANBgNVBAgMBkhhd2FpaTELMAkGA1UEBhMCVVMwIBcNMjIxMjAzMTAzNTQwWhgPMjEyMjExMDkxMDM1NDBaMHMxJTAjBgNVBAMMHHNlbGZzaWduZWQuc2ltcGxlc2FtbHBocC5vcmcxGTAXBgNVBAoMEFNpbXBsZVNBTUxwaHAgSFExETAPBgNVBAcMCEhvbm9sdWx1MQ8wDQYDVQQIDAZIYXdhaWkxCzAJBgNVBAYTAlVTMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDessdFRVDTMQQW3Na81B1CjJV1tmY3nopoIhZrkbDxLa+pv7jGDRcYreyu1DoQxEs06V2nHLoyOPhqJXSFivqtUwVYhR6NYgbNI6RRSsIJCweH0YOdlHna7gULPcLX0Bfbi4odStaFwG9yzDySwSEPtsKxm5pENPjNVGh+jJ+H/QIDAQABo1MwUTAdBgNVHQ4EFgQUvV75t8EoQo2fVa0E9otdtIGK5X0wHwYDVR0jBBgwFoAUvV75t8EoQo2fVa0E9otdtIGK5X0wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQANQUeiwPJXkWMXuaDHToEBKcezYGqGEYnGUi9LMjeb+Kln7X8nn5iknlz4k77rWCbSwLPC/WDr0ySYQA+HagaeUaFpoiYFJKS6uFlK1HYWnM3W4PUiGHg1/xeZlMO44wTwybXVo0y9KMhchfB5XNbDdoJcqWYvi6xtmZZNRbxUyw== /CN=selfsigned.simplesamlphp.org/O=SimpleSAMLphp HQ/L=Honolulu/ST=Hawaii/C=US + + GpM7 + GpM8 + /CTj03d1DB5e2t7CTo9BEzCf5S9NRzwnBgZRlm32REI= + some