def test_key_identifier_is_correct(self):
        crypto_1 = VirgilCrypto()
        key_pair_1 = crypto_1.generate_key_pair()

        self.assertEqual(key_pair_1.private_key.identifier,
                         key_pair_1.public_key.identifier)
        self.assertEqual(
            crypto_1.compute_hash(
                crypto_1.export_public_key(key_pair_1.public_key),
                HashAlgorithm.SHA512)[:8], key_pair_1.private_key.identifier)

        crypto_2 = VirgilCrypto(use_sha256_fingerprints=True)
        key_pair_2 = crypto_2.generate_key_pair()

        self.assertEqual(
            crypto_2.compute_hash(
                crypto_1.export_public_key(key_pair_2.public_key),
                HashAlgorithm.SHA256), key_pair_2.private_key.identifier)
    def test_private_key_identifier_is_correct(self):
        # STC-33
        crypto_1 = VirgilCrypto()
        key_pair_1 = crypto_1.generate_key_pair()

        self.assertEqual(
            hashlib.sha512(
                bytearray(crypto_1.export_public_key(
                    key_pair_1.public_key))).digest()[0:8],
            bytes(key_pair_1.private_key.identifier))

        crypto_2 = VirgilCrypto()
        crypto_2.use_sha256_fingerprints = True
        key_pair_2 = crypto_2.generate_key_pair()

        self.assertEqual(
            hashlib.sha256(
                bytearray(crypto_2.export_public_key(
                    key_pair_2.public_key))).digest(),
            bytearray(key_pair_2.private_key.identifier))
示例#3
0
class VirgilFlaskLib:
    
    def __init__(self):
        self.crypto = VirgilCrypto()
        self.api_key_base64 = "MC4CAQAwBQYDK2VwBCIEIF+gQkN4StqMMFJGWE1tKXcitkLqHqmrBz+OaQZKGZFR"
        self.app_id = "6af75f0dd9be50ebb77facad0f71eaf3"
        self.app_key_id = "3def16346c7b43bbaed5b4b9acb9ac8affa4"
        self.api_key = self.crypto.import_private_key(Utils.b64_decode(self.api_key_base64))
        self.ttl = datetime.timedelta(hours=1).seconds
        self.access_token_signer = AccessTokenSigner()
        self.key_pair = self.crypto.generate_keys()

        self.server_crypto = VirgilCrypto()
        self.server_key_pair = self.server_crypto.generate_keys()

        self.server_private_key_data = self.server_crypto.export_private_key(self.server_key_pair.private_key, "test password")
        self.server_public_key_data = self.server_crypto.export_public_key(self.server_key_pair.public_key)
        self.server_private_key_str = Utils.b64encode(self.server_private_key_data)
        self.server_for_client_public = Utils.b64encode(self.server_public_key_data)


        self.server_exporter = PrivateKeyExporter(self.server_crypto)
        self.server_private_key_storage = PrivateKeyStorage(self.server_exporter)
        self.server_public_key_str = self.server_key_pair.public_key
        self.server_card_crypto = CardCrypto()
        self.server_your_backend_white_list = WhiteList()
        self.server_your_backend_white_list = VerifierCredentials(signer="Jonathan",public_key_base64 = self.server_public_key_str)
        self.verifier = VirgilCardVerifier(self.server_card_crypto, white_lists = [self.server_your_backend_white_list])
        self.access_token_provider = CallbackJwtProvider(self.get_token_from_server("Alice"))
        self.card_manager = CardManager(
            self.server_card_crypto,
            self.access_token_provider,
            self.verifier
        )

    def get_private_key(self):
        return self.key_pair.private_key

    def get_public_key(self):
        return self.key_pair.public_key    

    #jwt token generation
    def get_token_from_server(self, token_context):
        #jwt_from_server = authficated_query_to_server(token_context)
        #jwt_from_server = token_context
        jwt_from_server = self.generate_JWT_for_user("Alice")
        return jwt_from_server

    #JWT generator with necessary paramters
    def get_JWT_generator(self):
        return JwtGenerator(self.app_id, self.api_key, self.app_key_id, self.ttl, self.access_token_signer)

    def generate_JWT_for_user(self, identity):
        jwt_generator = self.get_JWT_generator()
        self.identity = identity
        return jwt_generator.generate_token(identity)

    #function is broken
    def publish_card(self):
        #self.card = self.card_manager.publish_card(identity = self.identity, private_key = self.server_key_pair.private_key, public_key = self.server_key_pair.public_key)
        self.card = self.card_manager.publish_card(identity = self.identity, private_key = self.server_key_pair.private_key, public_key = self.server_key_pair.public_key)

    def signAndEncrypt(self, message):
        message_to_encrypt = message
        data_to_encrypt = Utils.strtobytes(message)

        alice_private_key, alice_private_key_additional_data = self.server_private_key_storage.load("Alice")
class VirgilServerClient:
    def __init__(self):
        print("generated")

    ####SERVER SIDE
    def authenticated_query_to_server(self, token_context, token_ttl=9999):
        self.crypto = VirgilCrypto()

        self.app_key_base64 = "MC4CAQAwBQYDK2VwBCIEIEtNPMUG9uR8YxukWw1gX3bkXjbsbOZoN54d2ZKSz09a"
        #        self.app_key_base64 = "MC4CAQAwBQYDK2VwBCIEIJvD17QhpJ1qFfIq3q8eqrZ0oBIf9GQ0T+6obQCmspnQ"
        #self.app_key_base64 = "MC4CAQAwBQYDK2VwBCIEIF+gQkN4StqMMFJGWE1tKXcitkLqHqmrBz+OaQZKGZFR"
        #self.app_id = "6af75f0dd9be50ebb77facad0f71eaf3"
        self.app_id = "def16346c7b43bbaed5b4b9ac8affa4"
        #        self.api_key_id = "3def16346c7b43bbaed5b4b9acb9ac8affa4"
        self.api_key_id = "309d53349835f34d5a03966d9de51877"

        self.app_key = self.crypto.import_private_key(
            Utils.b64decode(self.app_key_base64))

        self.builder = JwtGenerator(self.app_id, self.app_key, self.api_key_id,
                                    token_ttl, AccessTokenSigner())

        #self.identity = token_context.identity
        #return self.builder.generate_token(self.identity).to_string()
        #PLEASE MAKE TOKEN_CONTEXT AN ACTUAL JWT TOKEN
        #return self.builder.generate_token(token_context)
        try:
            self.identity = token_context.identity
            return self.builder.generate_token(self.identity).to_string()
        except:
            return self.builder.generate_token(token_context)

    ########CLIENT SIDE
    def get_token_from_server(self, token_context):
        print('get token from server')
        print(token_context)
        jwt_from_server = self.authenticated_query_to_server(token_context)
        return jwt_from_server

    def set_access_token_provider(self):
        self.access_token_provider = CallbackJwtProvider(
            self.get_token_from_server)

    def publish_card(self, user):
        self.client_crypto = VirgilCrypto()
        card_crypto = CardCrypto()
        validator = VirgilCardVerifier(card_crypto)
        token_provider = CallbackJwtProvider(self.get_token_from_server)
        print('token_provider')
        print(vars(token_provider))
        card_manager = CardManager(card_crypto,
                                   access_token_provider=token_provider,
                                   card_verifier=validator)

        key_pair = self.client_crypto.generate_keys()

        username = user
        public_key_data = self.client_crypto.export_public_key(
            key_pair.public_key)
        public_key_str = Utils.b64encode(public_key_data)

        class DummyClass:
            def __init__(self, raw_key):
                self.raw_key = raw_key

        dummy = DummyClass(key_pair.public_key.raw_key)

        print(public_key_data)
        print(public_key_str)
        print(key_pair.public_key)

        card = card_manager.publish_card(identity=username,
                                         private_key=key_pair.private_key,
                                         public_key=key_pair.public_key)
        print(vars(card))