예제 #1
0
파일: 3.c 프로젝트: ta5aka1/practice
void main(){
    struct POINT a;
    a.x = 2;
    a.y = 3;
    a = doublePoint(a);
    
    printf("x:%d y:%d\n", a.x, a.y);
}
예제 #2
0
ECPoint ECCurve::addPoint(ECPoint &p, ECPoint &q)
{
	BigInteger rx;
	BigInteger ry;
	BigInteger px = p.getX();
	BigInteger py = p.getY();
	BigInteger qx = q.getX();
	BigInteger qy = q.getY();

	// Px == Qx && Py == Qy
	if (p == q) {
		return doublePoint(p);
	}

	// Px == Qx && Py != Qy
	if (px == qx) {
		return ECPoint();
	}

	if (p.isPointAtInfinity()) {
		return q;
	}

	if (q.isPointAtInfinity()) {
		return p;
	}

	// s = (py - qy)/(px - qx)
	BigInteger rise = (py - qy) % _p;
	BigInteger run = (px - qx) % _p;
	BigInteger s = (run.invm(_p) * rise) % _p;

	// rx = s^2 - px - qx
	rx = (s*s - px - qx) % _p;

	// ry = -py + s(px - rx)
	ry = (s * (px - rx) - py) % _p;

	return ECPoint(rx, ry);
}