Exemplo n.º 1
0
def dump_urbit_packet(args, timestamp, srcaddr, sport, dstaddr, dport, data):
    try:
        # Urbit header and payload
        urhdr = unpack('<L', data[0:4])[0]
        proto = urhdr & 7
        mug = (urhdr >> 3) & 0xfffff
        yax = (urhdr >> 23) & 3
        yax_bytes = 1<<(yax+1)
        qax = (urhdr >> 25) & 3
        qax_bytes = 1<<(qax+1)
        crypto = (urhdr >> 27)
        sender = from_le(data[4:4+yax_bytes])
        receiver = from_le(data[4+yax_bytes:4+yax_bytes+qax_bytes])
        payload = data[4+yax_bytes+qax_bytes:]
        if crypto == 2: # %fast
            keyhash = from_le(payload[0:16])
            payload = payload[16:]
        else:
            keyhash = None
    except (IndexError, struct.error):
        print('Warn: invpkt')
        return

    # Decode packet if crypto known
    decrypted = False
    if crypto in [0,1]: # %none %open
        decrypted = True
    if crypto == 2 and keyhash in args.keys: # %fast
        payload = from_le(payload)
        payload = de_crua(args.keys[keyhash], payload)
        payload = to_le(payload)
        decrypted = True
    # Print packet
    hdata = [('proto', str(proto)),
             ('mug', '%05x' % mug),
             ('crypto', crypto_name(crypto))]
    if keyhash is not None and (args.always_show_keyhashes or not decrypted):
         hdata += [('keyhash', format_hexnum(keyhash))]

    if srcaddr is not None:
        metadata = ''
        if args.show_timestamps:
            metadata += colorize(datetime.datetime.utcfromtimestamp(timestamp).strftime('%H%M%S.%f'), COLOR_TIMESTAMP) + ' '
        metadata += (colorize(ipv4str(srcaddr), COLOR_IP) + v_colon + colorize(str(sport), COLOR_IP) + ' ' +
                colorize(pname(sender), COLOR_RECIPIENT) + ' ' +
                v_arrow + ' ' +
                colorize(ipv4str(dstaddr), COLOR_IP) + v_colon + colorize(str(dport), COLOR_IP) + ' ' +
                colorize(pname(receiver), COLOR_RECIPIENT))
    else:
        metadata = ('    %fore ' + # nested packet
                colorize(pname(sender), COLOR_RECIPIENT) + ' ' +
                v_arrow + ' ' +
                colorize(pname(receiver), COLOR_RECIPIENT))

    print( metadata + v_colon + ' ' +
            ' '.join(colorize(key, COLOR_HEADER) + v_equal + colorize(value, COLOR_VALUE) for (key,value) in hdata))
    if decrypted: # decrypted or unencrypted data
        if args.show_raw:
            print('    ' + colorize(hexstr(payload), COLOR_DATA))
        cake = cue(from_le(payload))
        if cake[0] == 1701998438: # %fore
            subpacket = to_le(cake[1][1][1])
            dump_urbit_packet(args, None, None, None, None, None, subpacket)
        else:
            if args.show_nouns:
                sys.stdout.write('    ')
                dump_noun(cake, sys.stdout)
                sys.stdout.write('\n')
    else: # [sealed]
        print('    [' + colorize(hexstr(payload), COLOR_DATA_ENC)+']')
Exemplo n.º 2
0
def dump_urbit_packet(args, timestamp, srcaddr, sport, dstaddr, dport, data):
    try:
        # Urbit header and payload
        urhdr = unpack('<L', data[0:4])[0]
        proto = urhdr & 7
        mug = (urhdr >> 3) & 0xfffff
        yax = (urhdr >> 23) & 3
        yax_bytes = 1 << (yax + 1)
        qax = (urhdr >> 25) & 3
        qax_bytes = 1 << (qax + 1)
        crypto = (urhdr >> 27)
        sender = from_le(data[4:4 + yax_bytes])
        receiver = from_le(data[4 + yax_bytes:4 + yax_bytes + qax_bytes])
        payload = data[4 + yax_bytes + qax_bytes:]
        if crypto == 2:  # %fast
            keyhash = from_le(payload[0:16])
            payload = payload[16:]
        else:
            keyhash = None
    except (IndexError, struct.error):
        print('Warn: invpkt')
        return

    # Decode packet if crypto known
    decrypted = False
    if crypto in [0, 1]:  # %none %open
        decrypted = True
    if crypto == 2 and keyhash in args.keys:  # %fast
        payload = from_le(payload)
        payload = de_crua(args.keys[keyhash], payload)
        payload = to_le(payload)
        decrypted = True
    # Print packet
    hdata = [('proto', str(proto)), ('mug', '%05x' % mug),
             ('crypto', crypto_name(crypto))]
    if keyhash is not None and (args.always_show_keyhashes or not decrypted):
        hdata += [('keyhash', format_hexnum(keyhash))]

    if srcaddr is not None:
        metadata = ''
        if args.show_timestamps:
            metadata += colorize(
                datetime.datetime.utcfromtimestamp(timestamp).strftime(
                    '%H%M%S.%f'), COLOR_TIMESTAMP) + ' '
        metadata += (colorize(ipv4str(srcaddr), COLOR_IP) + v_colon +
                     colorize(str(sport), COLOR_IP) + ' ' +
                     colorize(pname(sender), COLOR_RECIPIENT) + ' ' + v_arrow +
                     ' ' + colorize(ipv4str(dstaddr), COLOR_IP) + v_colon +
                     colorize(str(dport), COLOR_IP) + ' ' +
                     colorize(pname(receiver), COLOR_RECIPIENT))
    else:
        metadata = (
            '    %fore ' +  # nested packet
            colorize(pname(sender), COLOR_RECIPIENT) + ' ' + v_arrow + ' ' +
            colorize(pname(receiver), COLOR_RECIPIENT))

    print(metadata + v_colon + ' ' + ' '.join(
        colorize(key, COLOR_HEADER) + v_equal + colorize(value, COLOR_VALUE)
        for (key, value) in hdata))
    if decrypted:  # decrypted or unencrypted data
        if args.show_raw:
            print('    ' + colorize(hexstr(payload), COLOR_DATA))
        cake = cue(from_le(payload))
        if cake[0] == 1701998438:  # %fore
            subpacket = to_le(cake[1][1][1])
            dump_urbit_packet(args, None, None, None, None, None, subpacket)
        else:
            if args.show_nouns:
                sys.stdout.write('    ')
                dump_noun(cake, sys.stdout)
                sys.stdout.write('\n')
    else:  # [sealed]
        print('    [' + colorize(hexstr(payload), COLOR_DATA_ENC) + ']')
Exemplo n.º 3
0
#!/usr/bin/python3
import sys
sys.path.append('..')
from urbit.crua import de_crua

#print(hex(shas(bin_to_num(b'og-a'), 0)))
#print(hex(raw_og(1, 512)))
print(hex(de_crua(1, 0xec0eaabae901dd12696324677f3e12ceeeee5d3989379a73134821e55d80837b4abac214e1e95fe0c60df79d09cbd05454a4cb958683e02318aa147f2a5e6d60)))
Exemplo n.º 4
0
#!/usr/bin/python3
import sys
sys.path.append('..')
from urbit.crua import de_crua

#print(hex(shas(bin_to_num(b'og-a'), 0)))
#print(hex(raw_og(1, 512)))
print(
    hex(
        de_crua(
            1,
            0xec0eaabae901dd12696324677f3e12ceeeee5d3989379a73134821e55d80837b4abac214e1e95fe0c60df79d09cbd05454a4cb958683e02318aa147f2a5e6d60
        )))