Exemple #1
0
    def test_add(self):
        e = []
        for i in range(100):
            seed = str(i).encode("ascii")
            s = password_to_scalar(seed)
            e.append(Base.scalarmult(s))
        for i in range(100):
            x = random.choice(e)
            y = random.choice(e)

            sum1 = element_from_affine(
                slow_add_affine(xform_extended_to_affine(x.XYTZ),
                                xform_extended_to_affine(y.XYTZ)))
            sum2 = x.add(y)
            self.assertElementsEqual(sum1, sum2)
            if x != y:
                sum3 = Element(_add_elements_nonunfied(x.XYTZ, y.XYTZ))
                self.assertElementsEqual(sum1, sum3)
    def test_add(self):
        e = []
        for i in range(100):
            seed = str(i).encode("ascii")
            s = password_to_scalar(seed)
            e.append(Base.scalarmult(s))
        for i in range(100):
            x = random.choice(e)
            y = random.choice(e)

            sum1 = element_from_affine(
                slow_add_affine(xform_extended_to_affine(x.XYTZ),
                                xform_extended_to_affine(y.XYTZ)))
            sum2 = x.add(y)
            self.assertElementsEqual(sum1, sum2)
            if x != y:
                sum3 = Element(_add_elements_nonunfied(x.XYTZ, y.XYTZ))
                self.assertElementsEqual(sum1, sum3)
    def test_orders(self):
        # the point (0,1) is the identity, and has order 1
        p0 = xform_affine_to_extended((0, 1))
        # p0+p0=p0
        # p0+anything=anything

        # The point (0,-1) has order 2
        p2 = xform_affine_to_extended((0, -1))
        p3 = add_elements(p2, p2)  # p3=p2+p2=p0
        p4 = add_elements(p3, p2)  # p4=p3+p2=p2
        p5 = add_elements(p4, p2)  # p5=p4+p2=p0
        self.assertBytesEqual(
            encodepoint(xform_extended_to_affine(p3)),
            encodepoint(xform_extended_to_affine(p0)),
        )
        self.assertBytesEqual(
            encodepoint(xform_extended_to_affine(p4)),
            encodepoint(xform_extended_to_affine(p2)),
        )
        self.assertBytesEqual(
            encodepoint(xform_extended_to_affine(p5)),
            encodepoint(xform_extended_to_affine(p0)),
        )

        # now same thing, but with Element
        p0 = ElementOfUnknownGroup(xform_affine_to_extended((0, 1)))
        self.assertElementsEqual(p0, Zero)
        p2 = ElementOfUnknownGroup(xform_affine_to_extended((0, -1)))
        p3 = p2.add(p2)
        p4 = p3.add(p2)
        p5 = p4.add(p2)
        self.assertElementsEqual(p3, p0)
        self.assertElementsEqual(p4, p2)
        self.assertElementsEqual(p5, p0)
        self.assertFalse(isinstance(p3, Element))
        self.assertFalse(isinstance(p4, Element))
        self.assertFalse(isinstance(p5, Element))

        # and again, with .scalarmult instead of .add
        p3 = p2.scalarmult(2)  # p3=2*p2=p0
        p4 = p2.scalarmult(3)  # p4=3*p2=p2
        p5 = p2.scalarmult(4)  # p5=4*p2=p0
        self.assertElementsEqual(p3, p0)  # TODO: failing
        self.assertElementsEqual(p4, p2)
        self.assertElementsEqual(p5, p0)
        self.assertFalse(isinstance(p3, Element))
        self.assertFalse(isinstance(p4, Element))
        self.assertFalse(isinstance(p5, Element))
    def test_orders(self):
        # the point (0,1) is the identity, and has order 1
        p0 = xform_affine_to_extended((0,1))
        # p0+p0=p0
        # p0+anything=anything

        # The point (0,-1) has order 2
        p2 = xform_affine_to_extended((0,-1))
        p3 = add_elements(p2, p2) # p3=p2+p2=p0
        p4 = add_elements(p3, p2) # p4=p3+p2=p2
        p5 = add_elements(p4, p2) # p5=p4+p2=p0
        self.assertBytesEqual(encodepoint(xform_extended_to_affine(p3)),
                              encodepoint(xform_extended_to_affine(p0)))
        self.assertBytesEqual(encodepoint(xform_extended_to_affine(p4)),
                              encodepoint(xform_extended_to_affine(p2)))
        self.assertBytesEqual(encodepoint(xform_extended_to_affine(p5)),
                              encodepoint(xform_extended_to_affine(p0)))

        # now same thing, but with Element
        p0 = ElementOfUnknownGroup(xform_affine_to_extended((0,1)))
        self.assertElementsEqual(p0, Zero)
        p2 = ElementOfUnknownGroup(xform_affine_to_extended((0,-1)))
        p3 = p2.add(p2)
        p4 = p3.add(p2)
        p5 = p4.add(p2)
        self.assertElementsEqual(p3, p0)
        self.assertElementsEqual(p4, p2)
        self.assertElementsEqual(p5, p0)
        self.assertFalse(isinstance(p3, Element))
        self.assertFalse(isinstance(p4, Element))
        self.assertFalse(isinstance(p5, Element))

        # and again, with .scalarmult instead of .add
        p3 = p2.scalarmult(2) # p3=2*p2=p0
        p4 = p2.scalarmult(3) # p4=3*p2=p2
        p5 = p2.scalarmult(4) # p5=4*p2=p0
        self.assertElementsEqual(p3, p0) # TODO: failing
        self.assertElementsEqual(p4, p2)
        self.assertElementsEqual(p5, p0)
        self.assertFalse(isinstance(p3, Element))
        self.assertFalse(isinstance(p4, Element))
        self.assertFalse(isinstance(p5, Element))
 def test_encodepoint(self):
     for i in range(200):
         P = basic.xform_extended_to_affine(basic.Base.scalarmult(i).XYTZ)
         self.assertEqual(self.orig_encodepoint(P),
                          self.new_encodepoint(P))
Exemple #6
0
 def test_encodepoint(self):
     for i in range(200):
         P = basic.xform_extended_to_affine(basic.Base.scalarmult(i).XYTZ)
         self.assertEqual(self.orig_encodepoint(P), self.new_encodepoint(P))
def scalarmult_affine(pt, e):  # affine->affine
    e = e % L
    return xform_extended_to_affine(scalarmult_element(xform_affine_to_extended(pt), e))
def scalarmult_affine(pt, e): # affine->affine
    e = e % L
    return xform_extended_to_affine(
            scalarmult_element(
             xform_affine_to_extended(pt),
            e))