示例#1
0
def test_from_uri_parse_error_missing_cost(uri):
    from cryptoconditions.condition import Condition
    from cryptoconditions.exceptions import ParsingError
    with raises(ParsingError) as exc_info:
        Condition.from_uri(uri)
    assert exc_info.value.args == (
        'Invalid condition format: "cost" parameter or value missing.',)
示例#2
0
def test_from_uri_malformed_uri(uri):
    from cryptoconditions.condition import Condition
    from cryptoconditions.exceptions import ParsingError

    # Note that the uri will contain `sha-265` instead of `sha-256`
    with raises(ParsingError):
        Condition.from_uri(uri)
示例#3
0
def test_from_uri_with_unsupported_type(uri):
    from cryptoconditions.condition import Condition
    from cryptoconditions.exceptions import UnsupportedTypeError
    with raises(UnsupportedTypeError) as exc_info:
        Condition.from_uri(uri)
    condition_type = parse_qs(urlparse(uri.rstrip()).query)['fpt'][0]
    assert exc_info.value.args == (
        'Type {} is not supported'.format(condition_type),)
示例#4
0
def test_from_uri_prefix_error(uri):
    from cryptoconditions.condition import Condition, CONDITION_URI_SCHEME
    from cryptoconditions.exceptions import PrefixError
    with raises(PrefixError) as exc_info:
        Condition.from_uri(uri)
    assert exc_info.value.args == (
        'Serialized condition must start with "{}:"'
        .format(CONDITION_URI_SCHEME),)
示例#5
0
def test_condition_comparison(minimal_ed25519, minimal_prefix):
    from cryptoconditions.condition import Condition

    assert Condition.from_uri(minimal_ed25519.condition_uri) == \
        Condition.from_uri(minimal_ed25519.condition_uri)

    assert not Condition.from_uri(minimal_ed25519.condition_uri) == \
        Condition.from_uri(minimal_prefix.condition_uri)
示例#6
0
def test_from_uri_invalid_arguments(minimal_ed25519):
    from cryptoconditions.condition import Condition

    # raises a TypeError if the serialized_condition is not a str
    with raises(TypeError):
        Condition.from_uri(1)

    # Note: This should be removed in future versions of the code
    # from uri will return the the condition instance if we pass it a
    # condition instance
    condition = Condition.from_uri(minimal_ed25519.condition_uri)
    assert Condition.from_uri(condition) == condition
示例#7
0
 def subcondition(self, subcondition):
     if isinstance(subcondition, str):
         subcondition = Condition.from_uri(subcondition)
     elif not isinstance(subcondition, Condition):
         raise Exception(
             'Subconditions must be URIs or objects of type Condition')
     self._subcondition = subcondition
示例#8
0
 def subcondition(self, subcondition):
     if isinstance(subcondition, str):
         subcondition = Condition.from_uri(subcondition)
     elif not isinstance(subcondition,  Condition):
         raise Exception(
             'Subconditions must be URIs or objects of type Condition')
     self._subcondition = subcondition
    def add_subcondition_uri(self, subcondition_uri):
        """
        Add a subcondition (unfulfilled).

        This will automatically parse the URI and call addSubcondition.

        Args:
            subcondition_uri (str): Subcondition URI.
        """
        if not isinstance(subcondition_uri, str):
            raise TypeError('Subcondition must be provided as a URI string')
        self.add_subcondition(Condition.from_uri(subcondition_uri))
示例#10
0
    def add_subcondition_uri(self, subcondition_uri):
        """
        Add a subcondition (unfulfilled).

        This will automatically parse the URI and call addSubcondition.

        Args:
            subcondition_uri (str): Subcondition URI.
        """
        if not isinstance(subcondition_uri, str):
            raise TypeError('Subcondition must be provided as a URI string, was {}'.format(subcondition_uri))
        self.add_subcondition(Condition.from_uri(subcondition_uri))
示例#11
0
def test_condition_to_asn1_json(basic_threshold):
    from cryptoconditions.condition import Condition
    from cryptoconditions.type_registry import TypeRegistry

    condition = Condition.from_uri(basic_threshold.condition_uri)
    condition_type = TypeRegistry.find_by_type_id(condition.type_id)

    assert condition.to_asn1_json() == {
        'type': condition_type['asn1_condition'],
        'value': {
            'cost': basic_threshold.cost,
            'fingerprint': condition.hash,
            'subtypes': '01011'
        }
    }
示例#12
0
    def add_subcondition(self, subcondition):
        """
        Add a subcondition (unfulfilled).

        This can be used to generate a new threshold condition from a set
        of subconditions or to provide a non-fulfilled subcondition when
        creating a threshold fulfillment.

        Args:
            subcondition (:class:`~cryptoconditions.condition.Condition` or :obj:`str`):
                Condition object or URI string representing a new
                subcondition to be added.

        """
        if isinstance(subcondition, str):
            subcondition = Condition.from_uri(subcondition)
        elif not isinstance(subcondition, Condition):
            raise TypeError('Subconditions must be URIs or objects of type Condition')
        self.subconditions.append({'type': CONDITION, 'body': subcondition})
示例#13
0
    def add_subcondition(self, subcondition):
        """
        Add a subcondition (unfulfilled).

        This can be used to generate a new threshold condition from a set
        of subconditions or to provide a non-fulfilled subcondition when
        creating a threshold fulfillment.

        Args:
            subcondition (:class:`~cryptoconditions.condition.Condition` or :obj:`str`):
                Condition object or URI string representing a new
                subcondition to be added.

        """
        if isinstance(subcondition, str):
            subcondition = Condition.from_uri(subcondition)
        elif not isinstance(subcondition, Condition):
            raise TypeError(
                'Subconditions must be URIs or objects of type Condition')
        self.subconditions.append({'type': CONDITION, 'body': subcondition})
    def add_subcondition(self, subcondition, weight=1):
        """
        Add a subcondition (unfulfilled).

        This can be used to generate a new threshold condition from a set of
        subconditions or to provide a non-fulfilled subcondition when creating a threshold fulfillment.

        Args:
            subcondition (Condition, str): Condition to add
            weight (int): Integer weight of the subcondition.
        """
        if isinstance(subcondition, str):
            subcondition = Condition.from_uri(subcondition)
        elif not isinstance(subcondition, Condition):
            raise TypeError('Subconditions must be URIs or objects of type Condition')
        if not isinstance(weight, int):
            raise ValueError('Invalid weight, not an integer: {}'.format(weight))
        self.subconditions.append(
            {
                'type': CONDITION,
                'body': subcondition,
                'weight': weight
            })
示例#15
0
    def add_subcondition(self, subcondition, weight=1):
        """
        Add a subcondition (unfulfilled).

        This can be used to generate a new threshold condition from a set of
        subconditions or to provide a non-fulfilled subcondition when creating a threshold fulfillment.

        Args:
            subcondition (Condition, str): Condition to add
            weight (int): Integer weight of the subcondition.
        """
        if isinstance(subcondition, str):
            subcondition = Condition.from_uri(subcondition)
        elif not isinstance(subcondition, Condition):
            raise TypeError('Subconditions must be URIs or objects of type Condition')
        if not isinstance(weight, int) or weight < 1:
            raise ValueError('Invalid weight: {}'.format(weight))
        self.subconditions.append(
            {
                'type': CONDITION,
                'body': subcondition,
                'weight': weight
            })
示例#16
0
def test_from_uri_parse_error_invalid_cost(uri):
    from cryptoconditions.condition import Condition
    from cryptoconditions.exceptions import ParsingError
    with raises(ParsingError) as exc_info:
        Condition.from_uri(uri)
    assert exc_info.value.args == ('No or invalid cost provided',)
示例#17
0
def validate_condition(serialized_condition):
    condition = Condition.from_uri(serialized_condition)
    return condition.validate()
示例#18
0
def validate_condition(serialized_condition):
    condition = Condition.from_uri(serialized_condition)
    return condition.validate()