Iftikhar Burhanuddin on Fri, 14 Jun 2002 14:55:31 -0700 (PDT) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
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)); v=polrootspadic(x-c,l,p); \\v[1] is the p-adic integer \\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"); }