def test_named_constructors(self): self.assertEqual(multihash.sha1().known_hash, multihash.new('sha1').known_hash) self.assertEqual(multihash.sha3().known_hash, multihash.new('sha3').known_hash) self.assertEqual(multihash.blake2s().known_hash, multihash.new('blake2s').known_hash)
def post(self): parser = reqparse.RequestParser() parser.add_argument('hash', action="append") args = parser.parse_args() if len(request.files) < 1: return {"message": "No file(s) detected."} if len(request.files) > 1: return {"message": "Too many files"} if len(args['hash']) < 1: return {"message": "No hashes detected"} hashers = [] for n in args['hash']: if n in BLUEPRINT.config['DISALLOWED_ALGOS']: return { "message": "Disallowed algorithm included. ({})".format(n) } try: hashers.append(multihash.new(n)) except: return { "message": "Unsupported algorithm included ({})".format(n) } file_key = list(request.files.keys())[0] h = multihash.MultiHash.from_flo( request.files[file_key], hashers=hashers, chunksize=int(BLUEPRINT.config.get("BUFF", 1024))) return h.hexdigest()
def test_copy(self): mh1 = multihash.new('sha3') mh1.update(b'foo') mh2 = mh1.copy() self.assertEqual(mh1.hexdigest(), mh2.hexdigest()) mh2.update(b'bar') self.assertNotEqual(mh1.hexdigest(), mh2.hexdigest())
def encode(self, hash_name, payload, expected_code): multihasher = multihash.new(hash_name) if hash_name == "blake2s": reference_hasher = pyblake2.blake2s() elif hash_name == "blake2b": reference_hasher = pyblake2.blake2b() elif hash_name == "sha3": reference_hasher = hashlib.new("sha3_256") else: reference_hasher = hashlib.new(hash_name) multihasher.update(payload.encode("utf8")) reference_hasher.update(payload.encode("utf8")) self.assertTrue(multihasher.hexdigest().endswith(reference_hasher.hexdigest())) self.assertEqual(multihasher.digest()[0], expected_code) self.assertEqual(multihasher.digest()[1], len(reference_hasher.digest()))
def encode(self, hash_name, payload, expected_code): multihasher = multihash.new(hash_name) if hash_name == 'blake2s': reference_hasher = pyblake2.blake2s() elif hash_name == 'blake2b': reference_hasher = pyblake2.blake2b() elif hash_name == 'sha3': reference_hasher = hashlib.new('sha3_256') else: reference_hasher = hashlib.new(hash_name) multihasher.update(payload.encode('utf8')) reference_hasher.update(payload.encode('utf8')) self.assertTrue(multihasher.hexdigest().endswith( reference_hasher.hexdigest())) self.assertEqual(multihasher.digest()[0], expected_code) self.assertEqual(multihasher.digest()[1], len(reference_hasher.digest()))
def post(self): parser = reqparse.RequestParser() parser.add_argument('hash', action="append") parser.add_argument('text') args = parser.parse_args() if len(args['hash']) < 1: return {"message": "No hashes detected"} hashers = [] for n in args['hash']: if n in BLUEPRINT.config['DISALLOWED_ALGOS']: return { "message": "Disallowed algorithm included. ({})".format(n) } try: hashers.append(multihash.new(n)) except: return { "message": "Unsupported algorithm included ({}".format(n) } h = multihash.MultiHash(args['text'].encode(), hashers=hashers) return h.hexdigest()
def testNew(self): x = MultiHash(hashers=['md5', 'sha256']) y = new(x.name) self.assertEqual(set(n.name for n in x.hashers), set(m.name for m in y.hashers))
def test_unexisting(self): with self.assertRaises(ValueError): multihash.new('foo').encode('42')
def test_named_constructors(self): self.assertEqual(multihash.sha1().known_hash, multihash.new("sha1").known_hash) self.assertEqual(multihash.sha3().known_hash, multihash.new("sha3").known_hash) self.assertEqual(multihash.blake2s().known_hash, multihash.new("blake2s").known_hash)
def test_unexisting(self): with self.assertRaises(ValueError): multihash.new("foo").encode("42")