Exemple #1
0
 function KDF()
 {
     $debug = $this->debug;
     if ($this->decryptorTest) {
         $debug = false;
     }
     // KDF constants
     $hmacKey = unhexlify("3b27bdc9e00fd5995d60a1ee0aa057a9f1416ed085b21762110f1c2204ddf80ec8caab003070fd43baafdde27aeb3194ece5c1adff406a51185eb5dd7300c058");
     $hmacData1 = unhexlify("d1ba6371c56ce6b498f1718228b0aa112f24a47bcad757a1d0b3f4c2b8bd637cb8080d9c8e7855b36a85722a60552a6c00");
     $hmacData2 = unhexlify("d1ba6371c56ce6b498f1718228b0aa112f24a47bcad757a1d0b3f4c2b8bd637cb8080d9c8e7855b36a85722a60552a6c01");
     // Decrypt packet salt
     if ($this->ecmID !== $this->prevEcmID) {
         $saltHmacKey = hash_hmac("sha1", $this->sessionKey . $this->packetIV, $hmacKey, true);
         LogDebug("SaltHmacKey  : " . hexlify($saltHmacKey), $debug);
         $this->saltAesKey = substr(hash_hmac("sha1", $hmacData1, $saltHmacKey, true), 0, 16);
         LogDebug("SaltAesKey   : " . hexlify($this->saltAesKey), $debug);
         $this->prevEcmID = $this->ecmID;
     }
     mcrypt_generic_init($this->aes_cbc, $this->saltAesKey, $this->packetIV);
     LogDebug("EncryptedSalt: " . hexlify($this->packetSalt), $debug);
     $decryptedSalt = mdecrypt_generic($this->aes_cbc, $this->packetSalt);
     LogDebug("DecryptedSalt: " . hexlify($decryptedSalt), $debug);
     mcrypt_generic_deinit($this->aes_cbc);
     $this->decryptBytes = ReadInt32($decryptedSalt, 0);
     LogDebug("DecryptBytes : " . $this->decryptBytes, $debug);
     $decryptedSalt = substr($decryptedSalt, 4, 16);
     LogDebug("DecryptedSalt: " . hexlify($decryptedSalt), $debug);
     // Generate final packet decryption key
     $finalHmacKey = hash_hmac("sha1", $decryptedSalt, $hmacKey, true);
     LogDebug("FinalHmacKey : " . hexlify($finalHmacKey), $debug);
     $this->packetKey = substr(hash_hmac("sha1", $hmacData2, $finalHmacKey, true), 0, 16);
     LogDebug("PacketKey    : " . hexlify($this->packetKey), $debug);
 }
Exemple #2
0
 public static function generateToken($url)
 {
     $url = str_replace('http://redir.atmcdn.pl/http/', '', $url);
     $SecretKey = 'AB9843DSAIUDHW87Y3874Q903409QEWA';
     $iv = 'ab5ef983454a21bd';
     $KeyStr = '0f12f35aa0c542e45926c43a39ee2a7b38ec2f26975c00a30e1292f7e137e120e5ae9d1cfe10dd682834e3754efc1733';
     $salt = '';
     for ($i = 0; $i < 16; $i++) {
         $salt .= chr(mt_rand(ord('a'), ord('z')));
     }
     $salt = hexlify($salt);
     $expire = 3600000 + time() * 1000 - 946684800000;
     $td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv);
     mcrypt_generic_init($td, $SecretKey, $iv);
     $decrypted = mdecrypt_generic($td, unhexlify($KeyStr));
     mcrypt_generic_deinit($td);
     mcrypt_module_close($td);
     $key = utf8_encode(trim($decrypted));
     $unencryptedToken = "name=" . $url . "&expire=" . $expire . "";
     $pad = '';
     $xx = 16 - strlen($unencryptedToken) % 16;
     for ($a = 1; $a <= $xx; $a++) {
         $pad .= chr(16 - strlen($unencryptedToken) % 16);
     }
     $unencryptedToken = $unencryptedToken . $pad;
     $td = mcrypt_module_open('rijndael-128', '', 'cbc', unhexlify($salt));
     mcrypt_generic_init($td, unhexlify($key), unhexlify($salt));
     $encrypted = mcrypt_generic($td, $unencryptedToken);
     mcrypt_generic_deinit($td);
     mcrypt_module_close($td);
     $token = strtoupper(hexlify($encrypted));
     return "http://redir.atmcdn.pl/http/{$url}?salt={$salt}&token={$token}";
 }