':return:
A PrimePoint object that is twice this point'

def double(self):

    p = self.curve.p
    a = self.curve.a
    l = (((((3 * self.x) * self.x) + a) * inverse_mod((2 * self.y), p)) % p)
    x3 = (((l * l) - (2 * self.x)) % p)
    y3 = (((l * (self.x - x3)) - self.y) % p)
    return PrimePoint(self.curve, x3, y3)
