Пример #1
0
 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))
Пример #2
0
    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)
Пример #3
0
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"))
Пример #4
0
 def testEncoderFlushInMemory(self):
     encoder = yenc.Encoder()
     self.assertRaises(ValueError, encoder.flush)
Пример #5
0
 def testEncoderCloseInMemory(self):
     encoder = yenc.Encoder()
     self.assertRaises(ValueError, encoder.close)
Пример #6
0
 def testEncoderTerminated(self):
     encoder = yenc.Encoder(open('afile.out', 'wb'))
     encoder.terminate()
     self.assertRaises(IOError, encoder.feed, b'some data')
Пример #7
0
 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')
Пример #8
0
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