def test_basic_bits(self): """Basic bits decoding""" self.assertEqual(decodeMorse(decodeBits('1')), 'E') self.assertEqual(decodeMorse(decodeBits('101')), 'I') self.assertEqual(decodeMorse(decodeBits('10001')), 'EE') self.assertEqual(decodeMorse(decodeBits('10111')), 'A') self.assertEqual(decodeMorse(decodeBits('1110111')), 'M')
def test_hey_jude(self): """Basic HEY JUDE""" self.assertEqual(decodeMorse(decodeBits( '1100110011001100000011000000111111001100111111001111110000000000' '0000110011111100111111001111110000001100110011111100000011111100' '11001100000011')), 'HEY JUDE')
def test_complex(self): """Complex tests""" self.assertEqual(decodeMorse( ' ...---... -.-.-- - .... . --.- ..- .. -.-. -.- ' ' -... .-. --- .-- -. ..-. --- -..- .--- ..- -- .--. ... --- ...- . .-. - .... . ' ' .-.. .- --.. -.-- -.. --- --. .-.-.- '), 'SOS! THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.' )
def test_basic_decoding(self): """Basic Morse decoding""" self.assertEqual(decodeMorse('.-'), 'A') self.assertEqual(decodeMorse('.'), 'E') self.assertEqual(decodeMorse('..'), 'I') self.assertEqual(decodeMorse('. .'), 'EE') self.assertEqual(decodeMorse('. .'), 'E E') self.assertEqual(decodeMorse('...---...'), 'SOS') self.assertEqual(decodeMorse('... --- ...'), 'SOS') self.assertEqual(decodeMorse('... --- ...'), 'S O S')
def test_long_messages(self): """Long messages handling""" self.assertEqual( decodeMorse( decodeBits( '0001110001010101000100000001110111010111000101011100010100011101' '0111010001110101110000000111010101000101110100011101110111000101' '1101110001110100000001010111010001110111011100011101010111000000' '01011101110111000101011100011101110001011101110100010101000000011' '10111011100010101011100010001011101000000011100010101010001000000' '01011101010001011100011101110101000111010111011100000001110101000' '11101110111000111011101000101110101110101110')), 'THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.') self.assertEqual( decodeMorse( decodeBits( '1111111111111110000000000000001111100000111110000011111000001111' '1000000000000000111110000000000000000000000000000000000011111111' '1111111000001111111111111110000011111000001111111111111110000000' '0000000011111000001111100000111111111111111000000000000000111110' '0000111110000000000000001111111111111110000011111000001111111111' '1111100000111110000000000000001111111111111110000011111000001111' '1111111111100000000000000000000000000000000000111111111111111000' '00111110000011111000001111100000000000000011111000001111111111111' '11000001111100000000000000011111111111111100000111111111111111000' '00111111111111111000000000000000111110000011111111111111100000111' '11111111111100000000000000011111111111111100000111110000000000000' '00000000000000000000001111100000111110000011111111111111100000111' '11000000000000000111111111111111000001111111111111110000011111111' '111111100000000000000011111111111111100000111110000011111000001111' '11111111111000000000000000000000000000000000001111100000111111111' '11111100000111111111111111000001111111111111110000000000000001111' '10000011111000001111111111111110000000000000001111111111111110000' '011111111111111100000000000000011111000001111111111111110000011111' '111111111100000111110000000000000001111100000111110000011111000000' '000000000000000000000000000001111111111111110000011111111111111100' '000111111111111111000000000000000111110000011111000001111100000111' '111111111111000000000000000111110000000000000001111100000111111111' '111111000001111100000000000000000000000000000000000111111111111111' '0000000000000001111100000111110000011111000001111100000000000000011111000000000000000000000000000000000001111100000111111111111111000001111100000111110000000000000001111100000111111111111111000000000000000111111111111111000001111111111111110000011111000001111100000000000000011111111111111100000111110000011111111111111100000111111111111111000000000000000000000000000000000001111111111111110000011111000001111100000000000000011111111111111100000111111111111111000001111111111111110000000000000001111111111111110000011111111111111100000111110000000000000001111100000111111111111111000001111100000111111111111111000001111100000111111111111111' )), 'THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.')
def morseInput(): goodChoice = False while not goodChoice: if not goodChoice: print('''Enter your message in Morse. >>> ''', end='') buffer = input() buffer = morse.decodeMorse(buffer) if "<CNF>" in buffer: print("\n\n\nString was not recognised, try again\n\n\n") else: return buffer
def test_multiple_bits_per_dot(self): """Multiple bits per dot handling""" self.assertEqual(decodeMorse(decodeBits('111')), 'E') self.assertEqual(decodeMorse(decodeBits('1111111')), 'E') self.assertEqual(decodeMorse(decodeBits('110011')), 'I') self.assertEqual(decodeMorse(decodeBits('111000111')), 'I') self.assertEqual(decodeMorse(decodeBits('111110000011111')), 'I') self.assertEqual(decodeMorse(decodeBits('111000000000111')), 'EE') self.assertEqual(decodeMorse(decodeBits('11111100111111')), 'M') self.assertEqual(decodeMorse(decodeBits('111000111000111')), 'S') self.assertEqual(decodeMorse(decodeBits( '1111110000001111110000001111' '11000000111111000000000000000000111111000000000000000000111111111111' '11111100000011111100000011111111111111111100000011111111111111111100' '00000000000000000000000000000000000000001111110000001111111111111111' '110000001111111111111111110000001111111111111111110000000000000000001' '111110000001111110000001111111111111111110000000000000000001111111111' '11111111000000111111000000111111000000000000000000111111')), 'HEY JUDE')
def test_hey_jude(self): """Basic HEY JUDE""" self.assertEqual(decodeMorse('.... . -.-- .--- ..- -.. .'), 'HEY JUDE')
def test_extra_zeroes(self): """Extra zeros handling""" self.assertEqual(decodeMorse(decodeBits('01110')), 'E') self.assertEqual(decodeMorse(decodeBits('000000011100000')), 'E')
def test_extra_zeros(self): """Extra zeros handling""" self.assertEqual(decodeMorse(' . '), 'E') self.assertEqual(decodeMorse(' . . '), 'E E')
ciphertext = codecs.open('README.txt', 'rb', 'utf-8').read() # planets symbols from https://en.wikipedia.org/wiki/Planet#20th_century # only 4 types are seen in the file planets = {u'♀': 2, u'⊕': 3, u'♆': 8, u'♇': 9, ' ': ''} nextcipher = "".join([str(planets.get(c)) for c in ciphertext]) # split into integer pairs nextcipher = [nextcipher[i:i + 2] for i in range(0, len(nextcipher), 2)] # tapir cipher decoder tapir = {89: '.', 92: '-', 83: ' ', 82: ' '} print "[+] Tapir code: " + repr(nextcipher) # convert to morse code themorse = "".join([tapir.get(int(c)) for c in nextcipher]).lstrip() print "[+] Morse code: " + themorse # decode the morse code data32 = morse.decodeMorse(themorse + " ") print "[+] Base32: " + data32 #decode the b32 rot13 = base64.b32decode(data32) print "[+] Rot13: " + rot13 print "[+] Flag: " + codecs.encode(rot13, 'rot_13')
ciphertext = codecs.open("README.txt", "rb", "utf-8").read() # planets symbols from https://en.wikipedia.org/wiki/Planet#20th_century # only 4 types are seen in the file planets = {u"♀": 2, u"⊕": 3, u"♆": 8, u"♇": 9, " ": ""} nextcipher = "".join([str(planets.get(c)) for c in ciphertext]) # split into integer pairs nextcipher = [nextcipher[i : i + 2] for i in range(0, len(nextcipher), 2)] # tapir cipher decoder tapir = {89: ".", 92: "-", 83: " ", 82: " "} print "[+] Tapir code: " + repr(nextcipher) # convert to morse code themorse = "".join([tapir.get(int(c)) for c in nextcipher]).lstrip() print "[+] Morse code: " + themorse # decode the morse code data32 = morse.decodeMorse(themorse + " ") print "[+] Base32: " + data32 # decode the b32 rot13 = base64.b32decode(data32) print "[+] Rot13: " + rot13 print "[+] Flag: " + codecs.encode(rot13, "rot_13")
import morse test = "this is a test, 123." print(test) f = morse.encodeMorse(test) print(f) print(morse.decodeMorse(f +" / .- -. -.. / .-. . ...- . .-. ... ."))
def convertRawToReal(self, msg): morse = self.convertRawToMorse(msg) return decodeMorse(morse)