Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def serialize(self):
jid = self.node + "@talk.kik.com"
jid_with_resource = jid + "/CAN" + (self.device_id_override if self.device_id_override else device_id)
timestamp = str(CryptographicUtils.make_kik_timestamp())
sid = CryptographicUtils.make_kik_uuid()
# some super secret cryptographic stuff
private_key_pem = "-----BEGIN RSA PRIVATE KEY-----\nMIIBPAIBAAJBANEWUEINqV1KNG7Yie9GSM8t75ZvdTeqT7kOF40kvDHIp" \
"/C3tX2bcNgLTnGFs8yA2m2p7hKoFLoxh64vZx5fZykCAwEAAQJAT" \
"/hC1iC3iHDbQRIdH6E4M9WT72vN326Kc3MKWveT603sUAWFlaEa5T80GBiP/qXt9PaDoJWcdKHr7RqDq" \
"+8noQIhAPh5haTSGu0MFs0YiLRLqirJWXa4QPm4W5nz5VGKXaKtAiEA12tpUlkyxJBuuKCykIQbiUXHEwzFYbMHK5E" \
"/uGkFoe0CIQC6uYgHPqVhcm5IHqHM6/erQ7jpkLmzcCnWXgT87ABF2QIhAIzrfyKXp1ZfBY9R0H4pbboHI4uatySKc" \
"Q5XHlAMo9qhAiEA43zuIMknJSGwa2zLt/3FmVnuCInD6Oun5dbcYnqraJo=\n-----END RSA PRIVATE KEY----- "
private_key = rsa.PrivateKey.load_pkcs1(private_key_pem, format='PEM')
signature = rsa.sign("{}:{}:{}:{}".format(jid, kik_version, timestamp, sid).encode(), private_key, 'SHA-256')
signature = base64.b64encode(signature, '-_'.encode()).decode()[:-2]
hmac_data = timestamp + ":" + jid
hmac_secret_key = CryptographicUtils.build_hmac_key()
cv = binascii.hexlify(hmac.new(hmac_secret_key, hmac_data.encode(), hashlib.sha1).digest()).decode()
password_key = CryptographicUtils.key_from_password(self.username, self.password)
the_map = {'from': jid_with_resource, 'to': 'talk.kik.com', 'p': password_key, 'cv': cv, 'v': kik_version,
'sid': sid, 'n': '1', 'conn': 'WIFI', 'ts': timestamp, 'lang': 'en_US', 'signed': signature}
packet = CryptographicUtils.make_connection_payload(CryptographicUtils.sort_kik_map(the_map)).encode()
return packet
def read_key(self):
with open(self.key_path, 'rb') as f:
admin_privkey = rsa.PrivateKey.load_pkcs1(f.read())
return admin_privkey
"""
This handler gets called after the GetPasswordData command has been
executed. It is called with the and the ``parsed`` data. It checks to
see if a private launch key was specified on the command. If it was,
it tries to use that private key to decrypt the password data and
replace it in the returned data dictionary.
"""
if self._key_path is not None:
logger.debug("Decrypting password data using: %s", self._key_path)
value = parsed.get('PasswordData')
if not value:
return
try:
with open(self._key_path) as pk_file:
pk_contents = pk_file.read()
private_key = rsa.PrivateKey.load_pkcs1(six.b(pk_contents))
value = base64.b64decode(value)
value = rsa.decrypt(value, private_key)
logger.debug(parsed)
parsed['PasswordData'] = value.decode('utf-8')
logger.debug(parsed)
except Exception:
logger.debug('Unable to decrypt PasswordData', exc_info=True)
msg = ('Unable to decrypt password data using '
'provided private key file.')
raise ValueError(msg)
hmac.new(
key, contents, hmac_algorithm
).digest()
).strip("=")
modified_jwt = contents + "." +signature
# JWT can't sign non-JSON payloads. WTF. This block is for non-JSON payloads.
elif algorithm.startswith("RS") and payload_is_string:
if algorithm == "RS256":
rsa_algorithm = "SHA-256"
elif algorithm == "RS384":
rsa_algorithm = "SHA-384"
else:
rsa_algorithm = "SHA-512"
privkey = rsa.PrivateKey.load_pkcs1(key)
signature = rsa.sign(contents,privkey,rsa_algorithm)
signature = base64.b64encode(signature).encode('utf-8').replace("=", "")
modified_jwt = contents + "." + signature
else:
# Use pyjwt when using asymmetric alg
if algorithm == "none":
key = ""
modified_jwt = jwt.encode(payload_dict,key,algorithm=algorithm,headers=header_dict)
else:
modified_jwt = contents + "." + signature
return self._helpers.stringToBytes(modified_jwt)
def Creat_Return_Token(self, token_crypto):
tag = bytes("NQZ",encoding="utf8")
# with open('../project/Helper/pubkey.pem','r') as f:
# pubkey = rsa.PublicKey.load_pkcs1(f.read().encode())
with open('../project/Helper/privkey.pem','r') as f:
privkey = rsa.PrivateKey.load_pkcs1(f.read().encode())
token_message = token_crypto
# token_crypto = rsa.encrypt(token_message.encode(), pubkey)
# 不进行公钥加密
# 直接反馈加上标准内容的信息
token_crypto = bytes(token_crypto, encoding='utf8') + tag
signature = rsa.sign(token_message.encode(), privkey, 'SHA-1')
print("token message encode = ", token_message.encode())
# 利用私钥对信息进行签名
signature = base64.encodestring(signature)
return (token_crypto, signature)
# 返回生成的token 和 sign 签名值
def sign_with_rsa2(private_key, sign_content, charset):
if PYTHON_VERSION_3:
sign_content = sign_content.encode(charset)
private_key = fill_private_key_marker(private_key)
signature = rsa.sign(sign_content, rsa.PrivateKey.load_pkcs1(private_key, format='PEM'), 'SHA-256')
sign = base64.b64encode(signature)
if PYTHON_VERSION_3:
sign = str(sign, encoding=charset)
return sign
def sign_with_rsa(private_key, sign_content, charset):
if PYTHON_VERSION_3:
sign_content = sign_content.encode(charset)
private_key = fill_private_key_marker(private_key)
signature = rsa.sign(sign_content, rsa.PrivateKey.load_pkcs1(private_key, format='PEM'), 'SHA-1')
sign = base64.b64encode(signature)
if PYTHON_VERSION_3:
sign = str(sign, encoding=charset)
return sign
def load_key(key_str):
if "-----BEGIN RSA PRIVATE KEY-----" in key_str:
return rsa.PrivateKey.load_pkcs1(key_str)
else:
return rsa.PublicKey.load_pkcs1(key_str)