Beispiel #1
0
    def __init__(self,
                 ID_S: Identifier,
                 dao: DAOServer,
                 filename_private_key: str = "output/private_key." +
                 SIGN_KEY_FORMAT):
        """
        Instantiate a server object.
        :param ID_S: The server's identifier
        :type ID_S: Identifier
        :param filename_private_key: The file containing the server's private key (used to sign)
        :type filename_private_key: str
        :param dao: DAO for the server
        :type dao: DAOServer
        """
        assert isinstance(ID_S, Identifier) and isinstance(dao, DAOServer)
        assert isinstance(filename_private_key, str)

        self.ID_S = ID_S
        self.dao = dao
        self.signer = SignVerify()
        self.logger = logging.getLogger(__name__ + '.' +
                                        self.__class__.__name__)

        try:
            self.signer.import_private_keys(filename_private_key)
            logging.debug(
                "Using private key in file '{}'".format(filename_private_key))
        except FileNotFoundError:
            self.logger.error(
                "%s does not exist, generating and exporting keys",
                filename_private_key)
            self.signer.generate_keys()
            filename_public_key = filename_private_key.replace(
                "private", "public", 1)
            self.signer.export_keys(filename_public_key, filename_private_key)
Beispiel #2
0
class TestSignVerify(TestCase):
    signverify = SignVerify()

    def test_0_generate_keys(self):

        TestSignVerify.signverify.generate_keys()  # type: SignVerify

        self.assertIsNotNone(TestSignVerify.signverify.key)
        self.assertIsNotNone(TestSignVerify.signverify.signer_verifier)

    def test_1_export_keys(self):
        TestSignVerify.signverify.export_keys(filename_public_key,
                                              filename_private_key)

        self.assertTrue(path.isfile(filename_private_key))
        self.assertTrue(path.isfile(filename_public_key))

    def test_3_import_private_keys(self):
        TestSignVerify.signverify.import_private_keys(filename_private_key)

        self.assertIsInstance(TestSignVerify.signverify.signer_verifier,
                              PKCS115_SigScheme)
        self.assertTrue(TestSignVerify.signverify.signer_verifier.can_sign())

    def test_4_import_public_keys(self):
        TestSignVerify.signverify.import_public_keys(filename_public_key)

        self.assertIsInstance(TestSignVerify.signverify.signer_verifier,
                              PKCS115_SigScheme)
        self.assertFalse(TestSignVerify.signverify.signer_verifier.can_sign())

    def test_5_sign(self):
        global signed_resp, signed_msg
        TestSignVerify.signverify.import_private_keys(filename_private_key)

        x = hash_factory(data=b'ABCD')
        t_resp = TimestampResponse(x,
                                   Identifier("server"), Identifier("client"),
                                   datetime.utcnow(), KSIErrorCodes.NO_ERROR)

        signed_msg, signed_resp = TestSignVerify.signverify.sign(t_resp)

    def test_6_verify(self):
        global signed_resp, signed_msg
        TestSignVerify.signverify.import_public_keys(filename_public_key)

        self.assertTrue(
            TestSignVerify.signverify.verify(signed_msg, signed_resp))
        self.assertFalse(TestSignVerify.signverify.verify(
            b'1234', signed_resp))
Beispiel #3
0
#

LOGGER_DEFAULT_OUTFILE = LOGGER_DIR + LOGGER_NAME + '.log'
LOGGER_SAVE_OUTFILE = LOGGER_DIR + 'benchmark-{}-{}-{}.log'

if __name__ == '__main__':
    assert PERFORM_BENCHMARKS is True  # This switch need to be enabled!
    assert BENCHMARK_MOTIF == "ksi.signverify"

    add_logger()
    logging.basicConfig(level=logging.INFO)
    hash = hash_factory(data=b'ABCD')

    for i in [1024, 2048, 4096]:
        open(LOGGER_DEFAULT_OUTFILE, 'w+').close()
        signer = SignVerify()
        signer.generate_keys(i)
        resp = TimestampResponse(hash, Identifier('server'), Identifier('client'), datetime.utcnow(),
                                 KSIErrorCodes.NO_ERROR)
        # Benchmark start
        m, sig = signer.sign(resp)
        assert signer.verify(m, sig) is True
        # Benchmark end

        logger = logging.getLogger(LOGGER_NAME)

        for h in logger.handlers:
            h.flush()
            logger.removeHandler(h)

        os.rename(LOGGER_DEFAULT_OUTFILE, LOGGER_SAVE_OUTFILE.format('Sign', '', 'key-len_' + str(i)))