Пример #1
0
    def test_verify_sign_from_file_method(self):
        with NamedTemporaryFile() as sign_file:
            message = 'Some message'
            sign = 4, 6
            dsa_key = DSAKey()
            dsa_key.verify = Mock(side_effect=lambda m, r, s: m == message and
                                  r == sign[0] and s == sign[1])
            sign_file.write('({0},{1})\n{2}\n'.format(sign[0], sign[1],
                                                      message))
            sign_file.seek(0)

            verify_result = DSASignIO.verify_sign_from_file(
                dsa_key, sign_file.name)

            self.assertTrue(verify_result)

        with NamedTemporaryFile() as sign_file:
            message = 'Another piece of message'
            sign = 1, 2
            sign_file.write('({0},{1})\n{2}\n'.format(sign[0] + 1, sign[1] - 1,
                                                      message))
            sign_file.seek(0)

            verify_result = DSASignIO.verify_sign_from_file(
                dsa_key, sign_file.name)

            self.assertFalse(verify_result)
Пример #2
0
def export_key(private_key_filename, public_key_filename):
    dsa_key = DSAKey.generate_instance(2048)
    private_key = dsa_key.get_private_key()
    public_key = dsa_key.get_public_key()

    DSAKeyIO.export_key(private_key, private_key_filename)
    DSAKeyIO.export_key(public_key, public_key_filename)
Пример #3
0
def export_key(private_key_filename, public_key_filename):
    dsa_key = DSAKey.generate_instance(2048)
    private_key = dsa_key.get_private_key()
    public_key = dsa_key.get_public_key()

    DSAKeyIO.export_key(private_key, private_key_filename)
    DSAKeyIO.export_key(public_key, public_key_filename)
Пример #4
0
    def test_export_sign_to_file_method(self):
        with NamedTemporaryFile() as sign_file:
            message = 'This\nis\njust\na\ntest\nmessage'
            dsa_key = DSAKey()
            dsa_key.sign = Mock(return_value=(1, 2))
            DSASignIO.export_sign_to_file(dsa_key, message, sign_file.name)
            sign_file.seek(0)

            file_contents = sign_file.readlines()

            self.assertEqual(7, len(file_contents))
            self.assertEqual('(1,2)', file_contents[0].strip())
            self.assertEqual('This', file_contents[1].strip())
            self.assertEqual('is', file_contents[2].strip())
            self.assertEqual('just', file_contents[3].strip())
            self.assertEqual('a', file_contents[4].strip())
            self.assertEqual('test', file_contents[5].strip())
            self.assertEqual('message', file_contents[6].strip())
Пример #5
0
    def test_export_sign_to_file_method(self):
        with NamedTemporaryFile() as sign_file:
            message = 'This\nis\njust\na\ntest\nmessage'
            dsa_key = DSAKey()
            dsa_key.sign = Mock(return_value=(1, 2))
            DSASignIO.export_sign_to_file(dsa_key, message, sign_file.name)
            sign_file.seek(0)

            file_contents = sign_file.readlines()

            self.assertEqual(7, len(file_contents))
            self.assertEqual('(1,2)', file_contents[0].strip())
            self.assertEqual('This', file_contents[1].strip())
            self.assertEqual('is', file_contents[2].strip())
            self.assertEqual('just', file_contents[3].strip())
            self.assertEqual('a', file_contents[4].strip())
            self.assertEqual('test', file_contents[5].strip())
            self.assertEqual('message', file_contents[6].strip())
Пример #6
0
    def test_positive_workflow(self):
        dsa_key = DSAKey.generate_instance(2048)
        private_key = dsa_key.get_private_key()
        public_key = dsa_key.get_public_key()

        r, s = private_key.sign('Test message')
        validity = public_key.verify('Test message', r, s)

        self.assertTrue(validity)
Пример #7
0
    def test_changed_length_message(self):
        dsa_key = DSAKey.generate_instance(2048)
        private_key = dsa_key.get_private_key()
        public_key = dsa_key.get_public_key()

        r, s = private_key.sign('Test message')
        validity = public_key.verify('message', r, s)

        self.assertFalse(validity)
Пример #8
0
    def test_positive_workflow(self):
        dsa_key = DSAKey.generate_instance(2048)
        private_key = dsa_key.get_private_key()
        public_key = dsa_key.get_public_key()

        r, s = private_key.sign('Test message')
        validity = public_key.verify('Test message', r, s)

        self.assertTrue(validity)
Пример #9
0
    def test_changed_length_message(self):
        dsa_key = DSAKey.generate_instance(2048)
        private_key = dsa_key.get_private_key()
        public_key = dsa_key.get_public_key()

        r, s = private_key.sign('Test message')
        validity = public_key.verify('message', r, s)

        self.assertFalse(validity)
Пример #10
0
    def test_random_keys(self):
        dsa_key = DSAKey.generate_instance(2048)
        private_key = dsa_key.get_private_key()
        public_key = dsa_key.get_public_key()

        r, s = private_key.sign('Test message')
        random_r, random_s = getrandbits(r.bit_length()), getrandbits(s.bit_length())
        validity = public_key.verify('Test message', random_r, random_s)

        self.assertEqual(random_r == r and random_s == s, validity)
Пример #11
0
    def test_random_s_key(self):
        dsa_key = DSAKey.generate_instance(2048)
        private_key = dsa_key.get_private_key()
        public_key = dsa_key.get_public_key()

        r, s = private_key.sign('Test message')
        random_s = getrandbits(s.bit_length())
        validity = public_key.verify('Test message', r, random_s)

        self.assertEqual(random_s == s, validity)
Пример #12
0
    def test_verify_sign_from_file_method(self):
        with NamedTemporaryFile() as sign_file:
            message = 'Some message'
            sign = 4, 6
            dsa_key = DSAKey()
            dsa_key.verify = Mock(side_effect=lambda m, r, s: m == message and r == sign[0] and s == sign[1])
            sign_file.write('({0},{1})\n{2}\n'.format(sign[0], sign[1], message))
            sign_file.seek(0)

            verify_result = DSASignIO.verify_sign_from_file(dsa_key, sign_file.name)

            self.assertTrue(verify_result)

        with NamedTemporaryFile() as sign_file:
            message = 'Another piece of message'
            sign = 1, 2
            sign_file.write('({0},{1})\n{2}\n'.format(sign[0] + 1, sign[1] - 1, message))
            sign_file.seek(0)

            verify_result = DSASignIO.verify_sign_from_file(dsa_key, sign_file.name)

            self.assertFalse(verify_result)
Пример #13
0
    def import_key(filename):
        with open(filename, 'r') as import_file:
            import_file_contents = import_file.readlines()

            if len(import_file_contents) < 5:
                raise IOError('Invalid file contents')

            dsa_key = DSAKey()

            try:
                dsa_key.p = long(import_file_contents[1].strip())
                dsa_key.q = long(import_file_contents[2].strip())
                dsa_key.g = long(import_file_contents[3].strip())
                dsa_key.y = long(import_file_contents[4].strip())

                if len(import_file_contents) >= 6:
                    dsa_key.x = long(import_file_contents[5].strip())
            except:
                raise IOError('Invalid file contents')

            return dsa_key
Пример #14
0
    def test_export_private_key_method(self):
        with NamedTemporaryFile() as key_file:
            dsa_key = DSAKey()
            dsa_key.p = 1
            dsa_key.q = 3
            dsa_key.g = 5
            dsa_key.y = 6
            dsa_key.x = 7

            DSAKeyIO.export_key(dsa_key, key_file.name)

            key_file.seek(0)
            key_file_contents = key_file.readlines()

            self.assertEqual(6, len(key_file_contents))
            self.assertEqual('# private key', key_file_contents[0].strip())
            self.assertEqual('1', key_file_contents[1].strip())
            self.assertEqual('3', key_file_contents[2].strip())
            self.assertEqual('5', key_file_contents[3].strip())
            self.assertEqual('6', key_file_contents[4].strip())
            self.assertEqual('7', key_file_contents[5].strip())
Пример #15
0
    def test_export_public_key_method(self):
        with NamedTemporaryFile() as key_file:
            dsa_key = DSAKey()
            dsa_key.p = 6
            dsa_key.q = 0
            dsa_key.g = 9
            dsa_key.y = 6

            DSAKeyIO.export_key(dsa_key, key_file.name)

            key_file.seek(0)
            key_file_contents = key_file.readlines()

            self.assertEqual(5, len(key_file_contents))
            self.assertEqual('# public key', key_file_contents[0].strip())
            self.assertEqual('6', key_file_contents[1].strip())
            self.assertEqual('0', key_file_contents[2].strip())
            self.assertEqual('9', key_file_contents[3].strip())
            self.assertEqual('6', key_file_contents[4].strip())