Iftikhar Burhanuddin on Fri, 14 Jun 2002 14:55:31 -0700 (PDT)

 Point multiplication on elliptic curves over Q_{p} (fwd)

```Hello,

Say f is an elliptic curve over Q_{p} and P is a point on the curve,
e is the reduced elliptic curve,
nump are the number of points on e [nump = p+1-ellap(f,p)],
randno1 and randno2 are randomly generated integers.

P1 = ellpow(f,P,nump);
P2 = ellpow(f,P1,nump);
P3 = ellpow(f,P,nump*nump);

I would expect P2 and P3 to be equal but they are not. I can't figure out
why. Also...

Q1 = ellpow(f,P,randno1);
Q2 = ellpow(f,Q1,nump);
Q3 = ellpow(f,P,randno1*nump);

R1 = ellpow(f,P,nump);
R2 = ellpow(f,R1,randno1);
R3 = ellpow(f,P,nump*randno1);

Again I would expect Q2=Q3=R2=R3. But what I observe is Q2=Q3=R3 and R2 is
something totally different.

Sanity Check ...
S1 = ellpow(f,P,randno1);
S2 = ellpow(f,S1,randno2);
S3 = ellpow(f,P,randno1*randno2);

Luckily S2=S3 as expected!

I've attached a gp script (bug.gp) which performs these tests.

Usage:
bug(range,outputfile)

The prime p is randomly chosen from 1...range and the curve parameters are
randomly generated using p.

For example: bug(150,testing01)

I've also attached the testing01 file.

Regards.
Iftikhar
```
```[0, 0, 0, 127, 84, 0, 254, 336, -16129, -6096, -72576, -134144704, 3539605824/2096011, [-0.6591621847848914369629989104, 0.3295810923924457184814994552 - 11.28387659846507686555138306*I, 0.3295810923924457184814994552 + 11.28387659846507686555138306*I]~, 1.124876961763701162003259070, -0.5624384808818505810016295354 + 0.5404019960642208768091252385*I, -2.941144737565557494801181503 - 5.97757508 E-29*I, 1.470572368782778747400590751 - 4.205787211666463317926236011*I, 0.6078857554637603730809302940]

#points= 150

Point P: is on the curve 1 : [27 + O(131^40), 3 + 95*131 + 111*131^2 + 97*131^3 + 109*131^4 + 15*131^5 + 114*131^6 + 123*131^7 + 82*131^8 + 2*131^9 + 12*131^10 + 22*131^11 + 89*131^12 + 26*131^13 + 44*131^14 + 14*131^15 + 25*131^16 + 89*131^17 + 96*131^18 + 55*131^19 + 59*131^20 + 106*131^21 + 26*131^22 + 94*131^23 + 75*131^24 + 39*131^25 + 115*131^26 + 71*131^27 + 70*131^28 + 112*131^29 + 121*131^30 + 29*131^31 + 34*131^32 + 101*131^33 + 76*131^34 + 110*131^35 + 77*131^36 + 52*131^37 + 17*131^38 + 30*131^39 + O(131^40)]

Point P1 =150*P is on the curve 0 : [7*131^-2 + 121*131^-1 + 62 + 111*131 + 93*131^2 + 105*131^3 + 118*131^4 + 41*131^5 + 110*131^6 + 130*131^7 + 77*131^8 + 53*131^9 + 122*131^10 + 30*131^11 + 23*131^12 + 77*131^13 + 52*131^14 + 100*131^15 + 68*131^16 + 62*131^17 + 73*131^18 + 14*131^19 + 55*131^20 + 127*131^21 + 88*131^22 + 29*131^23 + 105*131^24 + 36*131^25 + 9*131^26 + 81*131^27 + 7*131^28 + 12*131^29 + 96*131^31 + 90*131^32 + 11*131^33 + 51*131^34 + 50*131^35 + 106*131^36 + O(131^37), 9*131^-3 + 64*131^-2 + 75*131^-1 + 12*131 + 2*131^2 + 35*131^3 + 64*131^4 + 87*131^5 + 131^6 + 106*131^7 + 9*131^8 + 46*131^9 + 3*131^10 + 72*131^11 + 89*131^12 + 57*131^13 + 53*131^14 + 115*131^15 + 117*131^16 + 104*131^17 + 15*131^18 + 43*131^19 + 51*131^20 + 25*131^21 + 63*131^22 + 55*131^23 + 128*131^24 + 76*131^25 + 131^26 + 85*131^27 + 26*131^28 + 9*131^29 + 48*131^30 + 12*131^31 + 110*131^32 + 124*131^33 + 108*131^34 + 80*131^35 + O(131^36)]
Point P2 =150.P1: is on the curve 0 : [99*131^-2 + 117*131^-1 + 22 + 2*131 + 10*131^2 + 82*131^3 + 34*131^4 + 25*131^5 + 65*131^6 + 53*131^7 + 73*131^8 + 32*131^9 + 70*131^10 + 76*131^11 + 96*131^12 + 59*131^13 + 119*131^14 + 35*131^15 + 123*131^16 + 131^17 + 64*131^18 + 68*131^19 + 22*131^20 + 65*131^21 + 69*131^22 + 7*131^23 + 36*131^24 + 61*131^25 + 80*131^26 + 102*131^27 + 90*131^28 + 63*131^29 + 66*131^30 + 67*131^31 + 48*131^32 + 64*131^33 + 64*131^34 + 102*131^35 + 130*131^36 + O(131^37), 47*131^-3 + 99*131^-2 + 63*131^-1 + 91 + 68*131 + 121*131^2 + 58*131^3 + 116*131^4 + 63*131^5 + 22*131^6 + 39*131^7 + 60*131^8 + 40*131^9 + 83*131^10 + 101*131^11 + 58*131^12 + 125*131^13 + 87*131^14 + 4*131^15 + 119*131^16 + 11*131^17 + 83*131^18 + 126*131^19 + 56*131^20 + 30*131^21 + 11*131^22 + 87*131^23 + 47*131^24 + 114*131^25 + 54*131^26 + 110*131^27 + 38*131^28 + 68*131^29 + 41*131^30 + 36*131^31 + 23*131^32 + 18*131^33 + 126*131^34 + 43*131^35 + O(131^36)]
Point P3 =150*150.P is on the curve 0 : [53*131^-2 + 76*131^-1 + 97 + 115*131 + 2*131^2 + 26*131^3 + 60*131^4 + 121*131^5 + 103*131^6 + 30*131^7 + 39*131^8 + 75*131^9 + 111*131^10 + 40*131^11 + 88*131^12 + 106*131^13 + 120*131^14 + 23*131^15 + 108*131^17 + 19*131^18 + 47*131^19 + 107*131^20 + 17*131^21 + 104*131^22 + 41*131^23 + 115*131^24 + 60*131^25 + 73*131^26 + 19*131^27 + 131^28 + 11*131^29 + 58*131^30 + 99*131^31 + 52*131^32 + 21*131^33 + 33*131^34 + 116*131^35 + 99*131^36 + O(131^37), 42*131^-3 + 32*131^-2 + 112*131^-1 + 5 + 23*131 + 87*131^2 + 56*131^3 + 12*131^4 + 56*131^5 + 9*131^6 + 36*131^7 + 2*131^8 + 58*131^9 + 9*131^10 + 78*131^11 + 32*131^12 + 72*131^13 + 83*131^14 + 75*131^15 + 127*131^16 + 29*131^17 + 88*131^18 + 131^19 + 130*131^20 + 68*131^21 + 16*131^22 + 9*131^23 + 43*131^24 + 121*131^25 + 112*131^26 + 95*131^27 + 48*131^28 + 27*131^29 + 47*131^30 + 124*131^31 + 47*131^32 + 53*131^33 + 75*131^34 + 60*131^35 + O(131^36)]

Point Q1 =55*P is on the curve 1 : [102 + 125*131 + 57*131^2 + 87*131^3 + 111*131^4 + 99*131^5 + 40*131^6 + 115*131^7 + 88*131^8 + 94*131^9 + 34*131^10 + 85*131^11 + 60*131^12 + 23*131^13 + 88*131^14 + 69*131^15 + 64*131^16 + 95*131^17 + 55*131^18 + 120*131^19 + 88*131^20 + 47*131^21 + 93*131^22 + 92*131^23 + 52*131^24 + 43*131^25 + 47*131^26 + 67*131^27 + 100*131^28 + 80*131^29 + 83*131^30 + 113*131^31 + 118*131^32 + 6*131^33 + 49*131^34 + 82*131^35 + 55*131^36 + 7*131^37 + 67*131^38 + 2*131^39 + O(131^40), 35 + 19*131 + 60*131^2 + 111*131^3 + 72*131^4 + 35*131^5 + 30*131^6 + 42*131^7 + 128*131^8 + 9*131^9 + 93*131^10 + 38*131^11 + 118*131^12 + 17*131^13 + 124*131^14 + 67*131^15 + 92*131^16 + 50*131^17 + 20*131^18 + 128*131^19 + 124*131^20 + 123*131^21 + 89*131^22 + 32*131^24 + 104*131^25 + 44*131^26 + 48*131^27 + 101*131^29 + 110*131^30 + 86*131^31 + 131^32 + 125*131^33 + 50*131^34 + 45*131^35 + 125*131^36 + 31*131^37 + 90*131^38 + 14*131^39 + O(131^40)]
Point Q2 =150.Q1: is on the curve 0 : [77*131^-2 + 113*131^-1 + 5 + 129*131 + 16*131^2 + 10*131^3 + 120*131^4 + 2*131^5 + 96*131^6 + 58*131^7 + 89*131^8 + 91*131^9 + 6*131^10 + 75*131^11 + 91*131^12 + 46*131^13 + 44*131^14 + 87*131^15 + 13*131^16 + 65*131^17 + 89*131^18 + 27*131^19 + 5*131^20 + 59*131^21 + 36*131^22 + 29*131^23 + 16*131^24 + 68*131^25 + 31*131^26 + 89*131^27 + 121*131^28 + 8*131^29 + 127*131^30 + 19*131^31 + 106*131^32 + 73*131^33 + O(131^34), 28*131^-3 + 27*131^-2 + 98*131^-1 + 128 + 51*131 + 125*131^2 + 80*131^3 + 14*131^4 + 118*131^5 + 32*131^6 + 120*131^7 + 6*131^8 + 95*131^9 + 7*131^10 + 120*131^11 + 67*131^12 + 13*131^13 + 70*131^14 + 100*131^15 + 31*131^16 + 80*131^17 + 5*131^18 + 28*131^19 + 104*131^20 + 121*131^21 + 105*131^22 + 91*131^23 + 97*131^24 + 68*131^25 + 114*131^26 + 3*131^27 + 131^28 + 2*131^29 + 89*131^30 + 104*131^31 + 74*131^32 + O(131^33)]
Point Q3 =55*150.P is on the curve 0 : [77*131^-2 + 113*131^-1 + 5 + 129*131 + 16*131^2 + 10*131^3 + 120*131^4 + 2*131^5 + 96*131^6 + 58*131^7 + 89*131^8 + 91*131^9 + 6*131^10 + 75*131^11 + 91*131^12 + 46*131^13 + 44*131^14 + 87*131^15 + 13*131^16 + 65*131^17 + 89*131^18 + 27*131^19 + 5*131^20 + 59*131^21 + 36*131^22 + 29*131^23 + 16*131^24 + 68*131^25 + 31*131^26 + 89*131^27 + 121*131^28 + 8*131^29 + 127*131^30 + 19*131^31 + 106*131^32 + 73*131^33 + 3*131^34 + 22*131^35 + 99*131^36 + O(131^37), 28*131^-3 + 27*131^-2 + 98*131^-1 + 128 + 51*131 + 125*131^2 + 80*131^3 + 14*131^4 + 118*131^5 + 32*131^6 + 120*131^7 + 6*131^8 + 95*131^9 + 7*131^10 + 120*131^11 + 67*131^12 + 13*131^13 + 70*131^14 + 100*131^15 + 31*131^16 + 80*131^17 + 5*131^18 + 28*131^19 + 104*131^20 + 121*131^21 + 105*131^22 + 91*131^23 + 97*131^24 + 68*131^25 + 114*131^26 + 3*131^27 + 131^28 + 2*131^29 + 89*131^30 + 104*131^31 + 74*131^32 + 93*131^33 + 80*131^34 + 82*131^35 + O(131^36)]

Point R1 =150*P is on the curve 0 : [7*131^-2 + 121*131^-1 + 62 + 111*131 + 93*131^2 + 105*131^3 + 118*131^4 + 41*131^5 + 110*131^6 + 130*131^7 + 77*131^8 + 53*131^9 + 122*131^10 + 30*131^11 + 23*131^12 + 77*131^13 + 52*131^14 + 100*131^15 + 68*131^16 + 62*131^17 + 73*131^18 + 14*131^19 + 55*131^20 + 127*131^21 + 88*131^22 + 29*131^23 + 105*131^24 + 36*131^25 + 9*131^26 + 81*131^27 + 7*131^28 + 12*131^29 + 96*131^31 + 90*131^32 + 11*131^33 + 51*131^34 + 50*131^35 + 106*131^36 + O(131^37), 9*131^-3 + 64*131^-2 + 75*131^-1 + 12*131 + 2*131^2 + 35*131^3 + 64*131^4 + 87*131^5 + 131^6 + 106*131^7 + 9*131^8 + 46*131^9 + 3*131^10 + 72*131^11 + 89*131^12 + 57*131^13 + 53*131^14 + 115*131^15 + 117*131^16 + 104*131^17 + 15*131^18 + 43*131^19 + 51*131^20 + 25*131^21 + 63*131^22 + 55*131^23 + 128*131^24 + 76*131^25 + 131^26 + 85*131^27 + 26*131^28 + 9*131^29 + 48*131^30 + 12*131^31 + 110*131^32 + 124*131^33 + 108*131^34 + 80*131^35 + O(131^36)]
Point R2 =55.R1: is on the curve 0 : [17*131^-2 + 11*131^-1 + 2 + 5*131 + 26*131^2 + 50*131^3 + 104*131^4 + 110*131^5 + 62*131^6 + 92*131^7 + 2*131^8 + 127*131^9 + 80*131^10 + 30*131^11 + 98*131^12 + 111*131^13 + 29*131^14 + 58*131^15 + 24*131^16 + 109*131^17 + 19*131^18 + 119*131^19 + 61*131^20 + 3*131^21 + 80*131^22 + 54*131^23 + 113*131^24 + 87*131^25 + 122*131^26 + 21*131^27 + 112*131^28 + 48*131^29 + 104*131^30 + 7*131^31 + 16*131^32 + 62*131^33 + 9*131^34 + 60*131^35 + 7*131^36 + O(131^37), 110*131^-3 + 47*131^-2 + 106*131^-1 + 2 + 106*131 + 35*131^2 + 45*131^3 + 12*131^4 + 67*131^5 + 122*131^6 + 85*131^7 + 42*131^8 + 23*131^9 + 126*131^10 + 113*131^11 + 59*131^12 + 46*131^13 + 82*131^14 + 105*131^15 + 127*131^16 + 2*131^17 + 13*131^18 + 44*131^19 + 34*131^20 + 115*131^21 + 30*131^22 + 67*131^23 + 45*131^24 + 125*131^25 + 57*131^26 + 81*131^27 + 20*131^28 + 22*131^29 + 22*131^30 + 90*131^31 + 42*131^32 + 33*131^33 + 16*131^34 + 65*131^35 + O(131^36)]
Point R3 =150*55.P is on the curve 0 : [77*131^-2 + 113*131^-1 + 5 + 129*131 + 16*131^2 + 10*131^3 + 120*131^4 + 2*131^5 + 96*131^6 + 58*131^7 + 89*131^8 + 91*131^9 + 6*131^10 + 75*131^11 + 91*131^12 + 46*131^13 + 44*131^14 + 87*131^15 + 13*131^16 + 65*131^17 + 89*131^18 + 27*131^19 + 5*131^20 + 59*131^21 + 36*131^22 + 29*131^23 + 16*131^24 + 68*131^25 + 31*131^26 + 89*131^27 + 121*131^28 + 8*131^29 + 127*131^30 + 19*131^31 + 106*131^32 + 73*131^33 + 3*131^34 + 22*131^35 + 99*131^36 + O(131^37), 28*131^-3 + 27*131^-2 + 98*131^-1 + 128 + 51*131 + 125*131^2 + 80*131^3 + 14*131^4 + 118*131^5 + 32*131^6 + 120*131^7 + 6*131^8 + 95*131^9 + 7*131^10 + 120*131^11 + 67*131^12 + 13*131^13 + 70*131^14 + 100*131^15 + 31*131^16 + 80*131^17 + 5*131^18 + 28*131^19 + 104*131^20 + 121*131^21 + 105*131^22 + 91*131^23 + 97*131^24 + 68*131^25 + 114*131^26 + 3*131^27 + 131^28 + 2*131^29 + 89*131^30 + 104*131^31 + 74*131^32 + 93*131^33 + 80*131^34 + 82*131^35 + O(131^36)]

Point S1 =55*P is on the curve 1 : [102 + 125*131 + 57*131^2 + 87*131^3 + 111*131^4 + 99*131^5 + 40*131^6 + 115*131^7 + 88*131^8 + 94*131^9 + 34*131^10 + 85*131^11 + 60*131^12 + 23*131^13 + 88*131^14 + 69*131^15 + 64*131^16 + 95*131^17 + 55*131^18 + 120*131^19 + 88*131^20 + 47*131^21 + 93*131^22 + 92*131^23 + 52*131^24 + 43*131^25 + 47*131^26 + 67*131^27 + 100*131^28 + 80*131^29 + 83*131^30 + 113*131^31 + 118*131^32 + 6*131^33 + 49*131^34 + 82*131^35 + 55*131^36 + 7*131^37 + 67*131^38 + 2*131^39 + O(131^40), 35 + 19*131 + 60*131^2 + 111*131^3 + 72*131^4 + 35*131^5 + 30*131^6 + 42*131^7 + 128*131^8 + 9*131^9 + 93*131^10 + 38*131^11 + 118*131^12 + 17*131^13 + 124*131^14 + 67*131^15 + 92*131^16 + 50*131^17 + 20*131^18 + 128*131^19 + 124*131^20 + 123*131^21 + 89*131^22 + 32*131^24 + 104*131^25 + 44*131^26 + 48*131^27 + 101*131^29 + 110*131^30 + 86*131^31 + 131^32 + 125*131^33 + 50*131^34 + 45*131^35 + 125*131^36 + 31*131^37 + 90*131^38 + 14*131^39 + O(131^40)]
Point S2 =26.S1: is on the curve 1 : [117 + 26*131 + 46*131^2 + 131^3 + 86*131^4 + 67*131^5 + 129*131^6 + 116*131^7 + 104*131^8 + 52*131^9 + 105*131^10 + 50*131^11 + 41*131^12 + 62*131^13 + 61*131^14 + 128*131^15 + 38*131^16 + 20*131^17 + 59*131^18 + 81*131^19 + 45*131^20 + 13*131^21 + 13*131^22 + 30*131^23 + 131^24 + 49*131^25 + 70*131^26 + 91*131^27 + 84*131^28 + 28*131^29 + 8*131^30 + 64*131^31 + 99*131^32 + 52*131^33 + 31*131^34 + 109*131^35 + 96*131^36 + 95*131^37 + O(131^38), 127 + 30*131 + 14*131^2 + 20*131^3 + 70*131^4 + 115*131^5 + 91*131^6 + 101*131^7 + 131^8 + 131^9 + 108*131^10 + 130*131^11 + 84*131^12 + 83*131^13 + 69*131^14 + 52*131^15 + 77*131^16 + 45*131^17 + 38*131^18 + 22*131^19 + 87*131^20 + 53*131^21 + 93*131^22 + 118*131^23 + 24*131^24 + 14*131^25 + 74*131^26 + 26*131^27 + 77*131^28 + 119*131^29 + 129*131^30 + 59*131^31 + 54*131^32 + 33*131^33 + 6*131^34 + 32*131^35 + 61*131^36 + 46*131^37 + O(131^38)]
Point S3 =55*26.P is on the curve 1 : [117 + 26*131 + 46*131^2 + 131^3 + 86*131^4 + 67*131^5 + 129*131^6 + 116*131^7 + 104*131^8 + 52*131^9 + 105*131^10 + 50*131^11 + 41*131^12 + 62*131^13 + 61*131^14 + 128*131^15 + 38*131^16 + 20*131^17 + 59*131^18 + 81*131^19 + 45*131^20 + 13*131^21 + 13*131^22 + 30*131^23 + 131^24 + 49*131^25 + 70*131^26 + 91*131^27 + 84*131^28 + 28*131^29 + 8*131^30 + 64*131^31 + 99*131^32 + 52*131^33 + 31*131^34 + 109*131^35 + O(131^36), 127 + 30*131 + 14*131^2 + 20*131^3 + 70*131^4 + 115*131^5 + 91*131^6 + 101*131^7 + 131^8 + 131^9 + 108*131^10 + 130*131^11 + 84*131^12 + 83*131^13 + 69*131^14 + 52*131^15 + 77*131^16 + 45*131^17 + 38*131^18 + 22*131^19 + 87*131^20 + 53*131^21 + 93*131^22 + 118*131^23 + 24*131^24 + 14*131^25 + 74*131^26 + 26*131^27 + 77*131^28 + 119*131^29 + 129*131^30 + 59*131^31 + 54*131^32 + 33*131^33 + 6*131^34 + 32*131^35 + O(131^36)]

```
```p=40; \\the precision of p-adic numbers

bug(cin, szfilename)=

{

local(f,e,a,b,c,v,q,P,P1,P2,P3,nump,l);

\\write(szfilename, "Range=", cin);

l=random(cin);

while ( !isprime(l),

l= random(cin);

\\write(szfilename ,"l:", l, "  isprime:", isprime(l));

);

\\write(szfilename ,"l:", l, "  isprime:", isprime(l));

a=random(l);

b=random(l);

f=ellinit([0,0,0,a,b]);

write(szfilename,f);

nump=l+1-ellap(f,l);

write(szfilename, "\n");

write(szfilename, " #points= ", l+1-ellap(f,l));

e=ellinit([0,0,0,a,b]*Mod(1,l));  \\checking for good reduction

\\write(szfilename,e);

print("prime=", l);

c= random(l);

while ( kronecker(c*c*c+a*c+b, l) != 1,

c= random(l); \\changed from cin

\\write(szfilename, "c:", c, "  kronecker:", kronecker(c*c*c+a*c+b, l));

);

\\write(szfilename ,"c:", c, "  kronecker:", kronecker(c*c*c+a*c+b, l));

\\write(szfilename, "the x-coordinate v[1]:", v[1]);

q=polrootspadic(x^2-(c*c*c+a*c+b),l,p);\\q[1] is the y-coordinate on the curve

\\write(szfilename, "the y-coordinate q[1]:", q[1]);

\\write(szfilename, "the y-coordinate q[2]:", q[2]);

write(szfilename, "\n");

P=[v[1],q[1]];

write(szfilename, "Point P: is on the curve ", ellisoncurve(f,P), " : " ,P);

randno1 = random(l);

randno2 = random(l);

write(szfilename, "\n");

P1=ellpow(f,P,nump);

write(szfilename, "Point P1 =", nump , "*P ", "is on the curve ", ellisoncurve(f,P1), " : " ,P1);

P2=ellpow(f,P1,nump);

write(szfilename, "Point P2 =", nump, ".P1: ", "is on the curve ", ellisoncurve(f,P2), " : " ,P2);

P3=ellpow(f,P,nump*nump);

write(szfilename, "Point P3 =", nump , "*", nump , ".P ", "is on the curve ", ellisoncurve(f,P3), " : " ,P3);

write(szfilename, "\n");

Q1=ellpow(f,P,randno1);

write(szfilename, "Point Q1 =", randno1 , "*P ", "is on the curve ", ellisoncurve(f,Q1), " : " ,Q1);

Q2=ellpow(f,Q1,nump);

write(szfilename, "Point Q2 =", nump, ".Q1: ", "is on the curve ", ellisoncurve(f,Q2), " : " ,Q2);

Q3=ellpow(f,P,randno1*nump);

write(szfilename, "Point Q3 =", randno1 , "*", nump , ".P ", "is on the curve ", ellisoncurve(f,Q3), " : " ,Q3);

write(szfilename, "\n");

R1=ellpow(f,P,nump);

write(szfilename, "Point R1 =", nump , "*P ", "is on the curve ", ellisoncurve(f,R1), " : " ,R1);

R2=ellpow(f,R1,randno1);

write(szfilename, "Point R2 =", randno1, ".R1: ", "is on the curve ", ellisoncurve(f,R2), " : " ,R2);

R3=ellpow(f,P,nump*randno1);

write(szfilename, "Point R3 =", nump , "*", randno1 , ".P ", "is on the curve ", ellisoncurve(f,R3), " : " ,R3);

write(szfilename, "\n");

S1=ellpow(f,P,randno1);

write(szfilename, "Point S1 =", randno1 , "*P ", "is on the curve ", ellisoncurve(f,S1), " : " ,S1);

S2=ellpow(f,S1,randno2);

write(szfilename, "Point S2 =", randno2, ".S1: ", "is on the curve ", ellisoncurve(f,S2), " : " ,S2);

S3=ellpow(f,P,randno1*randno2);

write(szfilename, "Point S3 =", randno1 , "*", randno2 , ".P ", "is on the curve ", ellisoncurve(f,S3), " : " ,S3);

write(szfilename, "\n");

}

```