def generateRPoints(params): curve = ECCurve(params.a, params.b, params.p, params.n, params.gx, params.gy) pointG = ECPoint(params.gx, params.gy) pointQ = ECPoint(params.qx, params.qy) rPoints = [] for i in range(NUM_R_POINTS): a = random.randint(2, curve.n) b = random.randint(2, curve.n) aG = curve.multiply(a, pointG) bQ = curve.multiply(b, pointQ) r = curve.add(aG, bQ) e = {} e['a'] = a e['b'] = b e['x'] = r.x e['y'] = r.y rPoints.append(e) return rPoints
def getCurveByName(curveName): curve = None if (curveName == "secp521r1"): curve = secp521r1 if (curveName == "secp256k1"): curve = secp256k1 if (curveName == "ecp131p"): curve = ecp131 if curve == None: return None return ECCurve(curve.a, curve.b, curve.p, curve.n, curve.x, curve.y)
def createContext(params, name, email): ctx = ECDLPContext(name) ctx.params = params ctx.rPoints = generateRPoints(ctx.params) Database.createContext(ctx.name, ctx.email, ctx.params, ctx.rPoints) ctx.curve = ECCurve(ctx.params.a, ctx.params.b, ctx.params.p, ctx.params.n, ctx.params.gx, ctx.params.gy) ctx.pointG = ECPoint(ctx.params.gx, ctx.params.gy) ctx.pointQ = ECPoint(ctx.params.qx, ctx.params.qy) ctx.database = Database.getConnection(ctx.name) return ctx
def loadContext(name): ctx = ECDLPContext(name) ctx.database = Database.getConnection(ctx.name) ctx.database.open() ctx.rPoints = ctx.database.getRPoints() ctx.params = ctx.database.getParams() ctx.status = ctx.database.getStatus() ctx.solution = ctx.database.getSolution() ctx.collisions = ctx.database.getNumCollisions() ctx.database.close() ctx.curve = ECCurve(ctx.params.a, ctx.params.b, ctx.params.p, ctx.params.n, ctx.params.gx, ctx.params.gy) ctx.pointG = ECPoint(ctx.params.gx, ctx.params.gy) ctx.pointQ = ECPoint(ctx.params.qx, ctx.params.qy) return ctx
def __init__(self, params, rPoints, a1, b1, a2, b2, endPoint): # Get params self.params = params self.a1 = a1 self.b1 = b1 self.a2 = a2 self.b2 = b2 self.endPoint = endPoint self.rPoints = rPoints # Set up curve self.curve = ECCurve(params.a, params.b, params.p, params.n, params.gx, params.gy) # Compute starting points g = ECPoint(self.params.gx, self.params.gy) q = ECPoint(self.params.qx, self.params.qy) self.point1 = self.curve.add(self.curve.multiply(a1, g), self.curve.multiply(b1, q)) self.point2 = self.curve.add(self.curve.multiply(a2, g), self.curve.multiply(b2, q))