/ analysis / scramble.py
scramble.py
 1  #!/usr/bin/env python
 2  
 3  def split_by_n(obj, n):
 4    # src https://stackoverflow.com/questions/9475241/split-string-every-nth-character
 5    return list(obj[i:i+n] for i in range(0, len(obj), n))
 6  
 7  allchars=list(chr(x) for x in range(ord('a'),ord('z')+1))
 8  allchars.extend(list(chr(x) for x in range(ord('A'),ord('Z')+1)))
 9  allchars.extend(list(chr(x) for x in range(ord('0'),ord('9')+1)))
10  allchars.extend(list(chr(x) for x in range(0x1d400,0x1d467+1)))
11  symbols = list('!#$%&()*+,-./:;<=>?@[]^_`{|}~')
12  
13  intmem4abc = split_by_n(symbols[:3*8], 8)
14  grp5=split_by_n(allchars[:9*8], 8)
15  
16  print("i4ac", ' '.join(''.join(x) for x in intmem4abc))
17  print("5grp", ' '.join(''.join(x) for x in grp5))
18  
19  output = []
20  for triple in split_by_n(grp5,3):
21    for i in range(3):
22      tmp = triple[i]
23      intmem4abc[i]=tmp
24    CY=' '
25    r0 = 0
26    for i in range(5):
27      for j in range(4):
28        # xchg a,intmemabc[r0]
29        tmp1 = tmp
30        tmp = intmem4abc[r0]
31        intmem4abc[r0] = tmp1
32        # rrc a
33        tbit = CY
34        CY = tmp[7]
35        tmp = [tbit] + tmp[:-1]
36        # xchg a,intmemabc[r0]
37        tmp1 = tmp
38        tmp = intmem4abc[r0]
39        intmem4abc[r0] = tmp1
40        # rlc a
41        tbit = CY
42        CY = tmp[0]
43        tmp = tmp[1:] + [tbit]
44  
45        r0 = (r0 + 1) % 3
46        CY = '#' if r0 != 0 else ' '
47      print([' ',' '] + tmp[2:])
48      output.append([' ', ' '] + tmp[2:])
49  
50  # some bits are repeated, which how often see this:
51  # [(30, ' '), (3, '𝐉'), (3, 'x'), (3, 'V'), (2, '𝐈'), (2, '𝐆'), (2, '𝐅'), (2, 'w'), (2, 'u'), (2, 't'), (2, 'n'), (2, 'm'), (2, 'g'), (2, 'f'), (2, 'c'), (2, 'Y'), (2, 'U'), (2, 'S'), (2, 'R'), (2, 'L'), (2, 'K'), (2, 'E'), (2, 'D'), (2, 'A'), (2, '9'), (2, '8'), (2, '2'), (2, '1'), (1, '𝐇'), (1, '𝐄'), (1, '𝐁'), (1, '𝐀'), (1, 'z'), (1, 'v'), (1, 's'), (1, 'p'), (1, 'o'), (1, 'l'), (1, 'k'), (1, 'j'), (1, 'h'), (1, 'e'), (1, 'd'), (1, 'b'), (1, 'Z'), (1, 'X'), (1, 'T'), (1, 'Q'), (1, 'N'), (1, 'M'), (1, 'J'), (1, 'I'), (1, 'H'), (1, 'F'), (1, 'C'), (1, 'B'), (1, '7'), (1, '6'), (1, '5'), (1, '3'), (1, '0')]
52  
53  print("\n decode\n")
54  CY = '0'
55  d = 0
56  for _ in range(len(output)//5):
57    r0 = 0
58    for i in range(5):
59        tmp = output[d]
60        if(tmp!=0xfe): d+=1
61        # tmp--
62        tmp = tmp[4:]+tmp[:4]
63        CY = '#'
64        for j in range(4):
65          # rlc a
66          tbit = CY
67          CY = tmp[0]
68          tmp = tmp[1:] + [tbit]
69          # xchg a,intmemabc[r0]
70          tmp1 = tmp
71          tmp = intmem4abc[r0]
72          intmem4abc[r0] = tmp1
73          # rrc a
74          tbit = CY
75          CY = tmp[7]
76          tmp = [tbit] + tmp[:-1]
77          # xchg a,intmemabc[r0]
78          tmp1 = tmp
79          tmp = intmem4abc[r0]
80          intmem4abc[r0] = tmp1
81          r0 = (r0 + 1) % 3
82          CY = '#' if r0 != 0 else ' '
83    for i in range(3):
84        tmp = intmem4abc[i]
85        if(i==2):
86          # rrc a
87          tbit = " "
88          CY = tmp[7]
89          tmp = [tbit] + tmp[:-1]
90        else:
91          CY='#'
92        # rrc a
93        tbit = CY
94        CY = tmp[7]
95        tmp = [tbit] + tmp[:-1]
96        output.append([' ', ' '] + tmp[2:])
97        print(output[-1])