예제 #1
0
 def test_magnet(self):
     """Test calculation of a magnet link"""
     ctx = rhash.RHash(rhash.MD5 | rhash.TTH)
     ctx.update('abc').finish()
     self.assertEqual(
         'magnet:?xl=3&dn=file.txt&xt=urn:md5:900150983cd24fb0d6963f7d28e17f72&xt=urn:tree:tiger:asd4ujseh5m47pdyb46kbtsqtsgdklbhyxomuia',
         ctx.magnet('file.txt'))
예제 #2
0
 def test_update(self):
     """Test the sequential update calls"""
     ctx = rhash.RHash(rhash.CRC32 | rhash.MD5)
     ctx.update('Hello, ').update('world!').finish()
     self.assertEqual('EBE6C6E6', ctx.HEX(rhash.CRC32))
     self.assertEqual('6cd3556deb0da54bca060b4c39479839',
                      ctx.hex(rhash.MD5))
예제 #3
0
 def test_all_hashes(self):
     r = rhash.RHash(rhash.ALL)
     r.update('a')
     r.finish()
     self.assertEqual('e8b7be43', r.hash(rhash.CRC32))
     self.assertEqual('bde52cb31de33e46245e05fbdbd6fb24', r.hash(rhash.MD4))
     self.assertEqual('0cc175b9c0f1b6a831c399e269772661', r.hash(rhash.MD5))
     self.assertEqual('86f7e437faa5a7fce15d1ddcb9eaeaea377667b8',
                      r.hash(rhash.SHA1))
     self.assertEqual('77befbef2e7ef8ab2ec8f93bf587a7fc613e247f5f247809',
                      r.hash(rhash.TIGER))
     self.assertEqual('czquwh3iyxbf5l3bgyugzhassmxu647ip2ike4y',
                      r.hash(rhash.TTH))
     self.assertEqual('fd408e9d024b58a57aa1313eff14005ff8b2c5d1',
                      r.hash(rhash.BTIH))
     self.assertEqual('bde52cb31de33e46245e05fbdbd6fb24',
                      r.hash(rhash.ED2K))
     self.assertEqual('q336in72uwt7zyk5dxolt2xk5i3xmz5y',
                      r.hash(rhash.AICH))
     self.assertEqual(
         '8aca2602792aec6f11a67206531fb7d7f0dff59413145e6973c45001d0087b42d11bc645413aeff63a42391a39145a591a92200d560195e53b478584fdae231a',
         r.hash(rhash.WHIRLPOOL))
     self.assertEqual('0bdc9d2d256b3ee9daae347be6f4dc835a467ffe',
                      r.hash(rhash.RIPEMD160))
     self.assertEqual(
         'd42c539e367c66e9c88a801f6649349c21871b4344c6a573f849fdce62f314dd',
         r.hash(rhash.GOST))
     self.assertEqual(
         'e74c52dd282183bf37af0079c9f78055715a103f17e3133ceff1aacf2f403011',
         r.hash(rhash.GOST_CRYPTOPRO))
     self.assertEqual('4872bcbc4cd0f0a9dc7c2f7045e5b43b6c830db8',
                      r.hash(rhash.HAS160))
     self.assertEqual('bf5ce540ae51bc50399f96746c5a15bd',
                      r.hash(rhash.SNEFRU128))
     self.assertEqual(
         '45161589ac317be0ceba70db2573ddda6e668a31984b39bf65e4b664b584c63d',
         r.hash(rhash.SNEFRU256))
     self.assertEqual(
         'abd37534c7d9a2efb9465de931cd7055ffdb8879563ae98078d6d6d5',
         r.hash(rhash.SHA224))
     self.assertEqual(
         'ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb',
         r.hash(rhash.SHA256))
     self.assertEqual(
         '54a59b9f22b0b80880d8427e548b7c23abd873486e1f035dce9cd697e85175033caa88e6d57bc35efae0b5afd3145f31',
         r.hash(rhash.SHA384))
     self.assertEqual(
         '1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75',
         r.hash(rhash.SHA512))
     self.assertEqual(
         '943aa9225a2cf154ec2e4dd81237720ba538ca8df2fd83c0b893c5d265f353a0',
         r.hash(rhash.EDONR256))
     self.assertEqual(
         'b59ec44f7beef8a04ceed38a973d77c65e22e9458d5f67b497948da34986c093b5efc5483fbee55f2f740fcad31f18d80db44bb6b8843e7fd599188e7c07233b',
         r.hash(rhash.EDONR512))
     # test reset
     self.assertEqual('d41d8cd98f00b204e9800998ecf8427e',
                      r.reset().finish().hash(rhash.MD5))  # MD5( '' )
예제 #4
0
 def test_output_formats(self):
     r = rhash.RHash(rhash.MD5 | rhash.TTH).finish()
     self.assertEqual('5d9ed00a030e638bdb753a6a24fb900e5a63b8e73e6c25b6',
                      r.hex(rhash.TTH))
     self.assertEqual('2qoyzwmpaczaj2mabgmoz6ccpy', r.base32(rhash.MD5))
     self.assertEqual('1B2M2Y8AsgTpgAmY7PhCfg==', r.base64(rhash.MD5))
     self.assertEqual(
         '\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04\xe9\x80\x09\x98\xec\xf8\x42\x7e',
         r.raw(rhash.MD5))
예제 #5
0
def multi_hash_file(path, hash_types, base=None, mode="rb", encoding=None, errors=None, chunk_size=FILE_IO_BUFFER_SIZE):

	""" Hashes `path` with multiple hash functions.
		`hash_types` is a list of names, eg. ("CRC32", "SHA1").
	"""

	hashdict = {
		"CRC32": rhash.CRC32,
		"MD4": rhash.MD4,
		"MD5": rhash.MD5,
		"SHA1": rhash.SHA1,
		"TIGER": rhash.TIGER,
		"TTH": rhash.TTH,
		"BTIH": rhash.BTIH,
		"ED2K": rhash.ED2K,
		"AICH": rhash.AICH,
		"WHIRLPOOL": rhash.WHIRLPOOL,
		"RIPEMD-160": rhash.RIPEMD160,
		"GOST12_256": rhash.GOST12_256,
		"GOST12_512": rhash.GOST12_512,
		"GOST94": rhash.GOST94,
		"GOST94_CRYPTOPRO": rhash.GOST94_CRYPTOPRO,
		"HAS-160": rhash.HAS160,
		"SNEFRU-128": rhash.SNEFRU128,
		"SNEFRU-256": rhash.SNEFRU256,
		"SHA-224": rhash.SHA224,
		"SHA-256": rhash.SHA256,
		"SHA-384": rhash.SHA384,
		"SHA-512": rhash.SHA512,
		"EDON-R256": rhash.EDONR256,
		"EDON-R512": rhash.EDONR512
	}

	basedict = {
		"upper": rhash.RHPR_UPPERCASE,
		"raw": rhash.RHPR_RAW,
		"hex": rhash.RHPR_HEX,
		"HEX": rhash.RHPR_HEX|rhash.RHPR_UPPERCASE,
		"base32": rhash.RHPR_BASE32,
		"BASE32": rhash.RHPR_BASE32|rhash.RHPR_UPPERCASE,
		"base64": rhash.RHPR_BASE64,
	}

	hashlist = tuple(hashdict[i.upper()] for i in hash_types)
	flags = basedict.get(base, 0)

	hasher = rhash.RHash(reduce(bit_or, hashlist))
	for data in blockfileiter(path, mode, encoding, errors, chunk_size=chunk_size):
		hasher.update(data)
	hasher.finish()
	return tuple(hasher._print(i, flags) for i in hashlist)
예제 #6
0
    def test_update_file(self):
        path = 'python_test_input_123.txt'
        f = open(path, 'wb')
        f.write("\0\1\2\n")
        f.close()

        r = rhash.RHash(rhash.SHA1)
        r.update_file(path).finish()
        self.assertEqual('e3869ec477661fad6b9fc25914bb2eee5455b483', str(r))
        self.assertEqual('e3869ec477661fad6b9fc25914bb2eee5455b483',
                         rhash.hash_for_file(path, rhash.SHA1))
        self.assertEqual(
            'magnet:?xl=4&dn=python_test_input_123.txt&xt=urn:tree:tiger:c6docz63fpef5pdfpz35z7mw2iozshxlpr4erza',
            rhash.magnet_for_file(path, rhash.TTH))
        os.remove(path)
예제 #7
0
    def test_update_file(self):
        """Test the update_file() method."""
        path = 'python_test_input_123.txt'
        file = open(path, 'wb')
        file.write(b"\0\1\2\n")
        file.close()

        ctx = rhash.RHash(rhash.SHA1)
        ctx.update_file(path).finish()
        self.assertEqual('e3869ec477661fad6b9fc25914bb2eee5455b483', str(ctx))
        self.assertEqual('e3869ec477661fad6b9fc25914bb2eee5455b483',
                         rhash.hash_file(path, rhash.SHA1))
        self.assertEqual(
            'magnet:?xl=4&dn=python_test_input_123.txt&xt=urn:tree:tiger:c6docz63fpef5pdfpz35z7mw2iozshxlpr4erza',
            rhash.make_magnet(path, rhash.TTH))
        os.remove(path)
예제 #8
0
 def test_all_hashes(self):
     """Verify all hash functions"""
     ctx = rhash.RHash(rhash.ALL)
     ctx.update('a')
     ctx.finish()
     self.assertEqual('e8b7be43', ctx.hash(rhash.CRC32))
     self.assertEqual('c1d04330', ctx.hash(rhash.CRC32C))
     self.assertEqual('bde52cb31de33e46245e05fbdbd6fb24',
                      ctx.hash(rhash.MD4))
     self.assertEqual('0cc175b9c0f1b6a831c399e269772661',
                      ctx.hash(rhash.MD5))
     self.assertEqual('86f7e437faa5a7fce15d1ddcb9eaeaea377667b8',
                      ctx.hash(rhash.SHA1))
     self.assertEqual('77befbef2e7ef8ab2ec8f93bf587a7fc613e247f5f247809',
                      ctx.hash(rhash.TIGER))
     self.assertEqual('czquwh3iyxbf5l3bgyugzhassmxu647ip2ike4y',
                      ctx.hash(rhash.TTH))
     self.assertEqual(40, len(ctx.hash(rhash.BTIH)))
     self.assertEqual('bde52cb31de33e46245e05fbdbd6fb24',
                      ctx.hash(rhash.ED2K))
     self.assertEqual('q336in72uwt7zyk5dxolt2xk5i3xmz5y',
                      ctx.hash(rhash.AICH))
     self.assertEqual(
         '8aca2602792aec6f11a67206531fb7d7f0dff59413145e6973c45001d0087b42d11bc645413aeff63a42391a39145a591a92200d560195e53b478584fdae231a',
         ctx.hash(rhash.WHIRLPOOL))
     self.assertEqual('0bdc9d2d256b3ee9daae347be6f4dc835a467ffe',
                      ctx.hash(rhash.RIPEMD160))
     self.assertEqual(
         'd42c539e367c66e9c88a801f6649349c21871b4344c6a573f849fdce62f314dd',
         ctx.hash(rhash.GOST94))
     self.assertEqual(
         'e74c52dd282183bf37af0079c9f78055715a103f17e3133ceff1aacf2f403011',
         ctx.hash(rhash.GOST94_CRYPTOPRO))
     self.assertEqual(
         'ba31099b9cc84ec2a671e9313572378920a705b363b031a1cb4fc03e01ce8df3',
         ctx.hash(rhash.GOST12_256))
     self.assertEqual(
         '8b2a40ecab7b7496bc4cc0f773595452baf658849b495acc3ba017206810efb00420ccd73fb3297e0f7890941b84ac4a8bc27e3c95e1f97c094609e2136abb7e',
         ctx.hash(rhash.GOST12_512))
     self.assertEqual('4872bcbc4cd0f0a9dc7c2f7045e5b43b6c830db8',
                      ctx.hash(rhash.HAS160))
     self.assertEqual('bf5ce540ae51bc50399f96746c5a15bd',
                      ctx.hash(rhash.SNEFRU128))
     self.assertEqual(
         '45161589ac317be0ceba70db2573ddda6e668a31984b39bf65e4b664b584c63d',
         ctx.hash(rhash.SNEFRU256))
     self.assertEqual(
         'abd37534c7d9a2efb9465de931cd7055ffdb8879563ae98078d6d6d5',
         ctx.hash(rhash.SHA224))
     self.assertEqual(
         'ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb',
         ctx.hash(rhash.SHA256))
     self.assertEqual(
         '54a59b9f22b0b80880d8427e548b7c23abd873486e1f035dce9cd697e85175033caa88e6d57bc35efae0b5afd3145f31',
         ctx.hash(rhash.SHA384))
     self.assertEqual(
         '1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75',
         ctx.hash(rhash.SHA512))
     self.assertEqual(
         '943aa9225a2cf154ec2e4dd81237720ba538ca8df2fd83c0b893c5d265f353a0',
         ctx.hash(rhash.EDONR256))
     self.assertEqual(
         'b59ec44f7beef8a04ceed38a973d77c65e22e9458d5f67b497948da34986c093b5efc5483fbee55f2f740fcad31f18d80db44bb6b8843e7fd599188e7c07233b',
         ctx.hash(rhash.EDONR512))
     self.assertEqual(
         '9e86ff69557ca95f405f081269685b38e3a819b309ee942f482b6a8b',
         ctx.hash(rhash.SHA3_224))
     self.assertEqual(
         '80084bf2fba02475726feb2cab2d8215eab14bc6bdd8bfb2c8151257032ecd8b',
         ctx.hash(rhash.SHA3_256))
     self.assertEqual(
         '1815f774f320491b48569efec794d249eeb59aae46d22bf77dafe25c5edc28d7ea44f93ee1234aa88f61c91912a4ccd9',
         ctx.hash(rhash.SHA3_384))
     self.assertEqual(
         '697f2d856172cb8309d6b8b97dac4de344b549d4dee61edfb4962d8698b7fa803f4f93ff24393586e28b5b957ac3d1d369420ce53332712f997bd336d09ab02a',
         ctx.hash(rhash.SHA3_512))
     # test reset
     self.assertEqual('d41d8cd98f00b204e9800998ecf8427e',
                      ctx.reset().finish().hash(rhash.MD5))  # MD5( '' )
예제 #9
0
 def test_shift_operator(self):
     """Test the << operator"""
     ctx = rhash.RHash(rhash.MD5)
     ctx << 'a' << 'bc'
     # MD5( 'abc' )
     self.assertEqual('900150983cd24fb0d6963f7d28e17f72', str(ctx.finish()))
예제 #10
0
 def test_shift_operator(self):
     r = rhash.RHash(rhash.MD5)
     r << 'a' << 'bc'
     self.assertEqual('900150983cd24fb0d6963f7d28e17f72',
                      str(r.finish()))  # MD5( 'abc' )
예제 #11
0
 def test_update(self):
     r = rhash.RHash(rhash.CRC32 | rhash.MD5)
     r.update('Hello, ').update('world!').finish()
     self.assertEqual('EBE6C6E6', r.HEX(rhash.CRC32))
     self.assertEqual('6cd3556deb0da54bca060b4c39479839', r.hex(rhash.MD5))