aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/transform_psk.py
blob: 90ced045bca2e50913c27c11b7c579686e293723 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/bin/python
"""
Applies the 'pskN' transformations to Noise patterns.

Authors:
    Rhys Weatherley <rhys.weatherley@gmail.com>

This script is placed into the public domain.
"""

import sys
from noise_patterns import *

def make_psk(orig, modifier, psk_num):
    pattern = Pattern()
    pattern.name = orig.name
    pattern.addTransformation(modifier)
    pattern.parameters = list(orig.parameters)
    pattern.initiator_premessage = list(orig.initiator_premessage)
    pattern.responder_premessage = list(orig.responder_premessage)
    pattern.messages = []
    if psk_num == 0:
        direction, message = orig.messages[0]
        pattern.messages.append((direction, ['psk'] + message))
        for direction, message in orig.messages[1:]:
            pattern.messages.append((direction, list(message)))
    else:
        posn = 1
        for direction, message in orig.messages:
            if psk_num == posn:
                pattern.messages.append((direction, message + ['psk']))
            else:
                pattern.messages.append((direction, list(message)))
            posn += 1
    return pattern

if len(sys.argv) <= 2:
    print "Usage: " + sys.argv[0] + " N file ..."
    sys.exit(1)

psk_num = int(sys.argv[1])
modifier = "psk" + sys.argv[1]

for file in sys.argv[2:]:
    patterns = loadPatterns(file)
    for pattern in patterns:
        if modifier in pattern.transformations():
            # The modifier was already applied to this pattern.
            continue
        if psk_num > len(pattern.messages):
            # Cannot apply the modifier to this pattern because
            # there aren't enough messages in it.
            continue
        psk = make_psk(pattern, modifier, psk_num)
        print psk

sys.exit(0)