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()
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])
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
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
def __init__(self): self.crypt_sm4 = sm4.CryptSM4()