From 468e44a31229ba60e55288227c13636f54375539 Mon Sep 17 00:00:00 2001 From: "andrii.svirin" Date: Thu, 9 May 2024 14:18:35 +0300 Subject: [PATCH] Rename var `KeyRing` to `Keyring`. Move __VERSION__ from entity Bank to entity Keyring. Store version in keyring-file. --- CHANGELOG.md | 7 + README.md | 20 +- .../Request/DataEncryptionInfoBuilder.php | 14 +- src/Contexts/RequestContext.php | 12 +- src/Contracts/EbicsClientInterface.php | 8 +- ...erface.php => KeyringManagerInterface.php} | 15 +- src/EbicsBankLetter.php | 24 +-- src/EbicsClient.php | 80 ++++---- src/Factories/KeyRingFactory.php | 190 ----------------- src/Factories/KeyringFactory.php | 191 ++++++++++++++++++ src/Factories/RequestFactory.php | 156 +++++++------- src/Factories/RequestFactoryV24.php | 12 +- src/Factories/RequestFactoryV25.php | 148 +++++++------- src/Factories/RequestFactoryV3.php | 44 ++-- src/Handlers/AuthSignatureHandler.php | 12 +- src/Handlers/OrderDataHandler.php | 20 +- src/Handlers/ResponseHandler.php | 10 +- src/Handlers/UserSignatureHandler.php | 8 +- src/Handlers/UserSignatureHandlerV2.php | 6 +- src/Handlers/UserSignatureHandlerV3.php | 6 +- src/Models/Bank.php | 21 +- src/Models/{KeyRing.php => Keyring.php} | 40 +++- src/Services/ArrayKeyringManager.php | 16 +- src/Services/CryptService.php | 10 +- src/Services/FileKeyringManager.php | 23 ++- ...{KeyRingManager.php => KeyringManager.php} | 12 +- tests/AbstractEbicsTestCase.php | 65 +++--- tests/EbicsBankLetterTest.php | 6 +- tests/EbicsClientV24Test.php | 10 +- tests/EbicsClientV25Test.php | 14 +- tests/EbicsClientV3Test.php | 14 +- tests/Handlers/AuthSignatureHandlerTest.php | 4 +- tests/Handlers/OrderDataHandlerTest.php | 6 +- tests/Services/CryptServiceTest.php | 2 +- tests/_data/data | 6 +- tests/_data/workspace/keyring_1.json | 1 + tests/_data/workspace/keyring_2.json | 1 + tests/_data/workspace/keyring_3.json | 1 + tests/_data/workspace/keyring_4.json | 1 + tests/_data/workspace/keyring_5.json | 1 + tests/_data/workspace/keyring_6.json | 19 +- tests/_data/workspace/keyring_7.json | 19 +- tests/_data/workspace/keyring_8.json | 1 + tests/_data/workspace/keyring_9.json | 1 + tests/_fixtures/hia.xml | 2 +- tests/_fixtures/hia_order_data.xml | 42 ++-- tests/_fixtures/hpb.xml | 2 +- tests/_fixtures/ini.xml | 2 +- tests/_fixtures/ini_order_data.xml | 42 ++-- tests/_fixtures/keys.json | 10 +- 50 files changed, 702 insertions(+), 675 deletions(-) rename src/Contracts/{KeyRingManagerInterface.php => KeyringManagerInterface.php} (50%) delete mode 100644 src/Factories/KeyRingFactory.php create mode 100644 src/Factories/KeyringFactory.php rename src/Models/{KeyRing.php => Keyring.php} (78%) rename src/Services/{KeyRingManager.php => KeyringManager.php} (58%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4df3333..15ece42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2.2 +* Change signature for KeyringManagerInterface. Moved version from Bank to Keyring. +* Remove UTF-8 encoding for content. +* Support EBICS TS mode. +* Add 'xml_files' parser for order data. +* Added support for EBICS version 2.4. + ## 2.1 * Up supported PHP version to >= 7.4 diff --git a/README.md b/README.md index 37bf17a..829b618 100644 --- a/README.md +++ b/README.md @@ -39,10 +39,10 @@ use AndrewSvirin\Ebics\EbicsClient; // Prepare `workspace` dir in the __PATH_TO_WORKSPACES_DIR__ manually. $keyringRealPath = __PATH_TO_WORKSPACES_DIR__ . '/workspace/keyring.json'; -// Use __IS_CERTIFIED__ true for French banks, otherwise use false. -$keyringManager = new FileKeyRingManager(); -$keyring = $keyringManager->loadKeyRing($keyringRealPath, __PASSWORD__); -$bank = new Bank(__HOST_ID__, __HOST_URL__, __EBICS_SERVER_VERSION___); +// Use __IS_CERTIFIED__ true for EBICS 3.0 and/or French banks, otherwise use false. +$keyringManager = new FileKeyringManager(); +$keyring = $keyringManager->loadKeyring($keyringRealPath, __PASSWORD__, __EBICS_VERSION__); +$bank = new Bank(__HOST_ID__, __HOST_URL__); $bank->setIsCertified(__IS_CERTIFIED__); $user = new User(__PARTNER_ID__, __USER_ID__); $client = new EbicsClient($bank, $user, $keyring); @@ -101,8 +101,8 @@ use AndrewSvirin\Ebics\Contracts\EbicsResponseExceptionInterface; try { $client->INI(); /* @var \AndrewSvirin\Ebics\Services\FileKeyringManager $keyringManager */ - /* @var \AndrewSvirin\Ebics\Models\KeyRing $keyring */ - $keyringManager->saveKeyRing($keyring, $keyringRealPath); + /* @var \AndrewSvirin\Ebics\Models\Keyring $keyring */ + $keyringManager->saveKeyring($keyring, $keyringRealPath); } catch (EbicsResponseExceptionInterface $exception) { echo sprintf( "INI request failed. EBICS Error code : %s\nMessage : %s\nMeaning : %s", @@ -114,7 +114,7 @@ try { try { $client->HIA(); - $keyringManager->saveKeyRing($keyring, $keyringRealPath); + $keyringManager->saveKeyring($keyring, $keyringRealPath); } catch (EbicsResponseExceptionInterface $exception) { echo sprintf( "HIA request failed. EBICS Error code : %s\nMessage : %s\nMeaning : %s", @@ -134,7 +134,7 @@ $ebicsBankLetter = new \AndrewSvirin\Ebics\EbicsBankLetter(); $bankLetter = $ebicsBankLetter->prepareBankLetter( $client->getBank(), $client->getUser(), - $client->getKeyRing() + $client->getKeyring() ); $pdf = $ebicsBankLetter->formatBankLetter($bankLetter, $ebicsBankLetter->createPdfBankLetterFormatter()); @@ -150,8 +150,8 @@ try { /* @var \AndrewSvirin\Ebics\EbicsClient $client */ $client->HPB(); /* @var \AndrewSvirin\Ebics\Services\FileKeyringManager $keyringManager */ - /* @var \AndrewSvirin\Ebics\Models\KeyRing $keyring */ - $keyringManager->saveKeyRing($keyring, $keyringRealPath); + /* @var \AndrewSvirin\Ebics\Models\Keyring $keyring */ + $keyringManager->saveKeyring($keyring, $keyringRealPath); } catch (EbicsResponseExceptionInterface $exception) { echo sprintf( "HPB request failed. EBICS Error code : %s\nMessage : %s\nMeaning : %s", diff --git a/src/Builders/Request/DataEncryptionInfoBuilder.php b/src/Builders/Request/DataEncryptionInfoBuilder.php index 00f3bc6..4d18480 100644 --- a/src/Builders/Request/DataEncryptionInfoBuilder.php +++ b/src/Builders/Request/DataEncryptionInfoBuilder.php @@ -3,7 +3,7 @@ namespace AndrewSvirin\Ebics\Builders\Request; use AndrewSvirin\Ebics\Exceptions\SignatureEbicsException; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; use AndrewSvirin\Ebics\Services\CryptService; use DOMDocument; use DOMElement; @@ -42,22 +42,22 @@ public function createInstance(): DataEncryptionInfoBuilder /** * Uses bank signature. * - * @param KeyRing $keyRing + * @param Keyring $keyring * @param string $algorithm * * @return $this * @throws SignatureEbicsException */ - public function addEncryptionPubKeyDigest(KeyRing $keyRing, string $algorithm = 'sha256'): DataEncryptionInfoBuilder + public function addEncryptionPubKeyDigest(Keyring $keyring, string $algorithm = 'sha256'): DataEncryptionInfoBuilder { - if (!($signatureE = $keyRing->getBankSignatureE())) { + if (!($signatureE = $keyring->getBankSignatureE())) { throw new SignatureEbicsException('Bank Certificate E is empty.'); } $certificateEDigest = $this->cryptService->calculateDigest($signatureE, $algorithm); $encryptionPubKeyDigestNodeValue = base64_encode($certificateEDigest); $xmlEncryptionPubKeyDigest = $this->dom->createElement('EncryptionPubKeyDigest'); - $xmlEncryptionPubKeyDigest->setAttribute('Version', $keyRing->getBankSignatureEVersion()); + $xmlEncryptionPubKeyDigest->setAttribute('Version', $keyring->getBankSignatureEVersion()); $xmlEncryptionPubKeyDigest->setAttribute( 'Algorithm', sprintf('http://www.w3.org/2001/04/xmlenc#%s', $algorithm) @@ -68,10 +68,10 @@ public function addEncryptionPubKeyDigest(KeyRing $keyRing, string $algorithm = return $this; } - public function addTransactionKey(string $transactionKey, KeyRing $keyRing): DataEncryptionInfoBuilder + public function addTransactionKey(string $transactionKey, Keyring $keyring): DataEncryptionInfoBuilder { $transactionKeyEncrypted = $this->cryptService->encryptTransactionKey( - $keyRing->getBankSignatureE()->getPublicKey(), + $keyring->getBankSignatureE()->getPublicKey(), $transactionKey ); $transactionKeyNodeValue = base64_encode($transactionKeyEncrypted); diff --git a/src/Contexts/RequestContext.php b/src/Contexts/RequestContext.php index 87edba2..497bab0 100644 --- a/src/Contexts/RequestContext.php +++ b/src/Contexts/RequestContext.php @@ -4,7 +4,7 @@ use AndrewSvirin\Ebics\Contracts\SignatureDataInterface; use AndrewSvirin\Ebics\Models\Bank; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; use AndrewSvirin\Ebics\Models\User; use DateTimeInterface; @@ -18,7 +18,7 @@ final class RequestContext { private Bank $bank; private User $user; - private KeyRing $keyRing; + private Keyring $keyring; private DateTimeInterface $dateTime; private ?DateTimeInterface $startDateTime; private ?DateTimeInterface $endDateTime; @@ -65,16 +65,16 @@ public function getUser(): User return $this->user; } - public function setKeyRing(KeyRing $keyRing): RequestContext + public function setKeyring(Keyring $keyring): RequestContext { - $this->keyRing = $keyRing; + $this->keyring = $keyring; return $this; } - public function getKeyRing(): KeyRing + public function getKeyring(): Keyring { - return $this->keyRing; + return $this->keyring; } public function setDateTime(DateTimeInterface $dateTime): RequestContext diff --git a/src/Contracts/EbicsClientInterface.php b/src/Contracts/EbicsClientInterface.php index b1833c7..4f06184 100644 --- a/src/Contracts/EbicsClientInterface.php +++ b/src/Contracts/EbicsClientInterface.php @@ -38,7 +38,7 @@ public function HEV(): Response; /** * Make INI request. * Send to the bank public signature of signature A00X. - * Prepare A00X signature for KeyRing. + * Prepare A00X signature for Keyring. * * @param DateTimeInterface|null $dateTime current date * @@ -49,7 +49,7 @@ public function INI(DateTimeInterface $dateTime = null): Response; /** * Make HIA request. * Send to the bank public signatures of authentication (X002) and encryption (E002). - * Prepare E002 and X002 user signatures for KeyRing. + * Prepare E002 and X002 user signatures for Keyring. * * @param DateTimeInterface|null $dateTime current date * @@ -60,7 +60,7 @@ public function HIA(DateTimeInterface $dateTime = null): Response; /** * Make H3K request. * Send to the bank public signatures of signature (A00X), authentication (X002) and encryption (E002). - * Prepare A00X, E002 and X002 user signatures for KeyRing. + * Prepare A00X, E002 and X002 user signatures for Keyring. * * @param DateTimeInterface|null $dateTime current date * @@ -72,7 +72,7 @@ public function H3K(DateTimeInterface $dateTime = null): Response; /** * Download the Bank public signatures authentication (X002) and encryption (E002). - * Prepare E002 and X002 bank signatures for KeyRing. + * Prepare E002 and X002 bank signatures for Keyring. * * @param DateTimeInterface|null $dateTime current date * diff --git a/src/Contracts/KeyRingManagerInterface.php b/src/Contracts/KeyringManagerInterface.php similarity index 50% rename from src/Contracts/KeyRingManagerInterface.php rename to src/Contracts/KeyringManagerInterface.php index 7c7d4af..1989fa2 100644 --- a/src/Contracts/KeyRingManagerInterface.php +++ b/src/Contracts/KeyringManagerInterface.php @@ -2,27 +2,28 @@ namespace AndrewSvirin\Ebics\Contracts; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; /** - * EBICS KeyRingManager representation. + * EBICS KeyringManager representation. * * @license http://www.opensource.org/licenses/mit-license.html MIT License * @author Andrew Svirin */ -interface KeyRingManagerInterface +interface KeyringManagerInterface { /** * Load Keyring from the saved file or create new one. * @param array|string $resource Array with key or filepath to key. * @param string $passphrase Passphrase. + * @param string $defaultVersion Default keyring version. */ - public function loadKeyRing($resource, string $passphrase): KeyRing; + public function loadKeyring($resource, string $passphrase, string $defaultVersion = Keyring::VERSION_25): Keyring; /** - * Save KeyRing to file. - * @param KeyRing $keyRing Array with key or filepath to key. + * Save Keyring to file. + * @param Keyring $keyring Array with key or filepath to key. * @param array|string $resource Array with key or filepath to key. */ - public function saveKeyRing(KeyRing $keyRing, &$resource): void; + public function saveKeyring(Keyring $keyring, &$resource): void; } diff --git a/src/EbicsBankLetter.php b/src/EbicsBankLetter.php index be10dfa..2596d73 100644 --- a/src/EbicsBankLetter.php +++ b/src/EbicsBankLetter.php @@ -6,7 +6,7 @@ use AndrewSvirin\Ebics\Factories\BankLetterFactory; use AndrewSvirin\Ebics\Models\Bank; use AndrewSvirin\Ebics\Models\BankLetter; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; use AndrewSvirin\Ebics\Models\User; use AndrewSvirin\Ebics\Services\BankLetter\Formatter\HtmlBankLetterFormatter; use AndrewSvirin\Ebics\Services\BankLetter\Formatter\PdfBankLetterFormatter; @@ -42,19 +42,19 @@ public function __construct() * * @param Bank $bank * @param User $user - * @param KeyRing $keyRing + * @param Keyring $keyring * * @return BankLetter */ - public function prepareBankLetter(Bank $bank, User $user, KeyRing $keyRing): BankLetter + public function prepareBankLetter(Bank $bank, User $user, Keyring $keyring): BankLetter { if ($bank->isCertified()) { - if (Bank::VERSION_25 === $bank->getVersion()) { + if (Keyring::VERSION_25 === $keyring->getVersion()) { $digestResolver = new DigestResolverV2(); - } elseif (Bank::VERSION_30 === $bank->getVersion()) { + } elseif (Keyring::VERSION_30 === $keyring->getVersion()) { $digestResolver = new DigestResolverV3(); } else { - throw new LogicException(sprintf('Version "%s" is not implemented', $bank->getVersion())); + throw new LogicException(sprintf('Version "%s" is not implemented', $keyring->getVersion())); } $hashGenerator = new CertificateHashGenerator($digestResolver); } else { @@ -65,18 +65,18 @@ public function prepareBankLetter(Bank $bank, User $user, KeyRing $keyRing): Ban $bank, $user, $this->bankLetterService->formatSignatureForBankLetter( - $keyRing->getUserSignatureA(), - $keyRing->getUserSignatureAVersion(), + $keyring->getUserSignatureA(), + $keyring->getUserSignatureAVersion(), $hashGenerator ), $this->bankLetterService->formatSignatureForBankLetter( - $keyRing->getUserSignatureE(), - $keyRing->getUserSignatureEVersion(), + $keyring->getUserSignatureE(), + $keyring->getUserSignatureEVersion(), $hashGenerator ), $this->bankLetterService->formatSignatureForBankLetter( - $keyRing->getUserSignatureX(), - $keyRing->getUserSignatureXVersion(), + $keyring->getUserSignatureX(), + $keyring->getUserSignatureXVersion(), $hashGenerator ) ); diff --git a/src/EbicsClient.php b/src/EbicsClient.php index 5fea83d..4f4bba4 100644 --- a/src/EbicsClient.php +++ b/src/EbicsClient.php @@ -42,7 +42,7 @@ use AndrewSvirin\Ebics\Models\InitializationOrderResult; use AndrewSvirin\Ebics\Models\InitializationSegment; use AndrewSvirin\Ebics\Models\InitializationTransaction; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; use AndrewSvirin\Ebics\Models\UploadOrderResult; use AndrewSvirin\Ebics\Models\UploadTransaction; use AndrewSvirin\Ebics\Models\User; @@ -64,7 +64,7 @@ final class EbicsClient implements EbicsClientInterface { private Bank $bank; private User $user; - private KeyRing $keyRing; + private Keyring $keyring; private OrderDataHandler $orderDataHandler; private ResponseHandler $responseHandler; private RequestFactory $requestFactory; @@ -84,28 +84,28 @@ final class EbicsClient implements EbicsClientInterface * * @param Bank $bank * @param User $user - * @param KeyRing $keyRing + * @param Keyring $keyring */ - public function __construct(Bank $bank, User $user, KeyRing $keyRing) + public function __construct(Bank $bank, User $user, Keyring $keyring) { $this->bank = $bank; $this->user = $user; - $this->keyRing = $keyRing; + $this->keyring = $keyring; - if (Bank::VERSION_24 === $bank->getVersion()) { - $this->requestFactory = new RequestFactoryV24($bank, $user, $keyRing); - $this->orderDataHandler = new OrderDataHandlerV24($bank, $user, $keyRing); + if (Keyring::VERSION_24 === $keyring->getVersion()) { + $this->requestFactory = new RequestFactoryV24($bank, $user, $keyring); + $this->orderDataHandler = new OrderDataHandlerV24($bank, $user, $keyring); $this->responseHandler = new ResponseHandlerV24(); - } elseif (Bank::VERSION_25 === $bank->getVersion()) { - $this->requestFactory = new RequestFactoryV25($bank, $user, $keyRing); - $this->orderDataHandler = new OrderDataHandlerV25($bank, $user, $keyRing); + } elseif (Keyring::VERSION_25 === $keyring->getVersion()) { + $this->requestFactory = new RequestFactoryV25($bank, $user, $keyring); + $this->orderDataHandler = new OrderDataHandlerV25($bank, $user, $keyring); $this->responseHandler = new ResponseHandlerV25(); - } elseif (Bank::VERSION_30 === $bank->getVersion()) { - $this->requestFactory = new RequestFactoryV3($bank, $user, $keyRing); - $this->orderDataHandler = new OrderDataHandlerV3($bank, $user, $keyRing); + } elseif (Keyring::VERSION_30 === $keyring->getVersion()) { + $this->requestFactory = new RequestFactoryV3($bank, $user, $keyring); + $this->orderDataHandler = new OrderDataHandlerV3($bank, $user, $keyring); $this->responseHandler = new ResponseHandlerV3(); } else { - throw new LogicException(sprintf('Version "%s" is not implemented', $bank->getVersion())); + throw new LogicException(sprintf('Version "%s" is not implemented', $keyring->getVersion())); } $this->cryptService = new CryptService(); @@ -127,13 +127,13 @@ public function __construct(Bank $bank, User $user, KeyRing $keyRing) public function createUserSignatures(): void { $signatureA = $this->getUserSignature(SignatureInterface::TYPE_A, true); - $this->keyRing->setUserSignatureA($signatureA); + $this->keyring->setUserSignatureA($signatureA); $signatureE = $this->getUserSignature(SignatureInterface::TYPE_E, true); - $this->keyRing->setUserSignatureE($signatureE); + $this->keyring->setUserSignatureE($signatureE); $signatureX = $this->getUserSignature(SignatureInterface::TYPE_X, true); - $this->keyRing->setUserSignatureX($signatureX); + $this->keyring->setUserSignatureX($signatureX); } /** @@ -167,7 +167,7 @@ public function INI(DateTimeInterface $dateTime = null, bool $createSignature = $response = $this->httpClient->post($this->bank->getUrl(), $request); $this->checkH00XReturnCode($request, $response); - $this->keyRing->setUserSignatureA($signatureA); + $this->keyring->setUserSignatureA($signatureA); return $response; } @@ -189,8 +189,8 @@ public function HIA(DateTimeInterface $dateTime = null, bool $createSignature = $response = $this->httpClient->post($this->bank->getUrl(), $request); $this->checkH00XReturnCode($request, $response); - $this->keyRing->setUserSignatureE($signatureE); - $this->keyRing->setUserSignatureX($signatureX); + $this->keyring->setUserSignatureE($signatureE); + $this->keyring->setUserSignatureX($signatureX); return $response; } @@ -215,9 +215,9 @@ public function H3K(DateTimeInterface $dateTime = null, bool $createSignature = $response = $this->httpClient->post($this->bank->getUrl(), $request); $this->checkH00XReturnCode($request, $response); - $this->keyRing->setUserSignatureA($signatureA); - $this->keyRing->setUserSignatureE($signatureE); - $this->keyRing->setUserSignatureX($signatureX); + $this->keyring->setUserSignatureA($signatureA); + $this->keyring->setUserSignatureE($signatureE); + $this->keyring->setUserSignatureX($signatureX); return $response; } @@ -242,8 +242,8 @@ function () use ($dateTime) { $signatureX = $this->orderDataHandler->retrieveAuthenticationSignature($orderResult->getDataDocument()); $signatureE = $this->orderDataHandler->retrieveEncryptionSignature($orderResult->getDataDocument()); - $this->keyRing->setBankSignatureX($signatureX); - $this->keyRing->setBankSignatureE($signatureE); + $this->keyring->setBankSignatureX($signatureX); + $this->keyring->setBankSignatureE($signatureE); return $orderResult; } @@ -1132,7 +1132,7 @@ private function retrieveInitializationSegment(Request $request): Initialization $this->checkH00XReturnCode($request, $response); - return $this->responseHandler->extractInitializationSegment($response, $this->keyRing); + return $this->responseHandler->extractInitializationSegment($response, $this->keyring); } /** @@ -1189,7 +1189,7 @@ private function retrieveDownloadSegment(Request $request): DownloadSegment $this->checkH00XReturnCode($request, $response); - return $this->responseHandler->extractDownloadSegment($response, $this->keyRing); + return $this->responseHandler->extractDownloadSegment($response, $this->keyring); } /** @@ -1351,11 +1351,11 @@ private function extractOrderDataZipFiles(string $orderData): array } /** - * @return KeyRing + * @return Keyring */ - public function getKeyRing(): KeyRing + public function getKeyring(): Keyring { - return $this->keyRing; + return $this->keyring; } /** @@ -1403,13 +1403,13 @@ private function getUserSignature(string $type, bool $createNew = false): Signat { switch ($type) { case SignatureInterface::TYPE_A: - $signature = $this->keyRing->getUserSignatureA(); + $signature = $this->keyring->getUserSignatureA(); break; case SignatureInterface::TYPE_E: - $signature = $this->keyRing->getUserSignatureE(); + $signature = $this->keyring->getUserSignatureE(); break; case SignatureInterface::TYPE_X: - $signature = $this->keyRing->getUserSignatureX(); + $signature = $this->keyring->getUserSignatureX(); break; default: throw new LogicException(sprintf('Type "%s" not allowed', $type)); @@ -1435,22 +1435,22 @@ private function createUserSignature(string $type): SignatureInterface switch ($type) { case SignatureInterface::TYPE_A: $signature = $this->signatureFactory->createSignatureAFromKeys( - $this->cryptService->generateKeys($this->keyRing->getPassword()), - $this->keyRing->getPassword(), + $this->cryptService->generateKeys($this->keyring->getPassword()), + $this->keyring->getPassword(), $this->bank->isCertified() ? $this->x509Generator : null ); break; case SignatureInterface::TYPE_E: $signature = $this->signatureFactory->createSignatureEFromKeys( - $this->cryptService->generateKeys($this->keyRing->getPassword()), - $this->keyRing->getPassword(), + $this->cryptService->generateKeys($this->keyring->getPassword()), + $this->keyring->getPassword(), $this->bank->isCertified() ? $this->x509Generator : null ); break; case SignatureInterface::TYPE_X: $signature = $this->signatureFactory->createSignatureXFromKeys( - $this->cryptService->generateKeys($this->keyRing->getPassword()), - $this->keyRing->getPassword(), + $this->cryptService->generateKeys($this->keyring->getPassword()), + $this->keyring->getPassword(), $this->bank->isCertified() ? $this->x509Generator : null ); break; diff --git a/src/Factories/KeyRingFactory.php b/src/Factories/KeyRingFactory.php deleted file mode 100644 index 0be8fdb..0000000 --- a/src/Factories/KeyRingFactory.php +++ /dev/null @@ -1,190 +0,0 @@ -signatureFactory = new SignatureFactory(); - } - - /** - * @param array $data - * - * @return KeyRing - */ - public function createKeyRingFromData(array $data): KeyRing - { - $keyRing = new KeyRing(); - - $keyRing->setUserSignatureA( - $this->buildKeyRingFromDataForTypeKeyRing($data, KeyRing::USER_PREFIX, KeyRing::SIGNATURE_PREFIX_A) - ); - - $keyRing->setUserSignatureE( - $this->buildKeyRingFromDataForTypeKeyRing($data, KeyRing::USER_PREFIX, KeyRing::SIGNATURE_PREFIX_E) - ); - - $keyRing->setUserSignatureX( - $this->buildKeyRingFromDataForTypeKeyRing($data, KeyRing::USER_PREFIX, KeyRing::SIGNATURE_PREFIX_X) - ); - - $keyRing->setBankSignatureE( - $this->buildKeyRingFromDataForTypeKeyRing($data, KeyRing::BANK_PREFIX, KeyRing::SIGNATURE_PREFIX_E) - ); - - $keyRing->setBankSignatureX( - $this->buildKeyRingFromDataForTypeKeyRing($data, KeyRing::BANK_PREFIX, KeyRing::SIGNATURE_PREFIX_X) - ); - - return $keyRing; - } - - /** - * @param array $data - * @param string $typePrefix - * @param string $signaturePrefix - * - * @return SignatureInterface|null - */ - private function buildKeyRingFromDataForTypeKeyRing( - array $data, - string $typePrefix, - string $signaturePrefix - ): ?SignatureInterface { - if (empty($data[$typePrefix][$signaturePrefix][KeyRing::PUBLIC_KEY_PREFIX])) { - return null; - } - $certificateContent = - $data[$typePrefix][$signaturePrefix][KeyRing::CERTIFICATE_PREFIX]; - $signaturePublicKey = - $data[$typePrefix][$signaturePrefix][KeyRing::PUBLIC_KEY_PREFIX]; - $signaturePrivateKey = - $data[$typePrefix][$signaturePrefix][KeyRing::PRIVATE_KEY_PREFIX]; - - $signature = $this->signatureFactory->create( - $signaturePrefix, - $this->decodeValue($signaturePublicKey), - !empty($signaturePrivateKey) ? $this->decodeValue($signaturePrivateKey) : null - ); - - if (!empty($certificateContent)) { - $signature->setCertificateContent($this->decodeValue($certificateContent)); - } - - return $signature; - } - - /** - * @param KeyRing $keyRing - * - * @return array - */ - public function buildDataFromKeyRing(KeyRing $keyRing): array - { - if (null !== $keyRing->getUserSignatureA()) { - $userSignatureAB64 = $keyRing->getUserSignatureA()->getCertificateContent(); - $userSignatureAPublicKey = $keyRing->getUserSignatureA()->getPublicKey(); - $userSignatureAPrivateKey = $keyRing->getUserSignatureA()->getPrivateKey(); - } - if (null !== $keyRing->getUserSignatureE()) { - $userSignatureEB64 = $keyRing->getUserSignatureE()->getCertificateContent(); - $userSignatureEPublicKey = $keyRing->getUserSignatureE()->getPublicKey(); - $userSignatureEPrivateKey = $keyRing->getUserSignatureE()->getPrivateKey(); - } - if (null !== $keyRing->getUserSignatureX()) { - $userSignatureXB64 = $keyRing->getUserSignatureX()->getCertificateContent(); - $userSignatureXPublicKey = $keyRing->getUserSignatureX()->getPublicKey(); - $userSignatureXPrivateKey = $keyRing->getUserSignatureX()->getPrivateKey(); - } - if (null !== $keyRing->getBankSignatureE()) { - $bankSignatureEB64 = $keyRing->getBankSignatureE()->getCertificateContent(); - $bankSignatureEPublicKey = $keyRing->getBankSignatureE()->getPublicKey(); - $bankSignatureEPrivateKey = $keyRing->getBankSignatureE()->getPrivateKey(); - } - if (null !== $keyRing->getBankSignatureX()) { - $bankSignatureXB64 = $keyRing->getBankSignatureX()->getCertificateContent(); - $bankSignatureXPublicKey = $keyRing->getBankSignatureX()->getPublicKey(); - $bankSignatureXPrivateKey = $keyRing->getBankSignatureX()->getPrivateKey(); - } - - return [ - KeyRing::USER_PREFIX => [ - KeyRing::SIGNATURE_PREFIX_A => [ - KeyRing::CERTIFICATE_PREFIX => isset($userSignatureAB64) ? - $this->encodeValue($userSignatureAB64) : null, - KeyRing::PUBLIC_KEY_PREFIX => isset($userSignatureAPublicKey) ? - $this->encodeValue($userSignatureAPublicKey) : null, - KeyRing::PRIVATE_KEY_PREFIX => isset($userSignatureAPrivateKey) ? - $this->encodeValue($userSignatureAPrivateKey) : null, - ], - KeyRing::SIGNATURE_PREFIX_E => [ - KeyRing::CERTIFICATE_PREFIX => isset($userSignatureEB64) ? - $this->encodeValue($userSignatureEB64) : null, - KeyRing::PUBLIC_KEY_PREFIX => isset($userSignatureEPublicKey) ? - $this->encodeValue($userSignatureEPublicKey) : null, - KeyRing::PRIVATE_KEY_PREFIX => isset($userSignatureEPrivateKey) ? - $this->encodeValue($userSignatureEPrivateKey) : null, - ], - KeyRing::SIGNATURE_PREFIX_X => [ - KeyRing::CERTIFICATE_PREFIX => isset($userSignatureXB64) ? - $this->encodeValue($userSignatureXB64) : null, - KeyRing::PUBLIC_KEY_PREFIX => isset($userSignatureXPublicKey) ? - $this->encodeValue($userSignatureXPublicKey) : null, - KeyRing::PRIVATE_KEY_PREFIX => isset($userSignatureXPrivateKey) ? - $this->encodeValue($userSignatureXPrivateKey) : null, - ], - ], - KeyRing::BANK_PREFIX => [ - KeyRing::SIGNATURE_PREFIX_E => [ - KeyRing::CERTIFICATE_PREFIX => isset($bankSignatureEB64) ? - $this->encodeValue($bankSignatureEB64) : null, - KeyRing::PUBLIC_KEY_PREFIX => isset($bankSignatureEPublicKey) ? - $this->encodeValue($bankSignatureEPublicKey) : null, - KeyRing::PRIVATE_KEY_PREFIX => isset($bankSignatureEPrivateKey) ? - $this->encodeValue($bankSignatureEPrivateKey) : null, - ], - KeyRing::SIGNATURE_PREFIX_X => [ - KeyRing::CERTIFICATE_PREFIX => isset($bankSignatureXB64) ? - $this->encodeValue($bankSignatureXB64) : null, - KeyRing::PUBLIC_KEY_PREFIX => isset($bankSignatureXPublicKey) ? - $this->encodeValue($bankSignatureXPublicKey) : null, - KeyRing::PRIVATE_KEY_PREFIX => isset($bankSignatureXPrivateKey) ? - $this->encodeValue($bankSignatureXPrivateKey) : null, - ], - ], - ]; - } - - /** - * @param string $value - * - * @return string - */ - private function encodeValue(string $value): string - { - return base64_encode($value); - } - - /** - * @param string $value - * - * @return string - */ - private function decodeValue(string $value): string - { - return base64_decode($value); - } -} diff --git a/src/Factories/KeyringFactory.php b/src/Factories/KeyringFactory.php new file mode 100644 index 0000000..65e3fa7 --- /dev/null +++ b/src/Factories/KeyringFactory.php @@ -0,0 +1,191 @@ +signatureFactory = new SignatureFactory(); + } + + /** + * @param array $data + * + * @return Keyring + */ + public function createKeyringFromData(array $data): Keyring + { + $keyring = new Keyring($data[Keyring::VERSION_PREFIX]); + + $keyring->setUserSignatureA( + $this->buildKeyringFromDataForTypeKeyring($data, Keyring::USER_PREFIX, Keyring::SIGNATURE_PREFIX_A) + ); + + $keyring->setUserSignatureE( + $this->buildKeyringFromDataForTypeKeyring($data, Keyring::USER_PREFIX, Keyring::SIGNATURE_PREFIX_E) + ); + + $keyring->setUserSignatureX( + $this->buildKeyringFromDataForTypeKeyring($data, Keyring::USER_PREFIX, Keyring::SIGNATURE_PREFIX_X) + ); + + $keyring->setBankSignatureE( + $this->buildKeyringFromDataForTypeKeyring($data, Keyring::BANK_PREFIX, Keyring::SIGNATURE_PREFIX_E) + ); + + $keyring->setBankSignatureX( + $this->buildKeyringFromDataForTypeKeyring($data, Keyring::BANK_PREFIX, Keyring::SIGNATURE_PREFIX_X) + ); + + return $keyring; + } + + /** + * @param array $data + * @param string $typePrefix + * @param string $signaturePrefix + * + * @return SignatureInterface|null + */ + private function buildKeyringFromDataForTypeKeyring( + array $data, + string $typePrefix, + string $signaturePrefix + ): ?SignatureInterface { + if (empty($data[$typePrefix][$signaturePrefix][Keyring::PUBLIC_KEY_PREFIX])) { + return null; + } + $certificateContent + = $data[$typePrefix][$signaturePrefix][Keyring::CERTIFICATE_PREFIX]; + $signaturePublicKey + = $data[$typePrefix][$signaturePrefix][Keyring::PUBLIC_KEY_PREFIX]; + $signaturePrivateKey + = $data[$typePrefix][$signaturePrefix][Keyring::PRIVATE_KEY_PREFIX]; + + $signature = $this->signatureFactory->create( + $signaturePrefix, + $this->decodeValue($signaturePublicKey), + !empty($signaturePrivateKey) ? $this->decodeValue($signaturePrivateKey) : null + ); + + if (!empty($certificateContent)) { + $signature->setCertificateContent($this->decodeValue($certificateContent)); + } + + return $signature; + } + + /** + * @param Keyring $keyring + * + * @return array + */ + public function buildDataFromKeyring(Keyring $keyring): array + { + if (null !== $keyring->getUserSignatureA()) { + $userSignatureAB64 = $keyring->getUserSignatureA()->getCertificateContent(); + $userSignatureAPublicKey = $keyring->getUserSignatureA()->getPublicKey(); + $userSignatureAPrivateKey = $keyring->getUserSignatureA()->getPrivateKey(); + } + if (null !== $keyring->getUserSignatureE()) { + $userSignatureEB64 = $keyring->getUserSignatureE()->getCertificateContent(); + $userSignatureEPublicKey = $keyring->getUserSignatureE()->getPublicKey(); + $userSignatureEPrivateKey = $keyring->getUserSignatureE()->getPrivateKey(); + } + if (null !== $keyring->getUserSignatureX()) { + $userSignatureXB64 = $keyring->getUserSignatureX()->getCertificateContent(); + $userSignatureXPublicKey = $keyring->getUserSignatureX()->getPublicKey(); + $userSignatureXPrivateKey = $keyring->getUserSignatureX()->getPrivateKey(); + } + if (null !== $keyring->getBankSignatureE()) { + $bankSignatureEB64 = $keyring->getBankSignatureE()->getCertificateContent(); + $bankSignatureEPublicKey = $keyring->getBankSignatureE()->getPublicKey(); + $bankSignatureEPrivateKey = $keyring->getBankSignatureE()->getPrivateKey(); + } + if (null !== $keyring->getBankSignatureX()) { + $bankSignatureXB64 = $keyring->getBankSignatureX()->getCertificateContent(); + $bankSignatureXPublicKey = $keyring->getBankSignatureX()->getPublicKey(); + $bankSignatureXPrivateKey = $keyring->getBankSignatureX()->getPrivateKey(); + } + + return [ + Keyring::VERSION_PREFIX => $keyring->getVersion(), + Keyring::USER_PREFIX => [ + Keyring::SIGNATURE_PREFIX_A => [ + Keyring::CERTIFICATE_PREFIX => isset($userSignatureAB64) ? + $this->encodeValue($userSignatureAB64) : null, + Keyring::PUBLIC_KEY_PREFIX => isset($userSignatureAPublicKey) ? + $this->encodeValue($userSignatureAPublicKey) : null, + Keyring::PRIVATE_KEY_PREFIX => isset($userSignatureAPrivateKey) ? + $this->encodeValue($userSignatureAPrivateKey) : null, + ], + Keyring::SIGNATURE_PREFIX_E => [ + Keyring::CERTIFICATE_PREFIX => isset($userSignatureEB64) ? + $this->encodeValue($userSignatureEB64) : null, + Keyring::PUBLIC_KEY_PREFIX => isset($userSignatureEPublicKey) ? + $this->encodeValue($userSignatureEPublicKey) : null, + Keyring::PRIVATE_KEY_PREFIX => isset($userSignatureEPrivateKey) ? + $this->encodeValue($userSignatureEPrivateKey) : null, + ], + Keyring::SIGNATURE_PREFIX_X => [ + Keyring::CERTIFICATE_PREFIX => isset($userSignatureXB64) ? + $this->encodeValue($userSignatureXB64) : null, + Keyring::PUBLIC_KEY_PREFIX => isset($userSignatureXPublicKey) ? + $this->encodeValue($userSignatureXPublicKey) : null, + Keyring::PRIVATE_KEY_PREFIX => isset($userSignatureXPrivateKey) ? + $this->encodeValue($userSignatureXPrivateKey) : null, + ], + ], + Keyring::BANK_PREFIX => [ + Keyring::SIGNATURE_PREFIX_E => [ + Keyring::CERTIFICATE_PREFIX => isset($bankSignatureEB64) ? + $this->encodeValue($bankSignatureEB64) : null, + Keyring::PUBLIC_KEY_PREFIX => isset($bankSignatureEPublicKey) ? + $this->encodeValue($bankSignatureEPublicKey) : null, + Keyring::PRIVATE_KEY_PREFIX => isset($bankSignatureEPrivateKey) ? + $this->encodeValue($bankSignatureEPrivateKey) : null, + ], + Keyring::SIGNATURE_PREFIX_X => [ + Keyring::CERTIFICATE_PREFIX => isset($bankSignatureXB64) ? + $this->encodeValue($bankSignatureXB64) : null, + Keyring::PUBLIC_KEY_PREFIX => isset($bankSignatureXPublicKey) ? + $this->encodeValue($bankSignatureXPublicKey) : null, + Keyring::PRIVATE_KEY_PREFIX => isset($bankSignatureXPrivateKey) ? + $this->encodeValue($bankSignatureXPrivateKey) : null, + ], + ], + ]; + } + + /** + * @param string $value + * + * @return string + */ + private function encodeValue(string $value): string + { + return base64_encode($value); + } + + /** + * @param string $value + * + * @return string + */ + private function decodeValue(string $value): string + { + return base64_decode($value); + } +} diff --git a/src/Factories/RequestFactory.php b/src/Factories/RequestFactory.php index 949642f..78e1408 100644 --- a/src/Factories/RequestFactory.php +++ b/src/Factories/RequestFactory.php @@ -29,7 +29,7 @@ use AndrewSvirin\Ebics\Models\CustomerHIA; use AndrewSvirin\Ebics\Models\CustomerINI; use AndrewSvirin\Ebics\Models\Http\Request; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; use AndrewSvirin\Ebics\Models\UploadTransaction; use AndrewSvirin\Ebics\Models\User; use AndrewSvirin\Ebics\Models\UserSignature; @@ -53,22 +53,22 @@ abstract class RequestFactory protected CryptService $cryptService; protected Bank $bank; protected User $user; - protected KeyRing $keyRing; + protected Keyring $keyring; /** * Constructor. * * @param Bank $bank * @param User $user - * @param KeyRing $keyRing + * @param Keyring $keyring */ - public function __construct(Bank $bank, User $user, KeyRing $keyRing) + public function __construct(Bank $bank, User $user, Keyring $keyring) { $this->requestBuilder = new RequestBuilder(); $this->cryptService = new CryptService(); $this->bank = $bank; $this->user = $user; - $this->keyRing = $keyRing; + $this->keyring = $keyring; } abstract protected function createRequestBuilderInstance(): RequestBuilder; @@ -200,7 +200,7 @@ public function createH3K( ); $context = (new RequestContext()) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setBank($this->bank) ->setUser($this->user) ->setDateTime($dateTime) @@ -284,7 +284,7 @@ public function createHPD( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setSegmentNumber($segmentNumber) ->setIsLastSegment($isLastSegment); @@ -307,10 +307,10 @@ public function createHPD( ->addStandardOrderParams(); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -338,7 +338,7 @@ public function createHKD( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setSegmentNumber($segmentNumber) ->setIsLastSegment($isLastSegment); @@ -361,10 +361,10 @@ public function createHKD( ->addStandardOrderParams(); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -392,7 +392,7 @@ public function createPTK( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setSegmentNumber($segmentNumber) ->setIsLastSegment($isLastSegment); @@ -415,10 +415,10 @@ public function createPTK( ->addStandardOrderParams(); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -446,7 +446,7 @@ public function createHTD( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setSegmentNumber($segmentNumber) ->setIsLastSegment($isLastSegment); @@ -469,10 +469,10 @@ public function createHTD( ->addStandardOrderParams(); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -504,7 +504,7 @@ public function createFDL( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setFileFormat($fileFormat) ->setCountryCode($countryCode) @@ -536,10 +536,10 @@ public function createFDL( ); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -571,7 +571,7 @@ public function createFUL( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setFileFormat($fileFormat) ->setFULContext($fulContext) @@ -600,10 +600,10 @@ public function createFUL( ); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000) ->addNumSegments($context->getNumSegments()); @@ -615,8 +615,8 @@ public function createFUL( $builder ->addDataEncryptionInfo(function (DataEncryptionInfoBuilder $builder) use ($context) { $builder - ->addEncryptionPubKeyDigest($context->getKeyRing()) - ->addTransactionKey($context->getTransactionKey(), $context->getKeyRing()); + ->addEncryptionPubKeyDigest($context->getKeyring()) + ->addTransactionKey($context->getTransactionKey(), $context->getKeyring()); }) ->addSignatureData($context->getSignatureData(), $context->getTransactionKey()); }); @@ -640,7 +640,7 @@ public function createHAA( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setSegmentNumber($segmentNumber) ->setIsLastSegment($isLastSegment); @@ -663,10 +663,10 @@ public function createHAA( ->addStandardOrderParams(); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -870,7 +870,7 @@ public function createCIP(DateTimeInterface $dateTime, UploadTransaction $transa $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setTransactionKey($transaction->getKey()) ->setNumSegments($transaction->getNumSegments()) @@ -894,10 +894,10 @@ public function createCIP(DateTimeInterface $dateTime, UploadTransaction $transa ->addStandardOrderParams(); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000) ->addNumSegments($context->getNumSegments()); @@ -909,8 +909,8 @@ public function createCIP(DateTimeInterface $dateTime, UploadTransaction $transa $builder ->addDataEncryptionInfo(function (DataEncryptionInfoBuilder $builder) use ($context) { $builder - ->addEncryptionPubKeyDigest($context->getKeyRing()) - ->addTransactionKey($context->getTransactionKey(), $context->getKeyRing()); + ->addEncryptionPubKeyDigest($context->getKeyring()) + ->addTransactionKey($context->getTransactionKey(), $context->getKeyring()); }) ->addSignatureData($context->getSignatureData(), $context->getTransactionKey()); }); @@ -934,7 +934,7 @@ public function createHVU( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setSegmentNumber($segmentNumber) ->setIsLastSegment($isLastSegment); @@ -957,10 +957,10 @@ public function createHVU( ->addHVUOrderParams(); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0200); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -988,7 +988,7 @@ public function createHVZ( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setSegmentNumber($segmentNumber) ->setIsLastSegment($isLastSegment); @@ -1011,10 +1011,10 @@ public function createHVZ( ->addHVZOrderParams(); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0200); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -1045,7 +1045,7 @@ public function createHVE( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setTransactionKey($transaction->getKey()) ->setNumSegments($transaction->getNumSegments()) @@ -1070,10 +1070,10 @@ public function createHVE( ->addHVEOrderParams($context->getHVEContext()); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000) ->addNumSegments($context->getNumSegments()); @@ -1085,11 +1085,11 @@ public function createHVE( $builder ->addDataEncryptionInfo(function (DataEncryptionInfoBuilder $builder) use ($context) { $builder - ->addEncryptionPubKeyDigest($context->getKeyRing()) - ->addTransactionKey($context->getTransactionKey(), $context->getKeyRing()); + ->addEncryptionPubKeyDigest($context->getKeyring()) + ->addTransactionKey($context->getTransactionKey(), $context->getKeyring()); }) ->addSignatureData($context->getSignatureData(), $context->getTransactionKey()) - ->addDataDigest($context->getKeyRing()->getUserSignatureAVersion()); + ->addDataDigest($context->getKeyring()->getUserSignatureAVersion()); }); }); }) @@ -1109,7 +1109,7 @@ public function createHVD( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setSegmentNumber($segmentNumber) ->setIsLastSegment($isLastSegment) @@ -1133,10 +1133,10 @@ public function createHVD( ->addHVDOrderParams($context->getHVDContext()); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0200); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -1162,7 +1162,7 @@ public function createHVT( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setSegmentNumber($segmentNumber) ->setIsLastSegment($isLastSegment) @@ -1186,10 +1186,10 @@ public function createHVT( ->addHVTOrderParams($context->getHVTContext()); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0200); })->addMutable(function (MutableBuilder $builder) use ($context) { diff --git a/src/Factories/RequestFactoryV24.php b/src/Factories/RequestFactoryV24.php index 780814c..9fc5959 100644 --- a/src/Factories/RequestFactoryV24.php +++ b/src/Factories/RequestFactoryV24.php @@ -10,7 +10,7 @@ use AndrewSvirin\Ebics\Handlers\UserSignatureHandlerV2; use AndrewSvirin\Ebics\Models\Bank; use AndrewSvirin\Ebics\Models\Http\Request; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; use AndrewSvirin\Ebics\Models\UploadTransaction; use AndrewSvirin\Ebics\Models\User; use AndrewSvirin\Ebics\Services\DigestResolverV2; @@ -25,13 +25,13 @@ */ final class RequestFactoryV24 extends RequestFactoryV2 { - public function __construct(Bank $bank, User $user, KeyRing $keyRing) + public function __construct(Bank $bank, User $user, Keyring $keyring) { - $this->authSignatureHandler = new AuthSignatureHandlerV24($keyRing); - $this->userSignatureHandler = new UserSignatureHandlerV2($user, $keyRing); - $this->orderDataHandler = new OrderDataHandlerV24($bank, $user, $keyRing); + $this->authSignatureHandler = new AuthSignatureHandlerV24($keyring); + $this->userSignatureHandler = new UserSignatureHandlerV2($user, $keyring); + $this->orderDataHandler = new OrderDataHandlerV24($bank, $user, $keyring); $this->digestResolver = new DigestResolverV2(); - parent::__construct($bank, $user, $keyRing); + parent::__construct($bank, $user, $keyring); } protected function createRequestBuilderInstance(): RequestBuilder diff --git a/src/Factories/RequestFactoryV25.php b/src/Factories/RequestFactoryV25.php index a911992..24e523f 100644 --- a/src/Factories/RequestFactoryV25.php +++ b/src/Factories/RequestFactoryV25.php @@ -19,7 +19,7 @@ use AndrewSvirin\Ebics\Handlers\UserSignatureHandlerV2; use AndrewSvirin\Ebics\Models\Bank; use AndrewSvirin\Ebics\Models\Http\Request; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; use AndrewSvirin\Ebics\Models\UploadTransaction; use AndrewSvirin\Ebics\Models\User; use AndrewSvirin\Ebics\Models\UserSignature; @@ -35,13 +35,13 @@ */ final class RequestFactoryV25 extends RequestFactoryV2 { - public function __construct(Bank $bank, User $user, KeyRing $keyRing) + public function __construct(Bank $bank, User $user, Keyring $keyring) { - $this->authSignatureHandler = new AuthSignatureHandlerV25($keyRing); - $this->userSignatureHandler = new UserSignatureHandlerV2($user, $keyRing); - $this->orderDataHandler = new OrderDataHandlerV25($bank, $user, $keyRing); + $this->authSignatureHandler = new AuthSignatureHandlerV25($keyring); + $this->userSignatureHandler = new UserSignatureHandlerV2($user, $keyring); + $this->orderDataHandler = new OrderDataHandlerV25($bank, $user, $keyring); $this->digestResolver = new DigestResolverV2(); - parent::__construct($bank, $user, $keyRing); + parent::__construct($bank, $user, $keyring); } protected function createRequestBuilderInstance(): RequestBuilder @@ -92,7 +92,7 @@ public function createVMK( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setStartDateTime($startDateTime) ->setEndDateTime($endDateTime) @@ -117,10 +117,10 @@ public function createVMK( ->addStandardOrderParams($context->getStartDateTime(), $context->getEndDateTime()); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -150,7 +150,7 @@ public function createSTA( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setStartDateTime($startDateTime) ->setEndDateTime($endDateTime) @@ -175,10 +175,10 @@ public function createSTA( ->addStandardOrderParams($context->getStartDateTime(), $context->getEndDateTime()); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -208,7 +208,7 @@ public function createC52( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setStartDateTime($startDateTime) ->setEndDateTime($endDateTime) @@ -233,10 +233,10 @@ public function createC52( ->addStandardOrderParams($context->getStartDateTime(), $context->getEndDateTime()); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -266,7 +266,7 @@ public function createC53( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setStartDateTime($startDateTime) ->setEndDateTime($endDateTime) @@ -291,10 +291,10 @@ public function createC53( ->addStandardOrderParams($context->getStartDateTime(), $context->getEndDateTime()); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -324,7 +324,7 @@ public function createC54( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setStartDateTime($startDateTime) ->setEndDateTime($endDateTime) @@ -349,10 +349,10 @@ public function createC54( ->addStandardOrderParams($context->getStartDateTime(), $context->getEndDateTime()); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -382,7 +382,7 @@ public function createZ52( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setStartDateTime($startDateTime) ->setEndDateTime($endDateTime) @@ -407,10 +407,10 @@ public function createZ52( ->addStandardOrderParams($context->getStartDateTime(), $context->getEndDateTime()); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -440,7 +440,7 @@ public function createZ53( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setStartDateTime($startDateTime) ->setEndDateTime($endDateTime) @@ -465,10 +465,10 @@ public function createZ53( ->addStandardOrderParams($context->getStartDateTime(), $context->getEndDateTime()); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -498,7 +498,7 @@ public function createZ54( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setStartDateTime($startDateTime) ->setEndDateTime($endDateTime) @@ -523,10 +523,10 @@ public function createZ54( ->addStandardOrderParams($context->getStartDateTime(), $context->getEndDateTime()); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -564,7 +564,7 @@ public function createCCT(DateTimeInterface $dateTime, UploadTransaction $transa $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setTransactionKey($transaction->getKey()) ->setNumSegments($transaction->getNumSegments()) @@ -588,10 +588,10 @@ public function createCCT(DateTimeInterface $dateTime, UploadTransaction $transa ->addStandardOrderParams(); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000) ->addNumSegments($context->getNumSegments()); @@ -603,8 +603,8 @@ public function createCCT(DateTimeInterface $dateTime, UploadTransaction $transa $builder ->addDataEncryptionInfo(function (DataEncryptionInfoBuilder $builder) use ($context) { $builder - ->addEncryptionPubKeyDigest($context->getKeyRing()) - ->addTransactionKey($context->getTransactionKey(), $context->getKeyRing()); + ->addEncryptionPubKeyDigest($context->getKeyring()) + ->addTransactionKey($context->getTransactionKey(), $context->getKeyring()); }) ->addSignatureData($context->getSignatureData(), $context->getTransactionKey()); }); @@ -628,7 +628,7 @@ public function createCDD(DateTimeInterface $dateTime, UploadTransaction $transa $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setTransactionKey($transaction->getKey()) ->setNumSegments($transaction->getNumSegments()) @@ -652,10 +652,10 @@ public function createCDD(DateTimeInterface $dateTime, UploadTransaction $transa ->addStandardOrderParams(); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000) ->addNumSegments($context->getNumSegments()); @@ -667,8 +667,8 @@ public function createCDD(DateTimeInterface $dateTime, UploadTransaction $transa $builder ->addDataEncryptionInfo(function (DataEncryptionInfoBuilder $builder) use ($context) { $builder - ->addEncryptionPubKeyDigest($context->getKeyRing()) - ->addTransactionKey($context->getTransactionKey(), $context->getKeyRing()); + ->addEncryptionPubKeyDigest($context->getKeyring()) + ->addTransactionKey($context->getTransactionKey(), $context->getKeyring()); }) ->addSignatureData($context->getSignatureData(), $context->getTransactionKey()); }); @@ -692,7 +692,7 @@ public function createXE2(DateTimeInterface $dateTime, UploadTransaction $transa $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setTransactionKey($transaction->getKey()) ->setNumSegments($transaction->getNumSegments()) @@ -716,10 +716,10 @@ public function createXE2(DateTimeInterface $dateTime, UploadTransaction $transa ->addStandardOrderParams(); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000) ->addNumSegments($context->getNumSegments()); @@ -731,8 +731,8 @@ public function createXE2(DateTimeInterface $dateTime, UploadTransaction $transa $builder ->addDataEncryptionInfo(function (DataEncryptionInfoBuilder $builder) use ($context) { $builder - ->addEncryptionPubKeyDigest($context->getKeyRing()) - ->addTransactionKey($context->getTransactionKey(), $context->getKeyRing()); + ->addEncryptionPubKeyDigest($context->getKeyring()) + ->addTransactionKey($context->getTransactionKey(), $context->getKeyring()); }) ->addSignatureData($context->getSignatureData(), $context->getTransactionKey()); }); @@ -756,7 +756,7 @@ public function createXE3(DateTimeInterface $dateTime, UploadTransaction $transa $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setTransactionKey($transaction->getKey()) ->setNumSegments($transaction->getNumSegments()) @@ -780,10 +780,10 @@ public function createXE3(DateTimeInterface $dateTime, UploadTransaction $transa ->addStandardOrderParams(); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000) ->addNumSegments($context->getNumSegments()); @@ -795,8 +795,8 @@ public function createXE3(DateTimeInterface $dateTime, UploadTransaction $transa $builder ->addDataEncryptionInfo(function (DataEncryptionInfoBuilder $builder) use ($context) { $builder - ->addEncryptionPubKeyDigest($context->getKeyRing()) - ->addTransactionKey($context->getTransactionKey(), $context->getKeyRing()); + ->addEncryptionPubKeyDigest($context->getKeyring()) + ->addTransactionKey($context->getTransactionKey(), $context->getKeyring()); }) ->addSignatureData($context->getSignatureData(), $context->getTransactionKey()); }); diff --git a/src/Factories/RequestFactoryV3.php b/src/Factories/RequestFactoryV3.php index 046a12b..d8b9ec8 100644 --- a/src/Factories/RequestFactoryV3.php +++ b/src/Factories/RequestFactoryV3.php @@ -22,7 +22,7 @@ use AndrewSvirin\Ebics\Handlers\UserSignatureHandlerV3; use AndrewSvirin\Ebics\Models\Bank; use AndrewSvirin\Ebics\Models\Http\Request; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; use AndrewSvirin\Ebics\Models\UploadTransaction; use AndrewSvirin\Ebics\Models\User; use AndrewSvirin\Ebics\Models\UserSignature; @@ -38,13 +38,13 @@ */ final class RequestFactoryV3 extends RequestFactory { - public function __construct(Bank $bank, User $user, KeyRing $keyRing) + public function __construct(Bank $bank, User $user, Keyring $keyring) { - $this->authSignatureHandler = new AuthSignatureHandlerV3($keyRing); - $this->userSignatureHandler = new UserSignatureHandlerV3($user, $keyRing); - $this->orderDataHandler = new OrderDataHandlerV3($bank, $user, $keyRing); + $this->authSignatureHandler = new AuthSignatureHandlerV3($keyring); + $this->userSignatureHandler = new UserSignatureHandlerV3($user, $keyring); + $this->orderDataHandler = new OrderDataHandlerV3($bank, $user, $keyring); $this->digestResolver = new DigestResolverV3(); - parent::__construct($bank, $user, $keyRing); + parent::__construct($bank, $user, $keyring); } protected function createRequestBuilderInstance(): RequestBuilder @@ -74,7 +74,7 @@ public function createBTD( $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setBTFContext($btfContext) ->setStartDateTime($startDateTime) @@ -104,10 +104,10 @@ public function createBTD( ); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000); })->addMutable(function (MutableBuilder $builder) use ($context) { @@ -133,18 +133,18 @@ public function createBTU( $this->userSignatureHandler->handle($signatureData, $transaction->getDigest()); - $signatureVersion = $this->keyRing->getUserSignatureAVersion(); + $signatureVersion = $this->keyring->getUserSignatureAVersion(); $dataDigest = $this->cryptService->sign( - $this->keyRing->getUserSignatureA()->getPrivateKey(), - $this->keyRing->getPassword(), - $this->keyRing->getUserSignatureAVersion(), + $this->keyring->getUserSignatureA()->getPrivateKey(), + $this->keyring->getPassword(), + $this->keyring->getUserSignatureAVersion(), $transaction->getDigest() ); $context = (new RequestContext()) ->setBank($this->bank) ->setUser($this->user) - ->setKeyRing($this->keyRing) + ->setKeyring($this->keyring) ->setDateTime($dateTime) ->setBTUContext($btuContext) ->setTransactionKey($transaction->getKey()) @@ -171,10 +171,10 @@ public function createBTU( ->addBTUOrderParams($context->getBTUContext()); }) ->addBankPubKeyDigests( - $context->getKeyRing()->getBankSignatureXVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureX()), - $context->getKeyRing()->getBankSignatureEVersion(), - $this->digestResolver->digest($context->getKeyRing()->getBankSignatureE()) + $context->getKeyring()->getBankSignatureXVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureX()), + $context->getKeyring()->getBankSignatureEVersion(), + $this->digestResolver->digest($context->getKeyring()->getBankSignatureE()) ) ->addSecurityMedium(StaticBuilder::SECURITY_MEDIUM_0000) ->addNumSegments($context->getNumSegments()); @@ -186,8 +186,8 @@ public function createBTU( $builder ->addDataEncryptionInfo(function (DataEncryptionInfoBuilder $builder) use ($context) { $builder - ->addEncryptionPubKeyDigest($context->getKeyRing()) - ->addTransactionKey($context->getTransactionKey(), $context->getKeyRing()); + ->addEncryptionPubKeyDigest($context->getKeyring()) + ->addTransactionKey($context->getTransactionKey(), $context->getKeyring()); }) ->addSignatureData($context->getSignatureData(), $context->getTransactionKey()) ->addDataDigest( diff --git a/src/Handlers/AuthSignatureHandler.php b/src/Handlers/AuthSignatureHandler.php index 48f3ac5..71e0452 100644 --- a/src/Handlers/AuthSignatureHandler.php +++ b/src/Handlers/AuthSignatureHandler.php @@ -5,7 +5,7 @@ use AndrewSvirin\Ebics\Exceptions\EbicsException; use AndrewSvirin\Ebics\Handlers\Traits\C14NTrait; use AndrewSvirin\Ebics\Handlers\Traits\H00XTrait; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; use AndrewSvirin\Ebics\Services\CryptService; use AndrewSvirin\Ebics\Services\DOMHelper; use DOMDocument; @@ -24,12 +24,12 @@ abstract class AuthSignatureHandler use C14NTrait; use H00XTrait; - private KeyRing $keyRing; + private Keyring $keyring; private CryptService $cryptService; - public function __construct(KeyRing $keyRing) + public function __construct(Keyring $keyring) { - $this->keyRing = $keyRing; + $this->keyring = $keyring; $this->cryptService = new CryptService(); } @@ -131,8 +131,8 @@ public function handle(DOMDocument $request, DOMNode $xmlRequestHeader = null): $signatureMethodAlgorithm ); $canonicalizedSignedInfoHashEncrypted = $this->cryptService->encrypt( - $this->keyRing->getUserSignatureX()->getPrivateKey(), - $this->keyRing->getPassword(), + $this->keyring->getUserSignatureX()->getPrivateKey(), + $this->keyring->getPassword(), $canonicalizedSignedInfoHash ); $signatureValueNodeValue = base64_encode($canonicalizedSignedInfoHashEncrypted); diff --git a/src/Handlers/OrderDataHandler.php b/src/Handlers/OrderDataHandler.php index f35bf7e..0ac054b 100644 --- a/src/Handlers/OrderDataHandler.php +++ b/src/Handlers/OrderDataHandler.php @@ -14,7 +14,7 @@ use AndrewSvirin\Ebics\Models\CustomerHIA; use AndrewSvirin\Ebics\Models\CustomerINI; use AndrewSvirin\Ebics\Models\Document; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; use AndrewSvirin\Ebics\Models\User; use AndrewSvirin\Ebics\Services\CryptService; use DateTimeInterface; @@ -36,17 +36,17 @@ abstract class OrderDataHandler private Bank $bank; private User $user; - private KeyRing $keyRing; + private Keyring $keyring; protected CryptService $cryptService; protected SignatureFactory $certificateFactory; private CertificateX509Factory $certificateX509Factory; protected BigIntegerFactory $bigIntegerFactory; - public function __construct(Bank $bank, User $user, KeyRing $keyRing) + public function __construct(Bank $bank, User $user, Keyring $keyring) { $this->bank = $bank; $this->user = $user; - $this->keyRing = $keyRing; + $this->keyring = $keyring; $this->cryptService = new CryptService(); $this->certificateFactory = new SignatureFactory(); $this->certificateX509Factory = new CertificateX509Factory(); @@ -90,7 +90,7 @@ public function handleINI(CustomerINI $xml, SignatureInterface $certificateA, Da // Add SignatureVersion to SignaturePubKeyInfo. $xmlSignatureVersion = $xml->createElement('SignatureVersion'); - $xmlSignatureVersion->nodeValue = $this->keyRing->getUserSignatureAVersion(); + $xmlSignatureVersion->nodeValue = $this->keyring->getUserSignatureAVersion(); $xmlSignaturePubKeyInfo->appendChild($xmlSignatureVersion); // Add PartnerID to SignaturePubKeyOrderData. @@ -155,7 +155,7 @@ public function handleHIA( // Add AuthenticationVersion to AuthenticationPubKeyInfo. $xmlAuthenticationVersion = $xml->createElement('AuthenticationVersion'); - $xmlAuthenticationVersion->nodeValue = $this->keyRing->getUserSignatureXVersion(); + $xmlAuthenticationVersion->nodeValue = $this->keyring->getUserSignatureXVersion(); $xmlAuthenticationPubKeyInfo->appendChild($xmlAuthenticationVersion); // Add EncryptionPubKeyInfo to HIARequestOrderData. @@ -170,7 +170,7 @@ public function handleHIA( // Add EncryptionVersion to EncryptionPubKeyInfo. $xmlEncryptionVersion = $xml->createElement('EncryptionVersion'); - $xmlEncryptionVersion->nodeValue = $this->keyRing->getUserSignatureEVersion(); + $xmlEncryptionVersion->nodeValue = $this->keyring->getUserSignatureEVersion(); $xmlEncryptionPubKeyInfo->appendChild($xmlEncryptionVersion); // Add PartnerID to HIARequestOrderData. @@ -211,7 +211,7 @@ public function handleH3K( // Add EncryptionVersion to EncryptionPubKeyInfo. $xmlSignatureVersion = $xml->createElement('SignatureVersion'); - $xmlSignatureVersion->nodeValue = $this->keyRing->getUserSignatureAVersion(); + $xmlSignatureVersion->nodeValue = $this->keyring->getUserSignatureAVersion(); $xmlSignatureCertificateInfo->appendChild($xmlSignatureVersion); // Add AuthenticationCertificateInfo to H3KRequestOrderData. @@ -221,7 +221,7 @@ public function handleH3K( // Add EncryptionVersion to EncryptionPubKeyInfo. $xmlAuthenticationVersion = $xml->createElement('AuthenticationVersion'); - $xmlAuthenticationVersion->nodeValue = $this->keyRing->getUserSignatureXVersion(); + $xmlAuthenticationVersion->nodeValue = $this->keyring->getUserSignatureXVersion(); $xmlAuthenticationCertificateInfo->appendChild($xmlAuthenticationVersion); // Add EncryptionCertificateInfo to H3KRequestOrderData. @@ -231,7 +231,7 @@ public function handleH3K( // Add EncryptionVersion to EncryptionPubKeyInfo. $xmlEncryptionVersion = $xml->createElement('EncryptionVersion'); - $xmlEncryptionVersion->nodeValue = $this->keyRing->getUserSignatureEVersion(); + $xmlEncryptionVersion->nodeValue = $this->keyring->getUserSignatureEVersion(); $xmlEncryptionCertificateInfo->appendChild($xmlEncryptionVersion); // Add PartnerID to HIARequestOrderData. diff --git a/src/Handlers/ResponseHandler.php b/src/Handlers/ResponseHandler.php index 8cd81ba..a1e6783 100644 --- a/src/Handlers/ResponseHandler.php +++ b/src/Handlers/ResponseHandler.php @@ -9,7 +9,7 @@ use AndrewSvirin\Ebics\Models\Http\Request; use AndrewSvirin\Ebics\Models\Http\Response; use AndrewSvirin\Ebics\Models\InitializationSegment; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; use AndrewSvirin\Ebics\Models\UploadSegment; use AndrewSvirin\Ebics\Services\CryptService; use AndrewSvirin\Ebics\Services\DOMHelper; @@ -211,13 +211,13 @@ public function retrieveH000ReportText(DOMDocument $xml): string * * @throws EbicsException */ - public function extractInitializationSegment(Response $response, KeyRing $keyRing): InitializationSegment + public function extractInitializationSegment(Response $response, Keyring $keyring): InitializationSegment { $transactionKeyEncoded = $this->retrieveH00XTransactionKey($response); $transactionKey = base64_decode($transactionKeyEncoded); $orderDataEncrypted = $this->retrieveH00XOrderData($response); $orderDataCompressed = $this->cryptService->decryptOrderDataCompressed( - $keyRing, + $keyring, $orderDataEncrypted, $transactionKey ); @@ -236,7 +236,7 @@ public function extractInitializationSegment(Response $response, KeyRing $keyRin * * @throws EbicsException */ - public function extractDownloadSegment(Response $response, KeyRing $keyRing): DownloadSegment + public function extractDownloadSegment(Response $response, Keyring $keyring): DownloadSegment { $transactionId = $this->retrieveH00XTransactionId($response); $transactionPhase = $this->retrieveH00XTransactionPhase($response); @@ -246,7 +246,7 @@ public function extractDownloadSegment(Response $response, KeyRing $keyRing): Do $segmentNumber = $this->retrieveH00XSegmentNumber($response); $orderDataEncrypted = $this->retrieveH00XOrderData($response); $orderDataCompressed = $this->cryptService->decryptOrderDataCompressed( - $keyRing, + $keyring, $orderDataEncrypted, $transactionKey ); diff --git a/src/Handlers/UserSignatureHandler.php b/src/Handlers/UserSignatureHandler.php index 0ace37e..7c1d40f 100644 --- a/src/Handlers/UserSignatureHandler.php +++ b/src/Handlers/UserSignatureHandler.php @@ -5,7 +5,7 @@ use AndrewSvirin\Ebics\Exceptions\EbicsException; use AndrewSvirin\Ebics\Handlers\Traits\C14NTrait; use AndrewSvirin\Ebics\Handlers\Traits\XPathTrait; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; use AndrewSvirin\Ebics\Models\User; use AndrewSvirin\Ebics\Models\UserSignature; use AndrewSvirin\Ebics\Services\CryptService; @@ -24,13 +24,13 @@ abstract class UserSignatureHandler use XPathTrait; protected User $user; - protected KeyRing $keyRing; + protected Keyring $keyring; protected CryptService $cryptService; - public function __construct(User $user, KeyRing $keyRing) + public function __construct(User $user, Keyring $keyring) { $this->user = $user; - $this->keyRing = $keyRing; + $this->keyring = $keyring; $this->cryptService = new CryptService(); } diff --git a/src/Handlers/UserSignatureHandlerV2.php b/src/Handlers/UserSignatureHandlerV2.php index 7450449..6a2ae45 100644 --- a/src/Handlers/UserSignatureHandlerV2.php +++ b/src/Handlers/UserSignatureHandlerV2.php @@ -39,12 +39,12 @@ public function handle(UserSignature $xml, string $digest): void // Add SignatureVersion to OrderSignatureData. $xmlSignatureVersion = $xml->createElement('SignatureVersion'); - $xmlSignatureVersion->nodeValue = $this->keyRing->getUserSignatureAVersion(); + $xmlSignatureVersion->nodeValue = $this->keyring->getUserSignatureAVersion(); $xmlOrderSignatureData->appendChild($xmlSignatureVersion); $canonicalizedUserSignatureDataHashSigned = $this->cryptService->encrypt( - $this->keyRing->getUserSignatureA()->getPrivateKey(), - $this->keyRing->getPassword(), + $this->keyring->getUserSignatureA()->getPrivateKey(), + $this->keyring->getPassword(), $digest ); $signatureValueNodeValue = base64_encode($canonicalizedUserSignatureDataHashSigned); diff --git a/src/Handlers/UserSignatureHandlerV3.php b/src/Handlers/UserSignatureHandlerV3.php index f2d89e5..c753e48 100644 --- a/src/Handlers/UserSignatureHandlerV3.php +++ b/src/Handlers/UserSignatureHandlerV3.php @@ -39,12 +39,12 @@ public function handle(UserSignature $xml, string $digest): void // Add SignatureVersion to OrderSignatureData. $xmlSignatureVersion = $xml->createElement('SignatureVersion'); - $xmlSignatureVersion->nodeValue = $this->keyRing->getUserSignatureAVersion(); + $xmlSignatureVersion->nodeValue = $this->keyring->getUserSignatureAVersion(); $xmlOrderSignatureData->appendChild($xmlSignatureVersion); $canonicalizedUserSignatureDataHashSigned = $this->cryptService->encrypt( - $this->keyRing->getUserSignatureA()->getPrivateKey(), - $this->keyRing->getPassword(), + $this->keyring->getUserSignatureA()->getPrivateKey(), + $this->keyring->getPassword(), $digest ); $signatureValueNodeValue = base64_encode($canonicalizedUserSignatureDataHashSigned); diff --git a/src/Models/Bank.php b/src/Models/Bank.php index 7695595..760bc31 100644 --- a/src/Models/Bank.php +++ b/src/Models/Bank.php @@ -10,10 +10,6 @@ */ final class Bank { - public const VERSION_24 = 'VERSION_24'; - public const VERSION_25 = 'VERSION_25'; - public const VERSION_30 = 'VERSION_30'; - /** * The HostID of the bank. */ @@ -43,23 +39,16 @@ final class Bank */ private ?string $serverName = null; - /** - * The Server Version of the bank. - */ - private string $version; - /** * Constructor. * * @param string $hostId * @param string $url - * @param string $version */ - public function __construct(string $hostId, string $url, string $version = self::VERSION_25) + public function __construct(string $hostId, string $url) { $this->hostId = $hostId; $this->url = $url; - $this->version = $version; } /** @@ -131,12 +120,4 @@ public function getServerName(): ?string { return $this->serverName; } - - /** - * @return string|null - */ - public function getVersion(): ?string - { - return $this->version; - } } diff --git a/src/Models/KeyRing.php b/src/Models/Keyring.php similarity index 78% rename from src/Models/KeyRing.php rename to src/Models/Keyring.php index 04a6a83..3834d85 100644 --- a/src/Models/KeyRing.php +++ b/src/Models/Keyring.php @@ -11,16 +11,20 @@ * @license http://www.opensource.org/licenses/mit-license.html MIT License * @author Andrew Svirin */ -final class KeyRing +final class Keyring { - const USER_PREFIX = 'USER'; - const BANK_PREFIX = 'BANK'; - const SIGNATURE_PREFIX_A = 'A'; - const SIGNATURE_PREFIX_X = 'X'; - const SIGNATURE_PREFIX_E = 'E'; - const CERTIFICATE_PREFIX = 'CERTIFICATE'; - const PUBLIC_KEY_PREFIX = 'PUBLIC_KEY'; - const PRIVATE_KEY_PREFIX = 'PRIVATE_KEY'; + public const VERSION_24 = 'VERSION_24'; + public const VERSION_25 = 'VERSION_25'; + public const VERSION_30 = 'VERSION_30'; + public const VERSION_PREFIX = 'VERSION'; + public const USER_PREFIX = 'USER'; + public const BANK_PREFIX = 'BANK'; + public const SIGNATURE_PREFIX_A = 'A'; + public const SIGNATURE_PREFIX_X = 'X'; + public const SIGNATURE_PREFIX_E = 'E'; + public const CERTIFICATE_PREFIX = 'CERTIFICATE'; + public const PUBLIC_KEY_PREFIX = 'PUBLIC_KEY'; + public const PRIVATE_KEY_PREFIX = 'PRIVATE_KEY'; private ?SignatureInterface $userSignatureA = null; private ?SignatureInterface $userSignatureX = null; @@ -29,6 +33,24 @@ final class KeyRing private ?SignatureInterface $bankSignatureE = null; private ?string $password = null; + /** + * The Protocol Version. + */ + private string $version; + + public function __construct(string $version) + { + $this->version = $version; + } + + /** + * @return string + */ + public function getVersion(): string + { + return $this->version; + } + public function setUserSignatureA(SignatureInterface $signature = null): void { $this->userSignatureA = $signature; diff --git a/src/Services/ArrayKeyringManager.php b/src/Services/ArrayKeyringManager.php index 8b50021..c21f666 100644 --- a/src/Services/ArrayKeyringManager.php +++ b/src/Services/ArrayKeyringManager.php @@ -2,29 +2,29 @@ namespace AndrewSvirin\Ebics\Services; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; use LogicException; /** - * EBICS KeyRing representation manage one key ring stored in the array. + * EBICS Keyring representation manage one key ring stored in the array. * * @license http://www.opensource.org/licenses/mit-license.html MIT License * @author Andrew Svirin */ -final class ArrayKeyringManager extends KeyRingManager +final class ArrayKeyringManager extends KeyringManager { /** * @inheritDoc */ - public function loadKeyRing($resource, string $passphrase): KeyRing + public function loadKeyring($resource, string $passphrase, string $defaultVersion = Keyring::VERSION_25): Keyring { if (!is_array($resource)) { throw new LogicException('Expects array.'); } if (!empty($resource)) { - $result = $this->keyRingFactory->createKeyRingFromData($resource); + $result = $this->keyringFactory->createKeyringFromData($resource); } else { - $result = new KeyRing(); + $result = new Keyring($defaultVersion); } $result->setPassword($passphrase); @@ -34,11 +34,11 @@ public function loadKeyRing($resource, string $passphrase): KeyRing /** * @inheritDoc */ - public function saveKeyRing(KeyRing $keyRing, &$resource): void + public function saveKeyring(Keyring $keyring, &$resource): void { if (!is_array($resource)) { throw new LogicException('Expects array.'); } - $resource = $this->keyRingFactory->buildDataFromKeyRing($keyRing); + $resource = $this->keyringFactory->buildDataFromKeyring($keyring); } } diff --git a/src/Services/CryptService.php b/src/Services/CryptService.php index 3345f5f..a096fbe 100644 --- a/src/Services/CryptService.php +++ b/src/Services/CryptService.php @@ -7,7 +7,7 @@ use AndrewSvirin\Ebics\Exceptions\EbicsException; use AndrewSvirin\Ebics\Factories\Crypt\AESFactory; use AndrewSvirin\Ebics\Factories\Crypt\RSAFactory; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; use LogicException; use RuntimeException; @@ -49,7 +49,7 @@ public function hash(string $text, string $algorithm = 'sha256', bool $binary = /** * Decrypt encrypted OrderData. * - * @param KeyRing $keyRing + * @param Keyring $keyring * @param string $orderDataEncrypted * @param string $transactionKey * @@ -57,15 +57,15 @@ public function hash(string $text, string $algorithm = 'sha256', bool $binary = * @throws EbicsException */ public function decryptOrderDataCompressed( - KeyRing $keyRing, + Keyring $keyring, string $orderDataEncrypted, string $transactionKey ): string { - if (!($signatureE = $keyRing->getUserSignatureE())) { + if (!($signatureE = $keyring->getUserSignatureE())) { throw new RuntimeException('Signature E is not set.'); } - $rsa = $this->rsaFactory->createPrivate($signatureE->getPrivateKey(), $keyRing->getPassword()); + $rsa = $this->rsaFactory->createPrivate($signatureE->getPrivateKey(), $keyring->getPassword()); $transactionKeyDecrypted = $rsa->decrypt($transactionKey); $orderDataCompressed = $this->decryptByKey($transactionKeyDecrypted, $orderDataEncrypted); diff --git a/src/Services/FileKeyringManager.php b/src/Services/FileKeyringManager.php index 4beea0b..e11e611 100644 --- a/src/Services/FileKeyringManager.php +++ b/src/Services/FileKeyringManager.php @@ -2,31 +2,32 @@ namespace AndrewSvirin\Ebics\Services; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; use LogicException; /** - * EBICS KeyRing representation manage one key ring stored in the file. + * EBICS Keyring representation manage one key ring stored in the file. * * @license http://www.opensource.org/licenses/mit-license.html MIT License * @author Andrew Svirin */ -final class FileKeyringManager extends KeyRingManager +final class FileKeyringManager extends KeyringManager { /** * @inheritDoc */ - public function loadKeyRing($resource, string $passphrase): KeyRing + public function loadKeyring($resource, string $passphrase, string $defaultVersion = Keyring::VERSION_25): Keyring { if (!is_string($resource)) { throw new LogicException('Expects string.'); } - if (is_file($resource) && - ($content = file_get_contents($resource)) && - is_string($content)) { - $result = $this->keyRingFactory->createKeyRingFromData(json_decode($content, true)); + if (is_file($resource) + && ($content = file_get_contents($resource)) + && is_string($content) + ) { + $result = $this->keyringFactory->createKeyringFromData(json_decode($content, true)); } else { - $result = new KeyRing(); + $result = new Keyring($defaultVersion); } $result->setPassword($passphrase); @@ -36,12 +37,12 @@ public function loadKeyRing($resource, string $passphrase): KeyRing /** * @inheritDoc */ - public function saveKeyRing(KeyRing $keyRing, &$resource): void + public function saveKeyring(Keyring $keyring, &$resource): void { if (!is_string($resource)) { throw new LogicException('Expects string.'); } - $data = $this->keyRingFactory->buildDataFromKeyRing($keyRing); + $data = $this->keyringFactory->buildDataFromKeyring($keyring); file_put_contents($resource, json_encode($data, JSON_PRETTY_PRINT)); } } diff --git a/src/Services/KeyRingManager.php b/src/Services/KeyringManager.php similarity index 58% rename from src/Services/KeyRingManager.php rename to src/Services/KeyringManager.php index 9c18e45..124cf25 100644 --- a/src/Services/KeyRingManager.php +++ b/src/Services/KeyringManager.php @@ -2,11 +2,11 @@ namespace AndrewSvirin\Ebics\Services; -use AndrewSvirin\Ebics\Contracts\KeyRingManagerInterface; -use AndrewSvirin\Ebics\Factories\KeyRingFactory; +use AndrewSvirin\Ebics\Contracts\KeyringManagerInterface; +use AndrewSvirin\Ebics\Factories\KeyringFactory; /** - * An EbicsKeyRing instance can hold sets of private user keys and/or public + * An EbicsKeyring instance can hold sets of private user keys and/or public * bank keys. Private user keys are always stored AES encrypted by the * specified passphrase (derivated by PBKDF2). For each key file on disk or * same key dictionary a singleton instance is created. @@ -14,15 +14,15 @@ * @license http://www.opensource.org/licenses/mit-license.html MIT License * @author Andrew Svirin */ -abstract class KeyRingManager implements KeyRingManagerInterface +abstract class KeyringManager implements KeyringManagerInterface { - protected KeyRingFactory $keyRingFactory; + protected KeyringFactory $keyringFactory; /** * Constructor. */ public function __construct() { - $this->keyRingFactory = new KeyRingFactory(); + $this->keyringFactory = new KeyringFactory(); } } diff --git a/tests/AbstractEbicsTestCase.php b/tests/AbstractEbicsTestCase.php index 9981083..f382750 100644 --- a/tests/AbstractEbicsTestCase.php +++ b/tests/AbstractEbicsTestCase.php @@ -11,7 +11,7 @@ use AndrewSvirin\Ebics\Models\Bank; use AndrewSvirin\Ebics\Models\CustomerCreditTransfer; use AndrewSvirin\Ebics\Models\CustomerDirectDebit; -use AndrewSvirin\Ebics\Models\KeyRing; +use AndrewSvirin\Ebics\Models\Keyring; use AndrewSvirin\Ebics\Models\StructuredPostalAddress; use AndrewSvirin\Ebics\Models\UnstructuredPostalAddress; use AndrewSvirin\Ebics\Models\User; @@ -27,7 +27,6 @@ */ abstract class AbstractEbicsTestCase extends TestCase { - protected $data = __DIR__.'/_data'; protected $fixtures = __DIR__.'/_fixtures'; @@ -37,7 +36,7 @@ protected function setupClientV24( X509GeneratorInterface $x509Generator = null, $fake = false ): EbicsClientInterface { - return $this->setupClient(Bank::VERSION_24, $credentialsId, $x509Generator, $fake); + return $this->setupClient(Keyring::VERSION_24, $credentialsId, $x509Generator, $fake); } protected function setupClientV25( @@ -45,7 +44,7 @@ protected function setupClientV25( X509GeneratorInterface $x509Generator = null, $fake = false ): EbicsClientInterface { - return $this->setupClient(Bank::VERSION_25, $credentialsId, $x509Generator, $fake); + return $this->setupClient(Keyring::VERSION_25, $credentialsId, $x509Generator, $fake); } protected function setupClientV3( @@ -53,7 +52,7 @@ protected function setupClientV3( X509GeneratorInterface $x509Generator = null, bool $fake = false ): EbicsClientInterface { - return $this->setupClient(Bank::VERSION_30, $credentialsId, $x509Generator, $fake); + return $this->setupClient(Keyring::VERSION_30, $credentialsId, $x509Generator, $fake); } private function setupClient( @@ -64,14 +63,14 @@ private function setupClient( ): EbicsClientInterface { $credentials = $this->credentialsDataProvider($credentialsId); - $bank = new Bank($credentials['hostId'], $credentials['hostURL'], $version); + $bank = new Bank($credentials['hostId'], $credentials['hostURL']); $bank->setUsesUploadWithES(true); $bank->setIsCertified($credentials['hostIsCertified']); $bank->setServerName(sprintf('Server %d', $credentialsId)); $user = new User($credentials['partnerId'], $credentials['userId']); - $keyRing = $this->loadKeyRing($credentialsId); + $keyring = $this->loadKeyring($credentialsId, $version); - $ebicsClient = new EbicsClient($bank, $user, $keyRing); + $ebicsClient = new EbicsClient($bank, $user, $keyring); $ebicsClient->setX509Generator($x509Generator); if (true === $fake) { @@ -81,42 +80,48 @@ private function setupClient( return $ebicsClient; } - protected function loadKeyRing($credentialsId): KeyRing + protected function loadKeyring(string $credentialsId, string $version): Keyring { - $keyRingRealPath = sprintf('%s/workspace/keyring_%d.json', $this->data, $credentialsId); + $keyringRealPath = sprintf('%s/workspace/keyring_%d.json', $this->data, $credentialsId); $password = 'test123'; - $keyRingManager = new FileKeyRingManager(); + $keyringManager = new FileKeyringManager(); - return $keyRingManager->loadKeyRing($keyRingRealPath, $password); + return $keyringManager->loadKeyring($keyringRealPath, $password, $version); } - protected function saveKeyRing($credentialsId, KeyRing $keyRing): void + protected function saveKeyring(string $credentialsId, Keyring $keyring): void { - $keyRingRealPath = sprintf('%s/workspace/keyring_%d.json', $this->data, $credentialsId); - $keyRingManager = new FileKeyRingManager(); - $keyRingManager->saveKeyRing($keyRing, $keyRingRealPath); + $keyringRealPath = sprintf('%s/workspace/keyring_%d.json', $this->data, $credentialsId); + $keyringManager = new FileKeyringManager(); + $keyringManager->saveKeyring($keyring, $keyringRealPath); } - protected function setupKeys(KeyRing $keyRing) + protected function setupKeys(Keyring $keyring) { $keys = json_decode(file_get_contents($this->fixtures.'/keys.json')); - $keyRing->setPassword('mysecret'); + $keyring->setPassword('mysecret'); $signatureFactory = new SignatureFactory(); - $userSignatureA = $signatureFactory->createSignatureA($keyRing->getUserSignatureA()->getPublicKey(), - $keys->A006); - $userSignatureA->setCertificateContent($keyRing->getUserSignatureA()->getCertificateContent()); - $keyRing->setUserSignatureA($userSignatureA); + $userSignatureA = $signatureFactory->createSignatureA( + $keyring->getUserSignatureA()->getPublicKey(), + $keys->A006 + ); + $userSignatureA->setCertificateContent($keyring->getUserSignatureA()->getCertificateContent()); + $keyring->setUserSignatureA($userSignatureA); - $userSignatureE = $signatureFactory->createSignatureE($keyRing->getUserSignatureE()->getPublicKey(), - $keys->E002); - $userSignatureE->setCertificateContent($keyRing->getUserSignatureE()->getCertificateContent()); - $keyRing->setUserSignatureE($userSignatureE); + $userSignatureE = $signatureFactory->createSignatureE( + $keyring->getUserSignatureE()->getPublicKey(), + $keys->E002 + ); + $userSignatureE->setCertificateContent($keyring->getUserSignatureE()->getCertificateContent()); + $keyring->setUserSignatureE($userSignatureE); - $userSignatureX = $signatureFactory->createSignatureX($keyRing->getUserSignatureX()->getPublicKey(), - $keys->X002); - $userSignatureX->setCertificateContent($keyRing->getUserSignatureX()->getCertificateContent()); - $keyRing->setUserSignatureX($userSignatureX); + $userSignatureX = $signatureFactory->createSignatureX( + $keyring->getUserSignatureX()->getPublicKey(), + $keys->X002 + ); + $userSignatureX->setCertificateContent($keyring->getUserSignatureX()->getCertificateContent()); + $keyring->setUserSignatureX($userSignatureX); } /** diff --git a/tests/EbicsBankLetterTest.php b/tests/EbicsBankLetterTest.php index 17e3a2a..d5712aa 100644 --- a/tests/EbicsBankLetterTest.php +++ b/tests/EbicsBankLetterTest.php @@ -32,7 +32,7 @@ public function testPrepareBankLetterTxt(int $credentialsId) $bankLetter = $ebicsBankLetter->prepareBankLetter( $client->getBank(), $client->getUser(), - $client->getKeyRing() + $client->getKeyring() ); $txt = $ebicsBankLetter->formatBankLetter($bankLetter, $ebicsBankLetter->createTxtBankLetterFormatter()); @@ -57,7 +57,7 @@ public function testPrepareBankLetterHtml(int $credentialsId) $bankLetter = $ebicsBankLetter->prepareBankLetter( $client->getBank(), $client->getUser(), - $client->getKeyRing() + $client->getKeyring() ); $html = $ebicsBankLetter->formatBankLetter($bankLetter, $ebicsBankLetter->createHtmlBankLetterFormatter()); @@ -82,7 +82,7 @@ public function testPrepareBankLetterPdf(int $credentialsId) $bankLetter = $ebicsBankLetter->prepareBankLetter( $client->getBank(), $client->getUser(), - $client->getKeyRing() + $client->getKeyring() ); $pdf = $ebicsBankLetter->formatBankLetter($bankLetter, $ebicsBankLetter->createPdfBankLetterFormatter()); diff --git a/tests/EbicsClientV24Test.php b/tests/EbicsClientV24Test.php index 7c71c3e..ae72990 100644 --- a/tests/EbicsClientV24Test.php +++ b/tests/EbicsClientV24Test.php @@ -60,7 +60,7 @@ public function testINI(int $credentialsId, array $codes, X509GeneratorInterface $client = $this->setupClientV24($credentialsId, $x509Generator, $codes['INI']['fake']); // Check that keyring is empty and or wait on success or wait on exception. - $userExists = $client->getKeyRing()->getUserSignatureA(); + $userExists = $client->getKeyring()->getUserSignatureA(); if ($userExists) { $this->expectException(InvalidUserOrUserStateException::class); $this->expectExceptionCode(91002); @@ -68,7 +68,7 @@ public function testINI(int $credentialsId, array $codes, X509GeneratorInterface $ini = $client->INI(); if (!$userExists) { $responseHandler = $client->getResponseHandler(); - $this->saveKeyRing($credentialsId, $client->getKeyRing()); + $this->saveKeyring($credentialsId, $client->getKeyring()); $code = $responseHandler->retrieveH00XReturnCode($ini); $reportText = $responseHandler->retrieveH00XReportText($ini); $this->assertResponseOk($code, $reportText); @@ -92,7 +92,7 @@ public function testHIA(int $credentialsId, array $codes, X509GeneratorInterface $client = $this->setupClientV24($credentialsId, $x509Generator, $codes['HIA']['fake']); // Check that keyring is empty and or wait on success or wait on exception. - $bankExists = $client->getKeyRing()->getUserSignatureX(); + $bankExists = $client->getKeyring()->getUserSignatureX(); if ($bankExists) { $this->expectException(InvalidUserOrUserStateException::class); $this->expectExceptionCode(91002); @@ -100,7 +100,7 @@ public function testHIA(int $credentialsId, array $codes, X509GeneratorInterface $hia = $client->HIA(); if (!$bankExists) { $responseHandler = $client->getResponseHandler(); - $this->saveKeyRing($credentialsId, $client->getKeyRing()); + $this->saveKeyring($credentialsId, $client->getKeyring()); $code = $responseHandler->retrieveH00XReturnCode($hia); $reportText = $responseHandler->retrieveH00XReportText($hia); $this->assertResponseOk($code, $reportText); @@ -133,7 +133,7 @@ public function testHPB(int $credentialsId, array $codes, X509GeneratorInterface $code = $responseHandler->retrieveH00XReturnCode($hpb->getTransaction()->getInitializationSegment()->getResponse()); $reportText = $responseHandler->retrieveH00XReportText($hpb->getTransaction()->getInitializationSegment()->getResponse()); $this->assertResponseOk($code, $reportText); - $this->saveKeyRing($credentialsId, $client->getKeyRing()); + $this->saveKeyring($credentialsId, $client->getKeyring()); } /** diff --git a/tests/EbicsClientV25Test.php b/tests/EbicsClientV25Test.php index f921259..a8192cf 100644 --- a/tests/EbicsClientV25Test.php +++ b/tests/EbicsClientV25Test.php @@ -62,7 +62,7 @@ public function testINI(int $credentialsId, array $codes, X509GeneratorInterface $client = $this->setupClientV25($credentialsId, $x509Generator, $codes['INI']['fake']); // Check that keyring is empty and or wait on success or wait on exception. - $userExists = $client->getKeyRing()->getUserSignatureA(); + $userExists = $client->getKeyring()->getUserSignatureA(); if ($userExists) { $this->expectException(InvalidUserOrUserStateException::class); $this->expectExceptionCode(91002); @@ -70,7 +70,7 @@ public function testINI(int $credentialsId, array $codes, X509GeneratorInterface $ini = $client->INI(); if (!$userExists) { $responseHandler = $client->getResponseHandler(); - $this->saveKeyRing($credentialsId, $client->getKeyRing()); + $this->saveKeyring($credentialsId, $client->getKeyring()); $code = $responseHandler->retrieveH00XReturnCode($ini); $reportText = $responseHandler->retrieveH00XReportText($ini); $this->assertResponseOk($code, $reportText); @@ -99,7 +99,7 @@ public function testH3K(int $credentialsId, array $codes, X509GeneratorInterface $client = $this->setupClientV3($credentialsId, $x509Generator, $codes['H3K']['fake']); // Check that keyring is empty and or wait on success or wait on exception. - $userExists = $client->getKeyRing()->getUserSignatureA(); + $userExists = $client->getKeyring()->getUserSignatureA(); if ($userExists) { $this->expectException(InvalidUserOrUserStateException::class); $this->expectExceptionCode(91002); @@ -107,7 +107,7 @@ public function testH3K(int $credentialsId, array $codes, X509GeneratorInterface $ini = $client->INI(); if (!$userExists) { $responseHandler = $client->getResponseHandler(); - $this->saveKeyRing($credentialsId, $client->getKeyRing()); + $this->saveKeyring($credentialsId, $client->getKeyring()); $code = $responseHandler->retrieveH00XReturnCode($ini); $reportText = $responseHandler->retrieveH00XReportText($ini); $this->assertResponseOk($code, $reportText); @@ -131,7 +131,7 @@ public function testHIA(int $credentialsId, array $codes, X509GeneratorInterface $client = $this->setupClientV25($credentialsId, $x509Generator, $codes['HIA']['fake']); // Check that keyring is empty and or wait on success or wait on exception. - $bankExists = $client->getKeyRing()->getUserSignatureX(); + $bankExists = $client->getKeyring()->getUserSignatureX(); if ($bankExists) { $this->expectException(InvalidUserOrUserStateException::class); $this->expectExceptionCode(91002); @@ -139,7 +139,7 @@ public function testHIA(int $credentialsId, array $codes, X509GeneratorInterface $hia = $client->HIA(); if (!$bankExists) { $responseHandler = $client->getResponseHandler(); - $this->saveKeyRing($credentialsId, $client->getKeyRing()); + $this->saveKeyring($credentialsId, $client->getKeyring()); $code = $responseHandler->retrieveH00XReturnCode($hia); $reportText = $responseHandler->retrieveH00XReportText($hia); $this->assertResponseOk($code, $reportText); @@ -172,7 +172,7 @@ public function testHPB(int $credentialsId, array $codes, X509GeneratorInterface $code = $responseHandler->retrieveH00XReturnCode($hpb->getTransaction()->getInitializationSegment()->getResponse()); $reportText = $responseHandler->retrieveH00XReportText($hpb->getTransaction()->getInitializationSegment()->getResponse()); $this->assertResponseOk($code, $reportText); - $this->saveKeyRing($credentialsId, $client->getKeyRing()); + $this->saveKeyring($credentialsId, $client->getKeyring()); } /** diff --git a/tests/EbicsClientV3Test.php b/tests/EbicsClientV3Test.php index ceb62b1..d4cfbf6 100644 --- a/tests/EbicsClientV3Test.php +++ b/tests/EbicsClientV3Test.php @@ -65,7 +65,7 @@ public function testINI(int $credentialsId, array $codes, X509GeneratorInterface $client = $this->setupClientV3($credentialsId, $x509Generator, $codes['INI']['fake']); // Check that keyring is empty and or wait on success or wait on exception. - $userExists = $client->getKeyRing()->getUserSignatureA(); + $userExists = $client->getKeyring()->getUserSignatureA(); if ($userExists) { $this->expectException(InvalidUserOrUserStateException::class); $this->expectExceptionCode(91002); @@ -73,7 +73,7 @@ public function testINI(int $credentialsId, array $codes, X509GeneratorInterface $ini = $client->INI(); if (!$userExists) { $responseHandler = $client->getResponseHandler(); - $this->saveKeyRing($credentialsId, $client->getKeyRing()); + $this->saveKeyring($credentialsId, $client->getKeyring()); $code = $responseHandler->retrieveH00XReturnCode($ini); $reportText = $responseHandler->retrieveH00XReportText($ini); $this->assertResponseOk($code, $reportText); @@ -98,7 +98,7 @@ public function testHIA(int $credentialsId, array $codes, X509GeneratorInterface $client = $this->setupClientV3($credentialsId, $x509Generator, $codes['HIA']['fake']); // Check that keyring is empty and or wait on success or wait on exception. - $bankExists = $client->getKeyRing()->getUserSignatureX(); + $bankExists = $client->getKeyring()->getUserSignatureX(); if ($bankExists) { $this->expectException(InvalidUserOrUserStateException::class); $this->expectExceptionCode(91002); @@ -106,7 +106,7 @@ public function testHIA(int $credentialsId, array $codes, X509GeneratorInterface $hia = $client->HIA(); if (!$bankExists) { $responseHandler = $client->getResponseHandler(); - $this->saveKeyRing($credentialsId, $client->getKeyRing()); + $this->saveKeyring($credentialsId, $client->getKeyring()); $code = $responseHandler->retrieveH00XReturnCode($hia); $reportText = $responseHandler->retrieveH00XReportText($hia); $this->assertResponseOk($code, $reportText); @@ -135,7 +135,7 @@ public function testH3K(int $credentialsId, array $codes, X509GeneratorInterface $client = $this->setupClientV3($credentialsId, $x509Generator, $codes['H3K']['fake']); // Check that keyring is empty and or wait on success or wait on exception. - $bankExists = $client->getKeyRing()->getUserSignatureX(); + $bankExists = $client->getKeyring()->getUserSignatureX(); if ($bankExists) { $this->expectException(InvalidUserOrUserStateException::class); $this->expectExceptionCode(91002); @@ -143,7 +143,7 @@ public function testH3K(int $credentialsId, array $codes, X509GeneratorInterface $hia = $client->H3K(); if (!$bankExists) { $responseHandler = $client->getResponseHandler(); - $this->saveKeyRing($credentialsId, $client->getKeyRing()); + $this->saveKeyring($credentialsId, $client->getKeyring()); $code = $responseHandler->retrieveH00XReturnCode($hia); $reportText = $responseHandler->retrieveH00XReportText($hia); $this->assertResponseOk($code, $reportText); @@ -177,7 +177,7 @@ public function testHPB(int $credentialsId, array $codes, X509GeneratorInterface $code = $responseHandler->retrieveH00XReturnCode($hpb->getTransaction()->getInitializationSegment()->getResponse()); $reportText = $responseHandler->retrieveH00XReportText($hpb->getTransaction()->getInitializationSegment()->getResponse()); $this->assertResponseOk($code, $reportText); - $this->saveKeyRing($credentialsId, $client->getKeyRing()); + $this->saveKeyring($credentialsId, $client->getKeyring()); } /** diff --git a/tests/Handlers/AuthSignatureHandlerTest.php b/tests/Handlers/AuthSignatureHandlerTest.php index b180d09..602c746 100644 --- a/tests/Handlers/AuthSignatureHandlerTest.php +++ b/tests/Handlers/AuthSignatureHandlerTest.php @@ -33,8 +33,8 @@ public function setUp(): void parent::setUp(); $credentialsId = 1; $client = $this->setupClientV25($credentialsId); - $this->setupKeys($client->getKeyRing()); - $this->authSignatureHandler = new AuthSignatureHandlerV25($client->getKeyRing()); + $this->setupKeys($client->getKeyring()); + $this->authSignatureHandler = new AuthSignatureHandlerV25($client->getKeyring()); } /** diff --git a/tests/Handlers/OrderDataHandlerTest.php b/tests/Handlers/OrderDataHandlerTest.php index eb899e2..95731b9 100644 --- a/tests/Handlers/OrderDataHandlerTest.php +++ b/tests/Handlers/OrderDataHandlerTest.php @@ -33,8 +33,8 @@ public function setUp(): void { parent::setUp(); $client = $this->setupClientV25(3); - $this->setupKeys($client->getKeyRing()); - $this->orderDataHandler = new OrderDataHandlerV25($client->getBank(), $client->getUser(), $client->getKeyRing()); + $this->setupKeys($client->getKeyring()); + $this->orderDataHandler = new OrderDataHandlerV25($client->getBank(), $client->getUser(), $client->getKeyring()); } /** @@ -59,7 +59,7 @@ public function testHandleINI() // $ini2XML = clone $iniXML; // $this->orderDataHandler->handleINI( // $ini2XML, -// $this->keyRing->getUserCertificateA(), +// $this->keyring->getUserCertificateA(), // DateTime::createFromFormat('Y-m-d\TH:i:s\Z', $iniDatetime) // ); } diff --git a/tests/Services/CryptServiceTest.php b/tests/Services/CryptServiceTest.php index 0da3f47..4519ca5 100644 --- a/tests/Services/CryptServiceTest.php +++ b/tests/Services/CryptServiceTest.php @@ -25,7 +25,7 @@ public function testGenerateKeys() $client = $this->setupClientV25($credentialsId); $cryptService = new CryptService(); - $keys = $cryptService->generateKeys($client->getKeyRing()->getPassword()); + $keys = $cryptService->generateKeys($client->getKeyring()->getPassword()); self::assertArrayHasKey('privatekey', $keys); self::assertArrayHasKey('publickey', $keys); diff --git a/tests/_data/data b/tests/_data/data index 613f8ce..45dd2ab 100644 --- a/tests/_data/data +++ b/tests/_data/data @@ -1,3 +1,3 @@ -Demo server 1: https://software.elcimai.com/efs/private/perso/myStations.do?parameter=infoServer&idServer=1 -Demo server 2: https://iso20022test.credit-suisse.com/user/settings/ebics -Demo server 3: https://ubs-paymentstandards.ch/login +Demo server 1: https://software.elcimai.com/efs/private/perso/myStations.do?parameter=infoServer&idServer=1 +Demo server 2: https://iso20022test.credit-suisse.com/user/settings/ebics +Demo server 3: https://ubs-paymentstandards.ch/login diff --git a/tests/_data/workspace/keyring_1.json b/tests/_data/workspace/keyring_1.json index 5d3fcb0..89a185f 100644 --- a/tests/_data/workspace/keyring_1.json +++ b/tests/_data/workspace/keyring_1.json @@ -1,4 +1,5 @@ { + "VERSION": "VERSION_25", "USER": { "A": { "CERTIFICATE": null, diff --git a/tests/_data/workspace/keyring_2.json b/tests/_data/workspace/keyring_2.json index 5c2fcd2..d12c8c7 100644 --- a/tests/_data/workspace/keyring_2.json +++ b/tests/_data/workspace/keyring_2.json @@ -1,4 +1,5 @@ { + "VERSION": "VERSION_25", "USER": { "A": { "CERTIFICATE": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlEU0RDQ0FqQ2dBd0lCQWdJVU5UZ3dOemcxTnpFeE5UTTFNemt5TURjNE1EY3dEUVlKS29aSWh2Y05BUUVMDQpCUUF3SlRFTE1Ba0dBMVVFQmd3Q1JsSXhGakFVQmdOVkJBTU1EVmRsWW1GdWF5QkRiR2xsYm5Rd0hoY05NakV3DQpNakl5TVRJd09USTFXaGNOTWpJd01qSXpNVEl3T1RJMVdqQWpNUXN3Q1FZRFZRUUdEQUpHVWpFVU1CSUdBMVVFDQpBd3dMS2k1M1pXSmhibXN1Wm5Jd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUREDQpLSTVkWG9haWE1TXo4N2Y1VWlYcEE1WU9iaUFycVFYQitjZUVhY2tpaVB5R2RONlgvTFhlQlJoMDRzU2tBWE85DQoyMjFjL1d6czFZM3ZCbnVGKzN4MHhnNGJxUTRjK0JVcXRhRlYxcmgrZnR1dlFnTUMrYnh2a0V4WWc1M0dpdGlqDQpmQzhMbWhTOS84eEJuRXE0bHVwd1JBbmlrWENLOGtYblpMYmlPVEE4WWpyZkgweWZJN2o3V2Jzc3k4U1FTbCttDQo3ZzFXRndzdFBYaVJyNkRWenZVV2tuRHBkbW1SV1lqYlRHMk9jdkg3U1J6SkoyY08rVTVxYnlLOXNNaEtmQVZKDQpCTGQzNTJEdjlPdkxLYWhCZGFlYjltSVhQYzJTMW5LSGU3UjVhQmg3bi9hZTI0UHdzS2wwZGI0OStYbVNYV1U5DQppM2EvaFdtTjN4SHZRekR5S3N2OUFnTUJBQUdqY2pCd01CMEdBMVVkRGdRV0JCUWRCK090WDdNWTFtZ3ViL21YDQp0VjJvL3U4NktUQUpCZ05WSFJNRUFqQUFNQk1HQTFVZEpRUU1NQW9HQ0NzR0FRVUZCd01FTUE0R0ExVWREd0VCDQovd1FFQXdJR1FEQWZCZ05WSFNNRUdEQVdnQlFkQitPdFg3TVkxbWd1Yi9tWHRWMm8vdTg2S1RBTkJna3Foa2lHDQo5dzBCQVFzRkFBT0NBUUVBbytwY3FGU0hDVTJ0eFloelNnSGNYVGg1S2haTWRueWdWUlRRTVlKRFpOdjZYVy9PDQpLZ2VvL3d6b1VEN2MySTdLRmo3NWFNVFZHVWhJUjJUYUxtSkVQM2ZFR1ExTVo5RkhzNUVQYmdadEtIT0NramhoDQoyL2ppazNlWG9oY0FrOFNsUzRyc2lIOTR0NzYrUWt0dmZTTHFkNTkzMGs3Ym9OQkRCdzdHbXIxTWl5VlJLSFplDQptaFo1ZEErdDcrZ2dTNzVwalBHd2tMQzBlTHZBeE53M0hMVWRCYnVxWFRPYmpEWUFjcWtKMWtXcXB2aGx3OGhMDQo3SFNRZ2FETnZ2alFFZllQKzYrUmg2L0szVEIyeUE1TnpTR2tFTloyeEdzdFJRbERYRWxsRFhNSmtGWXJDdDMrDQpMU2h0a3A5dkZqRm95SEN1OUFsbGEwT0dpcU1GTENpWTFZVlg5Zz09DQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t", diff --git a/tests/_data/workspace/keyring_3.json b/tests/_data/workspace/keyring_3.json index 2b04863..126e22b 100644 --- a/tests/_data/workspace/keyring_3.json +++ b/tests/_data/workspace/keyring_3.json @@ -1,4 +1,5 @@ { + "VERSION": "VERSION_25", "USER": { "A": { "CERTIFICATE": null, diff --git a/tests/_data/workspace/keyring_4.json b/tests/_data/workspace/keyring_4.json index 2971074..447ad11 100644 --- a/tests/_data/workspace/keyring_4.json +++ b/tests/_data/workspace/keyring_4.json @@ -1,4 +1,5 @@ { + "VERSION": "VERSION_25", "USER": { "A": { "CERTIFICATE": null, diff --git a/tests/_data/workspace/keyring_5.json b/tests/_data/workspace/keyring_5.json index 03f8a9f..d7720f7 100644 --- a/tests/_data/workspace/keyring_5.json +++ b/tests/_data/workspace/keyring_5.json @@ -1,4 +1,5 @@ { + "VERSION": "VERSION_25", "USER": { "A": { "CERTIFICATE": null, diff --git a/tests/_data/workspace/keyring_6.json b/tests/_data/workspace/keyring_6.json index 9a847aa..ba71f4a 100644 --- a/tests/_data/workspace/keyring_6.json +++ b/tests/_data/workspace/keyring_6.json @@ -1,19 +1,20 @@ { + "VERSION": "VERSION_30", "USER": { "A": { - "CERTIFICATE": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlEVmpDQ0FqNmdBd0lCQWdJVU5qazVNamswTXpjNU9EUTNPVEUyTmpNM05qWXdEUVlKS29aSWh2Y05BUUVMDQpCUUF3S3pFTE1Ba0dBMVVFQmd3Q1JFVXhIREFhQmdOVkJBTU1FME55WldScGRGTjFhWE56WlNCRGJHbGxiblF3DQpIaGNOTWpNd01qRXpNVEF6TWpVMVdoY05NalF3TWpFME1UQXpNalUxV2pBck1Rc3dDUVlEVlFRR0RBSkVSVEVjDQpNQm9HQTFVRUF3d1RLaTVqY21Wa2FYUXRjM1ZwYzNObExtTnZiVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEDQpnZ0VQQURDQ0FRb0NnZ0VCQU5lNDRTdksvQlJVWFQ2NnBYM2Yyb21xbnJnNWpvZ0lwaWpLOFpJOXpmbHhIM2tBDQp3UDFpQXV4NUxQZ0JFRmRWcFczeDQ5RWM5K0gwRHAvdGFyTXhFenp6a1VRN1E5eERhZmI2NTc3UWhQcTVndDlNDQpRcEpQZXJIYmk2dFhRcnREclNSRUNnTSthdzdOZm0vRWtmTHZjR09QUHVrSDNXOEZzbXBFb1k4eW9SUDZuVmswDQp3S2xVc0dsTlpEM1IzUW05Yld0ajJETmFSSjE3dDQyN3BXbjNuVnI3UDFZRVVCWThNL2psUkxDTlhYRWJrb2poDQpFZHFmNTlQSlNCQVVZWFZFYlhNQkpWaFpwQlVNaGxRaThiSUlFMm5CYXN6L0RBQlo2VGlmTWdKMS96blpHQ2ZwDQp0S2JUOEdvYUhNR29ENGxrSGJZM08rZVZPWmxYdm9Qc05DejY3bThDQXdFQUFhTnlNSEF3SFFZRFZSME9CQllFDQpGTWxORmszR2NuTElSbU1tbHdFL1ZwRGJ5VzZhTUFrR0ExVWRFd1FDTUFBd0V3WURWUjBsQkF3d0NnWUlLd1lCDQpCUVVIQXdRd0RnWURWUjBQQVFIL0JBUURBZ1pBTUI4R0ExVWRJd1FZTUJhQUZNbE5GazNHY25MSVJtTW1sd0UvDQpWcERieVc2YU1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQ2FlK3R5a0lOS2VJQUMvSnZoMElhdkNmd25NdjNzDQpoWENjYXdDTVhqQnpFR0cwMmhvY0dGSmxCRzBOYi9NRFUzeFE3L2JybERsdDVFemZ0bFhOYTQvdkZrWHZneDlxDQpmSnFjMDA0c3VQT0pJUGxaYVlHeTd1aTBTb2RXb0x6cDZPakt1dVVteUtxdXVFUTJtQXc1bzFEd24wVi82aWlHDQpFSmZlaGYwMGdQV1FRQXI3MUl6b042QUprRUpZYTRZZXZ6enhnek9tNU5Fem9zek5Jc2YzdzI1L05VaEVscHZXDQo4VkRUTzFYVG10ek5VSHFvNHZLNFVaaU5Pc2UyOXJPemVLcGkrZlZSMVFOUUZOZGllVkdrV3RaTFhtclI0OWU2DQpEaWZyU2Q1bnBVRDQ2NEo0cVhlUVFBdVUxQXQzQXVwOVlGM0tQV3U4aVowY3BWQW9FMzhSa3QvRw0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==", - "PUBLIC_KEY": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBMTdqaEs4cjhGRlJkUHJxbGZkL2ENCmlhcWV1RG1PaUFpbUtNcnhrajNOK1hFZmVRREEvV0lDN0hrcytBRVFWMVdsYmZIajBSejM0ZlFPbisxcXN6RVQNClBQT1JSRHREM0VOcDl2cm52dENFK3JtQzMweENrazk2c2R1THExZEN1ME90SkVRS0F6NXJEczErYjhTUjh1OXcNClk0OCs2UWZkYndXeWFrU2hqektoRS9xZFdUVEFxVlN3YVUxa1BkSGRDYjF0YTJQWU0xcEVuWHUzamJ1bGFmZWQNCld2cy9WZ1JRRmp3eitPVkVzSTFkY1J1U2lPRVIycC9uMDhsSUVCUmhkVVJ0Y3dFbFdGbWtGUXlHVkNMeHNnZ1QNCmFjRnF6UDhNQUZucE9KOHlBblgvT2RrWUorbTBwdFB3YWhvY3dhZ1BpV1FkdGpjNzU1VTVtVmUrZyt3MExQcnUNCmJ3SURBUUFCDQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0=", - "PRIVATE_KEY": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ0KUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRA0KREVLLUluZm86IERFUy1FREUzLUNCQyw2QjdBOTBBNkNDOUQ3NTBEDQoNCnFPdFFRVFNYamxYaG9GdjErMlFtckFTS2JWWGlwdzk5OHJTak1tNWNVZWxVNXc1SHBFMXVKajJGOWVhcVE5VkcNCnZwYXMxcUZMZk1nSlQxNitrRm92UWw4NVh4dklsaHBXdlE2RU1QK0hJK2tTam5RYXR5bmpweW1YZDJBZEM5TmQNCnBCT3YwWVIxbm82L0tnN2JCK0d0RUJEOTAwYy9QVUY3UlFBeU9LSy9DNm1GeHdrZUgyNXorTnBwaWlSVk11SEgNCi84dDJUSG9NeGQ3UFh2QUtzVEVISDM3anRBVkorRkVOeWRTU3lJZnJoOVhFVzIyMEpycjdqVU9lQzN6a2RNb3ANCmQxUmVhaE04UXQ2TG82Qi9vMFAyTzFTZmdsY2hDVStKa2VFNld0Ymtwanh2SXZMbFdQQ0RTTWJ3TFFreTdJMW8NCk1SVW5OSUNjdi9jM0dHb3FzZndBaUN1T2szYU56QVhhbkVQUmxRR2w3YTFtbDdMS29tUUVaQmVwTWdQSFp2UG8NCkZVMTRITG82MExka0o1WUNVcnBuZllDRmNZQjIxbHdDemxXSktLNTF5Mm5PakI2WXJTYldUT3h4ZERXN2hYaUsNClFnL0c3TFpSTldDZmJVVWpUUUtDOHhtSWV4S1pURWp3RUJLR21EWCtxaCtnL0s2ZGVza3N1M3hkYnpXcnlFcjcNCkw4TmUyVU9jT1ZCaE0zSnA5clM3dEJ2NUE1alZ4VWFsdThPQ0VncytHdDRlZUl4bEJ6VGVDYVQyYUlvRm5aOFANCm5WdHNmQjJ5aFMrWVFNZXNYTXVZK3NZenptNkJlTW9zMWxnWUZUNFgwUERYM09pTzJhazR3V1l2OVdHaUlxNTENCkE2RytoTE4vTjJ2UUlXUmhndzJlSGVEYUU0UDNyd1krc0NVZklLVDk2L3lITDhLNEp4SmhZbEw1bEFiR1VRd1oNCkYyL2tpenIvN21PbmZmZjVESWJDYWNqSEVKSlJhclgzWVVpYlk1ZWpYRG1WYzRFUHBVVS9oZEtRVzdTZitRSWcNCko0aEhQL1hPYmlIazFYVmVuMUQ5N0NUZFVMT1l6M0lQK3BibDhIeEhGbWJuVTdtUCtGY29VRDNOYXBuNDNWb2INClB4STdZdnpkMUlqSEpZWHFaM1FtNERhQzhZc3h6QUdUNmNoQXRISXo4TFFyNEEvbVB2Sk5YeS85dVh3UkN5alkNCnIzWjNxVVlRZnVRRU1MWGVBOXNVV25ZWWRPVzZEYnkzQjMyMFJGV3FrT0hQVVNyOGFKUVhZd0I4SXVuQTEzZUUNCkJmeDBLS01DWVJYbnBDQjllZzFEdXgrakY3Vmo0aTBXdU9BOGVUT2c2SlJMWEFRSnE1V01qUlkxbVJGWEVaUDINCmJJRE1ZV0owK3VxNWhWc3JPOHlGWUNRU2oySUN0bVhwbUt4MTNYT0dtQzBvYVBwcDZTKzFuWHhRRW56anNkNWcNCkFLTjhPVFMzTVNUWGEvRExIcW84ZTR4ZmJzU1ZRQjVkR3RuQnAwbE5PTXh3K3NTK1ptSCtFdzZTaDlpQmE4K2UNCllEOHBSUytKbFF4ZjZIS2ZtRUZzSDhibWg4VkJMSzg4b2NYTHJIS0kzcVBiTTJvdXhJc1RsMEpvL0xsa2o5bUQNCis5RW9JL1F3N2pkZTEwVU9PUzYzQ1lwTnBYTE45akhLemJwYzNjT0Y0QStHcHZMUDZPMEppeWNTMGIvdXpPM1YNClVYMWhzdjZ6Tno4SDlNUXJtYmdOck01R0ppSjVmLytEenk1VWVCd2tQZDFaaHRYcElkRHZMa05sS2RxY28rc0QNCnkwUlM3VXZxYkVEMENuVTNvVmkxRHlKYTBBMjFVQlZLUW03S1hVZ2JZd3JUbW1XZERSTHczb0pkOW1jWlFMdnENCnRkMHNTazFObXpUUEQ3SmdqbUlIOGJmcWxYOVVoVDZhTis5aFE4VnFXUU5KY2VvdGptdkYydk1jVlUxY0FQcjANClZqMWozUkdPcjh6eUV4RlRiOFlYUXllVGFyb2ErU21aV1NVTlA3NEpUR3hJM1ppTDQ4N3J6YVRjOFVDbWRHcEINCnVwSXVmVC9BTktDUzgzVFNJVGg0VWtmcDZOWlVPQjJMbW52b2pqTld0TXpWa3RpTVJienUyRGNwOTd5SForcFYNCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t" + "CERTIFICATE": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlEVmpDQ0FqNmdBd0lCQWdJVU16TXpNemczTWpFNE5UTTRNalF4T1RZMk5ETXdEUVlKS29aSWh2Y05BUUVMDQpCUUF3S3pFTE1Ba0dBMVVFQmd3Q1JFVXhIREFhQmdOVkJBTU1FME55WldScGRGTjFhWE56WlNCRGJHbGxiblF3DQpIaGNOTWpRd05UQTRNVEF5TXpVMFdoY05NalV3TlRBNU1UQXlNelUwV2pBck1Rc3dDUVlEVlFRR0RBSkVSVEVjDQpNQm9HQTFVRUF3d1RLaTVqY21Wa2FYUXRjM1ZwYzNObExtTnZiVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEDQpnZ0VQQURDQ0FRb0NnZ0VCQU9BV3hZRVJxRGJQcEpRY1VGSWJlMkJmTVJCdllSZXZIVU1CRTQwa3Ivd2lXNThPDQphTXJHb1pnSGVTbGZpaHNMcno5RHlYV2Fwbk9XcFRhYzFtdVA0T1QvcGM1ZUk3UUY1a2lIdFQ3aEw4Yy85T2V5DQpDUVR2UlpJaUZVVGR6ZzIzK2tpZUllY0hyT2IrMUNqRFRZcVFrSWJtTVZzcjIwNlhLSnQ1M3RTdHFVRWhlRlpZDQpncmF4QkswZEl5c2NiaVpLWU1kaDhIRklMTUFFR3pubVdMNWY0ZThDVkswUEtNQy9POG1la0tubEVXZDhtQVJuDQpHbVptSWtsWnFhSks4NlNJOEtDbFJhbStFTXNQU2RYdzUxT1BQZGt5YW1jUnVEM2FvTGZpVHByM0RzamVQbXlKDQprbk5zZmFOWURJQmNOVkQydUsvOGVWRzgvdkw2d2JVbVFkdytOM2NDQXdFQUFhTnlNSEF3SFFZRFZSME9CQllFDQpGRGpRL2xBZVIwY2w4TFIyR2lhc2ZJR1VCRGhVTUFrR0ExVWRFd1FDTUFBd0V3WURWUjBsQkF3d0NnWUlLd1lCDQpCUVVIQXdRd0RnWURWUjBQQVFIL0JBUURBZ1pBTUI4R0ExVWRJd1FZTUJhQUZEalEvbEFlUjBjbDhMUjJHaWFzDQpmSUdVQkRoVU1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQ0grL2RiVENZbGNPckQ3V3dkMDl5TDdwc3lFZG83DQp3U1dSb3FvNU91SzF3K3BpUmdaOWhtTUtoS3pHOExvZVk3L01rTGlJNTZ1YllhL0F6b0MyaHRaTDlPTkNzVWoxDQpRdTV1N3kvaEszTCs3b24yU004RUNmd2RtaitXSUFpdFYvRmV4QmppVWNEK1RXUG9yZ2l0RlgydkpmaHNNY3RRDQpFdTk4VXpGS1FXSFJHTmV5ZEd5MEtqemlleFFrSFlRdGV2ek9uSnhHL05RaDhhNCtjNUxCVTFzOWF6NVdFN24yDQpaOTIwS3ZyTnFvY01kbjFzL2hVQ3gzRHJMUGRUUERZYjBPWDM0OGVZRUVwd2R0S25KVmJYdkpQZGtaNTdqZk5KDQpBNkNlbkRZRHB1UnFEZ1B5WUNQYUpXcHBHOEpNTGg1MXhRMEZpTXhLMkFscmgrWU1HM0JYUnE0Rw0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==", + "PUBLIC_KEY": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBNEJiRmdSR29OcytrbEJ4UVVodDcNCllGOHhFRzloRjY4ZFF3RVRqU1N2L0NKYm53NW95c2FobUFkNUtWK0tHd3V2UDBQSmRacW1jNWFsTnB6V2E0L2cNCjVQK2x6bDRqdEFYbVNJZTFQdUV2eHovMDU3SUpCTzlGa2lJVlJOM09EYmY2U0o0aDV3ZXM1djdVS01OTmlwQ1ENCmh1WXhXeXZiVHBjb20zbmUxSzJwUVNGNFZsaUN0ckVFclIwakt4eHVKa3BneDJId2NVZ3N3QVFiT2VaWXZsL2gNCjd3SlVyUThvd0w4N3laNlFxZVVSWjN5WUJHY2FabVlpU1ZtcG9rcnpwSWp3b0tWRnFiNFF5dzlKMWZEblU0ODkNCjJUSnFaeEc0UGRxZ3QrSk9tdmNPeU40K2JJbVNjMng5bzFnTWdGdzFVUGE0ci94NVVieis4dnJCdFNaQjNENDMNCmR3SURBUUFCDQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0=", + "PRIVATE_KEY": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ0KUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRA0KREVLLUluZm86IERFUy1FREUzLUNCQyxCMzk2MEFDMDMzQTVCMDA4DQoNCkN1VWV1dUNENEcrRG8yQVMzclpTNTN5cHI0TUJFaCs5TEh5WWdXSWNtVUJNWTYyU3M0Qmd0WDhnaVV4M0JoZ0QNCnZRUWI2blVFdldvd3VmZXpWanhvU1dFR1RqRmdtZlZxa0tyV1FaWmR2NTdzZExKbUdpSHBOZ3hXRkdVaWhrQWgNCkkyOCt2S3ZNRDZzaEd4QjFIUDkzT0taMmlyaU56QVNSSTAxaW1GcGFYRytRODA0ZkVsaVUrSzFaWWpYTWs5WC8NCnJTeDloWXFDM2hUdU9odlZHQlJnd0xzSHFRWWNCQWF2Z0N2ZklGaWt0Z1MxMjFOWW5qUzQ0NTN2WmhTY0tLcmMNCklsdWpoMFJ3Rmp6WXR3aDMxeHd3ZXp2K2ZrTjZ4ZlorNCt0OEVMUjR5UjJPVEVxaXllbVIzc2tjSnNGT0R4aEkNCjhTd2hNSThpT1Z0NkU0dy96alpST0pzclVvcU5uOWh4Tk5NTkZGbmtPdXYvNlZ4aWQ1RkVqZ3BTVVZEYVpxYnUNClo5ZE84OERBM1V5OE5tbmw0L2dwdTVaRkU5NEhjTDRsekswcHZpeHN5d2EwVDQ2VWh6Q2xYS1JNSXU5MTNBdC8NCk5kUFAzRnZtdVNuN3ZqSnBVTVF5ZE83NkxaZDJQbjJob2VEeXZPam5Bc29pUE4zUWdqN3JLN3NwRzRrOU53Y3YNCnE5azhzY3hPNi9lb2prSVNZNHgzcEZ6SC9LeW9DdW4yMW5aanpSQ1ZkYzVDOC9LUWQ0VVV0ZnNlLzd1YmdnR0gNCjRESmtlQzIxdThENHYxWE05SENaa2FrK2hRWDlOYUdTQVdmNDRWL0Y0TU0vMW13U003bjJtck9HMTloNitIRWUNCmIyUlFqUEhmeU5pMXRvUDhDQlozc2E2bWdjdEQ2YWw3a09SeTJ4QTBCLy9zRzhCTGw1Q3hYUmpydWVQNnlGWmoNCkJDbm81ekM4R3YyMVhFMndPQ1E4YVZpNzczaGVLSVY4WVRUQjFRQXhjRnQ4UHQ1L3lYV0FRaUUrTzUvTDhJNXQNCk53cUcyU0VVMFlwQXFGeTM4amVLaUFSZWFldGYwcFJkcVNGNEM5dVZyUzdXeWtESFpmb1MxOG01dE13VjVkcUwNClJMdExXc2xRbGg4L09XVzBCR1J1bEYvaVBUdWNCSlBmL3YwdnJ4cmNQdEdWU0diM2R6RHJ3QlliNGVPSllTdDQNClZWbUM1NGRIYU1reFErSzh2OHlELzVYcEpocGgydm81dXRUdEJmQlZlUFdOdUpUQW4waWJDNlBWcDc5bWpKZDMNCnVJdzR5VXVVS3FjdzVMdTJ3ZU9VRkdHS0QzSGZ4bkJWbkZSc1IrSHBxbkRQYUZHclU0bi9FZ0FlOVkrODJPM3ENCnRoeUtPelZyL0tiMWdyWTJ1TGhNRXowTHFjaXo0RWhKbHh6Tnl2V2R1UG1PRW8rSTF6aDAvVTVHVlUxKzdPWVINClFZa0RpUFhtMGJVUCtNZDdWblhmWVJJWTdnWS9qMDNwU1hBSjMvZVFnWHl3aGJVdEk2OHRmcFJPa0dvWXpYQjcNCmNCYXhRVlN2K1BqcDlyMi80QzhLS0Rmb25sRlc2S1VveVlHd3VvTGJEZVo0eGxCUHZVcURRbFZFSzhnTGlrV0cNCnJ6OUdiMFh4c0oyaHVOOTZ2d0xnZmtoQi9YYVp0aTliZkRzZXNwczJpRWt1cE0yRUtMRWlMK1hqckNVMGR4czENCkJhL2NSMUR6eVQ0RUtyR2pjaWVBUEIvOHJQNnR5RnVVSlBSVUwyVTYzcE5pRUw2THF1VithcE0xUHREZUxvSjANCnBMVmxtdjNacUVJVlZCNWxmdlpqOEkxaTYzREpDVXZYcjBucFVzcHYybVhiSGFPM2NRSUZ1MVVHays1V3lickINCkpBN2Zjdzdxbjd6QTAwZFBic3VuMjJFUklPa0p1eWFvV0RRVzBjQlFZV2dDQVkzOFhnTERRWWtZVHVUU2RCWXANCldWTXg1NGtrajlUNFMzakVjZXlaN2hSekpHaVpXZGNyN1RrMi9TY3dsMmdSSlhqem90c2JMMjdzY0F5ZXRZdDANCk8renNDdVBvUCtDT1kzYWFZcjlkOHVCQXNsT0ZFSmQ3Tmx5MjlTVXlTRFo3bmxIdDF6OXFkdz09DQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQ==" }, "E": { - "CERTIFICATE": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlEVmpDQ0FqNmdBd0lCQWdJVU5EVTRPRFEwT1RjeE16RXpNamc0TnpFeE1Ua3dEUVlKS29aSWh2Y05BUUVMDQpCUUF3S3pFTE1Ba0dBMVVFQmd3Q1JFVXhIREFhQmdOVkJBTU1FME55WldScGRGTjFhWE56WlNCRGJHbGxiblF3DQpIaGNOTWpNd01qRXpNVEF6TXpNNFdoY05NalF3TWpFME1UQXpNek00V2pBck1Rc3dDUVlEVlFRR0RBSkVSVEVjDQpNQm9HQTFVRUF3d1RLaTVqY21Wa2FYUXRjM1ZwYzNObExtTnZiVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEDQpnZ0VQQURDQ0FRb0NnZ0VCQUxraXVwSmtJNGRVdFV2SG9qMElKa3pSZmM0L0ZjL2FNcUtyMkFnakF5L1pxdk01DQp0d2xYTmM2MkdpNFY3WmdHSWd6enRod00wQWwvWDhNb1JXVVF6YlFnd1NVQVdoS1htNXl1a2R1ays2OEllOVN1DQp2Ly9ndlIxaWxwKzd2LzFmVlkwN1haUmltTlYzenV1ZFB5R3dwYkNRQ2NaZ2hNb3hvUlV6eFpTaVl6ZnFiVThYDQpITC9tY1Yralc1OE4xKzJEZ28zR3RJY1NLYmZSZVlLTkJOQmpZbmc1SUYzb0lXTllCbUx3VzkyUzFmZVhtQlhmDQo0aXdwNU9hYzNFSlg4aE9tMVJKV0l5SHMrdzRPcUovY3gvelROeXJ0VzkyUnNaSlNXbnJFZnBuMW5uN0E1OXU5DQphdGl5YXVRYUY3aGYwM0tGM0drbGM3LytzcWZ0NnI5bVZCdWwrZ3NDQXdFQUFhTnlNSEF3SFFZRFZSME9CQllFDQpGRFprc3VxM0cvWUFGejc5a3RNZ0hrZzRVcXc3TUFrR0ExVWRFd1FDTUFBd0V3WURWUjBsQkF3d0NnWUlLd1lCDQpCUVVIQXdRd0RnWURWUjBQQVFIL0JBUURBZ1VnTUI4R0ExVWRJd1FZTUJhQUZEWmtzdXEzRy9ZQUZ6NzlrdE1nDQpIa2c0VXF3N01BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQ09pcVpPOERrOXQwZ1k2THYzR21aclpXbDBpbkJ5DQpZZzF5Zk96V216RWxtdkVvY1ViSkxVV1h3M0Z6NWVJOSt3NWZUK1l1SmFwMnovemRzUWVYWEE0cDQ0azUvQTcvDQpTaVFEUWM5Y0xjSWEwRjdFKzA1cTJqeVNkSmhkMTQyZnJ5djdxWkQ5KzJZQzI4K1Y2b2lHWThjMHczVldZNnIxDQpuUTFGU2M1OXNrUjYrNHB6bzVDamlqSnl1NmhrVUU3QTM2dWV1b0lpdlRNSFVDQzgyTkpEL09OdUN1azRSZGZBDQp6QXpqZ01aOUxhZnlidTdjZmNkMk1SYUdKSHVuYlROdFdkcmFKUDNNdVhFVlo0NFJ5cmx6c1RHOVRtWk5xblpuDQpmZjErQ1RSekVBWi9sK1J1OHdVZkt0cmVldlJKNE9wR0RKU2ZLZDdnd0xPU0xKZVdJRlQ5OEViSA0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==", - "PUBLIC_KEY": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdVNLNmttUWpoMVMxUzhlaVBRZ20NClRORjl6ajhWejlveW9xdllDQ01ETDltcTh6bTNDVmMxenJZYUxoWHRtQVlpRFBPMkhBelFDWDlmd3loRlpSRE4NCnRDREJKUUJhRXBlYm5LNlIyNlQ3cndoNzFLNi8vK0M5SFdLV243dS8vVjlWalR0ZGxHS1kxWGZPNjUwL0liQ2wNCnNKQUp4bUNFeWpHaEZUUEZsS0pqTitwdFR4Y2N2K1p4WDZOYm53M1g3WU9DamNhMGh4SXB0OUY1Z28wRTBHTmkNCmVEa2dYZWdoWTFnR1l2QmIzWkxWOTVlWUZkL2lMQ25rNXB6Y1FsZnlFNmJWRWxZakllejdEZzZvbjl6SC9OTTMNCkt1MWIzWkd4a2xKYWVzUittZldlZnNEbjI3MXEyTEpxNUJvWHVGL1Rjb1hjYVNWenYvNnlwKzNxdjJaVUc2WDYNCkN3SURBUUFCDQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0=", - "PRIVATE_KEY": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ0KUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRA0KREVLLUluZm86IERFUy1FREUzLUNCQyw4QTJGMjlBRENGQjQ5OTVCDQoNCm1JT2Q2am44a1BpV2UyVFRjN3hHaG42T3gyVlFNZkRqaVQyQ3drem04UFlHdGkxL1llMzA0QjJCd0VpRWhybFoNClFZcHhFM2tmLzlTOGFMVGM4SER3ZGNLNFJHZE1nRXNwM0pZQ0lWMWFjWUt5UTR5QWRnWG43cFFoODhIMUVyVlANCmZoWVhRQmxOajU3OTZyZmVkM2RvWGlGN3JFWDM3b3k4anhrclU0SS8vbzBweGkrMEl0djRhV3hTMXVuaUQyRGYNCmx3QTd4TkwvdnFlVS9pTkZ2VStCZUkzeU1XVXlCVXQ3OUpCRk5YNm5nZk53c2VaUVYzMldoVE41bTJPalFYREwNCndNUm1EKzhtTWoxN21oaVJSd2pWTEVaeVJCWlRYaE9uOGRNYnp3ZDg0b1FRaG1WcXMvdXFoZDJoc0ZoYzEzMEoNCmlXTkRuVnBMSVRpQ253cnVPMEFZRDhuUVhaTzZMRUkrakE5YkUvRE5KcUNvMFN2VTZqUlpWQUZFdm9KYlNzM0YNClFOcUFsTldZNjh2QnA5bVJubVRaRzF3MEVCSkQ4VGJJaVpWc2s1ZkNTLytaVUF5MUJac2hEU3VRT1hQMThtMmcNCk84NWpRZm1sVGVwR2FHM0VBbTd1MlloVm5Rd3RhRjg4amVYVUJoa0w0MEFBOU1EemF5ZFlaVVE0dUxXQXBiUWsNCkN1NmY3dkZVQ1BtUndCa25HOWo5K3dYbDVraGptZGovN2tITUhXais4ditOaDJXTDhIaEUyeFBYTEt6bW5zWnYNCmU4cTNjL3hTazQvRGRZWXNOZ0tyY0JOVTdadjgxVmRHY0JFN2phZ2hOdHBOSG90QlQxZ2pPRHREUUZvd3VjSVENCjRwdGJkU0p2YW5ENjRqc3NwRkFrYmFvWEYvMmIrZG5ZaVdlZmhEVGh5aTNSbnBwYXBxN2hZUkY3UWd5YUNSU2UNClIvSERjdGVuWHdOemR4V0hHU3k4bFZ6OEtQdnlnMHo4ZkUyRkFqVjlBbjNYNFp4TTREcERveHZrS3NuZ2ZWYkwNCkpyemUwemYwOWoxTkJpOC9WRFZDcEIrZ1I2d3RCbWwwME1BSjEvUFNjdFpTZm0zSk5vbXVnaks4VklicVFXdGoNCjh5aVJpcDc2bExNaEFBQWJuQ3NENWtCSlloVjFYdDhsRjRxMDdkdUVLR3d5b1plMmtVelpQRmRGMjF5V1RLY0YNCnYvNGw4T3RzeWx6cmw5N0RkQmVWOUFBRmRvem9pMEU4SU9rb1lQcUJ4NkVTSEJxOUlpTWR3cDJSV3BZWGdVZk0NCjZpV3czTXE1bUx3RUpHK1dYMDVRV3A3V3VkcFJJSlhQUWhvcGVIVGhhYW80RGtKM0Z2amlBanZpcDlWTkNBa0YNCmtRYXBnMGR5YjB4dVhTaTRyb250ZXFnTjlHU1ZmWEg5WlRLVWxwNVRwc3NDVmQ2dnVucTROcFBRMGRUTkZiTjgNCkIzZ3RnWXVQM1E4ampPMDdmVU5hTmtZMVVSeFEwUTlXMHFkVi9XN3J3OXdyT1ZMUFdqVlNEMnB4alhHOEh2ei8NCjhSUWMxUnRWY3p5OS83M1UvVE1penlobEdHOEdaQ0J1RE9hdmQrVU1yUTR0aG9ZSkhHT2JzbmtyZ2RrUW8zbUgNCndYK0dkNENReVU3Z1pCTm1hc3hBMXBEVVNuc3Y1elN1RmtlWG5PTWJsSHpqdEVndTEyMlBPQVNnVDFZQWhVSXINCk1ERStiZ1hsTGNyRlB4ejJ2MWZuRk9hR3JKM2VDSkt3S2syeSsxUWhFeXlCUmkyUi81WFloNjNDcmtSVlYrMS8NCjhKUkRFRFFPQmphakc2OXYrS2VSWGtOYTNtV1FhcDh1U1REZ0RCM3ltZ3EyMStrbWtDN2lVSjl3dnVsSU5yVU8NCm5aWS9yd0QwUmt1U3EyR1orNDl6d2xoZUY4YzVRZzc0SVFmT1A2UnJjOWxZcGRLclNBVWhmbXMrMEFFTVdXKzgNCmFrN2pRZDR6NWNTOHBBUFZ5dXRKTmdwUVBSWjZoa3VHVVNDNHVSS3JMcTRuU1Y2NVZFSEVHemNVY1FYcUE0WTgNCmY4RzNnY1ZNMUZmTU9ibmcvSHlhaHpnaXFSc1drWGs2V2UwZEdMblIxSjk5QlZ0SEllY0NhLzNHeFZsUTZkMW8NCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t" + "CERTIFICATE": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlEVmpDQ0FqNmdBd0lCQWdJVU9UVTVPRGd5TVRBeU9ETTNOVGsyTkRRNE1qQXdEUVlKS29aSWh2Y05BUUVMDQpCUUF3S3pFTE1Ba0dBMVVFQmd3Q1JFVXhIREFhQmdOVkJBTU1FME55WldScGRGTjFhWE56WlNCRGJHbGxiblF3DQpIaGNOTWpRd05UQTRNVEF5TkRBeFdoY05NalV3TlRBNU1UQXlOREF4V2pBck1Rc3dDUVlEVlFRR0RBSkVSVEVjDQpNQm9HQTFVRUF3d1RLaTVqY21Wa2FYUXRjM1ZwYzNObExtTnZiVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEDQpnZ0VQQURDQ0FRb0NnZ0VCQVBTMnBVQ3dIMHZxNms2TEJ3K0xIUkt1MDhFc3dkR3VVdE1VUEFQZUVBRmlpTXJuDQpwempsNzBEVU1wbmJoamVIMUpncElSQ2w0aHJDcTFDZGc1cFMvZjFmUXdlTVdQUmVIOUlSditEUE9tZU1NdTlCDQovdHRUdXB2eld6MGZjSCtxdW9PQ2l3K1JvWEw2L1YwdEZtOGphWGR6cTQ5L21kNHBxb3ZETDBYY1NleVpYdTc1DQpFN0NoSEI2Ujd2L3pCK1ZEaHJZaTRSZjJoallqVkJJOHNXWHlIQ0d4dDV3d1F5UDMvbmppL0kxSk9rTXBxUUVTDQo5a2hvMkNpMEcrTi94K01rdW56ZmR4UUd4eVlWSmY5K2NPenQ1aUlUSmpjdDBJbzVaYm5Ub2tBQ0pPc3hJTXNNDQpYRE42YmRMRE1FZTZYOW5VV3czT3pGVmVFcjdQSHdhajZnVk1nYzhDQXdFQUFhTnlNSEF3SFFZRFZSME9CQllFDQpGUCtobnBCWWhMU2o5MlBwWjhHSWhnN0NLK2ZMTUFrR0ExVWRFd1FDTUFBd0V3WURWUjBsQkF3d0NnWUlLd1lCDQpCUVVIQXdRd0RnWURWUjBQQVFIL0JBUURBZ1VnTUI4R0ExVWRJd1FZTUJhQUZQK2hucEJZaExTajkyUHBaOEdJDQpoZzdDSytmTE1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQVNHZDRVSXcySkUxNHBEaDhpZkZtYzRxajVucHZODQpYZjN1eHJGYXZRaThtcG1hNVl1c05SMGd6NGNpSTJjMTc1VjJyd1ErVjlQZ2R2ZDV4cG9zWWZJRHlkTDN5dFhIDQpRak01eGVQUDZMSFRnUzk5Tk84aURrOFRIeTZYV0JqMkpaK1pVZkhBVFVCUGVWaTJ2dzZPRk9waThMazN0NGZ1DQpva0RUNEVQSTlXNDVjcWJzZ2tCZXIyMW8vV1VtVnVsK0JsTHZVdUZhcmcxdG41cVlCeksvZUhLZTA4OHVqcjNJDQpKWDdLM2lrNGc1aElPU1NQbTNML0I5ZG8rQnh1UE8vVzBzOEswcUpVWGh3WmFkOVlldEJnOWZFUlhYSEFRTW1lDQpPUXNySEFKRG1OSmYzb2dEN1BzS0lyS3p1d0x5QUYxNElTM3dqZEkrZ1JMa2RycHhhdEZ5S2pnYQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==", + "PUBLIC_KEY": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBOUxhbFFMQWZTK3JxVG9zSEQ0c2QNCkVxN1R3U3pCMGE1UzB4UThBOTRRQVdLSXl1ZW5PT1h2UU5ReW1kdUdONGZVbUNraEVLWGlHc0tyVUoyRG1sTDkNCi9WOURCNHhZOUY0ZjBoRy80TTg2WjR3eTcwSCsyMU82bS9OYlBSOXdmNnE2ZzRLTEQ1R2hjdnI5WFMwV2J5TnANCmQzT3JqMytaM2ltcWk4TXZSZHhKN0psZTd2a1RzS0VjSHBIdS8vTUg1VU9HdGlMaEYvYUdOaU5VRWp5eFpmSWMNCkliRzNuREJESS9mK2VPTDhqVWs2UXltcEFSTDJTR2pZS0xRYjQzL0g0eVM2Zk45M0ZBYkhKaFVsLzM1dzdPM20NCkloTW1OeTNRaWpsbHVkT2lRQUlrNnpFZ3l3eGNNM3B0MHNNd1I3cGYyZFJiRGM3TVZWNFN2czhmQnFQcUJVeUINCnp3SURBUUFCDQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0=", + "PRIVATE_KEY": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ0KUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRA0KREVLLUluZm86IERFUy1FREUzLUNCQyxEMTZFQzNBNUM2NDk1NkNDDQoNCmRodW9NSkg0b1IyNmZ5c1pQakErQUdCTUNXeFlJZ1BtekR2K21kbklHNENxU1NOakJ2ZS9nWjRPWVRMT0UwMTINCkxKWVRkdi91OUFkU3lHMmEvM1ZLSDR5bVA1cFpsWmw2SkxMZkEzQmRpWWx6ZFlSREJ1UDVabDVucDY4ZEowS0INCkVlWWhhZmx5ZFFmcXRhUmNjeVdKRmZmSEJVR2RoR2VibU00NHZMbkl2YVMwUmhSYVoxa0tNR1JJTENTMXFhRysNCmF2c3RTQ2M0bHFuRUM3Ti83eXNWZjVxNTRGNHI4cXc2dDViNjFJWXR6MHhsMVRhRTdoQ0FJaGR2czZBSzFxeWENCitzZkdhSFdFbXF0dERTbXQ2RUhIL1ozS21DZmprQU11ZmVkSCtIbU5obEpKYzlNZkpEYlRMaDByTVRhSmRvZDUNCnpYQjFDM25mL1JMWk1YNnBRTGtqVk8rS2RwcllBRVNPNW9mNmlrQnZneUVJMHVFclRaNVFyNHltdUJWeDVVOW0NCjBZNnNRbUt1ZFFPOWRId2dOLzVkQUNxbEkwZmQwUzdyRi81bzJiVlFtdGpxSGFRZDgvbHN4QklXNGs3RkIrUFMNCnlob21VOTNmcjVXY3l6UjJIVndSYzBZWWdGZWJHcStxR1l5ZnZHWlg1UDdwQnNoSEUxTGwzdmFUa3Rnc0xlZlcNClJLL1F3eEtxQmdBNWF1SXcvRjRqdG0yZ1JVM1RucjFYRmg3RFRyV0hja0I1eXM0UWU2K1EydVJTRWNTR3hPNDgNClc4aExENXAyUjl6ZndhWG5qMmFQYk9URTd5QS9FWHBmMEl4R1ZDZ2pNYWM4Mm5VR25zWWhUQWdMQ3dQUUdsNDENClR2RUJNOGRBTmxzQ3NpbkszVm5JZDVQQnZJQ3NEbGlEM2J5Z0pnSUQwMjdpMUFzTm1qQUhqVHFlL1NzU1JVOVMNClpmMmJkemNPa2ptYU50VjlleGozajAvSmxsQm13dmV0aENCTDRBWWFBeTRUNldzNmIrRWxzdkgxbmg4Y1U3SEINCkVYaklaUGdXd1l5bW1SYlo0MkczOG1meUxMNlFpQWdYakRWSTBhWXorQWVqUC9xdkJJaXVqS1lnSUVoNVNyc2QNCml0dld4WUM5c2hXZ0J6TFNsWlB3dFlsMTBqVnVCL2JSSjh6ditFWW5wbDZDMk5ySXVLbTNHbmc5OWpCTmlSWkMNCkJSbmEvMGhmY2Nwd205MmRVMG5JZEllVm5RZXhLMmtLeWQwWG5na3h5QmNteC9IZUkwTlNPeTlZcHI4dHF3cC8NCmdYVUtKdi9YQ1ZhTFd0UHpyNkZ6VDJWQzVOd3UzNGFoQ1VGZnkrWllERTJ4L0tVNzFlemJqOTd6WEtGRlRPWjYNCkYzdG1MSW1oUUUzT1RoNDhVQkJkOTNSQnU0eE12cHh1OXdIdjlOZWFvcWtPWnkvcE50RzVjMG1nb1kzMHJOTGwNCjJhb0xjbDJCM1dVYWJOOHozbTF4UjVaUWZsTi9hK3dkZTdPVWlVTkpYQUQ3Uk90Y0pYK25GN2JSUkFmbWY5ZXMNCmR3L3RDbjdkZENOVmNhdHVXZWRtN0FsRXgyem1uZ3dLZXZpU1RFdi9FMlQ2cjNodmhCUmRYNzNIL1Z0bXNSTk4NCmZTZmlEckphcjVkeFRHN1lQZHlNQlF0K2JQV3Y0djk0WFlSUmF0RnJuR1MvcVRBUm0yRjNIbm4vTGsvaXV5a0gNCko3Mit4TndRQjRtYzN1R3hZNjVydUdiSG1JK0JzZHIzaHFxWWVTK3pwMk83a0xtVUI0RU1zVGhYcUhzazU3dUgNCk9qdjYrSTB6U0g3aVhjdXppK3ZxeFNMRm9xQkhqcEhlcDdoSlhxTExWTjBCUEVJQXpoMWczNlVmci9McHg2bEQNClRoWjU1eTRqaGpVQnAvdzMyQUdrdzk1bXYyWDljQXNjUjVGdVBrV3J5eXlnaTFieGNCR0x6eDIrOCtONEJicG0NClBaRk9PZjJHY1p6cUI5eDgzQUxJbklMaHZsbS9BMUhvYndrZUpDU2FlcEJiTlZXeWlqc2ZNV0tIaUwraEl0disNCjBqZmdLMzRZWDlsbENFSjRyeU03ZTkxM01xQ2VMUEtOV0VqMFBsamY2Z0lVMFVUcDVxYzE5cG40VVpkaUxRNWkNCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t" }, "X": { - "CERTIFICATE": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlEVmpDQ0FqNmdBd0lCQWdJVU5EVTRPRFEwT1RjeE16RXpNamc0TnpFeE1Ua3dEUVlKS29aSWh2Y05BUUVMDQpCUUF3S3pFTE1Ba0dBMVVFQmd3Q1JFVXhIREFhQmdOVkJBTU1FME55WldScGRGTjFhWE56WlNCRGJHbGxiblF3DQpIaGNOTWpNd01qRXpNVEF6TXpNNFdoY05NalF3TWpFME1UQXpNek00V2pBck1Rc3dDUVlEVlFRR0RBSkVSVEVjDQpNQm9HQTFVRUF3d1RLaTVqY21Wa2FYUXRjM1ZwYzNObExtTnZiVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEDQpnZ0VQQURDQ0FRb0NnZ0VCQU55UDAwSlZ0U25HYXMvYjB1NTcrR0svbTYyYVFmWU1mdWVqdHR2RUN6aDVnamN5DQpUNWVPaWpKdmtQbmxBc1dCc094U2lsUEhYSVB6ZDZJN0trQXpmaFRqWjk0Y1pCbFp3UkQzWGdzakdpeG9VcHp4DQo2bmgvRmZNVklONytscGpob3hIRnhiMmdLNXViNEd2c0pNclB2ZG9HWFF0N1M1RXZwRE5aZGg2c3YwcVNOeHRzDQpNNnJvWi84bUp6bTZkNUNRVDBjV3RtejFCTVNvRk04TjFTWlltTE5qNC9RU3RXbk1LcStkZGhwNjI1UGVtUisrDQpGSjZyKzlNR0RyNVJ6VDM0T1hTd0Z0anE0WWh4elA1cDFlNFBWa09ZMmdMTHQwaEwveEplY0VxUEVBandQRUNTDQpQc1Y4VXVrQWhIakdBc3RRMmQ5Sy81NmpMaUhvMzBHVlNEd0xpYkVDQXdFQUFhTnlNSEF3SFFZRFZSME9CQllFDQpGSUpmVWlDUUJVaU55Zm42eTZvTENaZ0FQeFFsTUFrR0ExVWRFd1FDTUFBd0V3WURWUjBsQkF3d0NnWUlLd1lCDQpCUVVIQXdRd0RnWURWUjBQQVFIL0JBUURBZ2VBTUI4R0ExVWRJd1FZTUJhQUZJSmZVaUNRQlVpTnlmbjZ5Nm9MDQpDWmdBUHhRbE1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQU5lQ0dsZk1LTk00WjJ5OWVNOVdTeU5qR3ZPMlZQDQprUDZId2p3RS9xTElmaU4wT2h3ejZjT2Ixa2QrdDBkMmtTb3dMNzZ6VFJmZ0hSWXRPOUZYRHFWOWVDOEVHb2ZrDQoxRzQ5bXJ6Z2w4QWpHOTFsSERCd1R6bytZM3VUNE9nNWRBUWJSTno0a1B1eTZLaW43SFBiN3ZEMVFReHNUeldODQoxNFVyN0lxeVBtQU1xSFFpOFNrV2R2Vy9uRHBiS29hdm1sSDZYM1ZLL0R4bk14aFlna0plMG1rSHViSitSbDNUDQpiSStkSWxQZFFzdjBtM1RmbWZDN1FVQ3h1NVNsRTlRbExLdHlDbVd1M1VrWTZFQkJnZVd6bThVTWViUXEyelZMDQp0dGc5b3hDOWdHU21oMVRCNWpZOElFUDJJd3lXb2dWYW55RWJxWk1mRlE4dXJ6OWUvMUlhR2RyaQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==", - "PUBLIC_KEY": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBM0kvVFFsVzFLY1pxejl2UzdudjQNCllyK2JyWnBCOWd4KzU2TzIyOFFMT0htQ056SlBsNDZLTW0rUStlVUN4WUd3N0ZLS1U4ZGNnL04zb2pzcVFETisNCkZPTm4zaHhrR1ZuQkVQZGVDeU1hTEdoU25QSHFlSDhWOHhVZzN2NldtT0dqRWNYRnZhQXJtNXZnYSt3a3lzKzkNCjJnWmRDM3RMa1Mra00xbDJIcXkvU3BJM0cyd3pxdWhuL3lZbk9icDNrSkJQUnhhMmJQVUV4S2dVenczVkpsaVkNCnMyUGo5QksxYWN3cXI1MTJHbnJiazk2Wkg3NFVucXY3MHdZT3ZsSE5QZmc1ZExBVzJPcmhpSEhNL21uVjdnOVcNClE1amFBc3UzU0V2L0VsNXdTbzhRQ1BBOFFKSSt4WHhTNlFDRWVNWUN5MURaMzByL25xTXVJZWpmUVpWSVBBdUoNCnNRSURBUUFCDQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0=", - "PRIVATE_KEY": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ0KUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRA0KREVLLUluZm86IERFUy1FREUzLUNCQywxQjYwODkyODU2NkUwOEEyDQoNCncyaFBNUXJNM3dPWFI1SnN6d0xzZWJZWXFZWndJWFpOUDlzcTMwczdjanV1SEpUam4rbzhaZFVBNWE4QlJ4cnUNCm1YelFhZ2NvZTJqenlNR0lBZ3kwY21MNFZqNEloanBGR0VOQVlzcFhXY1h4WWdoZ2wrSzJnamUrQ20rTXVVU00NCnJ3dE56dFVrY2p6S2pYMGpyd1ZWYUQvVlg3QUJEUm1JVGRHUktid3Y1ZzlkQW1ianZpMkVKN01QY21UdnNBNmQNCittWHlMRVVtYUo1WDNyd2k3ZXZtTHhyOFZkNVZ3V2FDczF5NWZaWmFMU1BtdHZOZWtrWFNGL2FqME1FN1BmNDkNCnZuUDBrVlZUV3h2eDNwVzRMcFpDZ1A3RlNJenRXam9JdmJ0czlUb2RMWkNKaWc3WDF3dXQ4a1lzTldoNDdNL2gNCkdEQmdtVWF0UjhoK3NlVk4xUUE5R0F0Z2MyK1JpbVVCT01EU3l6WWtMN29Dby9WVnZ6NVFRQ3hjeDFvOGZQTG4NCmVhMUl3U0lRRU0wQXdXNWpuWGUya1FTME5ySm9sNjN1RkRsdVF5Q3FUTnpua2d0ZWZiWDVwdDZEb0ZEM0dOcm0NCmI2Sk1GM0Z1SjdtYmRCRlFVcEZpZ25lbmJZMEhrOUU2TUxVT0dta0NVQ1BEdUhWL2FCbVBPTzVPZFJ2S3ZtU3kNCnMrYWtOL2VZbVF6amZkY0NVUmFhYkJoUXpZM3VYbE1CWVprK1hMeG1yRm1oaEFsVWlyc2E5WndNMzdYN09WYjQNCmIrSUQ1ZEhwNUZ2ZFdUNlZEVFVNZThLN3luN2dOdno5ZFdBOGNOSkR2M3FtWXMwUGZ3V3ZHRFNZTWd5Z2NCWWsNCmpyeHRxaHpyY1Vnb1hVNGh0T0NYSWFBcXZxUC9ub2dFQ2t1RytIS0hkTEhsczhwRHZjUkZhbHdCQ0JkOGV1QVANCjhKdVJ2dEp0NUdPWExleTBrUHAvMHVLNUpzbHpKVG5GSll1aG5vb2QyVGpkSjNxZGJONGhiNGoremx1YjFKb3oNCm81d1ZiM0xnRWFJNjNLZ3JwY3VDcWhqR0gvVEtLWXRWLzNST1VqUTdFeWRlWUJWUHFBVjIzbmtxMHNCSTVIK3ANCnZwSjdTMHNDRVh3VGxVd3dTU09hQnJ1S21wMUNGa2phd2IyNm5CRVZ1bnJtMVhWQkM4VzhBQ0kycFhwQkZKMHINCnVtRFFuSzhYTjRDSGRKRlFsUDE0SEpZZ1V6TWtQbFNtNlQ1cGxUSjJveGNUNlhkMm8ya3JETXRLVHpkdnYySDUNCkQreFd0M25qcWI0UUovaWVMMUxtV0Fjamc4R3phSGMrcVorU1lTSWRnMnI5YUJNTXBDbDNGTnl6WGJvLzhJdWcNCmtZMnRoZGFvTHU3LzZ0b2EvNjFkRHo2MW9nd240UXdUWjZEaUNQbWwxMWQ0Sy9TQ0N5SlFtRHI3YUw3a0hmYkMNCk0xOUI0R3ZzbHR1Z2pkYW5GSyt5bkFFMXQ0ZmNrU203bnRUcGlHaFYyNlltbTVLcHJwdEVCcGk5L08zSHBoZjQNCkhhaVlOa1BlU1FwdU5TQWJCYTlIbnNYOHlCMzhvOUxGN3VuYUtqa0FIaWtpcHZGa2tDVUFxdFNyMTZsYVk5bXkNCnJNRWtuRmd2L0NDUmVoL3MydjFiV1BjcGRPY0JDQURxNkNLbnR0akliMHJYYnZmWWFvV2FPWmp6a0lrVm5WbW4NCmZ5ZlZiVW5ZREJtdzJtKys1VnBnVDhhOWNqOEYvcnFRdVhSSmZZZTc2WXRHa3NRSU9KU0xEajd2TUpkdnNFYkkNCmwza01IUjNaeVVBVzAxMmJ6amM0N3JUTTcyNGptSFQvRkNDUFdhMnBCcmdkTm1LbU9QMzlEL0g1L1hjY0s1R2sNCnI5WkltUmYwQW9nd0NkTTA3dlRLWHZrb05sZFphcmpqN0tyN3RmemNsRGV3NDM1dnFSTVVBR3J5R3BWcWttOXUNCmFlR3l6Z0pSQkE5ckZhYWFUeklSMDdqRXVocWFjYktzSlIwZTdmSVZvNHUvZnFXY05obncxWlRIUFBNREM3QTcNCkZHczk2Q0NKQWdSVWZla1dWMzNPOUhLejJiTkg0UVlKYk11Ky9TdTczOXR1M1dmeTJPNHp6UT09DQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQ==" + "CERTIFICATE": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlEVmpDQ0FqNmdBd0lCQWdJVU9UVTVPRGd5TVRBeU9ETTNOVGsyTkRRNE1qQXdEUVlKS29aSWh2Y05BUUVMDQpCUUF3S3pFTE1Ba0dBMVVFQmd3Q1JFVXhIREFhQmdOVkJBTU1FME55WldScGRGTjFhWE56WlNCRGJHbGxiblF3DQpIaGNOTWpRd05UQTRNVEF5TkRBeFdoY05NalV3TlRBNU1UQXlOREF4V2pBck1Rc3dDUVlEVlFRR0RBSkVSVEVjDQpNQm9HQTFVRUF3d1RLaTVqY21Wa2FYUXRjM1ZwYzNObExtTnZiVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEDQpnZ0VQQURDQ0FRb0NnZ0VCQU5XZk1xbkE5c1VmMWl0dFVXNVZQL0Fkcm5Yc2piRWwvNWhBc3BTRDc4Z3FPNk1SDQpWSjVXWmQwbk1HMFUvdFkvczA2MzAvWk16RTFKSTFNT2xzTnhsZzZoMlZYSWF3cXozS21laVVoVjYyYXlJc3hFDQpHR1ltc0V4aGgyK3FjekVZM1I3UWpzRUVKNFZSMjdGelBweVppY0xndTd3SFo1RXAybFlaTzBWS2VDUDVLZC9QDQpsb2VTT1cycGRVM3d4SjJYV3luWERqVE9iSEcza1ZEOHpOMjZROFBNejlxb2xubkVvYnIvbDV6dnJNS2l3M1BWDQpydG1LbjlKS2Y2emV6K3Z6citWV2tXejB1MmpIS0h1ZDJKeTFDbVk3cE1LK1lXR2M2TEV6Z0w5YlUvYzZUK1NSDQpCOUNudHFLYmlRRU1VVGJYa2dRMTNVeUU3dms1YkluL0VYd3ZXejBDQXdFQUFhTnlNSEF3SFFZRFZSME9CQllFDQpGSy9paytJK05QbTRmZzBlQ0ZzcWpWV1IzZVA1TUFrR0ExVWRFd1FDTUFBd0V3WURWUjBsQkF3d0NnWUlLd1lCDQpCUVVIQXdRd0RnWURWUjBQQVFIL0JBUURBZ2VBTUI4R0ExVWRJd1FZTUJhQUZLL2lrK0krTlBtNGZnMGVDRnNxDQpqVldSM2VQNU1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQU1rdXBoejFyZFdnRWp3U24ydysyTHpsTVBVNlhvDQppb1ZiZ0wxcm5YVkNBODVSRjRlMC9GUzlyaWVZQjRad0N3R2VER1M2Vm96cG5mVDZvajJaZHRWSGZnMWhBQ1lhDQowVU94MlM4Ylp0aDk1QnlMVHJZVHJIMXMzU0lZaVBrQStQamRmWkFwVnc5Y1V3Z3oxN1VOUWRvTkErSFY4T2RGDQpHcjc1NzQ0SnFaSS8rYmJGOUQ5ZGtIa0IyU2ZmTXNJZCtKcGZITFdzQ1BxektnNVZTZlJvTjErK2ZBbFN5TEJMDQo0ZFp2cGRXVlVDdGwzTk5hT0dRR3gvUWNqVEFSODRuWVJySjhWM3RmOG1GVXVwbHR4aEhjYzVFenVXekVPcUxvDQpIc1dzN0x5WkJaN3hkekhMa0JyWkpzTWhCUFVDY2ZDV3d6RFJqc3Q5UWJiQmtlL0Z5U0cyVHJOWQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==", + "PUBLIC_KEY": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBMVo4eXFjRDJ4Ui9XSzIxUmJsVS8NCjhCMnVkZXlOc1NYL21FQ3lsSVB2eUNvN294RlVubFpsM1Njd2JSVCsxait6VHJmVDlrek1UVWtqVXc2V3czR1cNCkRxSFpWY2hyQ3JQY3FaNkpTRlhyWnJJaXpFUVlaaWF3VEdHSGI2cHpNUmpkSHRDT3dRUW5oVkhic1hNK25KbUoNCnd1Qzd2QWRua1NuYVZoazdSVXA0SS9rcDM4K1doNUk1YmFsMVRmREVuWmRiS2RjT05NNXNjYmVSVVB6TTNicEQNCnc4elAycWlXZWNTaHV2K1huTytzd3FMRGM5V3UyWXFmMGtwL3JON1A2L092NVZhUmJQUzdhTWNvZTUzWW5MVUsNClpqdWt3cjVoWVp6b3NUT0F2MXRUOXpwUDVKRUgwS2Uyb3B1SkFReFJOdGVTQkRYZFRJVHUrVGxzaWY4UmZDOWINClBRSURBUUFCDQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0=", + "PRIVATE_KEY": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ0KUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRA0KREVLLUluZm86IERFUy1FREUzLUNCQyw5RkU1QUJEQTgzODIxNUE4DQoNCmhpZm5RQ24raFBYWXhKbUpwTUNURmIxd290VTNzSndCQXozZ2E1akxxT1cxanRqbGV0L2syYUlJM25meldLRnINCndPK21qdVBGOXVRaWcvc0s4RUR0NloyTmI4TlkyNnBnSXk2WnRCT2REd0xiM0xlTHNXd2NWWWVncE9WcnBRVmwNCnlDOVlzcjdDTTFNbGRYZldLOXNhaUoyd1o2Y1AxcUE5eERhZ1lYZXhsckNteFRSZ05pb3VNY0l5dGNhTjZWUFgNCkVKemxUY3ZqT2djRmluekZlcStERi9NNUFkYnRkc1hleFB3N2lMMDFRNkpjdVdxcUJSa2NWZnlUVWk3aENyWHMNCjd0ZmZNUk5lSlVvNGVaczd0aEZad3J0Y2ZNeHdEVUVtWUhsRU1oU2NSRkhEUE5MeG1Pb1RCK2lGZkp5TW0rMUYNCk5kMjFwWVA0U0h4YjJWNzNGR1F5Uk9Tdlh5MEFXMmNPb29QTENCSVN5YjVYWnNGOTZ0R0ltczVzUDhJMVdTQzcNCk9WN1QyaEE5YWhrcEJoR1JvcTdQbDUyVDdVbmNhTFlkalYyU2Y5dkllQTVqaVBBeTlYQjZTN3M1UUhTWmlHSDANCjd6RGtzMjJoUXJaMThjK053RFZLWUpldjIvL0I3Nk9SeWdlMytVT2IvQ2ZTTHpBZDdmMjZaenNYcGVXTjZldFQNCnpUOE8xQy80SGNsU1FSdy9Ob2QzakgyaDhHZkFEVCtSSjVVYXl6Vkpia1crQysvOWtyT2RwY2w2dlZHdUw3WTgNClVvS2EvVXdUNUxoN2tuQkh3cFNISXlReEg4d0xhQ3FjekZOZjYvZWd5TlRwM0Fiek1GZVM3OGhLZDg2YUhLZXkNCk14bE1RZ09hNzF0bTBTQWJrRWo4aXBoaGhsSHVaSkpVSTZBMStrN0FlMW5VTHpOakd5a2k1dlRubFFoYUV0OUINCko3U1BWaEhhVzZuTXI5SVJoTHN3bVhkTUJMUDROaDFzaEFUUUVLTmE3VFA2QzQyUnlqRU41a3J2RG9pbTZvMWYNCjhQRzJvY1dDbDdLUVBoak44RnMzeVFsaFdmZVBNTkZhbUEwUzI1bkI5TWRIRzBGdE5HNDhFU3V6cUVJWEloaEENCnBtZVVDWnRrRm14ZzhDenpBRyt2ZDRycHczYlNjbnEvN0NFMlpTckFkZXZhR0xPdXRKSDBvckxxUVA2a3ZJMEQNClRuSXY0OWh3bHYvVUxuQUVoOS81RTFPSmYxOXFGZE5ZdDVUNXBFNDdKbjlYZjFFbFZ5ZzlkQS9oWkl2cnpWU1QNCnhXQ0t6V1ZhNnJ1UythNzZwYndNY0RlMjJORGZnRC9YSTVpcFkxUDZ3WTljWTZmaFNhaEc0QU9BZWRNU05lM2cNClBNWGVWWHdwdTVrYzlwWG53NHdrdWtLZjRpNWl2OVk4bUUvWTZjRVIyWTdSWVF3YlpiSTFjNkc5bnhFd1phK08NCk5LNlNwZ1JkdFNURFh3WWR4ODV3bHhJQzY1M1N4dFhFckpwZ1NlTmhlK2dWYXNuZ2tJUUlMbk0xTXRvU3Q3K3MNCis0TVdpcmZ0VkxIUEZHSGdhdE5rSWVyZ1pnUzZGV3hSbUZWcFFuUHRuU2doSDRDdzdTZlh6Mk9lemNrOURZZ0MNCmtxRStTZXJJOHh5KytBalFSZGNvRFZDUGhPNm9qcUhqbnp3WG5QbmViMDNra2tGd3h0aGtLS0dvWDNJYTFFOUQNClhpc0ZTZHNwcVo2Tk91eURhV3RCUU9vTlg3c1ljMWNIRk5qTEtHM3hWU3htaWhqeUdRZDBSWVNzRUNXN216SjANClozMUxtTVhlRFJDTUxQTFdGQkhFZHZDUllRTFVDNjJlWlhxaXdEUVdFMStTUFR5VTNwaytzQ3hrRUdzVVN6RnkNClBRRkVIUDRZOEc5ZjQ5eVFJVjlZNm1nVURmQ0UxUWFLZWNHcWR5SHZwNmg0L3p6anlMbjFSYmdBeUhRSERZL2sNCmY4dkRyZWZnRWlnUitjaE9qNmFVeG0rTm9LL3orOWVkdjQxVXVDVHc5WmNNUTZuL08wTDBqSEVvS0hqWHBtVmoNCjNWeG8wZ1l5eUZZcnY3U1pnaUJ0eDNPY3ZVVVE2V1ZLR0l4NTB2cU0vQnpZNzd4KytGM2NvdHBzUWxoWDJlR1cNCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t" } }, "BANK": { diff --git a/tests/_data/workspace/keyring_7.json b/tests/_data/workspace/keyring_7.json index 1da343f..0401e97 100644 --- a/tests/_data/workspace/keyring_7.json +++ b/tests/_data/workspace/keyring_7.json @@ -1,19 +1,20 @@ { + "VERSION": "VERSION_30", "USER": { "A": { - "CERTIFICATE": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlEUWpDQ0FpcWdBd0lCQWdJVU1UazVPRGc1T0RJM056YzBPRFkxTVRjeE5EY3dEUVlKS29aSWh2Y05BUUVMDQpCUUF3SWpFTE1Ba0dBMVVFQmd3Q1JFVXhFekFSQmdOVkJBTU1DbHBMUWlCRGJHbGxiblF3SGhjTk1qTXdNakV6DQpNVEF6TmpNNVdoY05NalF3TWpFME1UQXpOak01V2pBZ01Rc3dDUVlEVlFRR0RBSkVSVEVSTUE4R0ExVUVBd3dJDQpLaTU2YTJJdVkyZ3dnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEMTNkZElVRWpMDQpXOGRiOWd2Q3k1SmxyeHJmdk9RUzNhcGNwUERXeThwaUlIZklYUS9QU0RYYmZpSDRReTNIUDlZaEwzNm9haWFTDQpmNzZ3Q2RGVmY1c0xqR1pmbFJNMS9sdnJZMmNJZmJjQUh2aURLTmo2ejVqR2VkTllYanM0VjYrNThTM1Axd2ZVDQpha1lIZFRCL3g3WjlpcjdhWE1wOFFZRjRFN0w3YWVJOUwzYXhVVkxhQUNxeHRBMW0wVU9tSEtzbThlMDFlLzJlDQpqTVJSTW1hN1FGdEZTNW1JSjVzV1UzVmxiN0RLTXlKa0VnSFpoS2ZvL1M1VTBlYm9lMDBmWWc5cUNjeVVkbytkDQpDczFVdVVVWTg5cUNLM2pJVzlUVi9PMFVyRXpCR0Z4VXBoN3FzSjh3ajZqWFhqZ1lNNTgxTFFJai9KaVRubVp1DQpLcGR4VXo0bmdwdXZBZ01CQUFHamNqQndNQjBHQTFVZERnUVdCQlJ1S0lxWEhLMU15OTZwR1RtS3V4ZmQyRDgwDQpNekFKQmdOVkhSTUVBakFBTUJNR0ExVWRKUVFNTUFvR0NDc0dBUVVGQndNRU1BNEdBMVVkRHdFQi93UUVBd0lHDQpRREFmQmdOVkhTTUVHREFXZ0JSdUtJcVhISzFNeTk2cEdUbUt1eGZkMkQ4ME16QU5CZ2txaGtpRzl3MEJBUXNGDQpBQU9DQVFFQUM2RnF5WEdaZlZqMTFPRnhsNmpUcERHVGJnQXhtYk1vTVg2d0FmeTZVY2hCZjdDbUxTbW0wT0FVDQpNbGZNTEdvOGljc0tTMlhWcmFRbkVZN1U0VlVyTHlGOVRvdDVWNExTUTFBL0h3eWhhUm9lNDFYNmVaSzN3a0RpDQpmUjd3eGd6YnFkang3LzllSkZ6Z054Z1VtYWc4Y2ZWYnZENGdwMjl4ZHdJcXlSZ3EvOVEzbDlCWFlEc1ZoNmhRDQpYZjErazd3R3Z5NW9sc2h6RGRHbTNwY1VVODNUL25VWXI1cnQ3ckVQWGdVQVZxSlZzZ0pBQ1I4Y2U4aFRBY0hrDQp1U2cxSW5tZk9TOEJQaUpSNHJ0VzZoWVJGR1oyVEJHMU9lYnQ1WFRTRjBBcTF4cnNHUGkzUlZ6V2ZaOFdTQ0hrDQpTSElRYk5KSVdaNCs2WUx2MHJoUnI0NkR0VCtYU2c9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==", - "PUBLIC_KEY": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBOWQzWFNGQkl5MXZIVy9ZTHdzdVMNClphOGEzN3prRXQycVhLVHcxc3ZLWWlCM3lGMFB6MGcxMjM0aCtFTXR4ei9XSVM5K3FHb21rbisrc0FuUlZYK2INCkM0eG1YNVVUTmY1YjYyTm5DSDIzQUI3NGd5alkrcytZeG5uVFdGNDdPRmV2dWZFdHo5Y0gxR3BHQjNVd2Y4ZTINCmZZcSsybHpLZkVHQmVCT3krMm5pUFM5MnNWRlMyZ0Fxc2JRTlp0RkRwaHlySnZIdE5Ydjlub3pFVVRKbXUwQmINClJVdVppQ2ViRmxOMVpXK3d5ak1pWkJJQjJZU242UDB1Vk5IbTZIdE5IMklQYWduTWxIYVBuUXJOVkxsRkdQUGENCmdpdDR5RnZVMWZ6dEZLeE13UmhjVktZZTZyQ2ZNSStvMTE0NEdET2ZOUzBDSS95WWs1NW1iaXFYY1ZNK0o0S2INCnJ3SURBUUFCDQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0=", - "PRIVATE_KEY": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ0KUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRA0KREVLLUluZm86IERFUy1FREUzLUNCQywwODA5OTRFQkNBN0JBNTVGDQoNCnpBclI5Q0NZaUZJSDlKOSswUHc3SVUrOG4zVzRhemtmdEJWNFFtc2x3VUNyb0tYWURTZldPYVpObmx1K0JVU1YNCjJ1TGNyN3JzcWhhTUo5TTBCYnlyYnBGdStyMFFDUzlBNUVZNEFFcEtOK3JlSHgwRW9pc0NQOEI2a0dHYUFmemENCnN4eWR5RVRlclAycGhtcEMzQ05PcTNiV3Q3WlB6b1NJbTdScXdEM2dKUVJ2N0pKYjcxLzBkOGc4WGM2aVdtYjcNCnlnNjEvOWNHeTV4bjdDWHBmL05uRmFBMGR2bERiZFl0Tk1aTEZURlF1QzlvVmsyVlNyL2FRdUxTT2xJYjFhWnoNCnNVM0o2eHVPQ0lLMk9qVC9aQis5Z1o4cDc1V2ZFWEJXdEM1VHdDNGM4RzBGQXdqVEo3bHMwUktWS1E1Vktnay8NCkw3TTVTMzlmZ0pQVzFyMkFyTjVySGZnSXl5L2p4eHZBUGl1ZUNUWVluZ0Zja0graDlUUURicXRiMTFhSXZnSFENCmt3UGlTdmFHdlA0VzBhcy9lRlNPUmtQQzFIWTJxSTFzVFVuL05uZTRjOWdZNFlTdVMyTy9CL0ppbGpkaTB6M2kNCmdwa08vS3FpK1dvWmRjSGZLTTV6cUZzVDI2akpzOWVMWmlEY0JxSlhQeVlTNzY3aTZBUmVFQXhmWDJlSVYyOEINCm9VSTJOVFBEQzQxWVhKWkVMb05uWWhHdG5aWU5iOUVraWZvUWtNRjROVFVkakZZcnRtNWtIQThIRFpHRzhPUHINCjRwQ09YOTFyMWJwSXF4U0tjSFpNNUZaY2FPQUJ3ejlZZ1FYTndOempvM3A2SDZCVXRJZG81bFRaOUVsNDAzZkYNCkdlUUZSWUQ4V2NpN1hzdXA5R241WGdreWc0NjY1ZmllakRrQllrMTJ5aEh5TmxIYVdKeDZNKzVpSUpYUkRkYUcNClYxa2x3M3pJVjBDU0NYUFA2RHdRaFJyZHFKZHNQRkEycDdGU0pybEF5bHhwOUVDZEUyblY4dlk4cDcyYmVoWVoNCnpRMzRyaHJNY0tScWxEbW9nc0xJWS9Jd0UzNlN4UXVYSlcxcnVDQk9EODJOK2VnSm9PSUdOTjZrTzhzUU50S1kNCldMT1lTemd2dG5FUUlIdUVqYmdROFQzSFlZNTNqTTZ3RGFYc3o1djYzTmhwRUxLMHJhRHZsaEdZWURyQ0MrUU8NCjdlWXN1WVM4TGZXVjAzV25LcllmUkkyb1ZoMFE3MlNjNXUvMHpvZERudGlrQmJjVUV6Vnh4M1JhRjBMWWJqWm8NCklPQTI3UzNadDJKcVZxM0ZzSXBFR0Q1eTJKUGpIa2ljOWdNVFZJWjgrUnVQaS9QaEVPZGFySzFmVExlY3JMMksNCnpSVFQrYXZ2OXZKYmM1a0dEend4UXZaSWIxSGNtK3ZxNFlHWDJINm9oZEpHQm1Xd3IwZmZTTk1rUG9RZzhhakUNCmVIYkc0V2VPcWpyZVV0T2VpVlNhYm8xTXRXYUtJR2hZTDdJTWxsNXBvdm1RTTNGRU83dkJWeHQvQ0JDTXNsL0wNCm5XbzNxRU5WV0JXdkJxTUp4UXRTc3AxZzJOVE5acHlEWnUvWENMMXRtVjVGcU5nQ1REd3B5QzM0bkc2ckJsU08NCkxDRXFkaFBrMFpJakxURjVyNjdhMEdRcm5wTzl5eFpkT2JBWDV3QTJXR1VOQXp5blFWREpTZ2szc3FzLzM1Z2YNClRXL3FESFhPN3FSMGdhMzZxNU8rUzdCSS9QOHFmYlNaZkNIREV5ZEk3N1M5K2IvbEFVVTJGcDJlVTl2T25EbWgNCmw0ekVoUmZHV1BBaXlKcjVnYUZsaTMzcGFuNG1hVWlJUk5GMUVmY1crTE9SUG1xV0N2RzZBN25IdTBLeXU1anINCjNUVWZ1eUZMc3ZiMTdTQ29tM3d5RnlkYzdlZHZGL1JOa0xYTmNlcUl5UzJEbEtJSkE2VXREQUhwdE03YTJiZWUNCmUvNHViSDRLVkJFMlhNVWRXSS8wRXEvSGw0MXozM2gzVFZ2aGU3YnZQNktEUUkxTFFIZWxkcHBUblRsT2Z3UUMNClA5K1A3bnZqNk9TQVNvZGhFclFzMWVlOVdUZW5RWEJHWmhzS3VoYUhzY3JyUEh0NVdMN3VqZz09DQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQ==" + "CERTIFICATE": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlEUWpDQ0FpcWdBd0lCQWdJVU5EUTFOVGMxTnpJd056TTRNalEzT0Rrek5EVXdEUVlKS29aSWh2Y05BUUVMDQpCUUF3SWpFTE1Ba0dBMVVFQmd3Q1JFVXhFekFSQmdOVkJBTU1DbHBMUWlCRGJHbGxiblF3SGhjTk1qUXdOVEE0DQpNVEExTURReFdoY05NalV3TlRBNU1UQTFNRFF4V2pBZ01Rc3dDUVlEVlFRR0RBSkVSVEVSTUE4R0ExVUVBd3dJDQpLaTU2YTJJdVkyZ3dnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDN0NEMUZqT1NmDQpDeVBpeFRvQ2Y0dFNxbE1LYm1qT3lNUlErZXJkbUhjejY5ZnhqQUdPSWx1M2FHeFBRQ1RTL1VMWTRUOENqVjRGDQpPY3dyUzFrY0l1M0kxeWc4MVVBYkNIbnRNVS83QTRhaElwQTZhQzNoa2pHbTN2UDBQbDZBbUl2eUF5WDVaVHdNDQpWZm5JU3VoMzVpMGMzYlBKVGVGcmVIWGk4VlhTenA3eWxDaUVTdjhUMmpKUDJLdlJLZWFhSkxmMlNhcHhuNFVZDQp1TlJPZnExcy8vUFpEV0ZWVUZCczM0dEgyT1dDVytGRkdVY1NMUncrcVJQRWs0aVZLWE9SNzh2aEUvaXRRbGdPDQpSbkRaZ0dSZzlsNndTa01TYjB3azJLaDZEWlFqbFNMZUhwVDBweXB5bXBxSlFCRzl3ODRZa2FuYmxLcXNQR3Q0DQpySnZoQU5mSDFlRjVBZ01CQUFHamNqQndNQjBHQTFVZERnUVdCQlNUT0R4U0JmMUhVRUZ1cFFLY1czRGVWdUFCDQpKakFKQmdOVkhSTUVBakFBTUJNR0ExVWRKUVFNTUFvR0NDc0dBUVVGQndNRU1BNEdBMVVkRHdFQi93UUVBd0lHDQpRREFmQmdOVkhTTUVHREFXZ0JTVE9EeFNCZjFIVUVGdXBRS2NXM0RlVnVBQkpqQU5CZ2txaGtpRzl3MEJBUXNGDQpBQU9DQVFFQVIxNFdWdWFGRDE2Y1BWcXNsQUxoTEZaNm1iajVvQXpERHdwUUlKWStFVEt4azIzT2ozZlBFM25CDQpnYUtlNEhLRml0anl3Q09mNEp6ZlRSdXZxVkZUUHhHSCthbTdNeVdlUEZmOCt0QWMxL3hCVmtYWG5yclhTbVJaDQpvQ2pJWUs2RjZURHBRb1RZYXRDb21DZTZlVFBqaStGa3prWHJUWXI4bzlLVVkwdkFWZEZvS1dybDZxZiswUVpMDQpMUjhuSEtZSWwvODN3Nk1qRjlaZS9MaTFlUzc3c3ZQMXFYYmcyQy9ERVVXRWliRGtRbjdmbXVOeU04WkxETXJODQpGbDByRzMwb0o4UU04R1FjdFRzVVk1WVZ1dHUxOTF0TUJBZk1xdWVNQUVnT0RsK3haYTdTcVQ0OVRhRHhXeVdNDQpxbmQwNUZzOUdJS2IxVkhSVGlLOTNhVEdWRFM1TVE9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==", + "PUBLIC_KEY": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdXdnOVJZemtud3NqNHNVNkFuK0wNClVxcFRDbTVvenNqRVVQbnEzWmgzTSt2WDhZd0JqaUpidDJoc1QwQWswdjFDMk9FL0FvMWVCVG5NSzB0WkhDTHQNCnlOY29QTlZBR3doNTdURlArd09Hb1NLUU9tZ3Q0Wkl4cHQ3ejlENWVnSmlMOGdNbCtXVThERlg1eUVyb2QrWXQNCkhOMnp5VTNoYTNoMTR2RlYwczZlOHBRb2hFci9FOW95VDlpcjBTbm1taVMzOWttcWNaK0ZHTGpVVG42dGJQL3oNCjJRMWhWVkJRYk4rTFI5amxnbHZoUlJsSEVpMGNQcWtUeEpPSWxTbHprZS9MNFJQNHJVSllEa1p3MllCa1lQWmUNCnNFcERFbTlNSk5pb2VnMlVJNVVpM2g2VTlLY3FjcHFhaVVBUnZjUE9HSkdwMjVTcXJEeHJlS3liNFFEWHg5WGgNCmVRSURBUUFCDQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0=", + "PRIVATE_KEY": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ0KUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRA0KREVLLUluZm86IERFUy1FREUzLUNCQyw2REExN0EzRkYyM0VGMzhDDQoNCjc2QjdOQkJVdnBGQkkwaEc4NStmTHF2bEJHWDc1ZmtmY2oxb3lqZCsrZ3dVQkY3cFFkbFZBSUgzcnVtRW9aZzcNClE5UDNUUitaWkZrZFJ2ME5vRFc2MmRUeTdHSXhiS0YwRytUaHBuS3ZLWVZYblpHb29pUkZjVFFLNFFiY0RsRWkNClBQZHR0bGxMZyszNEo2MmM1K3hnUzB4K3hWOFREamhudit2SWI5WDd0bXhQOC9mZzVmRm1QNHpFNk9SSTVGZFQNCkJjeFZ3Y2pMakpzaWNrV013Z3BadE1aT0pZZkNRTFgwdUkxWldOVmhmNE0wVGM3a3RlUnBQd1dOcG5WUkNCcGQNCjlUOHVOVWZUaVpQUUZEZ2JJeVk5SWtRZm93SXpVcUZCaDBNVUxEZysxWWZFOXAySGVtN04rdFU3L2I2ZWxoYVUNCldmVEJkRWJQVUZHSXE2ZStIYTZlYnRyVmJpOG13OE5vb2sraEZVeHJ0cUg2bjhQeHlWd3FpUWZYbVNRL0hUQ2sNCk9BVERpbHRnbE4vOXVMLzkyVmFQUVFHLzhIK3g5cGErSjNpdVVwUlFwWFJmaG1IR2svYXhrcEJWcDRjR2RNWlMNCmdjUlpYVCtXWml1TFI0RXNDQ3BMSjR6QTIvb1VlcTd4VUMxOVFLT1pOandLOEUrSUVSOW9qc0ZsK2VmSnNaWGkNCmx1SzlsN1FVY3N4Mlc2bk1qdkJkcm9jd2VGRnBFVCszaHBGL2d0UGMwMUNpTXl2ZlBydHE4M3ovNlo1a1Ezc3ENCjd4SW85cVdtTnBOdENDbDVxek5HSTg4bXNVWDQwR3V6bjBxZXRtRDRsQW1UYVA5RDhvd2hzNVdOU0lTUWh5RW4NCjBwUFI5RjV5em1OWkFCak9MQ3AyMk05OXJKdGtFZTdwU01tWnpFSG5hcUJpSzV0VEJWY2dEQ3k5N0hIeTd4L3ENCnBlR3FZT285bUdMSkRnVklMajBqS0hNRHR0Y1dQRFF4RXFzcEZndzhGTXNpMkhWeWRhV3lIazVTT2JQb2J6TWENCjd1a0dMZHo5WStCN01hN2pKL1h4czBLM3puMmlJREpCa0t6NUx5MDVXdG5QM29oL08yRExXM1dxM1dQVWdjYTENCm5LdHhNUVJQcUw0V2F5Z0lsNXMwL2ROT1VOVWhCZzJGYXlYY1RVU2JjRmp4TC81Yk1qRVRyM0pQdTJFNndYSkYNCnl5SE9XUlFQK3hRSUF3Zzd1VFNIVUwwZUdFM1JHdHphYXc2SjVpVFdmUXFZcmxtZnlicG9mN1hLTGx2QVBlYkgNCmtpczl1cXVNM3V1R2thSGMrV01EYWdmcm1adWhheXNnMVg1cndyZFMwT2hEVDRYV3h1bDZYeHNFWnJKcFJMVkQNCkU5SzV1RlhEcjdnRjJ3VDgxeENzakRkQS9UdTJyVG5VdmlRcHZlbHlxV3VvVVlnZkhyN2dWSm5pM0xWaGVnWEYNCkl2QktWMG5VNll6Y25pcWhjR0hkdWEzNjVob0J5Mk1IZ1JTVUFYZGkzUk1LcUhONVdOZU1XK2N0STdVbG4yNXYNClMyelM1TFg1ZHgrcTA0T2tzTGhrZFF1dlFaSnByWGY1QmI1SkkvK2VURUNSc0kzZm1GeE1FajluNU45OU9QOTYNCkZ3NkhOTm9oamk5eFBYODI1aFFucXU0Q1RXRlZQWFEvV1NVTWNaWDdrWTlrOU5jWFU5Z21Ua24rYW9TcW5Sb1kNCm5qbUpvbmxtc3BBbEZjMmVsek16M3Z4R2hRM2cvOFc2ZEl4L0VkUUxNeWZuZ2F6ZGxlVlhENUp1MnhuUm50ZTkNCm9KYWZSZENWc1Q0M3lrcXRFY1M3U2taVHVIcFRoYnNuTUdLYW1CalNVVWp5clpmSXdSNFFiTEN3TENNN3dNVGENCkNVRHdOZUlRb2QzK21OSHV1RVIzVVZvYzdIcXRYdFc1U3BMMEdYNnZlK0w1ZFNlZlk4QTdhSG5ZTCtaVHgwYjgNCmhGMlU2bnE2STV5QngwS3Z3ODVMbXI1Wk10V2VJV0YycXdUbW4yYXJuVWs0a2ZHVit3N1FYVnhWQzZ4U081QkYNCkRkbUVPMFVhck4valVqWDNhdzQyRUlXWG9SSlBqVG5ZbnNCQ0Q5RzNDcUhPWFhCK2t2NXUzTVVBNW1GTjRGOS8NCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t" }, "E": { - "CERTIFICATE": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlEUWpDQ0FpcWdBd0lCQWdJVU56UTFORFl4TVRrNU1USTBPREV3TVRJNE1Ua3dEUVlKS29aSWh2Y05BUUVMDQpCUUF3SWpFTE1Ba0dBMVVFQmd3Q1JFVXhFekFSQmdOVkJBTU1DbHBMUWlCRGJHbGxiblF3SGhjTk1qTXdNakV6DQpNVEF6TmpRMFdoY05NalF3TWpFME1UQXpOalEwV2pBZ01Rc3dDUVlEVlFRR0RBSkVSVEVSTUE4R0ExVUVBd3dJDQpLaTU2YTJJdVkyZ3dnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEWHJlNDVhZDRkDQoweXhsbzAvY3lUL242ZjViZG40NlhneW5NaUl3TmhjMFh6eDlVSGhXUnovZm1CRkdwWUR6eFJVckdCSkw0c0h2DQpQNGJacXNzSzQ3bXZERzVZTG0xWndLaExwd1dvYVJ6L3B1UDlBREtONGsybkp5Tm9ua3NLRUtnWUlDUG8zUEZ3DQp5Z2J6NU91Uk9iclhUUk5jMkU5N1diOG40Z1UxZGtvU0FraXR3MFVRWWFrWWd4cG9IdGc4c0szYVpveUxROFJpDQovREM4RkFEaUdBVk1GTnJESWd1Z09QMHJxTlltR1ZZNnR4MnovVjZRYlJzTGVSeGl4TkxseUNEVkV5MXNBYncyDQpSQTBJV2VqZ3V4V0ppUWlMYmNadHdnTkU0QTlvVy9JMHI3OFRVNlhUaXV4RjhQaHNSWnlVUjN2UUR5ZWdkU3prDQpPY1VCUHkrL2pjZk5BZ01CQUFHamNqQndNQjBHQTFVZERnUVdCQlRLZlQyMXd4NS9seWFrN0xUTU8waHVRdExQDQppekFKQmdOVkhSTUVBakFBTUJNR0ExVWRKUVFNTUFvR0NDc0dBUVVGQndNRU1BNEdBMVVkRHdFQi93UUVBd0lGDQpJREFmQmdOVkhTTUVHREFXZ0JUS2ZUMjF3eDUvbHlhazdMVE1PMGh1UXRMUGl6QU5CZ2txaGtpRzl3MEJBUXNGDQpBQU9DQVFFQXBxUmx5Y3Q0K1hhSml0SHUwWUFyclJ1UVNGT0phZmxsQ2dvZXhHdmdsN0Jud2dvU3NoOW1zYzJoDQpmWGVaQ3BuZWFONWRqSXFjZFZBRGFZbGsxeGFTa1pCSkJPaGV3UHh1RFR5VG81UDFCaDYvTXk5N0t6cUZVNVlnDQpaeDhrSWRhTkxhRU9kRVkrcllwb0d2VFRFVHBoREVDZW1xWVg5Sy9sZTBIMTYrNjhoMGRwc3VldXNrZ3RFbDlqDQozNW55Y0FwV0VlWkJGU1RiT0ZGRWxoc004T29wckN4MDdIU1laVlA5Rit3Q3FYNG0wSXpYc1JFd0VQOE9iU0RjDQpqVjRNcmFRNm9DNkJYUGJxbDBRbHF3TVUrd256V0h0NmUrc3VOcndqTGgwN3NQY3hOQ2VuUWh0djh1TVhLbXpoDQpuekU2ZTN6TE1kK1AzWmE0VW9CRHJqeU5hTjdXMFE9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==", - "PUBLIC_KEY": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBMTYzdU9XbmVIZE1zWmFOUDNNay8NCjUrbitXM1orT2w0TXB6SWlNRFlYTkY4OGZWQjRWa2MvMzVnUlJxV0E4OFVWS3hnU1MrTEI3eitHMmFyTEN1TzUNCnJ3eHVXQzV0V2NDb1M2Y0ZxR2tjLzZiai9RQXlqZUpOcHljamFKNUxDaENvR0NBajZOenhjTW9HOCtUcmtUbTYNCjEwMFRYTmhQZTFtL0orSUZOWFpLRWdKSXJjTkZFR0dwR0lNYWFCN1lQTEN0Mm1hTWkwUEVZdnd3dkJRQTRoZ0YNClRCVGF3eUlMb0RqOUs2aldKaGxXT3JjZHMvMWVrRzBiQzNrY1lzVFM1Y2dnMVJNdGJBRzhOa1FOQ0ZubzRMc1YNCmlZa0lpMjNHYmNJRFJPQVBhRnZ5TksrL0UxT2wwNHJzUmZENGJFV2NsRWQ3MEE4bm9IVXM1RG5GQVQ4dnY0M0gNCnpRSURBUUFCDQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0=", - "PRIVATE_KEY": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ0KUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRA0KREVLLUluZm86IERFUy1FREUzLUNCQyxFRTEyMjA0REQ2MzFGMEQxDQoNCm0yTHMrS3Q5c2tBVUJUcU5oODhKQ2RTNWt6Mmo3T2VRM0x3KzM5NFJKRlN6U05zdFVWOHJuUlp1OHo1VDRCVHgNCllkVWVGeGJ4ZlMzTU9DbWV6UGpWSGV1ZEdWZ2RTcGlScSs5a3FjdTU1RFlraWY0cXAyYmhURWJGQXBGMnRjRFoNCjlKZGl1Z3AwQTZmT01kcFpBUzRaM0RMcnVOVDlvQ0tnRFFuOUMySnViRTBHS2svaUZqOXl6ZnRGWTRDOFJnV0wNClIvNlMyaXdDeUFpeUhOUDJmWjZZYTBZN1o0Yi93ZW9nbll0eEs3VXNZTW5jM1BjclVGQXZnUk1iR0VCMlVUUGoNCllsMjBBNlY5SURKRGhVSk1helRWNE5ESmtDM0xLT2IvR3M2SlY0R3UwWjdLSlE2NkFHWWFKdmZzR2hUaUkxdVkNCndZK09ZR2VteW1YajZQMzhONGFHaGtlNnhhN0w2YVdpY3grN2dQWVNtV2drQm1tWE9lTFZmZTVBWDlMRExTN1gNCndaV053MStSaW90ZW11TWVEZ0FVOThEdDhFVFY1ZVJuelFCQWZFTXlLWi9UNkQ5ZkdXREFtVHVScWpvT000WmMNCk9qMnlVOG1VVXJNVHNLKzl3WDhjS2F3UC9ibUZ4d3E5cU9kUUZjU2xhbUd0bkpNdGxPVzVPdFpuMDJFMUJXOTkNClhaejBlTDFQVmtBc2FiY0NjcmxGQ3JtTjlCamsvQmdzRDFMeTNiQ1JUeTJoUVVPYjJKbmlzUk8reEZ0NUJWWm8NCk8vcktyWUk0ZWdkdi9rZ1dGc1F5elF5bmJzTmJYZWN4eWFjT2diMUlQOFlFQWg0MUhlbS9VdkdUdEdrd3BsOG0NCjg3R1JxeEk3ejMzOC81TFMvcWZ3VlJnVjhGMW4xbURobjFxaDZJSFM2ckJoRzl6R0ZjWWZ5enBkYTd3VUlCQVANCk9KL291N2U5ajE4MEF1ZHhzYzQxWkg5dG9aWHc3R05RRW8yQjMwS2dJcEUwT2NPRXhXbHpiTHBtb1JFTHNoeUoNCnRVcWtNOTRvdzlDZHFGcWt3UXUrN2tHUXZrd3p3VlRhTWp1K3p1Q2hVditQazFBZjl1bWFlaWtSSGJLZDRBQmQNClZqQkR1Kzhkano4bzNzTUdKd2ZwZ05Td251WjZHN3dTcjF2cE01YVI3K2VFdjBTVzBXazVqRExUNml3M3RwcGENCnpkV3B6c2FsNGkxWWFWRnBHWkx1S2dtSGV1YjZDYlV5VVRMZ1JCaEc5eXFoWHA5Uk51R3EybDNLNDQwVVg0aEsNCkQ4bE0vUVFpZ0dXdXl2cFQ5Ly9wdFBVM3ZFd3U2V1ZZcWUwWHc0NHltUVpJWFh5b2tOMy9yVS9Jb3dnWXFQUXMNCmcxellORU1LU0dKZnd0eFVYNDVHTXhsOWRyYkgySUJOQ1ZYQUxNUEpDWjN3dFUvZ2VubGRoZVBYYnU3ME9jbk8NCjhyTGwzOWN1Ylh3TUVGTjBoUHVRRzVHcVFlbUUzMm9UM3RBOGJYQlRrWmhOdWJ3VS9xYnJybHptcHRJRm9xUGYNCkEvc0twd3pndFJ2d0JYSDdqTUNaTlpjWFpRdVJSRytMY2liZ2ZQVWFsZ25jdlRZL3JVellHSVh5UnlGZUZUQ0QNCkxwa1c5Ulo0VVpLc0svL1UvMmlXaWpqWkpiY0dualBSUFNGWkJ3RUwybTZOaVNmOTcxZnEvV2ZjU05ZVVQyOHgNCmZPZ3A3S29pY2xCc2hoYWExcWlvMG5mVnNEOElIaGYrb0V0c0NkS1JNVjdFQnd5NmFpK3d5RURCUHJ4cHdqOWoNCkVVeVQzeVJPc3RoY29BRDNIaU5LNXNxYTR2M2l4a241b0JMbUV6cXhWSnVWMEdsb3FHSVV0b3JiMkJtSGlSYTENClBmalduTW5ZL1YyR0Y5S2d5T2xxblloZElrdDFYeDdpUENGdWZabTU3d2Jzc1JQM2pqNzhybFF6Y3EzNERkQ04NCkNTOC81Y1Q2cWgvT3NaYWk1Y05oNzBtV2ZITG1LbTFPcEtDWVZTVGU0QUZObEtISWFpb3UyckRxSEtxdUVUMDENCjZ1RnRONmp4Y090R3dtMzRTZG5JcHlqTDRpWXpmbWxsT3FsRjEwV0JFRjBlWlg0bkE3K2E5aHltbkxOZ01BMmcNCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t" + "CERTIFICATE": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlEUWpDQ0FpcWdBd0lCQWdJVU9ETTRPVE0xTURReU16WXdPRFkwTURjME5UZ3dEUVlKS29aSWh2Y05BUUVMDQpCUUF3SWpFTE1Ba0dBMVVFQmd3Q1JFVXhFekFSQmdOVkJBTU1DbHBMUWlCRGJHbGxiblF3SGhjTk1qUXdOVEE0DQpNVEExTURRMFdoY05NalV3TlRBNU1UQTFNRFEwV2pBZ01Rc3dDUVlEVlFRR0RBSkVSVEVSTUE4R0ExVUVBd3dJDQpLaTU2YTJJdVkyZ3dnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDd3BlMGN5ekJYDQpvY2x1ZWIxS252K1F1eVRzYXBudWVkQUZsdGkwTUdIZUtIWEhmVnJXOHBuS2FyckJCQWRGM2s2RWtvb3loYitHDQpTQmMycVp6QjRScWV4c1F5QXY0NjJRLzVDR05IVlQreXpzMzFRb0k5OXIyT3IwaVNlM1JXVld5R2tUai9Qb1ZkDQoycmMxQ1lrMTJPWkFQK2pyWlZiUHFwckVwWWJNYlRBaU1taDZQWE1YOHdJWEI0MzV2NWFnbGhiMVR6eU4wWDRQDQpKcDgrZ2hHYlBndG5taGV6ZHJBOWNXNHluRkRnWEMvMHFtMXVHMDFLUHJKOWpaNG1vUDh1Q3RPcytGalJGUEVVDQptYmV3L0p0K0RaQ2hWTTJSVVQxaVNuaC96ZWhPN1hBODlhQ05zZDRqN1BMOW4rRXUycjEyeE9xWmkyV3RxNnlCDQphbW5OLzJMUHRJYUJBZ01CQUFHamNqQndNQjBHQTFVZERnUVdCQlR2RFNFQ1ZLNlh1WjhwYlJjd1FONmplcW1JDQpMakFKQmdOVkhSTUVBakFBTUJNR0ExVWRKUVFNTUFvR0NDc0dBUVVGQndNRU1BNEdBMVVkRHdFQi93UUVBd0lGDQpJREFmQmdOVkhTTUVHREFXZ0JUdkRTRUNWSzZYdVo4cGJSY3dRTjZqZXFtSUxqQU5CZ2txaGtpRzl3MEJBUXNGDQpBQU9DQVFFQWVCMysyWFdIdUE4SHcySTR3V3hIVVhMeGF6TVRBc0VDNmJ0SkZTZzhDQ2EvUHEzRXJZSUttS2pODQpPWmI1cFE4VGl2VzNSMXJBTXk0RUd3Z0ZQR3hpMDc4S1BBaFVWL0piUzlaR29zdjFmRitaMkREMlBFWUJneVBvDQozU3orN0grTDZXSTRqWHFaT1kxNURiOVozWUdJcU5YZ3hpeVl6L2dycGFGb09RZkxMaFR5R0hUa09ZK080ampMDQpyc0FTaWxVWWpVYUJVRTd5K01GMlMwUkFZLzZWT20xc1JLQzlxbXlhcUhVOGZqbk5DWlVzMFE4YkhnR083S1VlDQo1dWptTFgrQjJKcE9PaUJFTmVKaFBaQlJteEc3dVo2Sy9Va3FZOUl3cFp6QlNVcSs1MVB0NEJhV2tDckNFRUxpDQpFbkpyVGJLSjd0ZU1OUy9PK0hpNWZvUmxJSGxma2c9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==", + "PUBLIC_KEY": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBc0tYdEhNc3dWNkhKYm5tOVNwNy8NCmtMc2s3R3FaN25uUUJaYll0REJoM2loMXgzMWExdktaeW1xNndRUUhSZDVPaEpLS01vVy9oa2dYTnFtY3dlRWENCm5zYkVNZ0wrT3RrUCtRaGpSMVUvc3M3TjlVS0NQZmE5anE5SWtudDBWbFZzaHBFNC96NkZYZHEzTlFtSk5kam0NClFEL282MlZXejZxYXhLV0d6RzB3SWpKb2VqMXpGL01DRndlTitiK1dvSllXOVU4OGpkRitEeWFmUG9JUm16NEwNClo1b1hzM2F3UFhGdU1weFE0Rnd2OUtwdGJodE5TajZ5ZlkyZUpxRC9MZ3JUclBoWTBSVHhGSm0zc1B5YmZnMlENCm9WVE5rVkU5WWtwNGY4M29UdTF3UFBXZ2piSGVJK3p5L1ovaEx0cTlkc1RxbVl0bHJhdXNnV3BwemY5aXo3U0cNCmdRSURBUUFCDQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0=", + "PRIVATE_KEY": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ0KUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRA0KREVLLUluZm86IERFUy1FREUzLUNCQyxDMTc4MUVBNDhCOUM5QTU0DQoNClYzNmpidXliVWQvcFVMR2pYSjlpOTk2aWVLa3lxc2pHQU5nMHVLVkNPYmtQUDZxR1lER0RFbFR5a3M4YUhFV0INCnlhdFc0TFhSc0t1a21EWW81UU1TUndhbVE5eXdsdFJEUnY2UDEwa29HamoxQnJVMjVjUTNzWnBwaU52TWZZWksNCmxlMzZKbmpkMURRTlQ3aklTdUhpeHA2Q3lTNTNaRTY0OXJTb1pBUUY5clpKaVBMb3BCNldYUTI5TWwxb1hmS3UNClFycndzU3RhVEpObTBoVm9JUTVGYWlPQUV3K2V1cUtmdmU0SXdGWmlWVjkrUkZPRGN5aHR5SStMWXlUSUhnNmwNCmhHOWI1S2JiNHJqVDFoY2ZPUmZJb3hoczVlem9RbTlGNzRkUjJta0NoRTZsZnRtMGtzQlc4U0dRWmUzZWhhVFcNCmxVdVBRS1Q1ZzFNd0N4RHlWWmJTbHdPaVRGRkQ2VUZ6UE5ubXZuQm1ZYUcwekZ2azFzQlFXVkFHcXhYQ0ZGUXUNCmQycHd0d29oOG1MNThnWkg1bGpRL1FOenltSE1tVC9LL2xKaGFtMkFHN1ZldzliMUZhSmJ1Q0FjNFQzMXRhdTkNCm1uWGFwRWEzTjU5ZWt3amNUbXNXVUxtTXR6anRLT1NhWXJBN08rb1dmRTBrazVjL1Axc1EzYzdxYVlwdzM5MmQNClRRSlp3cmNrdHBVM1RHVzRETzUrZGlVVGg5cDVTc1hpNi81TG50R3BpUEtvUmIvTUdVZEN4T21Gank1ajdZMkMNCndVSnRVencvdU05ODBDbTlvNk5FM3BabmEvZklLR2FpcXoyTG0yNjVTNjZieHNTU3lnaVlJNnY1QzAxZ2ZJOVgNCnZlOVdjS3J5NTVxTE8zdjNKUStKc09nK2dkZG04V1l6cnJHNDFCSVNXVmRuZDVJMnJrWHIrWTA3SUNPano3TWcNCk4xSVB2R0ZLdzlHUEJ3d2tzQWRKNW5qa080OGhlVFI0djNkekx1SklTT1dDMmRWZkRtcGJyY2FqNHZFSEY2YlcNCmNZdk1VVk12Ni9MS216Mll5bDRibDdvYTJSQ0xQMk5QREcwclFsOFdUNXJPZExvcmxKK3Vsc2tCZEkwa2xGTUUNCnh1d0pEVXNOUlJ0MitaeGpHT0IzcmQ4U21acjJ2SjhwU2VVTWhDUjR6ZXlLY3BkY1FOTzJ6S2pEUXoyZzJyOEgNCm5qTnIvMmIwUjB3a3gyMDl1Rm55bUdQWHZyWGRub0hQU1lNM0VNK3R3a0JGbHFnSThaaWpMSHIwS2lNY2VCcDcNCjlnYWtGZUxHOHhuMGlzd0tBUENIQkNWaVlHalJmcEJnbTNYakdCeloyY0ZZblRjSmVZMytLTzVGaXNOUTI5ajUNCjU5eXA5ZzNGWWJDQ2cwSEFndkd0dWh2WkRxU3A1ZU5Hck94RFFMNzdlM3NoVVFsTUpEV2t6dWtFTVJvQjVHZjkNCndpTmFadkx1a3IzVGpyU3UrNE5IUTJ4SnBzcVQrNHdIQXV2aFhlczlFRW90OEFFZG85STd1b3JqL2NNUWVJeCsNCjBOai80YXFSaEdoVy9oQ3cxczVmTUM1dllCYldPYzB4M0hvTDF2VjI2OWZGa0hNYStnVGJDbWcxdXJydVVwQTQNCmUwYXZObjY5ajR1c3lNRENVQ1NJSVVKekFDWkRpMXlQUHF1Rm5VQ01hc0tVUEF1aWZUMzVBWjVwc25FZ3ZkanUNCmRRS3A4QTZBaDhrbjdMRlhtNGJJOFJ2ZmtxYlJXUWhLSkdJWkFEUEk5UUs3NlZCMWVOczErL2Q0L1dQOHNTVGcNClJlMWxIL2l0VUFWZGFzRmdkYXdpUGd0MVpEOVkyV3lOVWhjWDhldW1pL29BanN0UTFIdjdVdjJUUzQ3Qkt2bkUNCjZTTUQ3N2FjUmlETUYwTnlmczNTSndNZFUrTDFKclI4aFlnbEtVK1pxaVh0bEtsOEMrQjhnYVhjVkV0RjIyWk0NCjBBdjR1bGpmSTk4ZkE1UExGbDhLa1ZpL0VhclpjdFBlL3A5L1QvVFlkVnQ1V0FPSXl2MHFpMzhodjMxZXovZUQNCnpoUStqOFJpWHRLYjVkYk5UUjczUGpMOFJnTTNOcml3M0hqRFNYN0E0WEhkWDRqYnZCa3VmQkpIQXkybHRkQlUNCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t" }, "X": { - "CERTIFICATE": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlEUWpDQ0FpcWdBd0lCQWdJVU56UTFORFl4TVRrNU1USTBPREV3TVRJNE1Ua3dEUVlKS29aSWh2Y05BUUVMDQpCUUF3SWpFTE1Ba0dBMVVFQmd3Q1JFVXhFekFSQmdOVkJBTU1DbHBMUWlCRGJHbGxiblF3SGhjTk1qTXdNakV6DQpNVEF6TmpRMFdoY05NalF3TWpFME1UQXpOalEwV2pBZ01Rc3dDUVlEVlFRR0RBSkVSVEVSTUE4R0ExVUVBd3dJDQpLaTU2YTJJdVkyZ3dnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDOEpidSt0MFFjDQpMMk1CekZwbVV2OUZuUGpVMXhvUTJqd3ZKUW4yUnRQQjU0KzJTN0NtNzZtYU13TXcwR0NFR0NERElrQ1JDc0xSDQpWQUl5cDl4ZWl5QmRsaGhKTEprYXdyRFFCSXRnNldoT2hESy9za2llWHMvLzdBeXd5a3FBclkxeFFGK0YzWUFYDQp1Nk1kS1dGK0FtK1YybzcxakhjM0pVbTVHSXZzU094SkRET1IvNGZtb29PTTNXYkhmaW5aVk54OTNYb3NEYlB4DQpER2lJSmY2TDFhRThtWEMvVEdHMDBqQmpkTHVjelVNL3JROWZZN3NOWU5NVzl0Q1pyKzhDL0VFLzBxR3BreGN4DQo1dGNlUE82N2dhWEtZR3JadC8yVU5Gb0lQa0twQ2hSL1U2TzZGT1Z2bW5wd3hWTCtPQnA1NSthTkpQOUpIVHBIDQprcHNzSWlvNHcxVy9BZ01CQUFHamNqQndNQjBHQTFVZERnUVdCQlFzWEVWZE83eEI5SFQxKzMwL2VwYlhjamFUDQpOVEFKQmdOVkhSTUVBakFBTUJNR0ExVWRKUVFNTUFvR0NDc0dBUVVGQndNRU1BNEdBMVVkRHdFQi93UUVBd0lIDQpnREFmQmdOVkhTTUVHREFXZ0JRc1hFVmRPN3hCOUhUMSszMC9lcGJYY2phVE5UQU5CZ2txaGtpRzl3MEJBUXNGDQpBQU9DQVFFQW1iNEpqY00vazVLYzJiaFQyRWVSZmJDbHUrOE9PZjVjTElTemNObjhaMkEycjhQYmVSWXhmQTVyDQpnN0xicnN3Y0FmK3Y3cmFQTjhNOUR3VlJmM0dIaUw1WE9XRXlZdkRUQmIwMks1aWZXekxnRHRjcHdORmNiakM4DQpUVFEvK3RmeUdtZ3FmcDJybUxjZG1QN2lyUHZXUk5pUS9RdlVxVy9CY0V6RUJWdFBXRU9zaUVhZDh1b1RBRFBjDQpqMXh3MXVFSU8xKzR5NER1N1JMNlJ1V243ODF0R3l4cGdJczd3bThEcXhVVWduT2VyZkR1akhwY0NteE5lcE9VDQoxeTNZMFhRSk1HdHcwV1VCN2lrcTAxOG5GWjdVQWZ0Wmw2ekRoSEc2U2kwaVBDa2FXWC9mS2ZFTGVNQ3RhVDZKDQp0NVEvTFBwbmtYRmFSQW5pLzczbnRVMjBOSW9YMEE9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==", - "PUBLIC_KEY": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdkNXN3ZyZEVIQzlqQWN4YVpsTC8NClJaejQxTmNhRU5vOEx5VUo5a2JUd2VlUHRrdXdwdStwbWpNRE1OQmdoQmdnd3lKQWtRckMwVlFDTXFmY1hvc2cNClhaWVlTU3laR3NLdzBBU0xZT2xvVG9ReXY3SklubDdQLyt3TXNNcEtnSzJOY1VCZmhkMkFGN3VqSFNsaGZnSnYNCmxkcU85WXgzTnlWSnVSaUw3RWpzU1F3emtmK0g1cUtEak4xbXgzNHAyVlRjZmQxNkxBMno4UXhvaUNYK2k5V2gNClBKbHd2MHhodE5Jd1kzUzduTTFEUDYwUFgyTzdEV0RURnZiUW1hL3ZBdnhCUDlLaHFaTVhNZWJYSGp6dXU0R2wNCnltQnEyYmY5bERSYUNENUNxUW9VZjFPanVoVGxiNXA2Y01WUy9qZ2FlZWZtalNUL1NSMDZSNUtiTENJcU9NTlYNCnZ3SURBUUFCDQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0=", - "PRIVATE_KEY": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ0KUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRA0KREVLLUluZm86IERFUy1FREUzLUNCQywzRTFBNzQ1QTE3N0ZFM0IzDQoNCnFmRWlvaEVyeTExcnpWV2c0NkNPWHArMTBxRzBaTVlnNFhOVk1FbUVpVlhKMFFqR2xLbjROb3RFeThMUFRPV3UNCktJRC9wN3hwY0N1M05DTEtXVW0yUHBLWlVhNHVRdi81U2VWczRKNnlyQ3E4Z1dnVmQ0SkN5dVRNWVJLYUtzZWwNClZ3U3NDY0FvemVDKzIwb3NwcGpaRXg0MFMvTFVxOFI0RWZuRlNSTEl0RjVwUnZYK1hNWXVvam9zdDVsOUVTWnINCmR5dzA0WlZHdEd2QXJQbllTVEpDTTdySmVqMEx2TEdsZjZOL1JQcDFpa2l6blBiNHdIdXdaVER0Z1I1MjFtVmENCllneStzSkJmUEFlSHhxZmI3R3hGSFQvaDdnbHRBTkt1QS9OWE54T1psUVNJc0JmZW1JMjZERkRpaExTUkt5RjYNCkJTT2hUQTYweDYxZS9QQjA5MEp0WXZ6VXhVZEwyaC95TUhqem1YQ0JMUndLOS9SYjJMWWtwK1lzQnVpS0FEUGENCjlQOU03Z1lyQTJuYmY0RmxGTE9jUzdJZ2xqK1FUM2tJVytweVFpckN2NXRXLzFtMGszUlZCYjIrYlBhTkVuNW4NCkovbVE0dWRXc000YUpqVGlWRDhVY0FVRlgySVpkL1JoTVN1RDNYcjZWODhOdGxuYUdlTTV3UGRRZ3dPYmo1MjMNCjAxR0krYy95ZFlGdDV3eFFpUEtuVmlYQ085cjQ5MERoYStvMGdaRjlUdXVZQ2gzaitxU3BiOWxFeStGZ2dadW8NClh0Qi9qaE5pSGIrc01uRVRSL3l1Y2JSeEM3RDZBUTMzejA2bWFZS2dTREZXaEJ0VDhha1VCMjZjTDFocU0yV04NCm43ZmZSK3FwS3lRWkZ2K2tVWUpTRDhGUHovUUdjK1NzNXhmQ2ZvU1lUL21ZN2R2Yzk2WUFWSmgvZVNRWTJOMXENCjBwdWFIU1REVW1nUjJTcDhqTWYvVFBRdVczUzhqYjJDUHBpV0pGcXZJMVQzNWxPdi9STWorN3FkcUE0U1ZKekoNCkxhOEg4WWZJVEVlUmtMUU45Y0RpbFlGdVI2V0hOTzBxeXZYTmhrTENpUWl5NnEwUCtSZW1rdkNMS2k1TUpZUk8NCndQRGFGancza2xhREJpUkFPL1ZBdUVlMHNmemlrdEQ4RzlTWXI4Z0pzUk9FVnFRMitJOTk3YlM1YzZNWWxBaW0NCmZKVTdBV0RHeDlMaWZUWG1GeE8vUlZsTVV2clFtZVA0V0FWU3hEaWxWNTgvdzBjblJEQzF5VHdNVjhiVUw5ZWINCjl5akN6UzAvTUsxQ0c3QWdWYlkvL3FUL28veWc0dThMT09GUnZhWkVmM25rRW00aDVpdmVIcGdHRnlOUjAzclkNCkplaVZPaGMwUlVHcGNISTJBZ2FXc2pvemFPMklIbnlqdE5BbksxUmdWaEVscS9kMlBJa3RoOVdGN2R1VFZXdGUNCmRXZWlpaXNJMmZhOFd4SldVeTJlcXJoR2tCSWxEdG0xZEVEZHNENGpFd01qVzNuTXR6bnJlOTNGSkMydVJvcjYNCk9FZDRtZGpzQkg2SGFaUmNHZlNwQmdIVDZsOWVaWFVFSG5VWmJ6WWc2VUZ1STdoMHJ1eTJ6dVRkbXBVLzIvM0oNCndwWFI2NFE4Q1NMNW42bUNEQlBLa05PVzN6OXVzM3VYUFpyZ0tJc0F1YTlqTmx0WkpyYk1jS1FxSElNdUNXTEQNClZGanVvS1JrclJ1YjJkWkU4NWJ2SG9mWjZSa3Vpbit3Vi8yM0cyNHZJa2tkbjcxV3paVXdLRFU4WGFGZ21hRXkNCjgzS3g3K0ZUYWlzVExHVjJqUHhaTkFQTTB0THlmcGY5dFVKQkpKWEFjZlFJYzh2MG1kaUpSZ3F6eXZaait6R1ANCjdiMWp5ODZMNjdpd2trTGJMS3FGeW4rdjl1VE9DTU1lUzAxWm5lUXhPcmEya090eUsrSVF0OXh2ZVRqYXVNeC8NCndVKzUwcHFlLzFlU0hoWXhxeXBlczZBcXdXaGkwZzE3TjJtSThmZEpSODE4elBZYjgwWVZwaWxOWWJoeFgxay8NCnRadnhKcEY5MXlpaWZtTnlpeG1XNDlYelppdU1GR3BIK3BhVEh6NXhhMzFVdEZlNDFHbSs3K0hRVnJ1MHpZTE8NCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t" + "CERTIFICATE": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlEUWpDQ0FpcWdBd0lCQWdJVU9ETTRPVE0xTURReU16WXdPRFkwTURjME5UZ3dEUVlKS29aSWh2Y05BUUVMDQpCUUF3SWpFTE1Ba0dBMVVFQmd3Q1JFVXhFekFSQmdOVkJBTU1DbHBMUWlCRGJHbGxiblF3SGhjTk1qUXdOVEE0DQpNVEExTURRMFdoY05NalV3TlRBNU1UQTFNRFEwV2pBZ01Rc3dDUVlEVlFRR0RBSkVSVEVSTUE4R0ExVUVBd3dJDQpLaTU2YTJJdVkyZ3dnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEUFNFRlFlbWRYDQpJTDBybTg0SXJ2emNWcmFFcmVSMzZwMVhrekVoVHUyRGZFdmNqVlJBN0k2TnFDVFpRM0hYaGVzUTZDWlBMd090DQpQR2NLSDJuRFNMTDRtbXE5aVhhNExuL1lBMGVFa2UxaEE3ZjBQRmNnS0pZTU4yYXE2TWllNVFFQUFXSFB6YmJGDQovREowWXdRcXNuOXdMdCtTTUc2Rm5CTEY2WDQvYnRLZVk2b1o4dDJCbmNid3pFbmpVWmlDYXpVSzlvOXd6NWRlDQo4MHpCODNyVGVSU1hJMGRHYkttSmMwaTNybDNNaHpEalpWV2RLT2tkVENBRnNGZW1vVlpVZSt3dUVEVDJ5aThtDQoxSUFwTG9WalMranVici9CY0ZRdml1UHdyV2JrMUc2TnNKZTFJdEJSZWE4dVFISU42RE9kWDBJNWhMNkZKc0dVDQpHaEZVMW5MOURwUDVBZ01CQUFHamNqQndNQjBHQTFVZERnUVdCQlM4TTlaZmhsMWpoaTUxVnd3blRJbnpZelVpDQpGakFKQmdOVkhSTUVBakFBTUJNR0ExVWRKUVFNTUFvR0NDc0dBUVVGQndNRU1BNEdBMVVkRHdFQi93UUVBd0lIDQpnREFmQmdOVkhTTUVHREFXZ0JTOE05WmZobDFqaGk1MVZ3d25USW56WXpVaUZqQU5CZ2txaGtpRzl3MEJBUXNGDQpBQU9DQVFFQUJLYlgxb2xGQ0pUeWxRanl0Q2t1WGt0ek56K1oxSXJUOVNCeHRRZVpRT2FXRE4xc2wvSEtUNnJxDQp2KytMWTNyUnZ1RlU5Z1ZFMHRmNzh5eDg5SDEzRkowNDIwVG94WEtFY01yTUxqM2tJMlN5S1R0dGFNeFJxTFFODQpiUVF1RWk3RHBLbkJybll3N2dIdE41azlDdExQM0JmaXRyT2s5OFk2Yjl3RnEyVmZHOUJ2OUZDbFlaSmpxektlDQp3MmN3aGZkL2MxUHEwRklsMWVWcXFadEJEbzJJOTJiK3I1RzM3ci9yOVRVenJXZU9EM3Z5Zkkwd20wU0p0dVVXDQpIaXRjK1ZmdWhZbHBzcWdyTXloaTZ0eWV4SzRmQmgvY3NtRllTOFU1Z2Jzbit3MXA1VEdocVRnTUE4Q3dkK05HDQplbk52UWc1UVZCaXF1eUxVNnZNS01Jek1GeXlIcVE9PQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==", + "PUBLIC_KEY": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBejBoQlVIcG5WeUM5SzV2T0NLNzgNCjNGYTJoSzNrZCtxZFY1TXhJVTd0ZzN4TDNJMVVRT3lPamFnazJVTngxNFhyRU9nbVR5OERyVHhuQ2g5cHcwaXkNCitKcHF2WWwydUM1LzJBTkhoSkh0WVFPMzlEeFhJQ2lXRERkbXF1akludVVCQUFGaHo4MjJ4Znd5ZEdNRUtySi8NCmNDN2ZrakJ1aFp3U3hlbCtQMjdTbm1PcUdmTGRnWjNHOE14SjQxR1lnbXMxQ3ZhUGNNK1hYdk5Nd2ZONjAza1UNCmx5TkhSbXlwaVhOSXQ2NWR6SWN3NDJWVm5TanBIVXdnQmJCWHBxRldWSHZzTGhBMDlzb3ZKdFNBS1M2Rlkwdm8NCjdtNi93WEJVTDRyajhLMW01TlJ1amJDWHRTTFFVWG12TGtCeURlZ3puVjlDT1lTK2hTYkJsQm9SVk5aeS9RNlQNCitRSURBUUFCDQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0=", + "PRIVATE_KEY": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ0KUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRA0KREVLLUluZm86IERFUy1FREUzLUNCQywyMTdGNDZBQTRERkJGQzU1DQoNCk1ualljWVBqaGNJRTBRbEQ5cWpGM04wTzVkQlFDVFphY1dKc0dKcWd5L00xenJ0b3BLZ1JJd2JvVG5UZlF5Z2QNCktpMVNESVNWd2ZRODN3T3g0dThGY3g1ZU1TeUl2ZGxvcnUzMFo0c3VCL016SkFRQXdqN2RxR0RGYStWcjgvaHMNCnQrbTkwNDFmM1g0bE9Oc0k1amZrdytGcElBSDhqQlAxSCs2QitaS1htbWtTMXptTnBUcnJiY1dxQTFZL0pEOVkNCjlBUy9ITlRldytnZk16OUl4QisxMVNSVXdKcTFBK1R3cHpwNHRxVWMyeHdISldEbzlPZTNwQ29NcGpDWXFwNE8NCi9xRDdtbCtWa0VBbjRvY1ZJMEM0MThmQWxvc01MeTVJNmJwRGc2azl3R1JpVHJoKzdSVkF4bU91cWl4dHZhM2QNCjA1ck40RG1hZWRJRDlNODB0WDgwb1lBWXM1dDNhWUc1MFpnOWNDc0dEZEFObm90NnhYaHJiVUluNDd0UUhXOGsNClZyOFkvd1NUaTFONWIzbjBMSmZEd21vU2loS0xtMndaQlF0YkltM0RFWTNFYmNCMEhyZyswNzdKeTEvM3l1QnUNClhhV1B6dzU1WksxeDJ1aktqVDNsYzBoeGwzdkk1VllUaStuOXQxdjQwd1pzWEFJcEtPcHN2cVNvUUY5a28yTUQNCnhpNC9GS0V2eDZ3S1JUT2F4QnBKUlhrNkFvaWFPN0dPSnpNTDF4QzFsMUEvYXVBUThZbFlaRXNvVEhIS1pUT04NCkxnRWZVcWZra0h5ZTlwZEU2VDBIdC9ZSzlQMCsyZ2NkcjZWWTllUlhjb2VlSGdXam9LelMxK0p5Y0hVR2swcE4NCk11VXhKUmFycnZBcFJ5TmdFZlpZaVhGaTdYS1h4cnM0bnJ2OXBOUGJSMGhlcVFOWTgyTGg1RTF1QlFWSnh2QUkNCjlpVlRGRGNMNEdNZzB2STFZMEZETk1MSGxtTTdRRmJidDlFUkltS0tnNXMrUXNoVllwYUg3N0lsR2pQOXpEc3kNCmZQVXlnUlN3MHlCenhHU0JWY2FIRGtQS2d1ZklEWnA1YlJ3QnZLVUxCbmQxbVo3VllDLy9XNXEzV2hndGxMOXUNClNiSGwxZDlvdGNQeFRlVDJTalRsMlRKOFovMFFSeGJVUWc2V3RIeXhWaFdEc2s0bElsUXlhRHBVSXFENlZTNkoNCkpXRFhNaURnbURuUXh2b2tyT3J2VmU0SVJTRjVvTzRUWUFWUmVaa0c3MkJsdTNWaDErYTRnMHNoeUd4bXVzZzUNCmpVWHFrUXNocVZkTFFtRUxBRVNxVzcreFAyMldXdUlzYktQSnNEckZyNk53U1BPMEFUc3JFNE45ZU5EZFpUMVgNCkhseFE3dVNPc3JsRUxvYUpLSTl5dmFMR3ByS0F4VFpUQ1FQdWNyV01RbzdWRHdKbnB0bU9WRVBZT1BjNnBDYUsNCk05SU02MGhyci8vcmFsM09pa2tVcXJ4M05yK291Y2c0RUJXL2RRV0poWE1EQlJ4WGpMY2MrZ05WekMvNWI2YkINCkcyYUFiY0Z4SUR0bGpDeVMxalR1bldxWDdSUTIxR0dHUlRhRkt5ak91RytRVWJyNTFpc2hOZk1nYzdLTkgrK1INCkcrMWJQSUR0SlJIZmswcnhmbmo0UHlFKzFLM3VqRmxKbjhmS0pacEdWNm5SUUZKcGE4VDRwNjl6c0NYeHVuL0UNCnZYVkl1ME90bzc1eWQ4UEZXem1TWS81NE11MjRSZjVUcGsvRlVEdlUwZGhMazAvTFJGT0VGek50UHRGTExVY04NCk5MTG9KRGd4YmVUVTlJQkx5WmdLZ0I0clBuTU52N25MT0EzUmplK2ROMmxvRjZMMTN3eUY2VDEwTkdVSTlpNG8NCmJRNWQrVlEvZGR4TDd5RG0wZXF6YVU3RWF6clBXdXpnM2VVS3pSTzFCemJORzBaVzBnUWVsbFpiNWxleTFjelgNCnI2VVJPaHRYZkRGell1UjhnbGJob2U3L05NQnd3N0JtZ1EwNzk1VUdOalRXZjJ6YmNSRnp2bVBYRVkrSjVsb0UNCmxuOWRMQlhyNnVMWjNMRzFVVytUTlNFL2UrMzhIMG5pQ09KK2lrSVdlbUU2bkRzeTRVNTMrVVNtZEgyTHJmWVkNCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t" } }, "BANK": { diff --git a/tests/_data/workspace/keyring_8.json b/tests/_data/workspace/keyring_8.json index b817f4f..2b87f69 100644 --- a/tests/_data/workspace/keyring_8.json +++ b/tests/_data/workspace/keyring_8.json @@ -1,4 +1,5 @@ { + "VERSION": "VERSION_24", "USER": { "A": { "CERTIFICATE": null, diff --git a/tests/_data/workspace/keyring_9.json b/tests/_data/workspace/keyring_9.json index f66eaad..56b3d0d 100644 --- a/tests/_data/workspace/keyring_9.json +++ b/tests/_data/workspace/keyring_9.json @@ -1,4 +1,5 @@ { + "VERSION": "VERSION_24", "USER": { "A": { "CERTIFICATE": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlEU0RDQ0FqQ2dBd0lCQWdJVU5EazFOREk0T0RNeU9Ea3pORGs1TXpRek5qY3dEUVlKS29aSWh2Y05BUUVMDQpCUUF3SlRFTE1Ba0dBMVVFQmd3Q1JsSXhGakFVQmdOVkJBTU1EVmRsWW1GdWF5QkRiR2xsYm5Rd0hoY05Nak14DQpNakF4TVRVeU16STVXaGNOTWpReE1qQXlNVFV5TXpJNVdqQWpNUXN3Q1FZRFZRUUdEQUpHVWpFVU1CSUdBMVVFDQpBd3dMS2k1M1pXSmhibXN1Wm5Jd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUNkDQpCRS8rV3FwbEE1TVJuSHo0dmNvMi8wSStweGZpOVBQeTNsSVdod2Z4WjhLQ2tNeDdRU2Y0U1lMQWVMQksrMlJmDQo3RHVSMENQQWZPQ2ljS0kxcDlaNXlNRXZRdHhsb0dCbkYrNEFrL2oyTEg3OElsVjA5UklaMHg0b3JJWEpXRkh2DQpDaG1WaVZVaFROQmVSK2N6TEljdG55L1Y1dHlPSGd2ZjEvVndQK1hYTjVDakhiWTNENmxOdmRjNjZVTi9VNnpKDQppVjFNUFVaeVZzYlZ1eUxTVlZwbWJBbTRnVGZ0TExUM0N1N2h3eGRhZVgxUXNoazNuMThQSFY2TUEwdHhYVU40DQpPL3lMRlpiZWxuRFZZZkhMUkpvN0taVmRjTVp2ZmZVQ0M2clRPSFE5UlA4WVdsdm9aN2JhaFAwaTZ0SzgzR211DQo1K1BSY0NXVmZvSldhcWVGU3RRRkFnTUJBQUdqY2pCd01CMEdBMVVkRGdRV0JCUkVnSkpmUm4vK0xiVzNGR1pkDQpDL2lKOHRCNDdUQUpCZ05WSFJNRUFqQUFNQk1HQTFVZEpRUU1NQW9HQ0NzR0FRVUZCd01FTUE0R0ExVWREd0VCDQovd1FFQXdJR1FEQWZCZ05WSFNNRUdEQVdnQlJFZ0pKZlJuLytMYlczRkdaZEMvaUo4dEI0N1RBTkJna3Foa2lHDQo5dzBCQVFzRkFBT0NBUUVBR01MOFhQb0Y5Z3ZOZElCcTEvcTNoSlB1T1dYVTlKcStJcHpEcHBTQjlyMWdRSGh4DQptVFBKd0xRWTBmeUhZTVVNdFUwOHhYOXUrR0lXbnY4emZWS1BBK0Z2RlU5dGZOUzJwb3IzTVJsME5qWW1XWVNPDQphZFplcDhhbERuWHhDUStBcGFqa3RlOFpyc0xMd1pxRzI5b0pzRE5hcFdyenVXdm8rZWVoN0NvUFZqNW93YjJ1DQptWk5WK21nSXQ5NXV4V0d5bXVoVDBtMkVrc1JsTXlvaXBBRGE1d3VKQVJHeUo3RU1PRU5RZml1akcxVERLTUpnDQpPN1JiRVVmQWJUVWQ3VWk2R2dkVHJXS2JBOG1EN04rcXRVZmFEcHpTY2VTK2tIZ0txaHdEOHp2UHo4cmlpTUM2DQoyeXZXZFN3VnhGTy84YnQxOUZ6ekhZQWpXTjd3T2FncnZqVTM3UT09DQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t", diff --git a/tests/_fixtures/hia.xml b/tests/_fixtures/hia.xml index ead5c53..c63da8b 100644 --- a/tests/_fixtures/hia.xml +++ b/tests/_fixtures/hia.xml @@ -1,2 +1,2 @@ - +
CRSISOTBCRS04285CRS04285PyFinTech 6.0.3, joonis new mediaHIADZNNN0000
eJytlEuTokgUhffzKypqFrUgpniIkBpqB09FVF4FojsQEHzwykxJ/PXtVM30VPX0amJ2ec+5GXnjni9y8o1cL0+3tIVFVU5f2Ffm5SktD1VSlMfpC0bZH+Dl2+y3ycKQ3LTBKURWm6StGqHo6XGzhOMETp9zhOoxTXdd99oNXqv2SHMMw9DMiH70JLA4/v780T19xm05fjSM07g4wPGCYfjn2UTCKE9LVBwi9BjDxrGZ9kaZVbPJxzmILjidTRI4dj3pS72uEnzBcNYTV+z55C5TWh8h2PWyvQPy1m/f8pEFV4G5xsejWaFWyoZH9hwXRe+7iQIRd/bSESvAkF2PRB8MBxJsl54B9ovwwsSUjn3eFe7XlQ5B3dNRGSiNka6UvJY22IsTXQM+GwdSKN7r8mQ0cNRS9rFcY7cRamD2EUmQvKE09iwc5eocnewgv3Uovs/3ZkTNbY92ktjfiFFt85ac1RhWkeb1c3YLOWRbKo8s7tRwds1Dm8hnRhTCITesdIN3zG1y5DJ1m8t2jlRVIgi7anZQ+TcOExUw1X5DjK7ICtr3rrVDYL8xHUUM6qYoXcGJA9VmhLj2c4Wma1+WM8qVoG7tr3i0OHVzOxp20+mE/rTkPxeukboqH1nNJEeS390fynv1JSD6S3xfUw4+mJuFDMNN6F97P+ufydDKQ9vX/5WXVukYojyWDJp9zue4Z0ArvaniSuSj5BR1PAmjbWaQgxgCm3XZ8L5j5/htJ1frUeKo8vwxdmGxLZYJRjq0PPYqAVMDDpcMd9mVKHC4UKRYSzZKcEg2fEmFgVLRhHJ2KsNdcCGNSnQziR/o3Q2cedzN3U3DhEs9X16WlBZd2ptdZuStua0IuFVIcwVp70B71OdlldC6S87XVIl6fVApVFBZpr26qFCs/ZHZFTuQn3tjUanC4jIftPZtrg+dJrTTyyBMtZ1JBZ21MPpdx2b7uRiUicp5zspT7rv4qqci4HZyJ1v+Quhdg4nRur1zDgFV05MAZNZKWLi+yHUDzg6GgZULlXtOlgED/mde/kn4bx60d1b+rX/WvtAQtahMW0OdKa7H8BwYPp74oU18+JP3lzChf/Hdzb4DdS7FqA==
\ No newline at end of file diff --git a/tests/_fixtures/hia_order_data.xml b/tests/_fixtures/hia_order_data.xml index 1459398..6c46953 100644 --- a/tests/_fixtures/hia_order_data.xml +++ b/tests/_fixtures/hia_order_data.xml @@ -1,22 +1,22 @@ - - - - - - {x509_issuer_name} - {x509_serial_number} - - {x509_certificate} - - - - {modulus} - {exponent} - - {timestamp} - - A006 - - XETROV00 - XV024523 + + + + + + {x509_issuer_name} + {x509_serial_number} + + {x509_certificate} + + + + {modulus} + {exponent} + + {timestamp} + + A006 + + XETROV00 + XV024523 \ No newline at end of file diff --git a/tests/_fixtures/hpb.xml b/tests/_fixtures/hpb.xml index d9d8039..50a8efb 100644 --- a/tests/_fixtures/hpb.xml +++ b/tests/_fixtures/hpb.xml @@ -1,2 +1,2 @@ - +
CRSISOTBF88276D74C12FE082492573B6199B3612019-09-13T11:30:47ZCRS04285CRS04285PyFinTech 6.0.3, joonis new mediaHPBDZHNN0000
Qsej5kpR0Ej9rXej2r1u3grBVhsM75VEV7k3tYrGXdI=GcRUVPnKQJJoKB83SOKMxhpVV4H8TwJaLylwq1iUxinkq8ir2f6k2tWATqpykfvUu6W2uwZjv1RvWE4IHxFaVxxCbx5qdrz96u4xsXyH35seTl6222lNRMwG80YZUZlztS5EwXPe2tWmPbBYwBzFGKDfq8gwyB18NFe+RNId9sWj733yShW6NrlgAvDRmfFYTxkVatA9bfU/SSgVbO9jB69kvVhVYZ9Yx49mPv44sKm1jFuLXftY8iBYy+S8n9Rw8GNoBI6HhVLtN8M1KoVk1HswWkffJEjhS3eWLUoX99gdRGePAXAczCZm3px5haXBhgkGkpJYhpPqc8USaN6YZQ==
\ No newline at end of file diff --git a/tests/_fixtures/ini.xml b/tests/_fixtures/ini.xml index 5d1d433..39b2d79 100644 --- a/tests/_fixtures/ini.xml +++ b/tests/_fixtures/ini.xml @@ -1,2 +1,2 @@ - +
CRSISOTBCRS04285CRS04285PyFinTech 6.0.3, joonis new mediaINIDZNNN0000
eJxlkltzokAQhd/3V1jZBx+sOANELhaSwoCIxgQcEfCNm4hyZxDw1282brkxeZv+zpnuqu7DP7dJ3DsHZRVl6aRPDGG/F6Re5kdpOOnXeP/I9p+FXzyKwtTBdRlotbsMuvfSD0rJwU7v43tajf1q8nDAOB8D0DTNsKGGWRkCEkIIIAc+PH4Vhb8fru47a+BGXvXpRhASD8L3SWq6zwT++t46cR0IvF+N10i8q1eZX8d1JTQrKjoePVOdn7zB00VevEooMxCrTWklY+usNcXS1JROPjHvkUE29mJqrCxkXc6JSJ0blV5Gr3tmAYtEMZLaNmSK00RuWuxgrWVmrLua6JlQ0Yq3NZA8f2Mb+GRYnpGLSkxYym6dObF/CUct6nBEtPKr5VtTQycRpM1Zx7BU3m6Y0pAdua3EkJoGIMZNvcPAM/fKcdltGcAQ6N2Q6O3MA65zZBZu1UDXtFfxsZlb3pstzwZ7dZl2lk1e1Jed3gaUrK7nLponA9dh9Vm43p8uUp4lBySHca1fVL2zBxK3ABvuhOWBRKZSQ3eHUC2IkebMlEODFzk7Z2mvyLeuDl9i30dLAH35tCtyi9AnEx58WfLfhcttnqVBigVRF6ef6o18VncH2kRJgLCT5AIJCe4Rco8EtSGI8RMcj5gdD/7rPLi79C0L22tABRFCmgc/8Bd0lxqnxGlQqpLwskbwiWRHH/1vjDeqb9o/8KPbLe3CHyM/E2M=
\ No newline at end of file diff --git a/tests/_fixtures/ini_order_data.xml b/tests/_fixtures/ini_order_data.xml index 1459398..6c46953 100644 --- a/tests/_fixtures/ini_order_data.xml +++ b/tests/_fixtures/ini_order_data.xml @@ -1,22 +1,22 @@ - - - - - - {x509_issuer_name} - {x509_serial_number} - - {x509_certificate} - - - - {modulus} - {exponent} - - {timestamp} - - A006 - - XETROV00 - XV024523 + + + + + + {x509_issuer_name} + {x509_serial_number} + + {x509_certificate} + + + + {modulus} + {exponent} + + {timestamp} + + A006 + + XETROV00 + XV024523 \ No newline at end of file diff --git a/tests/_fixtures/keys.json b/tests/_fixtures/keys.json index fa53c7f..e1d7abb 100644 --- a/tests/_fixtures/keys.json +++ b/tests/_fixtures/keys.json @@ -1,5 +1,5 @@ -{ - "A006": "-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: AES-256-CBC,0269A3DC0BC3E1152476CBA796708153\n\nA1im6eW/kNZ4VgSmhOvGKauI3H6pSjf/A/Dzoj+j9xGivA74Py1Yv7RMjRUSoaAX\npPvCzzV139ITI70Zo6PBn2ZVz5Lhc85DF/PFzLbjalRm2WqMTeiee4i70GXfQqEm\noEPWCQlpNQAymYFGJdoz95jzxR9bW8+6gJq1ljSQMI1jPLeV6Ca8z7Q3SD3eUYDp\nqkKPLc+6oP0rvCIfAsjbH2203okrSL3QAsGs/UKvWg1MfF8G0anYw14WX2FLTT/L\nYRNLEfaMPGYjEAnqVHJRhSj+YZBFpPOSkaBdMwEvjrXENPwJ2xeJocrXeOban8yL\nmqdsNP9lhhnHxyaB0gLcprztabvHwdfs7rbnp1uLALxXLNQ8dC5u/IeUIQ6hGIpy\nX8FK+Ljpx3nCbybznnqigX3PL/n8m4E5jRhwuJJmKkqdlCS99lETAZVvCW+Vq7k0\nq/mg/8yN5eHUA/uN5VnxADvn1wVVilmSi5Ym3m5ZuR9XbQU9f7BqmxlU7xk09EqC\nPp/lFdo7XPqpjvXv4+TJ7y8tMP1JJ5nja8iBEFCramnvUBOBNpUiQbH0Ig4thGck\nnbKj7WQv0FjckbvBoPgUgc381DUI6JaCqisos+b0NlC8kU3D5w1EpIyd9owgnNtK\nnY8NwjFm3eGegbuST/XoANSLGhxPhiBoQi7EK5q7Ugp9WN89NiavQxpnMrjUMNNh\nnYPgsrzrtGIsg8Bf1z8EFx2AF5GZqxwofeiXr76HlgykEj8GV4vKkGX/gO6FtJRD\n43jpUVxqS/syV1HhNrqcqcYi930Rls9P7+JmSBNxDwy5xHluv7WKq/5R26dLdIyO\nkNL6DFe4+07kvx83XFIBmZByHWhTk6e5XUSAQbehcU7+zYPtdnX4iPYPhcEvqyL7\n5ZaHuktvhXpUXM5Q8VVtuoALCl1flpWCzNXY2E+y4Ufk9QHTJYmgLolLxl7ldXgY\nMmiZQW+yAQuaeNc2wmmrI2+XwDfQOJixC6MQ1Gdj+zumZ1WrH26hKgmvXUsl/LHZ\nZCpkV+1C2tUYzjRv7ExrcFdOn9tNFttjQIA+Fgm0NKMVQVFkcPuuHKc2UnpDcnSA\nXxFHuB0iI3dwcJkkk7X31gY6I6T2g4Zqaeogq4KXnjYingtW+JCKvi/5Z1yVtOed\nlgOkPvEpXMI4bDOGRyEbvi/9xDr72ZzLjOqWUnzu6ft6kLRIc/XsmIr83WWkP1cu\n5whpRH1u4p5zxmH7j72qmiQpbCwuFm/P/5HVPt1oXU/9tPkW9mOk06bZuhskjYXz\nDOS9GUPtN5LkKUnzIJT+Q+v4yvyivdnb6uwa0XksVMn2CyCSvc+VtBWTVwYJXnNy\ns5rKozCrGaRwGDT9Ckb3jbORE8QlrhIn53LBQGt2PBuSV+Cs6vJA4tPkRVUHd4s0\nBFJXVNRy5JDmhENH06Q++SMk1owTxyt2MS6ZLsltFGdSbPmetOkxRpOiByOBFkvw\nCmX7/FDrr4e1DBPGxJieuW+GDnaYk6uMzx6+lkg4u9Cem7ki1NGecCtJ2T023X3F\npfXZM//K3W+jHReHuLd7Cf3Zxl4YMVPpbMIwW4h9Gy55BasqHzklVBWCbzF2F6Zu\n-----END RSA PRIVATE KEY-----\n", - "X002": "-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: AES-256-CBC,0C493ABD7874072CFE086BC4288D3F94\n\nPorOPwULzEmfS+pGFO08DsybzMobMZvl2EwnxWlRaNVcPEFAiornRp6mSVY6tAR/\n5o2z4gpLpObICDCUKTI1TAHhjD4ynJMAiNvqLNXjK+IkIWn7dS+JfxP5P9LGh95M\n3jQy+xxrdzQot0E8hgOq97CZnog7s1taC3G6EJUd/RjLaHmBii12f4GTySkJEvon\nScYZOA0XFyfJTWOPPe+wynxDQ1JbiqnhKFGWus7NjjjIGEIhiyXIah0cxWwoXPBI\nOJ6cHDrIIVE0hHRZHjFVx/0gwqpNp9lZlPDQFqI8nY4cG5zcgtaHOnGUbv9vweFg\niSWA8pdX0Vzb5fNCLcy78MoUhIkMwwHUIEqiQpSOL5XsumshJVqjX6GYl8Rhlppl\n2qhw/dWiMfcqhiYCdzKXM5lg3JViPLotDDqTIjzyQQUxKvCnYFzu7mhDeqPvVTXT\ntlWJJHy3RUVKHxsqnsI8tkhTIPg/XDRbIckFNtdv7kIwgovRh96nj+MbbyJJvGo7\nZ7PIdlAdnXMAGWr5RmfaG0FNaAO1X5HibU3t//8giZGRZXWaxeadNEX6+3XnhD2J\nysIv6TJRi2/lOb5rkV1N3ziiSENYsZ5sNVzFwOiaUNtvT08xHFq2ojW3Dci/jcsZ\nKy7+d0hV638s+XaxhVMIetHjWYHpML9KJoWeT9Pem+zaYmgpO3WsQcY+PonJDsUp\n1IdE182G1j+KICwgX9n5CcArULtbwYZ0pbyEwYLBornilfgh0gHNvizEQZFOUfTi\nTxG66mzS7jedLxmsjK11apP5YIStNrRb/OzWU/utrSSnrQlEMbOP6vt74gu7Qazr\nnurY8sLPNlyjk1MW7Dr4rW+27Zoj2QwHYskrMiJc3DoDyc7MElzHvRBMQx8riYJe\n8MuKff0WgX85Eva4CxDPdzD393bVze/UnUmjhZzheVguedhPRPdb27sVXcUa8/bA\nBQqO/oLaoMIvA05gzbVC1N8/Qcr9RkQrcTlc9j/LA16RnuYzdN8HAyiTGNL03RXv\nfXQUx6aXtS0QOpzxIH7cxbk4vo9hnAawxNbtjP5pbfHpKkJQ/bFkOAlXHPf2RS91\niXqD+A8aDQPQs8bxzIwm9zu8s3JHwQ7zBMt1VwcpwOmEUgvVsdmQ1MMAVfVRYSAx\nB7ZB/cu3ouB35A9VJkJLaocWSyrLy7tSGat/v+Fv9tuV/1fN2ddocKxwDaebYpvp\nBC/RWMiNACRDeRhdAcqTSMCzYxcT3LcALrimm6Qhf0d/OBmcOxD3jKTudfpR/ZqT\n7TrSOC5Uj9InNXam7X3AUJwnZETBj2f3xQVj1Iz+/A5JfPVgqzfAD8fCMrF1KZ+9\n1zagllrFZ968CZTUtF+qWY6hunzJS7d67axAyjDtNZ8goOPZ847KjWKsOoyQXxsl\nWFDX6ak2VpKmpgvu0wGhisIeqBR+XnBWoMBH2rajFoJuhu6Pp6+vsX8Z0dyj2qDg\ntJXcXRkOxxKEaDqN98wr2O5qTvJ6s65hnsiI/dKdiFjfh8F2CNc5+Dk6NBf/p/GE\necVL1r3v88ODGpmqE8PHVsC513Nfc4yDeJHnPUi3isQKQp4DGaDtbyFNYdauJjty\n-----END RSA PRIVATE KEY-----\n", - "E002": "-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: AES-256-CBC,ED90878F57A8030F0898882E0618B041\n\nuoM+K/B6YR7S4pga1oB18j263oLMuGO9WD59PGxemzR2zmi0zpRd6KFI+V+kqw5u\noInPWrG/CEGEDfYd+4DGxIKiJ/MF4TWPix+opEvLFCvrqiIkwtyE4bVHncH0+YIf\nhBEG2aLtjZ4m6J0BSLtPufoP5ovbG6Eb+sqMe3AryiQ8xm3HHxH7qSc/z+gg3CCQ\nfBib95IGKliOQylRVcRijNB4s7wZBBq2XhGnk++eOWPpFEhJbOSJ8HZ91EfPvH+C\niOa//5h53VuMTSVnE5SPuRENS1p4PpcxzG9Z7O+4wGU0ynrbJRXHqWGgEpnRX47W\n9BLM5OL+OEkX05Nnbk4T3LSyU5k7hf99LeEq6e15VDMajtSPXVkhazPJpcK54vVd\nReGDqLsxamEw950OqmunidDG8z95Htiy7feDuSLvcF1wkmvj343V9U+ZH6NJmmp9\nk8qQ7jWIFCq7rB0y6HpRhTm8OvODmlPXPNfIH8+Zuj4hYzBSpDtweUl/DoTES7e3\nKB1uVyRjHZw66W0riPqdgVN0eu9ZB8Liw5pBAKhqWob91EP02yX2wL6lSUxRSkuN\ntwrJoTiaVrm3cvaLqmG/UUolk7wxRLdnibh1NkJLvueIEUW0ZlzqrJU3BhS7rruM\n9aJhT84VPFWC7NoL/xtpAd3gpkjLKiundgLBHeAOroIsLe6h+IA16ssFVXyfcdAh\nQmPQCHbAK2kRwwyiSiwl53I3eqC/Uw8iQIaxffNYcb00xdMu8s0O7PWUNjPXJYho\nMEcCUTQXzUgr6mAVnYMq5uLKQ0TgvUIZdm9Fr3ixT+LOdT7cxZYBwp3i/XYmOGnu\nobwKbaEY2mqftdGgokn9mqKH4/wUosSQgMzqD3LF/bJWCyhqnRA/hPHpAheP/1ts\nOi+zfRh54laHdKE0JlOtKw5zkGuBIg1fTnoZ/A+reBEqaB5gQavXAo26XG2rL+Xj\nDBdcFmrn8T9HXa1U/MzIGNA2TgQkPII7q/sf3CL5cCJazi6YeIGe8m/vncRLz22J\nyIsNuN3trEDHPDvF1A8v2qHe+fUaTdW3oQ1+50uT2uZd+o98qiX3QSjLbjv9am7T\nwRqoj/aEyuqONxAurCZW/aGNflgDtyFZGRw/Fnou5Zv2lUk11iBZRkXTw0L0RVsJ\nlVFfm7fIwcOlMP6PGDq5jj0Az5UrfiFNwY/lUXbBmcjoeG3bNloMfzqbkcgg6io6\nuxx1kFEFQQlKU3830rrgm/lhiSrztFFKH4Mx4NxKTxsNN9QRQ7KO7xaRsS0qD0+J\n/j/v81bXVgrhl7Nmma33KUDL3PISlEQPRypHK6Rs5vAcV9lK7KbBdS1Pc9PsCA5E\nc7GZEcRhbsojTHds7+F/1ND1S2U8uh7bbDBEpNZ3x1kB/+3ToZ0POmBBbDEjAXit\n9RKuabmWMdxaMHE+CUEgOxLhZQnrLJug4JfS1iia/UgmQhd9YFogOrmnvuvtfyFc\nD0fdAniJuGwap0FITQPciuHe9JUKXjpdvXg99i0mHv26aIbyavWCcVm5d6IlvX1k\npoMXao6Ii7n0Q2Y/vCKYxcl28mflGqVFLXz58RWaZkKd5UQ89Hy4KX52X+svwLLE\n-----END RSA PRIVATE KEY-----\n" -} +{ + "A006": "-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: AES-256-CBC,0269A3DC0BC3E1152476CBA796708153\n\nA1im6eW/kNZ4VgSmhOvGKauI3H6pSjf/A/Dzoj+j9xGivA74Py1Yv7RMjRUSoaAX\npPvCzzV139ITI70Zo6PBn2ZVz5Lhc85DF/PFzLbjalRm2WqMTeiee4i70GXfQqEm\noEPWCQlpNQAymYFGJdoz95jzxR9bW8+6gJq1ljSQMI1jPLeV6Ca8z7Q3SD3eUYDp\nqkKPLc+6oP0rvCIfAsjbH2203okrSL3QAsGs/UKvWg1MfF8G0anYw14WX2FLTT/L\nYRNLEfaMPGYjEAnqVHJRhSj+YZBFpPOSkaBdMwEvjrXENPwJ2xeJocrXeOban8yL\nmqdsNP9lhhnHxyaB0gLcprztabvHwdfs7rbnp1uLALxXLNQ8dC5u/IeUIQ6hGIpy\nX8FK+Ljpx3nCbybznnqigX3PL/n8m4E5jRhwuJJmKkqdlCS99lETAZVvCW+Vq7k0\nq/mg/8yN5eHUA/uN5VnxADvn1wVVilmSi5Ym3m5ZuR9XbQU9f7BqmxlU7xk09EqC\nPp/lFdo7XPqpjvXv4+TJ7y8tMP1JJ5nja8iBEFCramnvUBOBNpUiQbH0Ig4thGck\nnbKj7WQv0FjckbvBoPgUgc381DUI6JaCqisos+b0NlC8kU3D5w1EpIyd9owgnNtK\nnY8NwjFm3eGegbuST/XoANSLGhxPhiBoQi7EK5q7Ugp9WN89NiavQxpnMrjUMNNh\nnYPgsrzrtGIsg8Bf1z8EFx2AF5GZqxwofeiXr76HlgykEj8GV4vKkGX/gO6FtJRD\n43jpUVxqS/syV1HhNrqcqcYi930Rls9P7+JmSBNxDwy5xHluv7WKq/5R26dLdIyO\nkNL6DFe4+07kvx83XFIBmZByHWhTk6e5XUSAQbehcU7+zYPtdnX4iPYPhcEvqyL7\n5ZaHuktvhXpUXM5Q8VVtuoALCl1flpWCzNXY2E+y4Ufk9QHTJYmgLolLxl7ldXgY\nMmiZQW+yAQuaeNc2wmmrI2+XwDfQOJixC6MQ1Gdj+zumZ1WrH26hKgmvXUsl/LHZ\nZCpkV+1C2tUYzjRv7ExrcFdOn9tNFttjQIA+Fgm0NKMVQVFkcPuuHKc2UnpDcnSA\nXxFHuB0iI3dwcJkkk7X31gY6I6T2g4Zqaeogq4KXnjYingtW+JCKvi/5Z1yVtOed\nlgOkPvEpXMI4bDOGRyEbvi/9xDr72ZzLjOqWUnzu6ft6kLRIc/XsmIr83WWkP1cu\n5whpRH1u4p5zxmH7j72qmiQpbCwuFm/P/5HVPt1oXU/9tPkW9mOk06bZuhskjYXz\nDOS9GUPtN5LkKUnzIJT+Q+v4yvyivdnb6uwa0XksVMn2CyCSvc+VtBWTVwYJXnNy\ns5rKozCrGaRwGDT9Ckb3jbORE8QlrhIn53LBQGt2PBuSV+Cs6vJA4tPkRVUHd4s0\nBFJXVNRy5JDmhENH06Q++SMk1owTxyt2MS6ZLsltFGdSbPmetOkxRpOiByOBFkvw\nCmX7/FDrr4e1DBPGxJieuW+GDnaYk6uMzx6+lkg4u9Cem7ki1NGecCtJ2T023X3F\npfXZM//K3W+jHReHuLd7Cf3Zxl4YMVPpbMIwW4h9Gy55BasqHzklVBWCbzF2F6Zu\n-----END RSA PRIVATE KEY-----\n", + "X002": "-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: AES-256-CBC,0C493ABD7874072CFE086BC4288D3F94\n\nPorOPwULzEmfS+pGFO08DsybzMobMZvl2EwnxWlRaNVcPEFAiornRp6mSVY6tAR/\n5o2z4gpLpObICDCUKTI1TAHhjD4ynJMAiNvqLNXjK+IkIWn7dS+JfxP5P9LGh95M\n3jQy+xxrdzQot0E8hgOq97CZnog7s1taC3G6EJUd/RjLaHmBii12f4GTySkJEvon\nScYZOA0XFyfJTWOPPe+wynxDQ1JbiqnhKFGWus7NjjjIGEIhiyXIah0cxWwoXPBI\nOJ6cHDrIIVE0hHRZHjFVx/0gwqpNp9lZlPDQFqI8nY4cG5zcgtaHOnGUbv9vweFg\niSWA8pdX0Vzb5fNCLcy78MoUhIkMwwHUIEqiQpSOL5XsumshJVqjX6GYl8Rhlppl\n2qhw/dWiMfcqhiYCdzKXM5lg3JViPLotDDqTIjzyQQUxKvCnYFzu7mhDeqPvVTXT\ntlWJJHy3RUVKHxsqnsI8tkhTIPg/XDRbIckFNtdv7kIwgovRh96nj+MbbyJJvGo7\nZ7PIdlAdnXMAGWr5RmfaG0FNaAO1X5HibU3t//8giZGRZXWaxeadNEX6+3XnhD2J\nysIv6TJRi2/lOb5rkV1N3ziiSENYsZ5sNVzFwOiaUNtvT08xHFq2ojW3Dci/jcsZ\nKy7+d0hV638s+XaxhVMIetHjWYHpML9KJoWeT9Pem+zaYmgpO3WsQcY+PonJDsUp\n1IdE182G1j+KICwgX9n5CcArULtbwYZ0pbyEwYLBornilfgh0gHNvizEQZFOUfTi\nTxG66mzS7jedLxmsjK11apP5YIStNrRb/OzWU/utrSSnrQlEMbOP6vt74gu7Qazr\nnurY8sLPNlyjk1MW7Dr4rW+27Zoj2QwHYskrMiJc3DoDyc7MElzHvRBMQx8riYJe\n8MuKff0WgX85Eva4CxDPdzD393bVze/UnUmjhZzheVguedhPRPdb27sVXcUa8/bA\nBQqO/oLaoMIvA05gzbVC1N8/Qcr9RkQrcTlc9j/LA16RnuYzdN8HAyiTGNL03RXv\nfXQUx6aXtS0QOpzxIH7cxbk4vo9hnAawxNbtjP5pbfHpKkJQ/bFkOAlXHPf2RS91\niXqD+A8aDQPQs8bxzIwm9zu8s3JHwQ7zBMt1VwcpwOmEUgvVsdmQ1MMAVfVRYSAx\nB7ZB/cu3ouB35A9VJkJLaocWSyrLy7tSGat/v+Fv9tuV/1fN2ddocKxwDaebYpvp\nBC/RWMiNACRDeRhdAcqTSMCzYxcT3LcALrimm6Qhf0d/OBmcOxD3jKTudfpR/ZqT\n7TrSOC5Uj9InNXam7X3AUJwnZETBj2f3xQVj1Iz+/A5JfPVgqzfAD8fCMrF1KZ+9\n1zagllrFZ968CZTUtF+qWY6hunzJS7d67axAyjDtNZ8goOPZ847KjWKsOoyQXxsl\nWFDX6ak2VpKmpgvu0wGhisIeqBR+XnBWoMBH2rajFoJuhu6Pp6+vsX8Z0dyj2qDg\ntJXcXRkOxxKEaDqN98wr2O5qTvJ6s65hnsiI/dKdiFjfh8F2CNc5+Dk6NBf/p/GE\necVL1r3v88ODGpmqE8PHVsC513Nfc4yDeJHnPUi3isQKQp4DGaDtbyFNYdauJjty\n-----END RSA PRIVATE KEY-----\n", + "E002": "-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: AES-256-CBC,ED90878F57A8030F0898882E0618B041\n\nuoM+K/B6YR7S4pga1oB18j263oLMuGO9WD59PGxemzR2zmi0zpRd6KFI+V+kqw5u\noInPWrG/CEGEDfYd+4DGxIKiJ/MF4TWPix+opEvLFCvrqiIkwtyE4bVHncH0+YIf\nhBEG2aLtjZ4m6J0BSLtPufoP5ovbG6Eb+sqMe3AryiQ8xm3HHxH7qSc/z+gg3CCQ\nfBib95IGKliOQylRVcRijNB4s7wZBBq2XhGnk++eOWPpFEhJbOSJ8HZ91EfPvH+C\niOa//5h53VuMTSVnE5SPuRENS1p4PpcxzG9Z7O+4wGU0ynrbJRXHqWGgEpnRX47W\n9BLM5OL+OEkX05Nnbk4T3LSyU5k7hf99LeEq6e15VDMajtSPXVkhazPJpcK54vVd\nReGDqLsxamEw950OqmunidDG8z95Htiy7feDuSLvcF1wkmvj343V9U+ZH6NJmmp9\nk8qQ7jWIFCq7rB0y6HpRhTm8OvODmlPXPNfIH8+Zuj4hYzBSpDtweUl/DoTES7e3\nKB1uVyRjHZw66W0riPqdgVN0eu9ZB8Liw5pBAKhqWob91EP02yX2wL6lSUxRSkuN\ntwrJoTiaVrm3cvaLqmG/UUolk7wxRLdnibh1NkJLvueIEUW0ZlzqrJU3BhS7rruM\n9aJhT84VPFWC7NoL/xtpAd3gpkjLKiundgLBHeAOroIsLe6h+IA16ssFVXyfcdAh\nQmPQCHbAK2kRwwyiSiwl53I3eqC/Uw8iQIaxffNYcb00xdMu8s0O7PWUNjPXJYho\nMEcCUTQXzUgr6mAVnYMq5uLKQ0TgvUIZdm9Fr3ixT+LOdT7cxZYBwp3i/XYmOGnu\nobwKbaEY2mqftdGgokn9mqKH4/wUosSQgMzqD3LF/bJWCyhqnRA/hPHpAheP/1ts\nOi+zfRh54laHdKE0JlOtKw5zkGuBIg1fTnoZ/A+reBEqaB5gQavXAo26XG2rL+Xj\nDBdcFmrn8T9HXa1U/MzIGNA2TgQkPII7q/sf3CL5cCJazi6YeIGe8m/vncRLz22J\nyIsNuN3trEDHPDvF1A8v2qHe+fUaTdW3oQ1+50uT2uZd+o98qiX3QSjLbjv9am7T\nwRqoj/aEyuqONxAurCZW/aGNflgDtyFZGRw/Fnou5Zv2lUk11iBZRkXTw0L0RVsJ\nlVFfm7fIwcOlMP6PGDq5jj0Az5UrfiFNwY/lUXbBmcjoeG3bNloMfzqbkcgg6io6\nuxx1kFEFQQlKU3830rrgm/lhiSrztFFKH4Mx4NxKTxsNN9QRQ7KO7xaRsS0qD0+J\n/j/v81bXVgrhl7Nmma33KUDL3PISlEQPRypHK6Rs5vAcV9lK7KbBdS1Pc9PsCA5E\nc7GZEcRhbsojTHds7+F/1ND1S2U8uh7bbDBEpNZ3x1kB/+3ToZ0POmBBbDEjAXit\n9RKuabmWMdxaMHE+CUEgOxLhZQnrLJug4JfS1iia/UgmQhd9YFogOrmnvuvtfyFc\nD0fdAniJuGwap0FITQPciuHe9JUKXjpdvXg99i0mHv26aIbyavWCcVm5d6IlvX1k\npoMXao6Ii7n0Q2Y/vCKYxcl28mflGqVFLXz58RWaZkKd5UQ89Hy4KX52X+svwLLE\n-----END RSA PRIVATE KEY-----\n" +}