1. Go to this page and download the library: Download simplesamlphp/xml-security library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
simplesamlphp / xml-security example snippets
namespace MyNamespace;
use DOMElement;
use SimpleSAML\XMLSecurity\XML\SignableElementInterface;
use SimpleSAML\XMLSecurity\XML\SignableElementTrait;
use SimpleSAML\XMLSecurity\XML\SignedElementInterface;
use SimpleSAML\XMLSecurity\XML\SignedElementTrait;
class MyObject implements SignableElementInterface, SignedElementInterface
{
use SignableElementTrait;
use SignedElementTrait;
...
public function getId(): ?string
{
// return the ID of your object
}
protected function getOriginalXML(): DOMElement
{
// return the original XML, if any, or the XML generated by your object
}
}
namespace MyNamespace;
use SimpleSAML\XML\AbstractElement;
abstract class AbstractMyNSElement extends AbstractElement
{
public const NS = 'my:namespace';
public const NS_PREFIX = 'prefix';
}
namespace MyNamespace;
use DOMElement;
use SimpleSAML\XMLSecurity\XML\SignableElementInterface;
use SimpleSAML\XMLSecurity\XML\SignableElementTrait;
use SimpleSAML\XMLSecurity\XML\SignedElementInterface;
use SimpleSAML\XMLSecurity\XML\SignedElementTrait;
class MyObject extends AbstractMyNSElement
implements SignableElementInterface, SignedElementInterface
{
use SignableElementTrait;
use SignedElementTrait;
...
public function getId(): ?string
{
// return the ID of your object
}
protected function getOriginalXML(): DOMElement
{
// return the original XML, if any, or the XML generated by your object
}
public static function fromXML(DOMElement $xml): object
{
// build an instance of your object based on an XML document
// representing it
}
public function toXML(DOMElement $parent = null): DOMElement
{
// build an XML representation of your object
}
}
public function toXML(DOMElement $parent = null): DOMElement
{
if ($this->signer !== null) {
$signedXML = $this->doSign($this->getMyXML());
$signedXML->insertBefore($this->signature->toXML($signedXML), $signedXML->firstChild);
return $signedXML;
}
return $this->getMyXML();
}
use SimpleSAML\XMLSecurity\Constants as C;
use SimpleSAML\XMLSecurity\Alg\Signature\SignatureAlgorithmFactory;
use SimpleSAML\XMLSecurity\Key\PrivateKey;
$key = PrivateKey::fromFile('/path/to/key.pem');
$signer = (new SignatureAlgorithmFactory())->getAlgorithm(
C::SIG_RSA_SHA256,
$key
);
$myObject->sign($signer);
$signedXML = $myObject->toXML();
use SimpleSAML\XMLSecurity\Constants as C;
use SimpleSAML\XMLSecurity\XML\ds\KeyInfo;
use SimpleSAML\XMLSecurity\XML\ds\X509Certificate;
use SimpleSAML\XMLSecurity\XML\ds\X509Data;
...
$keyInfo = new KeyInfo(
[
new X509Data(
[
new X509Certificate($base64EncodedCertificateData)
]
)
]
);
$customSignable->sign(
$signer,
C::C14N_EXCLUSIVE_WITHOUT_COMMENTS,
$keyInfo
);
...
use SimpleSAML\XMLSecurity\Alg\Signature\SignatureAlgorithmFactory;
use SimpleSAML\XMLSecurity\Key\PublicKey;
$verifier = (new SignatureAlgorithmFactory())->getAlgorithm(
$myObject->getSignature()->getSignedInfo()->getSignatureMethod()->getAlgorithm(),
PublicKey::fromFile('/path/to/public-key.pem')
);
$verified = $myObject->verify($verifier);
use SimpleSAML\XMLSecurity\XML\ds\X509Certificate;
$trustedCertificate = new X509Certificate($pemEncodedCertificate);
$verified = $myObject->verify();
if ($verified->getValidatingKey() === $trustedCertificate) {
// signature verified with a trusted certificate
}
use SimpleSAML\XML\AbstractElement;
use SimpleSAML\XML\ElementInterface;
use SimpleSAML\XMLSecurity\Alg\Encryption\EncryptionAlgorithmInterface;
use SimpleSAML\XMLSecurity\Backend\EncryptionBackend;
use SimpleSAML\XMLSecurity\XML\EncryptedElementInterface;
class MyEncryptedObject extends AbstractElement
implements EncryptedElementInterface
{
use EncryptedElementTrait;
public function getBlacklistedAlgorithms(): ?array
{
// return an array with the algorithms you don't want to allow to be used
}
public function getEncryptionBackend(): ?EncryptionBackend
{
// return the encryption backend you want to use,
// or null if you are fine with the default
}
public function decrypt(EncryptionAlgorithmInterface $decryptor): MyObject
{
// implement the actual decryption here with help from the library
}
}
public function decrypt(EncryptionAlgorithmInterface $decryptor): MyObject
{
return MyObject::fromXML(
\SimpleSAML\XML\DOMDocumentFactory::fromString(
$this->decryptData($decryptor)
)->documentElement
);
}
use SimpleSAML\XML\AbstractElement;
use SimpleSAML\XMLSecurity\XML\EncryptedElementInterface;
use SimpleSAML\XMLSecurity\XML\xenc\EncryptedData;
class MyEncryptedObject extends AbstractElement
implements EncryptedElementInterface
{
use EncryptedElementTrait {
__construct as constructor;
}
public function __construct(EncryptedData $encryptedData, ...)
{
$this->constructor($encryptedData);
...
}
}
use SimpleSAML\XMLSecurity\Alg\Encryption\EncryptionAlgorithmFactory;
use SimpleSAML\XMLSecurity\Key\SymmetricKey;
$decryptor = (new EncryptionAlgorithmFactory())->getAlgorithm(
$myEncryptedObject->getEncryptedData()->getEncryptionMethod()->getAlgorithm(),
new SymmetricKey('MY SHARED SECRET')
);
$myObject = $myEncryptedObject->decrypt($decryptor);
use SimpleSAML\XMLSecurity\Alg\KeyTransport\KeyTransportAlgorithmFactory;
use SimpleSAML\XMLSecurity\Key\PrivateKey;
$decryptor = (new KeyTransportAlgorithmFactory())->getAlgorithm(
$myEncryptedObject->getEncryptedKey()->getEncryptionMethod()->getAlgorithm(),
PrivateKey::fromFile('/path/to/private-key.pem')
);
$myObject = $myEncryptedObject->decrypt($decryptor);
use SimpleSAML\XML\AbstractElement;
use SimpleSAML\XMLSecurity\XML\EncryptableElementInterface;
use SimpleSAML\XMLSecurity\XML\EncryptableElementTrait;
class MyObject extends AbstractElement
implements EncryptableElementInterface
{
use EncryptableElementTrait;
public function getBlacklistedAlgorithms(): ?array
{
// return an array with the algorithms you don't want to allow to be used
}
public function getEncryptionBackend(): ?EncryptionBackend
{
// return the encryption backend you want to use,
// or null if you are fine with the default
}
}
use SimpleSAML\XMLSecurity\Constants as C;
use SimpleSAML\XMLSecurity\Alg\Encryption\EncryptionAlgorithmFactory;
use SimpleSAML\XMLSecurity\Key\SymmetricKey;
$encryptor = (new EncryptionAlgorithmFactory())->getAlgorithm(
C::BLOCK_ENC_...,
new SymmetricKey('MY SHARED SECRET')
);
$myEncryptedObject = $myObject->encrypt($encryptor)
use SimpleSAML\XMLSecurity\Constants as C;
use SimpleSAML\XMLSecurity\Alg\KeyTransport\KeyTransportAlgorithmFactory;
use SimpleSAML\XMLSecurity\Key\PublicKey;
$encryptor = (new KeyTransportAlgorithmFactory())->getAlgorithm(
C::KEY_TRANSPORT_...,
PublicKey::fromFile('/path/to/public-key.pem')
);
$myEncryptedObject = $myObject->encrypt($encryptor);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.