

def _decode_signed_value_v2(secret, name, value, max_age_days, clock):

    def _consume_field(s):
        (length, _, rest) = s.partition(b':')
        n = int(length)
        field_value = rest[:n]
        if (rest[n:(n + 1)] != b'|'):
            raise ValueError('malformed v2 signed value field')
        rest = rest[(n + 1):]
        return (field_value, rest)
    rest = value[2:]
    try:
        (key_version, rest) = _consume_field(rest)
        (timestamp, rest) = _consume_field(rest)
        (name_field, rest) = _consume_field(rest)
        (value_field, rest) = _consume_field(rest)
    except ValueError:
        return None
    passed_sig = rest
    signed_string = value[:(- len(passed_sig))]
    expected_sig = _create_signature_v2(secret, signed_string)
    if (not _time_independent_equals(passed_sig, expected_sig)):
        return None
    if (name_field != utf8(name)):
        return None
    timestamp = int(timestamp)
    if (timestamp < (clock() - (max_age_days * 86400))):
        return None
    try:
        return base64.b64decode(value_field)
    except Exception:
        return None

dataset/ETHPy150Open RobotWebTools/rosbridge_suite/rosbridge_server/src/tornado/web.py _decode_signed_value_v2/original