diff --git a/electric_boogaloo.md b/electric_boogaloo.md
index 717de91..817a3e9 100644
--- a/electric_boogaloo.md
+++ b/electric_boogaloo.md
@@ -342,4 +342,4 @@ result = (data_0f73 ^ data_0f74) ^ data_0f75
print('0x{:04x}'.format(result))
```
-And with that, we can now programmatically generate every code for any challenge binary!
+And with that, we can now [programmatically extract *every single code* given any challenge .tgz!](https://github.com/RunasSudo/synacor.py/blob/master/tools/generate_codes.py)
diff --git a/tools/generate_codes.py b/tools/generate_codes.py
index 22f0a85..98fd132 100755
--- a/tools/generate_codes.py
+++ b/tools/generate_codes.py
@@ -15,8 +15,10 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see .
+import re
import struct
import sys
+import tarfile
IV_LEN = 3
CODE_LEN = 12
@@ -43,19 +45,36 @@ def generate_code(R1, R2, R3, R4):
done = True
R7 = R2data[R7]
code += chr(R7)
+
return code
+def mirror_code(code):
+ alphabet1 = 'dbqpwuiolxv8WTYUIOAHXVM'
+ alphabet2 = 'bdpqwuiolxv8WTYUIOAHXVM'
+ mirrored_code = ''
+ for letter in reversed(code):
+ if letter not in alphabet1:
+ raise Exception('Cannot mirror unknown letter ' + letter)
+ mirrored_code += alphabet2[alphabet1.index(letter)]
+ return mirrored_code
+
# Read code into memory
SYN_MEM = [0] * 32768
-with open(sys.argv[1], 'rb') as data:
- i = 0
- while True:
- byteData = data.read(2)
- if len(byteData) < 2:
- break
- SYN_MEM[i] = struct.unpack('