def testEncodeInMemory(self): """ Checks simple encoding in memory """ encoder = yenc.Encoder() encoder.feed(b'Hello world!') self.assertEqual(b'r\x8f\x96\x96\x99J\xa1\x99\x9c\x96\x8eK', encoder.getEncoded()) self.assertEqual(encoder.getCrc32(), "%08x" % (crc32(b"Hello world!") & 0xffffffff))
def _testEncoderDecoder(self, filename): file_data, crc = self._readFile(filename) file_out = open(filename + '.out', 'wb') encoder = yenc.Encoder(file_out) with open(filename, 'rb') as file_in: data = file_in.read(BLOCK_SIZE) while len(data): encoder.feed(data) data = file_in.read(BLOCK_SIZE) encoder.terminate() logging.info("orig: %s enc: %s" % (crc, encoder.getCrc32())) self.assertEqual(crc, encoder.getCrc32()) # deleting forces files to be flushed del encoder file_out = open(filename + '.dec', 'wb') decoder = yenc.Decoder(file_out) with open(filename + '.out', 'rb') as file_in: data = file_in.read(BLOCK_SIZE) while len(data) > 0: decoder.feed(data) data = file_in.read(BLOCK_SIZE) decoder.flush() logging.info("orig: %s dec: %s" % (crc, decoder.getCrc32())) self.assertEqual(crc, decoder.getCrc32()) # deleting forces files to be flushed # if __del__ is not called further tests are going to fail del decoder data_dec, crc_dec = self._readFile(filename + '.dec') self.assertEqual(file_data, data_dec) self.assertEqual(crc, crc_dec)
def main(): try: opts, args = getopt.getopt(sys.argv[1:], "o:") except getopt.GetoptError: usage() try: # Python 3 file_out = sys.stdout.buffer except AttributeError: # Python < 3 file_out = sys.stdout for o, a in opts: if o == '-o': file_out = open(a, "wb") if args: filename = args[0] if not os.access(filename, os.F_OK | os.R_OK): sys.stderr.write("couldn't access %s\n" % filename) sys.exit(2) else: usage() with open(filename, "rb") as file_in: crc = "%x" % (0xFFFFFFFF & crc32(file_in.read())) name = os.path.split(filename)[1] size = os.stat(filename)[ST_SIZE] line = "=ybegin line=128 size=%d crc32=%s name=%s\r\n" file_out.write((line % (size, crc, name)).encode("ascii")) with open(filename, "rb") as file_in: encoder = yenc.Encoder(file_out) while True: data_in = file_in.read(1024) encoder.feed(data_in) encoder.flush() if len(data_in) < 1024: break encoder.terminate() encoder.flush() line = "=yend size=%d crc32=%s\r\n" % (size, encoder.getCrc32()) file_out.write(line.encode("ascii"))
def testEncoderFlushInMemory(self): encoder = yenc.Encoder() self.assertRaises(ValueError, encoder.flush)
def testEncoderCloseInMemory(self): encoder = yenc.Encoder() self.assertRaises(ValueError, encoder.close)
def testEncoderTerminated(self): encoder = yenc.Encoder(open('afile.out', 'wb')) encoder.terminate() self.assertRaises(IOError, encoder.feed, b'some data')
def testEncoderClosed(self): encoder = yenc.Encoder(open('afile.out', 'wb')) encoder.feed(b'some data') encoder.close() self.assertFalse(encoder._output_file) self.assertRaises(IOError, encoder.feed, b'some data')
def parse_data(data, my_decode_flag, my_caesar_flag): my_answers = list() if my_decode_flag is True: for name in ('hex_codec', 'base64_codec', 'rot_13', 'utf_8', 'utf_16_be', 'utf_16_le', 'bz2', 'zip', 'idna', 'palmos', 'punycode', 'quopri_codec', 'utf_7'): try: result = data.decode(name) if verbose_flag: print "%s succeeded" % name my_answers.append([name, repr(result)]) except Exception as ex: if verbose_flag: print "%s FAILED: %s" % (name, ex) name = 'base32' try: result = base64.b32decode(data) if verbose_flag: print "%s succeeded" % name my_answers.append([name, repr(result)]) except Exception as ex: if verbose_flag: print "%s FAILED: %s" % (name, ex) name = 'uuencode' try: result = binascii.a2b_uu(data) if verbose_flag: print "%s succeeded" % name my_answers.append([name, repr(result)]) except Exception as ex: if verbose_flag: print "%s FAILED: %s" % (name, ex) name = 'quotable' try: result = binascii.a2b_qp(data) if verbose_flag: print "%s succeeded" % name my_answers.append([name, repr(result)]) except Exception as ex: if verbose_flag: print "%s FAILED: %s" % (name, ex) name = 'binhex4' try: result = binascii.rledecode_hqx(binascii.a2b_hqx(data)) if verbose_flag: print "%s succeeded" % name my_answers.append([name, repr(result)]) except Exception as ex: if verbose_flag: print "%s FAILED: %s" % (name, ex) name = 'yenc' try: decoder = yenc.Decoder() decoder.feed(data) result = decoder.getDecoded() if verbose_flag: print "%s succeeded" % name my_answers.append([name, repr(result)]) except Exception as ex: if verbose_flag: print "%s FAILED: %s" % (name, ex) else: for name in ('hex_codec', 'base64_codec', 'rot_13', 'utf_8', 'utf_16_be', 'utf_16_le', 'bz2', 'zip', 'idna', 'palmos', 'punycode', 'quopri_codec', 'utf_7'): try: result = data.encode(name) if verbose_flag: print "%s succeeded" % name my_answers.append([name, repr(result)]) except Exception as ex: if verbose_flag: print "%s FAILED: %s" % (name, ex) name = 'base32' try: result = base64.b32encode(data) if verbose_flag: print "%s succeeded" % name my_answers.append([name, repr(result)]) except Exception as ex: if verbose_flag: print "%s FAILED: %s" % (name, ex) name = 'uuencode' try: result = binascii.b2a_uu(data) if verbose_flag: print "%s succeeded" % name my_answers.append([name, repr(result)]) except Exception as ex: if verbose_flag: print "%s FAILED: %s" % (name, ex) name = 'quotable' try: result = binascii.b2a_qp(data) if verbose_flag: print "%s succeeded" % name my_answers.append([name, repr(result)]) except Exception as ex: if verbose_flag: print "%s FAILED: %s" % (name, ex) name = 'binhex4' try: result = binascii.b2a_hqx(binascii.rlecode_hqx(data)) if verbose_flag: print "%s succeeded" % name my_answers.append([name, repr(result)]) except Exception as ex: if verbose_flag: print "%s FAILED: %s" % (name, ex) name = 'yenc' try: encoder = yenc.Encoder() encoder.feed(data) result = encoder.getEncoded() if verbose_flag: print "%s succeeded" % name my_answers.append([name, repr(result)]) except Exception as ex: if verbose_flag: print "%s FAILED: %s" % (name, ex) if my_caesar_flag: for i in range(1, 256): my_answers.append([ "Caesar_%d" % i, repr(''.join([chr((ord(c) + i) % 256) for c in data])) ]) my_answers.append([ "xor_%d" % i, repr(''.join([chr((ord(c) ^ i) % 256) for c in data])) ]) return my_answers