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_equality(self, passport_data):
        a = PassportData(passport_data.data, passport_data.credentials)
        b = PassportData(passport_data.data, passport_data.credentials)

        assert a == b
        assert hash(a) == hash(b)
        assert a is not b

        passport_data.credentials.hash = 'NOTAPROPERHASH'
        c = PassportData(passport_data.data, passport_data.credentials)

        assert a != c
        assert hash(a) != hash(c)
示例#3
0
 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
示例#6
0
    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)
示例#7
0
    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,
示例#12
0
 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)