def hashtar( secret, data ): mac = newmac( secret, digestmod = sha256 ) f = BytesIO( decodestring( data ) ) with TarFile.open( mode = 'r', fileobj = f ) as tf: members = tf.getmembers() files = [m for m in members if m.isfile()] files.sort( key = attrgetter( 'name' ) ) for f in files: mac.update( f.tobuf() ) return mac.hexdigest()