github.com/hellobchain/newcryptosm@v0.0.0-20221019060107-edb949a317e9/sm9/constants.go (about) 1 package sm9 2 3 import ( 4 "math/big" 5 ) 6 7 func bigFromBase10(s string) *big.Int { 8 n, _ := new(big.Int).SetString(s, 10) 9 return n 10 } 11 12 //simon add 13 func bigFromBase16(s string) *big.Int { 14 n, _ := new(big.Int).SetString(s, 16) 15 return n 16 } 17 18 //sm9 para t: 19 var t = bigFromBase16("600000000058F98A") 20 21 //6*t+2=2400000000215d93c 22 23 // p is a prime over which we form a basic field: 36u⁴+36u³+24u²+6u+1.//u = t 24 var Sm9_p = bigFromBase16("B640000002A3A6F1D603AB4FF58EC74521F2934B1A7AEEDBE56F9B27E351457D") //checked 25 var p = bigFromBase16("B640000002A3A6F1D603AB4FF58EC74521F2934B1A7AEEDBE56F9B27E351457D") //checked 26 var constu = bigFromBase16("16c80000005474de3ac07569feb1d8e8a43e5269634f5ddb7cadf364fc6a28af") 27 var constuplus1 = bigFromBase16("16c80000005474de3ac07569feb1d8e8a43e5269634f5ddb7cadf364fc6a28b0") 28 var const2uplus1 = bigFromBase16("2d90000000a8e9bc7580ead3fd63b1d1487ca4d2c69ebbb6f95be6c9f8d4515f") 29 var mogo_bigInt = bigFromBase16("49bffffffd5c590e29fc54b00a7138bade0d6cb4e58511241a9064d81caeba83") //R mod p 30 var mogo_sqr_bigInt = bigFromBase16("2ea795a656f62fbde479b522d6706e7b88f8105fae1a5d3f27dea312b417e2d2") //R*R mod p 31 // Order is the number of elements in both G₁ and G₂: 36u⁴+36u³+18u²+6u+1. 32 var Order = bigFromBase16("B640000002A3A6F1D603AB4FF58EC74449F2934B18EA8BEEE56EE19CD69ECF25") 33 34 // xiToPMinus1Over6 is ξ^((p-1)/6) where ξ = i; //SM9 //checked; 35 var xiToPMinus1Over6 = &gfP2{gfP{0x0, 0x0, 0x0, 0x0}, gfP{0x1a98dfbd4575299f, 0x9ec8547b245c54fd, 0xf51f5eac13df846c, 0x9ef74015d5a16393}} 36 37 // xiToPMinus1Over3 is ξ^((p-1)/3) where ξ = i. 38 var xiToPMinus1Over3 = &gfP2{gfP{0x0, 0x0, 0x0, 0x0}, gfP{0xb626197dce4736ca, 0x08296b3557ed0186, 0x9c705db2fd91512a, 0x1c753e748601c992}} 39 40 // xiToPMinus1Over2 is ξ^((p-1)/2) where ξ = i. 41 var xiToPMinus1Over2 = &gfP2{gfP{0x0, 0x0, 0x0, 0x0}, gfP{0x39b4ef0f3ee72529, 0xdb043bf508582782, 0xb8554ab054ac91e3, 0x9848eec25498cab5}} 42 43 /**********************************************************/ //0919:add xi^-1 44 // xiToPMinus1Over3i is (ξ^-1)^((p-1)/3) where ξ = i.(1,0) //checked. 45 var xiToPMinus1Over3i = &gfP2{gfP{0x0, 0x0, 0x0, 0x0}, gfP{0x646a4b5a4e6783b9, 0xd5e4017f8d980f9d, 0x8d8bf6fd0cdfe790, 0x2d4ac18b775a8f7b}} 46 47 // xiToPMinus1Over2i is (ξ^-1)^((p-1)/2) where ξ = i. //checked. 48 var xiToPMinus1Over2i = &gfP2{gfP{0x0, 0x0, 0x0, 0x0}, gfP{0xabbaac18a46a2054, 0x46ee57561222c759, 0x1dae609fa0e23561, 0x1df7113dae0adc3c}} 49 50 // xiToPSquaredMinus1Over3i is (ξ^-1)^((p²-1)/3) where ξ = i. //checked. 51 var xiToPSquaredMinus1Over3i = &gfP{0x2f4981aa150a0eb3, 0x19c92815c28ded55, 0x39934d9cf7fd761b, 0x99cac18b7ca1dd5f} 52 53 // xiToPSquaredMinus1Over3 is ξ^((p²-1)/3) where ξ = i. 54 var xiToPSquaredMinus1Over3 = &gfP{0x81054fcd94e9c1c4, 0x4c0e91cb8ce2df3e, 0x4877b452e8aedfb4, 0x88f53e748b491776} 55 56 // xiTo2PSquaredMinus2Over3 is ξ^((2p²-2)/3) where ξ = i (a cubic root of unity, mod p). 57 var xiTo2PSquaredMinus2Over3 = &gfP{0x2f4981aa150a0eb3, 0x19c92815c28ded55, 0x39934d9cf7fd761b, 0x99cac18b7ca1dd5f} 58 59 // xiToPSquaredMinus1Over6 is ξ^((1p²-1)/6) where ξ = i+3 (a cubic root of -1, mod p). 60 var xiToPSquaredMinus1Over6 = &gfP{0xb626197dce4736ca, 0x08296b3557ed0186, 0x9c705db2fd91512a, 0x1c753e748601c992} 61 62 // xiTo2PMinus2Over3 is ξ^((2p-2)/3) where ξ = i+3. 63 var xiTo2PMinus2Over3 = &gfP2{gfP{0x0, 0x0, 0x0, 0x0}, gfP{0x81054fcd94e9c1c4, 0x4c0e91cb8ce2df3e, 0x4877b452e8aedfb4, 0x88f53e748b491776}} 64 65 // p2 is p, represented as little-endian 64-bit words. 66 var p2 = [4]uint64{0xe56f9b27e351457d, 0x21f2934b1a7aeedb, 0xd603ab4ff58ec745, 0xb640000002a3a6f1} 67 68 // np is the negative inverse of p, mod 2^256. 69 var np = [4]uint64{0x892bc42c2f2ee42b, 0x181ae39613c8dbaf, 0x966a4b291522b137, 0xafd2bac5558a13b3} 70 71 // rN1 is R^-1 where R = 2^256 mod p. 72 var rN1 = &gfP{0x0a1c7970e5df544d, 0xe74504e9a96b56cc, 0xcda02d92d4d62924, 0x7d2bc576fdf597d1} 73 74 // r2 is R^2 where R = 2^256 mod p. 75 var r2 = &gfP{0x27dea312b417e2d2, 0x88f8105fae1a5d3f, 0xe479b522d6706e7b, 0x2ea795a656f62fbd} 76 77 // r3 is R^3 where R = 2^256 mod p. 78 var r3 = &gfP{0x130257769df5827e, 0x36920fc0837ec76e, 0xcbec24519c22a142, 0x219be84a7c687090} 79 80 //need mogo format //somin 1023change and check; 81 //var G1x = &gfP{0xe8c4e4817c66dddd, 0xe1e4086909dc3280, 0xf5ed0704487d01d6, 0x93de051d62bf718f} 82 var G1x = &gfP{0x22e935e29860501b, 0xa946fd5e0073282c, 0xefd0cec817a649be, 0x5129787c869140b5} 83 var G1y = &gfP{0xee779649eb87f7c7, 0x15563cbdec30a576, 0x326353912824efbf, 0x7215717763c39828} 84 85 var DoubleGx = &gfP{0x8fdf2548f0fde68, 0xc80ddebf804d6dd4, 0xc8cef5282905b7ca, 0x6007e08434132464} 86 var kbaseG = bigFromBase16("a5702f05cf1315305e2d6eb64b0deb923db1a0bcf0caff90523ac8754aa6982078559a844411f9825c109f5ee3f52d720dd01785392a727bb1556952b2b013d3") 87 var mogo = &gfP{0x1a9064d81caeba83, 0xde0d6cb4e5851124, 0x29fc54b00a7138ba, 0x49bffffffd5c590e} 88 var mogo_sqr = &gfP{0x27dea312b417e2d2, 0x88f8105fae1a5d3f, 0xe479b522d6706e7b, 0x2ea795a656f62fbd} 89 90 /*****************************homocrypt para*************************/ 91 //beta:beta^3 =1 mod p 92 //(1,beta,beta^2) 93 var beta = &gfP{0x81054fcd94e9c1c4, 0x4c0e91cb8ce2df3e, 0x4877b452e8aedfb4, 0x88f53e748b491776} 94 var a1 = bigFromBase16("c000000000b1f315") 95 var b1 = bigFromBase16("-d8000000019062edc000b98b0d64696c") 96 var a2 = bigFromBase16("d8000000019062ee8000b98b0e165c81") 97 var b2 = bigFromBase16("c000000000b1f315") 98 99 //beta^2 100 var beta2 = &gfP{0x2f4981aa150a0eb3, 0x19c92815c28ded55, 0x39934d9cf7fd761b, 0x99cac18b7ca1dd5f} 101 var a1plus = bigFromBase16("d8000000019062edc000b98b0d64696c") 102 var b1plus = bigFromBase16("-c000000000b1f315") 103 var a2plus = bigFromBase16("c000000000b1f315") 104 var b2plus = bigFromBase16("d8000000019062ee8000b98b0e165c81") 105 106 /*****************************homo para*************************/