Created
July 18, 2018 14:54
-
-
Save mwleinad/a47f9d469383d46c91fe22e7351f3845 to your computer and use it in GitHub Desktop.
Salesloft Payload decryption in PHP
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Modules\Integrations\Salesloft\Services; | |
use Jose\Component\Core\AlgorithmManager; | |
use Jose\Component\Encryption\Algorithm\KeyEncryption\A256GCMKW; | |
use Jose\Component\Encryption\Algorithm\ContentEncryption\A256GCM; | |
use Jose\Component\Encryption\Compression\CompressionMethodManager; | |
use Jose\Component\Encryption\Compression\Deflate; | |
use Jose\Component\Encryption\JWEDecrypter; | |
use Jose\Component\Core\Converter\StandardConverter; | |
use Jose\Component\Core\JWK; | |
use Jose\Component\Encryption\Serializer\JWESerializerManager; | |
use Jose\Component\Encryption\Serializer\CompactSerializer; | |
use Base64Url\Base64Url; | |
use Exception; | |
use Log; | |
/** | |
* Class SalesloftPayloadEncryptionService | |
* @package Integrations\Salesloft\Services | |
*/ | |
class SalesloftPayloadService { | |
public function decrypt($secret, $payload) { | |
try { | |
$jweDecrypter = $this->getDecrypter(); | |
$jwk = $this->getJwk($secret); | |
$jwe = $this->getJwe($payload); | |
$jweDecrypter->decryptUsingKey($jwe, $jwk, 0); | |
$decryptedPayload = json_decode($jwe->getPayload()); | |
return $decryptedPayload; | |
} catch(Exception $e) { | |
Log::info(config('salesloft.name').$e->getMessage()); | |
return null; | |
} | |
} | |
private function getDecrypter() { | |
$keyEncryptionAlgorithmManager = AlgorithmManager::create([ | |
new A256GCMKW() | |
]); | |
$contentEncryptionAlgorithmManager = AlgorithmManager::create([ | |
new A256GCM() | |
]); | |
$compressionMethodManager = CompressionMethodManager::create([ | |
new Deflate(), | |
]); | |
return new JWEDecrypter( | |
$keyEncryptionAlgorithmManager, | |
$contentEncryptionAlgorithmManager, | |
$compressionMethodManager | |
); | |
} | |
private function getJwk($secret) { | |
$key = Base64Url::encode(hash('sha256', $secret, true)); | |
return JWK::create([ | |
'kty' => 'oct', | |
'k' => $key, | |
]); | |
} | |
private function getJwe($payload) { | |
$jsonConverter = new StandardConverter(); | |
// The serializer manager. We only use the JWE Compact Serialization Mode. | |
$serializerManager = JWESerializerManager::create([ | |
new CompactSerializer($jsonConverter), | |
]); | |
// We try to load the token. | |
return $serializerManager->unserialize($payload); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment