def test_wrong_key(self, bot): short_key = b"-----BEGIN RSA PRIVATE KEY-----\r\nMIIBOQIBAAJBAKU+OZ2jJm7sCA/ec4gngNZhXYPu+DZ/TAwSMl0W7vAPXAsLplBk\r\nO8l6IBHx8N0ZC4Bc65mO3b2G8YAzqndyqH8CAwEAAQJAWOx3jQFzeVXDsOaBPdAk\r\nYTncXVeIc6tlfUl9mOLyinSbRNCy1XicOiOZFgH1rRKOGIC1235QmqxFvdecySoY\r\nwQIhAOFeGgeX9CrEPuSsd9+kqUcA2avCwqdQgSdy2qggRFyJAiEAu7QHT8JQSkHU\r\nDELfzrzc24AhjyG0z1DpGZArM8COascCIDK42SboXj3Z2UXiQ0CEcMzYNiVgOisq\r\nBUd5pBi+2mPxAiAM5Z7G/Sv1HjbKrOGh29o0/sXPhtpckEuj5QMC6E0gywIgFY6S\r\nNjwrAA+cMmsgY0O2fAzEKkDc5YiFsiXaGaSS4eA=\r\n-----END RSA PRIVATE KEY-----" b = Bot(bot.token, private_key=short_key) passport_data = PassportData.de_json(RAW_PASSPORT_DATA, bot=b) with pytest.raises(TelegramDecryptionError): assert passport_data.decrypted_data wrong_key = b"-----BEGIN RSA PRIVATE KEY-----\r\nMIIEogIBAAKCAQB4qCFltuvHakZze86TUweU7E/SB3VLGEHAe7GJlBmrou9SSWsL\r\nH7E++157X6UqWFl54LOE9MeHZnoW7rZ+DxLKhk6NwAHTxXPnvw4CZlvUPC3OFxg3\r\nhEmNen6ojSM4sl4kYUIa7F+Q5uMEYaboxoBen9mbj4zzMGsG4aY/xBOb2ewrXQyL\r\nRh//tk1Px4ago+lUPisAvQVecz7/6KU4Xj4Lpv2z20f3cHlZX6bb7HlE1vixCMOf\r\nxvfC5SkWEGZMR/ZoWQUsoDkrDSITF/S3GtLfg083TgtCKaOF3mCT27sJ1og77npP\r\n0cH/qdlbdoFtdrRj3PvBpaj/TtXRhmdGcJBxAgMBAAECggEAYSq1Sp6XHo8dkV8B\r\nK2/QSURNu8y5zvIH8aUrgqo8Shb7OH9bryekrB3vJtgNwR5JYHdu2wHttcL3S4SO\r\nftJQxbyHgmxAjHUVNGqOM6yPA0o7cR70J7FnMoKVgdO3q68pVY7ll50IET9/T0X9\r\nDrTdKFb+/eILFsXFS1NpeSzExdsKq3zM0sP/vlJHHYVTmZDGaGEvny/eLAS+KAfG\r\nrKP96DeO4C/peXEJzALZ/mG1ReBB05Qp9Dx1xEC20yreRk5MnnBA5oiHVG5ZLOl9\r\nEEHINidqN+TMNSkxv67xMfQ6utNu5IpbklKv/4wqQOJOO50HZ+qBtSurTN573dky\r\nzslbCQKBgQDHDUBYyKN/v69VLmvNVcxTgrOcrdbqAfefJXb9C3dVXhS8/oRkCRU/\r\ndzxYWNT7hmQyWUKor/izh68rZ/M+bsTnlaa7IdAgyChzTfcZL/2pxG9pq05GF1Q4\r\nBSJ896ZEe3jEhbpJXRlWYvz7455svlxR0H8FooCTddTmkU3nsQSx0wKBgQCbLSa4\r\nyZs2QVstQQerNjxAtLi0IvV8cJkuvFoNC2Q21oqQc7BYU7NJL7uwriprZr5nwkCQ\r\nOFQXi4N3uqimNxuSng31ETfjFZPp+pjb8jf7Sce7cqU66xxR+anUzVZqBG1CJShx\r\nVxN7cWN33UZvIH34gA2Ax6AXNnJG42B5Gn1GKwKBgQCZ/oh/p4nGNXfiAK3qB6yy\r\nFvX6CwuvsqHt/8AUeKBz7PtCU+38roI/vXF0MBVmGky+HwxREQLpcdl1TVCERpIT\r\nUFXThI9OLUwOGI1IcTZf9tby+1LtKvM++8n4wGdjp9qAv6ylQV9u09pAzZItMwCd\r\nUx5SL6wlaQ2y60tIKk0lfQKBgBJS+56YmA6JGzY11qz+I5FUhfcnpauDNGOTdGLT\r\n9IqRPR2fu7RCdgpva4+KkZHLOTLReoRNUojRPb4WubGfEk93AJju5pWXR7c6k3Bt\r\novS2mrJk8GQLvXVksQxjDxBH44sLDkKMEM3j7uYJqDaZNKbyoCWT7TCwikAau5qx\r\naRevAoGAAKZV705dvrpJuyoHFZ66luANlrAwG/vNf6Q4mBEXB7guqMkokCsSkjqR\r\nhsD79E6q06zA0QzkLCavbCn5kMmDS/AbA80+B7El92iIN6d3jRdiNZiewkhlWhEG\r\nm4N0gQRfIu+rUjsS/4xk8UuQUT/Ossjn/hExi7ejpKdCc7N++bc=\r\n-----END RSA PRIVATE KEY-----" b = Bot(bot.token, private_key=wrong_key) passport_data = PassportData.de_json(RAW_PASSPORT_DATA, bot=b) with pytest.raises(TelegramDecryptionError): assert passport_data.decrypted_data
def test_wrong_hash(self, bot): data = deepcopy(RAW_PASSPORT_DATA) data["credentials"][ "hash"] = "bm90Y29ycmVjdGhhc2g=" # Not correct hash passport_data = PassportData.de_json(data, bot=bot) with pytest.raises(PassportDecryptionError): assert passport_data.decrypted_data
def test_wrong_hash(self, bot): data = deepcopy(RAW_PASSPORT_DATA) data['credentials'][ 'hash'] = 'bm90Y29ycmVjdGhhc2g=' # Not correct hash passport_data = PassportData.de_json(data, bot=bot) with pytest.raises(TelegramDecryptionError): assert passport_data.decrypted_data
def test_all_types(self, passport_data, bot, all_passport_data): credentials = passport_data.decrypted_credentials.to_dict() # Copy credentials from other types to all types so we can decrypt everything sd = credentials['secure_data'] credentials['secure_data'] = { 'personal_details': sd['personal_details'].copy(), 'passport': sd['driver_license'].copy(), 'internal_passport': sd['driver_license'].copy(), 'driver_license': sd['driver_license'].copy(), 'identity_card': sd['driver_license'].copy(), 'address': sd['address'].copy(), 'utility_bill': sd['utility_bill'].copy(), 'bank_statement': sd['utility_bill'].copy(), 'rental_agreement': sd['utility_bill'].copy(), 'passport_registration': sd['utility_bill'].copy(), 'temporary_registration': sd['utility_bill'].copy(), } new = PassportData.de_json( { 'data': all_passport_data, # Replaced below 'credentials': { 'data': 'data', 'hash': 'hash', 'secret': 'secret' } }, bot=bot) new.credentials._decrypted_data = Credentials.de_json(credentials, bot) assert isinstance(new, PassportData) assert new.decrypted_data
def de_json(cls, data, bot): if not data: return None data = super(Message, cls).de_json(data, bot) data['from_user'] = User.de_json(data.get('from'), bot) data['date'] = from_timestamp(data['date']) data['chat'] = Chat.de_json(data.get('chat'), bot) data['entities'] = MessageEntity.de_list(data.get('entities'), bot) data['caption_entities'] = MessageEntity.de_list(data.get('caption_entities'), bot) data['forward_from'] = User.de_json(data.get('forward_from'), bot) data['forward_from_chat'] = Chat.de_json(data.get('forward_from_chat'), bot) data['forward_date'] = from_timestamp(data.get('forward_date')) data['reply_to_message'] = Message.de_json(data.get('reply_to_message'), bot) data['edit_date'] = from_timestamp(data.get('edit_date')) data['audio'] = Audio.de_json(data.get('audio'), bot) data['document'] = Document.de_json(data.get('document'), bot) data['animation'] = Animation.de_json(data.get('animation'), bot) data['game'] = Game.de_json(data.get('game'), bot) data['photo'] = PhotoSize.de_list(data.get('photo'), bot) data['sticker'] = Sticker.de_json(data.get('sticker'), bot) data['video'] = Video.de_json(data.get('video'), bot) data['voice'] = Voice.de_json(data.get('voice'), bot) data['video_note'] = VideoNote.de_json(data.get('video_note'), bot) data['contact'] = Contact.de_json(data.get('contact'), bot) data['location'] = Location.de_json(data.get('location'), bot) data['venue'] = Venue.de_json(data.get('venue'), bot) data['new_chat_members'] = User.de_list(data.get('new_chat_members'), bot) data['left_chat_member'] = User.de_json(data.get('left_chat_member'), bot) data['new_chat_photo'] = PhotoSize.de_list(data.get('new_chat_photo'), bot) data['pinned_message'] = Message.de_json(data.get('pinned_message'), bot) data['invoice'] = Invoice.de_json(data.get('invoice'), bot) data['successful_payment'] = SuccessfulPayment.de_json(data.get('successful_payment'), bot) data['passport_data'] = PassportData.de_json(data.get('passport_data'), bot) return cls(bot=bot, **data)
def test_all_types(self, passport_data, bot, all_passport_data): credentials = passport_data.decrypted_credentials.to_dict() # Copy credentials from other types to all types so we can decrypt everything sd = credentials["secure_data"] credentials["secure_data"] = { "personal_details": sd["personal_details"].copy(), "passport": sd["driver_license"].copy(), "internal_passport": sd["driver_license"].copy(), "driver_license": sd["driver_license"].copy(), "identity_card": sd["driver_license"].copy(), "address": sd["address"].copy(), "utility_bill": sd["utility_bill"].copy(), "bank_statement": sd["utility_bill"].copy(), "rental_agreement": sd["utility_bill"].copy(), "passport_registration": sd["utility_bill"].copy(), "temporary_registration": sd["utility_bill"].copy(), } new = PassportData.de_json( { "data": all_passport_data, # Replaced below "credentials": { "data": "data", "hash": "hash", "secret": "secret" }, }, bot=bot, ) new.credentials._decrypted_data = Credentials.de_json(credentials, bot) assert isinstance(new, PassportData) assert new.decrypted_data
def test_de_json_and_to_dict(self, bot): passport_data = PassportData.de_json(RAW_PASSPORT_DATA, bot) assert passport_data.to_dict() == RAW_PASSPORT_DATA assert passport_data.decrypted_data assert passport_data.to_dict() == RAW_PASSPORT_DATA
def test_passport_data_okay_with_non_crypto_bot(self, bot): b = Bot(bot.token) assert PassportData.de_json(RAW_PASSPORT_DATA, bot=b)
def passport_data(bot): return PassportData.de_json(RAW_PASSPORT_DATA, bot=bot)
{ 'connected_website': 'http://example.com/' }, { 'forward_signature': 'some_forward_sign' }, { 'author_signature': 'some_author_sign' }, { 'photo': [PhotoSize('photo_id', 'unique_id', 50, 50)], 'caption': 'photo_file', 'media_group_id': 1234443322222, }, { 'passport_data': PassportData.de_json(RAW_PASSPORT_DATA, None) }, { 'poll': Poll( id='abc', question='What is this?', options=[ PollOption(text='a', voter_count=1), PollOption(text='b', voter_count=2) ], is_closed=False, total_voter_count=0, is_anonymous=False, type=Poll.REGULAR, allows_multiple_answers=True,
async def test_passport_data_okay_with_non_crypto_bot(self, bot): async with make_bot(token=bot.token) as b: assert PassportData.de_json(RAW_PASSPORT_DATA, bot=b)