コード例 #1
0
ファイル: CirrolusPeer.py プロジェクト: Liblor/Cirrolus
 def packPeers(self, peers):
     """
     All known peers are packed according to the pattern for sharing peers.
     |n| [n x | IP | Port |]
     1B          n x 6B
     """
     n = bs.int2byte(len(peers))
     return n + b''.join(map(lambda x: socket.inet_aton(x[0])
         + struct.pack("!H", x[1]), peers))
コード例 #2
0
ファイル: CirrolusPeer.py プロジェクト: Liblor/Cirrolus
 def searchRequest0(self, hashfilename, username):
     n = bs.int2byte(len(username))
     try:
         username = username.encode()
     except AttributeError:
         pass
     payload = b''.join((hashfilename, n, username))
     toRemove = []
     for i in self.peers:
         try:
             connection = self.connectToServer(i)
         except ConnectionRefusedError:
             toRemove.append(i)
             continue
         try:
             self.send(connection, 7, payload)
             reply = self.receive(connection)
             self.handleAccordingly(connection, reply, 8)
         finally:
             connection.close()
     for i in toRemove:
         self.removePeer(i)
コード例 #3
0
def createFragments(file_, amount, directory="cache/upload",
                    prime=2 ** 261 - 261, chunksize=128, version=0,
                    **meta):
    """
    Creates Fragments and returns a list of storage location

    meta:
    -----
    filename - SHA256 of filename
    uploader - Username of uploader
    private
    """
    assert amount >= 4
    makeDir(directory)
    files = []
    header = b"#CL" + bs.int2byte(version)
    bytesToAdd = calcBytesToAdd(file_)
    if "filename" not in meta:
        filename = os.path.split(file_)[-1].encode()
        meta["filename"] = hashlib.sha256(filename).hexdigest()
    meta["added_bytes"] = bytesToAdd
    meta["hash"] = checksumSha256(file_)
    polynomes = createPolynomials(file_, bytesToAdd)
    xValues = random.sample(range(1, 1000000000000000000), amount)
    for x in xValues:
        currentMeta = meta.copy()
        currentMeta["x"] = x
        currentMeta = json.dumps(currentMeta).encode()
        currentMeta = b''.join((bs.int2bytes(len(currentMeta), 4), currentMeta))
        pieces = b''
        for i in range(len(polynomes)):
            pieces += bs.int2bytes(polynomes[i](x, prime), 33)
        tempFragmentName = "{}/{}".format(directory,
                                          meta["filename"][:14] + str(x))
        files.append(tempFragmentName)
        with open(tempFragmentName, 'wb') as f:
            f.write(b''.join((header, currentMeta, pieces)))
    return files
コード例 #4
0
ファイル: CirrolusPeer.py プロジェクト: Liblor/Cirrolus
 def requestFragment0(self, peer, filehash, username):
     """
     shaFilename and username have to be a byte-object (Py3)
     [str in py2]
     Returns True if successful
     """
     n = bs.int2byte(len(username))
     payload = b''.join((filehash, n, username))
     try:
         connection = self.connectToServer(peer)
     except ConnectionRefusedError:
         self.removePeer(peer)
         self.logger.info("Could not request fragment")
         return False
     try:
         self.send(connection, 5, payload)
         reply = self.receive(connection)
         self.logger.debug("Requested fragment: {}".format(reply))
         return self.handleAccordingly(connection, reply, 6)
     except FileNotFoundError:
         return False
     finally:
         connection.close()
コード例 #5
0
ファイル: readyAES.py プロジェクト: Liblor/Cirrolus
 def _pad(self, s):
     return s + (self.blockSize - len(s) % self.blockSize) \
         * bs.int2byte(self.blockSize - len(s) % self.blockSize)
コード例 #6
0
ファイル: CirrolusPeer.py プロジェクト: Liblor/Cirrolus
 def packMessage(self, version, messageId, payload=b''):
     message = b''.join((b'CL', bs.int2byte(version), bs.int2byte(messageId), payload))
     return message