Esempio n. 1
0
def handle_client(client_socket):
    if gl.get_value('_Xb') == None:
        _Xb = random.randint(_Q - 1000, _Q)
        gl.set_value('_Xb', _Xb)

    _Yb = pow(_A, gl.get_value('_Xb'), _Q)
    request = bytes.decode(client_socket.recv(1024))
    if gl.get_value('key') == None:
        gl.set_value(
            'key',
            str(pow(int(request[64:]), gl.get_value('_Xb'),
                    _Q))[:16].rjust(16, '0'))


# 因为是服务器端,所以只要程序运行,那么这个文件就不能改
    if request[:64] == password:
        try:
            f = open((password), 'w')
            client_socket.send(bytes(sha256('Y') + str(_Yb),
                                     encoding='utf-8'))  # 登录成功

        except:
            print('文件初始化创建失败')
    else:
        request = crypto.aes_decode(request, gl.get_value('key'))
        if request[:4] == 'MSG=':
            try:
                f = open(('./' + password), 'w')
                f.write(request[4:])
                client_socket.send(
                    bytes(crypto.aes_encode('R', gl.get_value('key')),
                          encoding='utf-8'))  # 登录成功
            except:
                print('写入文件失败')
        elif request[:4] == 'RMSG':
            try:
                f = open(('./' + password), 'r')
                msg = f.read()
                client_socket.send(
                    bytes(crypto.aes_encode(msg, gl.get_value('key')),
                          encoding='utf-8'))
            except:
                print('文件读取失败')
    f.close()
    client_socket.close()
Esempio n. 2
0
def RC():
    addr = gl.get_value('addr')
    port = gl.get_value('port')
    target_host = addr
    target_port = port
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    client.connect((target_host, int(target_port)))
    msg = crypto.aes_encode('RMSG', gl.get_value('key'))
    client.send(bytes(msg, encoding='utf-8'))

    response = crypto.aes_decode(bytes.decode(client.recv(4096)),
                                 gl.get_value('key'))

    return response
Esempio n. 3
0
def trans(newMessege):

    addr = gl.get_value('addr')
    port = gl.get_value('port')
    target_host = addr
    target_port = port
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect((target_host, int(target_port)))

    msg = crypto.aes_encode('MSG=' + newMessege, gl.get_value('key'))

    client.send(bytes(msg, encoding='utf-8'))

    response = crypto.aes_decode(bytes.decode(client.recv(4096)),
                                 gl.get_value('key'))

    if response == 'R':
        return True
    else:
        return False
Esempio n. 4
0
def upload():
    username = session.get("username", "")
    password = session.get("password", "")
    agency, signer = login(username, password)

    if agency is None:
        return redirect("/agency")
    
    if request.method == "GET":
        return render_template("agency2-2.html", is_login = True, agency = agency, username = username)

    ent_name = request.form.get("ent-name")
    eng_list = request.form.get("eng-list", "")
    eng_list = [e for e in eng_list.split()]
    data_hash = request.form.get("data-hash")
    if ent_name is None:
        return render_template("agency2-2.html", is_login = True, agency = agency, username = username, fail_msg = "缺少生产企业名称")

    _,_,aal,_ = count_numbers()
    if aal < 3:
        return render_template("agency2-2.html", is_login = True, agency = agency, username = username, fail_msg = "缺少足够的审查实体,至少需要3家审查实体")

    enterprise = Enterprise.query.filter(Enterprise.username == ent_name).first()
    if enterprise is None:
        return render_template("agency2-2.html", is_login = True, agency = agency, username = username, fail_msg = "生产企业名称错误")
    
    data_file = request.files.get("data-file")

    if data_file is None:
        return render_template("agency2-2.html", is_login = True, agency = agency, username = username, fail_msg = "缺少上传文件")
    if data_file.filename == "" : 
        return render_template("agency2-2.html", is_login = True, agency = agency, username = username, fail_msg = "缺少上传文件")

    data_file_path = os.path.join(app.config["UPLOAD_FOLDER"], secure_filename(data_file.filename))
    data_file.save(data_file_path)

    try:
        n = aal
        t = 3
        key, shares = shamir_encode(t, n)

        enc_data_path = os.path.join(app.config["UPLOAD_FOLDER"], "enc-"+secure_filename(data_file.filename))
        aes_encode(key, data_file_path, enc_data_path)

        data_file_addr = ipfs_client.add(enc_data_path)

        for i, audit in enumerate(Audit.query.all()):

            obj_data = IPFSObject(hash = data_file_addr["Hash"], name = secure_filename(data_file.filename), secret = shares[i][1].hex(), idx = shares[i][0])
            audit.files.append(obj_data)
            db.session.add(obj_data)
            db.session.commit()
    except Exception as e:
        traceback(e)
        return render_template("agency2-2.html", is_login = True, agency = agency, username = username, succ_msg = "IPFS上传失败")

    try:
        res = call_contract(enterprise.contract_addr, "Enterprise", "update", args=[data_hash, data_file_addr["Hash"], to_checksum_address(agency.contract_addr), eng_list], signer = signer)
        enterprise.evaluation_addr = res[0]
        db.session.commit()

        res = call_contract(enterprise.evaluation_addr, "ReportEvaluation", "businessUpdate", args = [] , signer = signer)
        licenseAddr = res[0]
        enterprise.license_addr = licenseAddr
        db.session.commit()
    except Exception:
        traceback.print_exc()
        return render_template("agency2-2.html", is_login = True, agency = agency, username = username, succ_msg = "智能合约调用失败")
    return render_template("agency2-2.html", is_login = True, agency = agency, username = username, succ_msg = "添加成功")
Esempio n. 5
0
def enterprise_upload():
    username = session.get("username", "")
    password = session.get("password", "")
    enterprise, signer = login(username, password)

    if enterprise is None:
        return redirect("/enterprise")

    if request.method == "GET":
        return render_template("enterprise2-1.html",
                               is_login=True,
                               enterprise=enterprise,
                               username=username)

    data_hash = request.form.get("data-hash")
    data_file = request.files.get("data-file")

    if data_file is None:
        return render_template("enterprise2-1.html",
                               is_login=True,
                               enterprise=enterprise,
                               username=username,
                               fail_msg="缺少上传文件")
    if data_file.filename == "":
        return render_template("enterprise2-1.html",
                               is_login=True,
                               enterprise=enterprise,
                               username=username,
                               fail_msg="缺少上传文件")

    data_file_path = os.path.join(app.config["UPLOAD_FOLDER"],
                                  secure_filename(data_file.filename))
    data_file.save(data_file_path)

    try:
        _, _, n, _ = count_numbers()
        t = 3
        key, shares = shamir_encode(t, n)

        enc_data_path = os.path.join(
            app.config["UPLOAD_FOLDER"],
            "enc-" + secure_filename(data_file.filename))
        aes_encode(key, data_file_path, enc_data_path)

        data_file_addr = ipfs_client.add(enc_data_path)

        for i, audit in enumerate(Audit.query.all()):
            obj_data = IPFSObject(hash=data_file_addr["Hash"],
                                  name=secure_filename(data_file.filename),
                                  secret=shares[i][1].hex(),
                                  idx=shares[i][0])
            audit.files.append(obj_data)
            db.session.add(obj_data)
            db.session.commit()
    except Exception as e:
        traceback(e)
        return render_template("enterprise2-1.html",
                               is_login=True,
                               enterprise=enterprise,
                               username=username,
                               succ_msg="IPFS上传失败")

    try:
        call_contract(enterprise.contract_addr,
                      "Enterprise",
                      "updateData",
                      args=[data_hash, data_file_addr["Hash"]],
                      signer=signer)
    except Exception as e:
        traceback(e)
        return render_template("enterprise2-1.html",
                               is_login=True,
                               enterprise=enterprise,
                               username=username,
                               succ_msg="智能合约调用失败")
    return render_template("enterprise2-1.html",
                           is_login=True,
                           enterprise=enterprise,
                           username=username,
                           succ_msg="添加成功")