Ejemplo n.º 1
0
    def from_scenario(
            cls,
            scenario,  # type: DECRYPT_SCENARIO_SPEC
            plaintext_reader,  # type: Callable[[str], bytes]
            ciphertext_reader,  # type: Callable[[str], bytes]
            keys,  # type: KeysManifest
    ):
        # type: (...) -> MessageDecryptionTestScenario
        """Load from a scenario specification.

        :param dict scenario: Scenario specification JSON
        :param plaintext_reader: URI-handling data reader for reading plaintext
        :param ciphertext_reader: URI-handling data reader for reading ciphertext
        :param KeysManifest keys: Loaded keys
        :return: Loaded test scenario
        :rtype: MessageDecryptionTestScenario
        """
        raw_master_key_specs = scenario[
            "master-keys"]  # type: Iterable[MASTER_KEY_SPEC]
        master_key_specs = [
            MasterKeySpec.from_scenario(spec) for spec in raw_master_key_specs
        ]
        master_key_provider = master_key_provider_from_master_key_specs(
            keys, master_key_specs)

        return cls(
            plaintext_uri=scenario["plaintext"],
            plaintext=plaintext_reader(scenario["plaintext"]),
            ciphertext_uri=scenario["ciphertext"],
            ciphertext=ciphertext_reader(scenario["ciphertext"]),
            master_key_specs=master_key_specs,
            master_key_provider=master_key_provider,
            description=scenario.get("description"),
        )
Ejemplo n.º 2
0
    def from_scenario(cls, scenario, keys, plaintexts):
        # type: (ENCRYPT_SCENARIO_SPEC, KeysManifest, Dict[str, bytes]) -> MessageEncryptionTestScenario
        """Load from a scenario specification.

        :param dict scenario: Scenario specification JSON
        :param KeysManifest keys: Loaded keys
        :param dict plaintexts: Mapping of plaintext names to plaintext values
        :return: Loaded test scenario
        :rtype: MessageEncryptionTestScenario
        """
        algorithm = algorithm_suite_from_string_id(scenario["algorithm"])
        master_key_specs = [
            MasterKeySpec.from_scenario(spec)
            for spec in scenario["master-keys"]
        ]
        master_key_provider = master_key_provider_from_master_key_specs(
            keys, master_key_specs)

        return cls(
            plaintext_name=scenario["plaintext"],
            plaintext=plaintexts[scenario["plaintext"]],
            algorithm=algorithm,
            frame_size=scenario["frame-size"],
            encryption_context=scenario["encryption-context"],
            master_key_specs=master_key_specs,
            master_key_provider=master_key_provider,
        )
Ejemplo n.º 3
0
    def from_scenario(cls, scenario, keys, plaintexts):
        """Load from a scenario specification.

        :param dict scenario: Scenario specification JSON
        :param KeysManifest keys: Loaded keys
        :param dict plaintexts: Mapping of plaintext names to plaintext values
        :return: Loaded test scenario
        :rtype: MessageDecryptionTestScenarioGenerator
        """
        encryption_scenario_spec = scenario["encryption-scenario"]
        encryption_scenario = MessageEncryptionTestScenario.from_scenario(encryption_scenario_spec, keys, plaintexts)
        tampering = scenario.get("tampering")
        tampering_method = TamperingMethod.from_tampering_spec(tampering)
        decryption_method_spec = scenario.get("decryption-method")
        decryption_method = DecryptionMethod(decryption_method_spec) if decryption_method_spec else None
        if "decryption-master-keys" in scenario:
            decryption_master_key_specs = [
                MasterKeySpec.from_scenario(spec) for spec in scenario["decryption-master-keys"]
            ]

            def decryption_master_key_provider_fn():
                return master_key_provider_from_master_key_specs(keys, decryption_master_key_specs)

        else:
            decryption_master_key_specs = encryption_scenario.master_key_specs
            decryption_master_key_provider_fn = encryption_scenario.master_key_provider_fn
        result_spec = scenario.get("result")
        result = MessageDecryptionTestResult.from_result_spec(result_spec, None) if result_spec else None

        return cls(
            encryption_scenario=encryption_scenario,
            tampering_method=tampering_method,
            decryption_method=decryption_method,
            decryption_master_key_specs=decryption_master_key_specs,
            decryption_master_key_provider_fn=decryption_master_key_provider_fn,
            result=result,
        )