def receiveFile(self):
     self.sock.connect(("127.0.0.1", 1024))
     sid = self.sock.recv(10).decode()
     auth = SM2Sign.SM2Sign(sid)
     self.sock.send(self.id.encode())
     auth.public = bytes_to_point(self.sock.recv(65))
     self.sock.send(point_to_bytes(self.public))
     self.decideKey(auth)
     t = self.sock.recv(3)
     length = int.from_bytes(t, byteorder='big')
     l = 0
     target = b''
     while l < length:
         t = self.sock.recv(1024)
         target = b''.join([target, t])
         l += len(t)
     decrypt = sm4.CryptSM4()
     decrypt.set_key(self.key, 1)
     self.iv = decrypt.crypt_ecb(target[:32])
     target = decrypt.crypt_cbc(self.iv, target[32:])
     nameLen = target[0]
     name = target[1:1 + nameLen]
     result = auth.authenticate(target[1 + nameLen:-64],
                                (target[-64:-32], target[-32:]))
     if result:
         with open(name.decode(), "wb") as f:
             f.write(target[1 + nameLen:-64])
         print("File received from " + sid)
     else:
         print("Authentication failed while receiving.")
         self.sock.close()
         sys.exit(0)
     self.sock.close()
Beispiel #2
0
 def encryptFile(self, addr):
     with open(addr, "rb") as f:
         src = f.read()
     name = os.path.split(addr)[1].encode()
     sign = SM2Sign.SM2Sign(self.id)
     sign.public = self.public
     sign.private = self.private
     signature = sign.sign(src)
     encrypt = sm4.CryptSM4()
     encrypt.set_key(self.key, 0)
     encryptIV = encrypt.crypt_ecb(self.iv)
     cipher = encrypt.crypt_cbc(
         self.iv, b''.join(
             [bytes([len(name)]), name, src, signature[0], signature[1]]))
     return b''.join([encryptIV, cipher])
Beispiel #3
0
def dec(iv, c, key):
    dec = sm4.CryptSM4(mode=sm4.SM4_DECRYPT)
    dec.set_key(key=key, mode=sm4.SM4_DECRYPT)
    m = dec.crypt_cbc(iv, c)
    return m
Beispiel #4
0
def enc(iv, m, key):
    enc = sm4.CryptSM4(mode=sm4.SM4_ENCRYPT)
    enc.set_key(key=key, mode=sm4.SM4_ENCRYPT)
    c = enc.crypt_cbc(iv, m)
    return iv + c
Beispiel #5
0
 def __init__(self):
     self.crypt_sm4 = sm4.CryptSM4()