You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@milagro.apache.org by br...@apache.org on 2019/01/15 15:19:43 UTC
[38/51] [partial] incubator-milagro-crypto git commit: update code
http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/go/ROM64.go
----------------------------------------------------------------------
diff --git a/version22/go/ROM64.go b/version22/go/ROM64.go
deleted file mode 100644
index 438c99f..0000000
--- a/version22/go/ROM64.go
+++ /dev/null
@@ -1,826 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
-*/
-
-/* Fixed Data in ROM - Field and Curve parameters */
-
-package main
-
-type Chunk int64
-
-
-/* First the 32/64-bit dependent BIG code */
-/* Note that because of the lack of a 128-bit integer, 32 and 64-bit code needs to be done differently */
-
-func pexceed(a *BIG,b *BIG) bool {
- ea:=EXCESS(a)
- eb:=EXCESS(b)
- if (ea+1)>FEXCESS/(eb+1) {return true}
- return false
-}
-
-func sexceed(a *BIG) bool {
- ea:=EXCESS(a)
- if (ea+1)>FEXCESS/(ea+1) {return true}
- return false
-}
-
-func ff_pexceed(a *BIG,b *BIG) bool {
- ea:=FF_EXCESS(a)
- eb:=FF_EXCESS(b)
- if (ea+1)>P_FEXCESS/(eb+1) {return true}
- return false
-}
-
-func ff_sexceed(a *BIG) bool {
- ea:=FF_EXCESS(a)
- if (ea+1)>P_FEXCESS/(ea+1) {return true}
- return false
-}
-
-/* return a*b as DBIG */
-func mul(a *BIG,b *BIG) *DBIG {
- c:=NewDBIG()
- carry:= Chunk(0)
-// a.norm()
-// b.norm()
-
- for i:=0;i<NLEN;i++ {
- carry=0
- for j:=0;j<NLEN;j++ {
- carry,c.w[i+j]=muladd(a.w[i],b.w[j],carry,c.w[i+j])
- //carry=c.muladd(a.w[i],b.w[j],carry,i+j)
- }
- c.w[NLEN+i]=carry
- }
-
- return c
-}
-
-/* return a^2 as DBIG */
-func sqr(a *BIG) *DBIG {
- c:=NewDBIG()
- carry:= Chunk(0)
-// a.norm()
- for i:=0;i<NLEN;i++ {
- carry=0;
- for j:=i+1;j<NLEN;j++ {
- carry,c.w[i+j]=muladd(2*a.w[i],a.w[j],carry,c.w[i+j])
- //carry=c.muladd(2*a.w[i],a.w[j],carry,i+j)
- }
- c.w[NLEN+i]=carry
- }
-
- for i:=0;i<NLEN;i++ {
- top,bot:=muladd(a.w[i],a.w[i],0,c.w[2*i])
- c.w[2*i]=bot
- c.w[2*i+1]+=top
- //c.w[2*i+1]+=c.muladd(a.w[i],a.w[i],0,2*i)
-
- }
- c.norm()
- return c
-}
-
-func monty(md* BIG, mc Chunk,d* DBIG) *BIG {
- carry:=Chunk(0)
- m:=Chunk(0)
- for i:=0;i<NLEN;i++ {
- if (mc==-1) {
- m=(-d.w[i])&BMASK
- } else {
- if (mc==1) {
- m=d.w[i]
- } else {m=(mc*d.w[i])&BMASK}
- }
-
- carry=0
- for j:=0;j<NLEN;j++ {
- carry,d.w[i+j]=muladd(m,md.w[j],carry,d.w[i+j])
- //carry=d.muladd(m,md.w[j],carry,i+j)
- }
- d.w[NLEN+i]+=carry
- }
-
- b:=NewBIG()
- for i:=0;i<NLEN;i++ {
- b.w[i]=d.w[NLEN+i]
- }
- b.norm()
- return b
-}
-
-/* set this[i]+=x*y+c, and return high part */
-func muladd(a Chunk,b Chunk,c Chunk,r Chunk) (Chunk,Chunk) {
- x0:=a&HMASK
- x1:=(a>>HBITS)
- y0:=b&HMASK;
- y1:=(b>>HBITS)
- bot:=x0*y0
- top:=x1*y1
- mid:=x0*y1+x1*y0
- x0=mid&HMASK;
- x1=(mid>>HBITS)
- bot+=x0<<HBITS; bot+=c; bot+=r
- top+=x1;
- carry:=bot>>BASEBITS
- bot&=BMASK
- top+=carry
- return top,bot
-}
-
-
-/********************************************/
-
-/* Set Curve */
-/* Don't Modify from here... */
-
-const CHUNK int=64 /* Set word size */
-
-const NOT_SPECIAL int=0
-const PSEUDO_MERSENNE int=1
-const MONTGOMERY_FRIENDLY int=2
-const GENERALISED_MERSENNE int=3
-const WEIERSTRASS int=0
-const EDWARDS int=1
-const MONTGOMERY int=2
-const BN_CURVE int=0
-const BLS_CURVE int=1
-
-/* ...to here */
-
-
-/*** Enter Some Field details here ***/
-// Curve 25519
-// const MODBITS uint=255
-// const MOD8 uint=5
-// const BASEBITS uint=56
-// const AES_S uint= 0
-
-// NIST256 or Brainpool
-// const MODBITS uint=256
-// const MOD8 uint=7
-// const BASEBITS uint=56
-// const AES_S uint= 0
-
-// MF254
-// const MODBITS uint=254
-// const MOD8 uint=7
-// const BASEBITS uint=56
-// const AES_S uint= 0
-
-// MS255
-// const MODBITS uint= 255
-// const MOD8 uint= 3
-// const BASEBITS uint=56
-// const AES_S uint= 0
-
-// MF256
-// const MODBITS uint=256
-// const MOD8 uint=7
-// const BASEBITS uint=56
-// const AES_S uint= 0
-
-// MS256
-// const MODBITS uint= 256
-// const MOD8 uint= 3
-// const BASEBITS uint=56
-// const AES_S uint= 0
-
-// ANSSI
-// const MODBITS uint= 256
-// const MOD8 uint= 3
-// const BASEBITS uint=56
-// const AES_S uint= 0
-
-// BN254 Curve
-//const MODBITS uint=254 /* Number of bits in Modulus */
-//const MOD8 uint=3 /* Modulus mod 8 */
-//const BASEBITS uint=56
-//const AES_S uint= 0
-
-// BN454 Curve
-//const MODBITS uint=454 /* Number of bits in Modulus */
-//const MOD8 uint=3 /* Modulus mod 8 */
-//const BASEBITS uint=60
-//const AES_S uint= 128
-
-// BLS383 Curve
-const MODBITS uint=383 /* Number of bits in Modulus */
-const MOD8 uint=3 /* Modulus mod 8 */
-const BASEBITS uint=56
-const AES_S uint= 0
-
-// BLS455 Curve
-//const MODBITS uint=455 /* Number of bits in Modulus */
-//const MOD8 uint=3 /* Modulus mod 8 */
-//const BASEBITS uint=60
-//const AES_S uint= 128
-
-// HIFIVE Curve
-// const MODBITS uint=336
-// const MOD8 uint=5
-// const BASEBITS uint=60
-// const AES_S uint= 128
-
-// GOLDILOCKS
-// const MODBITS uint=448
-// const MOD8 uint=7
-// const BASEBITS uint=60
-// const AES_S uint= 0
-
-// NIST384
-// const MODBITS uint=384
-// const MOD8 uint=7
-// const BASEBITS uint=60
-// const AES_S uint= 0
-
-// C41417
-// const MODBITS uint=414
-// const MOD8 uint=7
-// const BASEBITS uint=60
-// const AES_S uint= 0
-
-// NIST521
-// const MODBITS uint=521
-// const MOD8 uint=7
-// const BASEBITS uint=60
-// const AES_S uint= 0
-
-// BN646 Curve
-// const MODBITS uint=646
-// const MOD8 uint=3
-// const BASEBITS uint=60
-// const AES_S uint= 192
-
-/* RSA/DH modulus length as multiple of BIGBITS */
-const FFLEN int=4
-
-/* Don't Modify from here... */
-const NLEN int=int((1+((MODBITS-1)/BASEBITS)))
-const DNLEN int=2*NLEN
-const BMASK Chunk= ((Chunk(1)<<BASEBITS)-1)
-const MODBYTES uint=(1+(MODBITS-1)/8)
-const HBITS uint=(BASEBITS/2)
-const HMASK Chunk= ((Chunk(1)<<HBITS)-1)
-const NEXCESS int=(1<<(uint(CHUNK)-BASEBITS-1));
-const FEXCESS Chunk=(Chunk(1)<<(BASEBITS*uint(NLEN)-MODBITS))
-const OMASK Chunk= ((Chunk(-1))<<(MODBITS%BASEBITS))
-const TBITS uint=MODBITS%BASEBITS // Number of active bits in top word
-const TMASK Chunk=(Chunk(1)<<TBITS)-1
-const BIGBITS int=int(MODBYTES*8)
-
-/* Finite field support - for RSA, DH etc. */
-const FF_BITS int=(BIGBITS*FFLEN) /* Finite Field Size in bits - must be 256.2^n */
-const HFLEN int=(FFLEN/2) /* Useful for half-size RSA private key operations */
-
-const P_MBITS uint=MODBYTES*8
-const P_MB uint=(P_MBITS%BASEBITS)
-const P_OMASK Chunk=(Chunk(-1)<<(P_MBITS%BASEBITS))
-const P_FEXCESS Chunk=(Chunk(1)<<(BASEBITS*uint(NLEN)-P_MBITS))
-const P_TBITS uint=(P_MBITS%BASEBITS)
-
-/* ...to here */
-
-
-// START SPECIFY FIELD DETAILS HERE
-//*********************************************************************************
-// Curve25519 Modulus
-// const MODTYPE int=PSEUDO_MERSENNE
-// var Modulus = [...]Chunk {0xFFFFFFFFFFFFED,0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0x7FFFFFFF}
-// const MConst Chunk=0x13
-
-// NIST-256 Curve
-// const MODTYPE int=NOT_SPECIAL
-// var Modulus = [...]Chunk {0xFFFFFFFFFFFFFF,0xFFFFFFFFFF,0x0,0x1000000,0xFFFFFFFF}
-// const MConst Chunk=0x1
-
-// MF254 Modulus
-// const MODTYPE int=MONTGOMERY_FRIENDLY
-// var Modulus= [...]Chunk {0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0x3F80FFFF}
-// const MConst Chunk=0x3F810000
-
-// MS255 Modulus
-// const MODTYPE int= 1
-// var Modulus= [...]Chunk {0xFFFFFFFFFFFD03,0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0x7FFFFFFF}
-// const MConst Chunk=0x2FD
-
-// MF256 Modulus
-// const MODTYPE int= 2
-// var Modulus= [...]Chunk {0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0xFFA7FFFF}
-// const MConst Chunk=0xFFA80000
-
-// MS256 Modulus
-// const MODTYPE int= 1
-// var Modulus= [...]Chunk {0xFFFFFFFFFFFF43,0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0xFFFFFFFF}
-// const MConst Chunk=0xBD
-
-// Brainpool
-// const MODTYPE int= NOT_SPECIAL
-// var Modulus= [...]Chunk {0x13481D1F6E5377,0xF623D526202820,0x909D838D726E3B,0xA1EEA9BC3E660A,0xA9FB57DB}
-// const MConst Chunk =0xA75590CEFD89B9
-
-// ANSSI
-//const MODTYPE int= 0
-// var Modulus= [...]Chunk{0xFCF353D86E9C03,0xADBCABC8CA6DE8,0xE8CE42435B3961,0xB3AD58F10126D,0xF1FD178C}
-// const MConst Chunk=0x97483A164E1155
-
-// BNCX Curve Modulus
-//const MODTYPE int=NOT_SPECIAL
-//var Modulus= [...]Chunk {0x6623EF5C1B55B3,0xD6EE18093EE1BE,0x647A6366D3243F,0x8702A0DB0BDDF,0x24000000}
-//const MConst Chunk=0x4E205BF9789E85
-
-// HIFIVE Curve
-// const MODTYPE int=PSEUDO_MERSENNE
-// var Modulus= [...]Chunk {0xFFFFFFFFFFFFFFD,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFF}
-// const MConst Chunk=0x3
-
-//GOLDILOCKS
-// const MODTYPE int=GENERALISED_MERSENNE
-// var Modulus= [...]Chunk {0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFEFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFF}
-// const MConst Chunk=0x1
-
-// NIST384 Curve Modulus
-// const MODTYPE int=NOT_SPECIAL
-// var Modulus= [...]Chunk {0xFFFFFFFF,0xFFFFFF000000000,0xFFFFFFFFFFFFEFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFF}
-// const MConst Chunk=0x100000001
-
-// C41417 Curve Modulus
-// const MODTYPE int=PSEUDO_MERSENNE
-// var Modulus= [...]Chunk {0xFFFFFFFFFFFFFEF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0x3FFFFFFFFFFFFF}
-// const MConst Chunk=0x11
-
-// NIST521
-// const MODTYPE int=PSEUDO_MERSENNE
-// var Modulus= [...]Chunk {0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0x1FFFFFFFFFF}
-// const MConst Chunk=0x1
-
-// BN646
-// const MODTYPE int=NOT_SPECIAL
-// var Modulus= [...]Chunk {0x2406C08404E013,0x240510420138000,0xE01920840000000,0x601B00000901441,0x400000006C0A206,0xD814423414402,0x6C051024000000,0xD8000000000000,0x9006C,0x240000,0x240000000000}
-// const MConst Chunk=0xCE50F5CF5F615E5
-
-
-// BN254 Curve
-// const MODTYPE int=NOT_SPECIAL
-// var Modulus= [...]Chunk {0x13,0x13A7,0x80000000086121,0x40000001BA344D,0x25236482}
-// const MConst Chunk=0x435E50D79435E5
-
-// BN454 Curve
-// const MODTYPE int=NOT_SPECIAL
-// var Modulus= [...]Chunk {0x4E00000013,0x4E006C4E0000840,0x800014508002508,0x888401D5080091C,0x21C00021D4400DA,0x25B06C01B144009,0xD80000909000,0x240000900}
-// const MConst Chunk=0xF33C46ED79435E5
-
-// BLS383 Curve
- const MODTYPE int=NOT_SPECIAL
- var Modulus= [...]Chunk {0xACAAB52AAD556B,0x1BB01475F75D7A,0xCF73083D5D7520,0x531820F99EB16,0x2C01355A68EA32,0x5C6105C552A785,0x7AC52080A9F7}
- const MConst Chunk=0xA59AB3B123D0BD
-
-// BLS455 Curve
-// const MODTYPE int=NOT_SPECIAL
-// var Modulus= [...]Chunk {0xAA00001800002AB,0xC589556B2AA956A,0xB9994ACE86D1BA6,0x3954FCB314B8B3D,0xE3A5B1D56234BD9,0x95B49203003F665,0x57955572AA00E0F,0x555559555}
-// const MConst Chunk=0xB3EF8137F4017FD
-
-
-// BNT Curve
-// const MODTYPE int=NOT_SPECIAL
-// var Modulus= [...]Chunk {0x9DBBFEEEB4A713,0x555614F464BABE,0x3696F8D5F06E8A,0x6517014EFA0BAB,0x240120DB}
-// const MConst Chunk=0xC5A872D914C4E5
-
-// BNT2 Curve
-// const MODTYPE int=NOT_SPECIAL
-// var Modulus= [...]Chunk {0xB2DC2BB460A48B,0x93E428F0D651E8,0xF3B89D00081CF,0x410F5AADB74E20,0x24000482}
-// const MConst Chunk=0xFE6A47A6505CDD
-
-// START SPECIFY CURVE DETAILS HERE
-//*********************************************************************************
-
-// Ed25519 Curve
-// const CURVETYPE int=EDWARDS
-// const CURVE_A int = -1
-// var CURVE_B = [...]Chunk {0xEB4DCA135978A3,0xA4D4141D8AB75,0x797779E8980070,0x2B6FFE738CC740,0x52036CEE}
-// var CURVE_Order = [...]Chunk {0x12631A5CF5D3ED,0xF9DEA2F79CD658,0x14DE,0x0,0x10000000}
-// var CURVE_Gx = [...]Chunk {0x562D608F25D51A,0xC7609525A7B2C9,0x31FDD6DC5C692C,0xCD6E53FEC0A4E2,0x216936D3}
-// var CURVE_Gy = [...]Chunk {0x66666666666658,0x66666666666666,0x66666666666666,0x66666666666666,0x66666666}
-
-// NIST-256 Curve
-// const CURVETYPE int=WEIERSTRASS
-// const CURVE_A int = -3
-// var CURVE_B = [...]Chunk {0xCE3C3E27D2604B,0x6B0CC53B0F63B,0x55769886BC651D,0xAA3A93E7B3EBBD,0x5AC635D8}
-// var CURVE_Order = [...]Chunk {0xB9CAC2FC632551,0xFAADA7179E84F3,0xFFFFFFFFFFBCE6,0xFFFFFF,0xFFFFFFFF}
-// var CURVE_Gx =[...]Chunk {0xA13945D898C296,0x7D812DEB33A0F4,0xE563A440F27703,0xE12C4247F8BCE6,0x6B17D1F2}
-// var CURVE_Gy =[...]Chunk {0xB6406837BF51F5,0x33576B315ECECB,0x4A7C0F9E162BCE,0xFE1A7F9B8EE7EB,0x4FE342E2}
-
-// MF254 Modulus, Weierstrass Curve w-254-mont
-// const CURVETYPE int= WEIERSTRASS
-// const CURVE_A int = -3
-// var CURVE_B = [...]Chunk {0xFFFFFFFFFFD08D,0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0x3F80FFFF}
-// var CURVE_Order=[...]Chunk {0xA419C4AF8DF83F,0x8BEA0DA375C06F,0xFFFFFFFFFFEB81,0xFFFFFFFFFFFFFF,0x3F80FFFF}
-// var CURVE_Gx =[...]Chunk {0x2,0x0,0x0,0x0,0x0}
-// var CURVE_Gy =[...]Chunk {0x65DF37F90D4EBC,0x38E3F8511931AD,0x75BD778AEBDFB7,0x3B2E56014AE15A,0x140E3FD3}
-
-// MF254 Modulus, Edwards Curve ed-254-mont
-// const CURVETYPE int= EDWARDS
-// const CURVE_A int= -1
-// var CURVE_B = [...]Chunk {0x367B,0x0,0x0,0x0,0x0}
-// var CURVE_Order=[...]Chunk {0xF3D3FEC46E98C7,0x306C8BD62FB0EA,0xFFFFFFFFFFEB95,0xFFFFFFFFFFFFFF,0xFE03FFF}
-// var CURVE_Gx =[...]Chunk {0x1,0x0,0x0,0x0,0x0}
-// var CURVE_Gy =[...]Chunk {0x52D0FDAF2701E5,0x9A840E3212187C,0xD502363F4E3632,0xD6A4C335951D00,0x19F0E690}
-
-// MF254 Modulus, Montgomery Curve
-// const CURVETYPE int=MONTGOMERY
-// const CURVE_A int= -55790
-// var CURVE_B = [...]Chunk {0x0,0x0,0x0,0x0,0x0} // not used
-// var CURVE_Order=[...]Chunk {0xF3D3FEC46E98C7,0x306C8BD62FB0EA,0xFFFFFFFFFFEB95,0xFFFFFFFFFFFFFF,0xFE03FFF}
-// var CURVE_Gx =[...]Chunk {0x3,0x0,0x0,0x0,0x0}
-// var CURVE_Gy =[...]Chunk {0x0,0x0,0x0,0x0,0x0} // not used
-
-// MS255 Modulus, Weierstrass Curve
-// const CURVETYPE int= WEIERSTRASS
-// const CURVE_A int= -3
-// var CURVE_B = [...]Chunk {0xFFFFFFFFFFAB46,0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0x7FFFFFFF}
-// var CURVE_Order=[...]Chunk {0x8FAC983C594AEB,0x38283AD2B3DFAB,0xFFFFFFFFFF864A,0xFFFFFFFFFFFFFF,0x7FFFFFFF}
-// var CURVE_Gx =[...]Chunk {0x1,0x0,0x0,0x0,0x0};
-// var CURVE_Gy =[...]Chunk {0x33FF6769CB44BA,0xC78CDDFDA60D17,0xF9B2FF7D177DB6,0xEDBA7833921EBF,0x6F7A6AC0}
-
-// MS255 Modulus, Edwards Curve
-// const CURVETYPE int= EDWARDS
-// const CURVE_A int= -1
-// var CURVE_B = [...]Chunk{0xEA97,0x0,0x0,0x0,0x0}
-// var CURVE_Order=[...]Chunk{0x49D1ED0436EB75,0xA785EDA6832EAC,0xFFFFFFFFFFDCF1,0xFFFFFFFFFFFFFF,0x1FFFFFFF}
-// var CURVE_Gx =[...]Chunk{0x4,0x0,0x0,0x0,0x0}
-// var CURVE_Gy =[...]Chunk{0x2A255BD08736A0,0x4B8AED445A45BA,0xDD8E0C47E55291,0x4A7BB545EC254C,0x26CB7853}
-
-// MS255 Modulus, Montgomery Curve
-// const CURVETYPE int=MONTGOMERY
-// const CURVE_A int=-240222
-// var CURVE_B = [...]Chunk {0x0,0x0,0x0,0x0,0x0}
-// var CURVE_Order=[...]Chunk {0x49D1ED0436EB75,0xA785EDA6832EAC,0xFFFFFFFFFFDCF1,0xFFFFFFFFFFFFFF,0x1FFFFFFF}
-// var CURVE_Gx =[...]Chunk {0x4,0x0,0x0,0x0,0x0}
-// var CURVE_Gy =[...]Chunk {0x0,0x0,0x0,0x0,0x0};
-
-// MF256 Modulus, Weierstrass Curve
-// const CURVETYPE int= WEIERSTRASS
-// const CURVE_A int= -3
-// var CURVE_B = [...]Chunk {0x14E6A,0x0,0x0,0x0,0x0}
-// var CURVE_Order=[...]Chunk {0x10C5E1A79857EB,0x7513E6E5074B9D,0xFFFFFFFFFFFC51,0xFFFFFFFFFFFFFF,0xFFA7FFFF}
-// var CURVE_Gx =[...]Chunk {0x1,0x0,0x0,0x0,0x0}
-// var CURVE_Gy =[...]Chunk {0x7954C2B724D2A,0x47EB8D94DC6610,0x26123DAE289569,0xBE1808CE7BABBA,0x20887C87}
-
-// MF256, Edwards Curve
-// const CURVETYPE int= EDWARDS
-// const CURVE_A int= -1
-// var CURVE_B = [...]Chunk {0x350A,0x0,0x0,0x0,0x0}
-// var CURVE_Order=[...]Chunk {0xD92EDED8EC7BAB,0xBBAFB86733C966,0xFFFFFFFFFFB154,0xFFFFFFFFFFFFFF,0x3FE9FFFF}
-// var CURVE_Gx =[...]Chunk {0x1,0x0,0x0,0x0,0x0}
-// var CURVE_Gy =[...]Chunk {0xEAA722F2F3C908,0x5E648DFEA68D7D,0xF3DB2C1AACA0C0,0xF8CC4D5AEAEBEE,0xDAD8D4F8}
-
-// MF256 Modulus, Montgomery Curve
-// const CURVETYPE int=MONTGOMERY
-// const CURVE_A int= -54314
-// var CURVE_B = [...]Chunk {0x0,0x0,0x0,0x0,0x0} // not used
-// var CURVE_Order=[...]Chunk {0xD92EDED8EC7BAB,0xBBAFB86733C966,0xFFFFFFFFFFB154,0xFFFFFFFFFFFFFF,0x3FE9FFFF}
-// var CURVE_Gx =[...]Chunk {0x8,0x0,0x0,0x0,0x0}
-// var CURVE_Gy =[...]Chunk {0x0,0x0,0x0,0x0,0x0} // not used
-
-// MS256, Weierstrass Curve
-// const CURVETYPE int= WEIERSTRASS
-// const CURVE_A int= -3
-// var CURVE_B = [...]Chunk {0x25581,0x0,0x0,0x0,0x0}
-// var CURVE_Order=[...]Chunk {0xAB20294751A825,0x8275EA265C6020,0xFFFFFFFFFFE43C,0xFFFFFFFFFFFFFF,0xFFFFFFFF}
-// var CURVE_Gx =[...]Chunk {0x1,0x0,0x0,0x0,0x0}
-// var CURVE_Gy =[...]Chunk {0xF46306C2B56C77,0x2F9375894EC10B,0x6CCEEEDD6BD02C,0xC1E466D7FC82C9,0x696F1853}
-
-// MS256, Edwards Curve
-// const CURVETYPE int= EDWARDS
-// const CURVE_A int= -1
-// var CURVE_B = [...]Chunk {0x3BEE,0x0,0x0,0x0,0x0}
-// var CURVE_Order=[...]Chunk {0xB84E6F1122B4AD,0xA55AD0A6BC64E5,0xFFFFFFFFFFBE6A,0xFFFFFFFFFFFFFF,0x3FFFFFFF}
-// var CURVE_Gx =[...]Chunk {0xD,0x0,0x0,0x0,0x0}
-// var CURVE_Gy =[...]Chunk {0x7F6FB5331CADBA,0x6D63824D303F70,0xB39FA046BFBE2A,0x2A1276DBA3D330,0x7D0AB41E}
-
-// MS256 Modulus, Montgomery Curve
-// const CURVETYPE int=MONTGOMERY
-// const CURVE_A int=-61370
-// var CURVE_B = [...]Chunk {0x0,0x0,0x0,0x0,0x0} // not used
-// var CURVE_Order= [...]Chunk {0xB84E6F1122B4AD,0xA55AD0A6BC64E5,0xFFFFFFFFFFBE6A,0xFFFFFFFFFFFFFF,0x3FFFFFFF}
-// var CURVE_Gx = [...]Chunk {0xb,0x0,0x0,0x0,0x0}
-// var CURVE_Gy = [...]Chunk {0x0,0x0,0x0,0x0,0x0} // not used
-
-// Brainpool
-// const CURVETYPE int= WEIERSTRASS
-// const CURVE_A int= -3
-// var CURVE_B = [...]Chunk {0xE58101FEE92B04,0xEBC4AF2F49256A,0x733D0B76B7BF93,0x30D84EA4FE66A7,0x662C61C4}
-// var CURVE_Order= [...]Chunk {0x1E0E82974856A7,0x7AA3B561A6F790,0x909D838D718C39,0xA1EEA9BC3E660A,0xA9FB57DB}
-// var CURVE_Gx = [...]Chunk {0xA191562E1305F4,0x42C47AAFBC2B79,0xB23A656149AFA1,0xC1CFE7B7732213,0xA3E8EB3C}
-// var CURVE_Gy = [...]Chunk {0xABE8F35B25C9BE,0xB6DE39D027001D,0xE14644417E69BC,0x3439C56D7F7B22,0x2D996C82}
-
-// ANSSI
-// const CURVETYPE int= WEIERSTRASS
-// const CURVE_A int= -3
-// var CURVE_B = [...]Chunk {0x75ED967B7BB73F,0xC9AE4B1A18030,0x754A44C00FDFEC,0x5428A9300D4ABA,0xEE353FCA}
-// var CURVE_Order=[...]Chunk {0xFDD459C6D655E1,0x67E140D2BF941F,0xE8CE42435B53DC,0xB3AD58F10126D,0xF1FD178C}
-// var CURVE_Gx =[...]Chunk {0xC97A2DD98F5CFF,0xD2DCAF98B70164,0x4749D423958C27,0x56C139EB31183D,0xB6B3D4C3}
-// var CURVE_Gy =[...]Chunk {0x115A1554062CFB,0xC307E8E4C9E183,0xF0F3ECEF8C2701,0xC8B204911F9271,0x6142E0F7}
-
-// HIFIVE
-// const CURVETYPE int= EDWARDS
-// const CURVE_A int= 1
-// var CURVE_B = [...]Chunk {0x2B67,0x0,0x0,0x0,0x0,0x0}
-// var CURVE_Order=[...]Chunk {0xB2F95973E9FA805,0xC0BD6B87F93BAA7,0x71415FA9850,0x0,0x0,0x200000000}
-// var CURVE_Gx =[...]Chunk {0xC,0x0,0x0,0x0,0x0,0x0}
-// var CURVE_Gy =[...]Chunk {0x2BEC68505FE8632,0x5D5650CA0365DB1,0x3811C7EF435B6DB,0x7853D1B14B46C,0x56502E18E1C161D,0xC0DC616B}
-
-// GOLDILOCKS
-// const CURVETYPE int= EDWARDS
-// const CURVE_A int= 1
-// var CURVE_B = [...]Chunk {0xFFFFFFFFFFF6756,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFEFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFF}
-// var CURVE_Order=[...]Chunk {0x378C292AB5844F3,0x6CC2728DC58F552,0xEDB49AED6369021,0xFFFF7CCA23E9C44,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0x3FFFFFF}
-// var CURVE_Gx =[...]Chunk {0x555555555555555,0x555555555555555,0x555555555555555,0xAAA955555555555,0xAAAAAAAAAAAAAAA,0xAAAAAAAAAAAAAAA,0xAAAAAAAAAAAAAAA,0xAAAAAAA}
-// var CURVE_Gy =[...]Chunk {0xAEAFBCDEA9386ED,0xBCB2BED1CDA06BD,0x565833A2A3098BB,0x6D728AD8C4B80D6,0x7A035884DD7B7E3,0x205086C2B0036ED,0x34AD7048DB359D6,0xAE05E96}
-
-// NIST384
-// const CURVETYPE int= WEIERSTRASS
-// const CURVE_A int= -3
-// var CURVE_B = [...]Chunk {0xA85C8EDD3EC2AEF,0x56398D8A2ED19D2,0x4088F5013875AC6,0x9C6EFE814112031,0x56BE3F82D19181D,0xA7E23EE7E4988E0,0xB3312F}
-// var CURVE_Order=[...]Chunk {0xCEC196ACCC52973,0x1A0DB248B0A77AE,0x34D81F4372DDF58,0xFFFFFFFFFFFFC76,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFF}
-// var CURVE_Gx =[...]Chunk {0xA545E3872760AB7,0x2F25DBF55296C3,0x741E082542A3855,0x3B628BA79B9859F,0x71EF320AD746E1D,0x22BE8B05378EB1C,0xAA87CA}
-// var CURVE_Gy =[...]Chunk {0xA431D7C90EA0E5F,0x60B1CE1D7E819D7,0xA3113B5F0B8C00A,0x1DBD289A147CE9D,0x8BF9292DC29F8F4,0x4A96262C6F5D9E9,0x3617DE}
-
-// C41417
-// const CURVETYPE int= EDWARDS
-// const CURVE_A int= 1
-// var CURVE_B = [...]Chunk {0xE21,0x0,0x0,0x0,0x0,0x0,0x0}
-// var CURVE_Order=[...]Chunk {0xB0E71A5E106AF79,0x1C0338AD63CF181,0x414CF706022B36F,0xFFFFFFFFEB3CC92,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0x7FFFFFFFFFFFF}
-// var CURVE_Gx =[...]Chunk {0x4FD3812F3CBC595,0x1A73FAA8537C64C,0x4AB4D6D6BA11130,0x3EC7F57FF35498A,0xE5FCD46369F44C0,0x300218C0631C326,0x1A334905141443}
-// var CURVE_Gy =[...]Chunk {0x22,0x0,0x0,0x0,0x0,0x0,0x0}
-
-// NIST521
-// const CURVETYPE int= WEIERSTRASS
-// const CURVE_A int= -3
-// var CURVE_B = [...]Chunk {0xF451FD46B503F00,0x73DF883D2C34F1E,0x2C0BD3BB1BF0735,0x3951EC7E937B165,0x9918EF109E15619,0x5B99B315F3B8B48,0xB68540EEA2DA72,0x8E1C9A1F929A21A,0x51953EB961}
-// var CURVE_Order=[...]Chunk {0xB6FB71E91386409,0xB5C9B8899C47AEB,0xC0148F709A5D03B,0x8783BF2F966B7FC,0xFFFFFFFFFFA5186,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0x1FFFFFFFFFF}
-// var CURVE_Gx =[...]Chunk {0x97E7E31C2E5BD66,0x48B3C1856A429BF,0xDC127A2FFA8DE33,0x5E77EFE75928FE1,0xF606B4D3DBAA14B,0x39053FB521F828A,0x62395B4429C6481,0x404E9CD9E3ECB6,0xC6858E06B7}
-// var CURVE_Gy =[...]Chunk {0x8BE94769FD16650,0x3C7086A272C2408,0xB9013FAD076135,0x72995EF42640C55,0xD17273E662C97EE,0x49579B446817AFB,0x42C7D1BD998F544,0x9A3BC0045C8A5FB,0x11839296A78}
-
-
-// BN646 Curve
-/*
-const CURVETYPE int=WEIERSTRASS
-const CURVE_PAIRING_TYPE int=BN_CURVE
-const CURVE_A int= 0
-
-var CURVE_Order=[...]Chunk {0x2406C07E04200D,0x2405103F0108000,0xD418607E0000000,0x301B00000901441,0x400000006C0A206,0xD814422E14402,0x6C051024000000,0xD8000000000000,0x9006C,0x240000,0x240000000000}
-var CURVE_B = [...]Chunk {0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}
-var CURVE_Cof = [...]Chunk {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}
-var CURVE_Gx =[...]Chunk {0x2406C08404E012,0x240510420138000,0xE01920840000000,0x601B00000901441,0x400000006C0A206,0xD814423414402,0x6C051024000000,0xD8000000000000,0x9006C,0x240000,0x240000000000}
-var CURVE_Gy =[...]Chunk {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}
-
-var CURVE_Bnx=[...]Chunk {0x1001,0x4000,0x10000000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}
-var CURVE_Cru=[...]Chunk {0x1202401B007,0xD812006C000,0x480510240000000,0x200480000000360,0x1B01,0x3602403600,0xD800000000,0x0,0x12,0x0,0x0}
-var CURVE_Fra=[...]Chunk {0x76EAD944929A14,0xB7E0A0BE10CDF74,0x4FB8A8A2B93166B,0xECDFC4B0F037D9,0xC27307962815598,0xCF5EF558D2135D8,0x8CE651FD85AF9C3,0x80AF6D02A45219F,0x69B8147979A41A4,0x9577C152A374C5B,0x9FF28B3A478}
-var CURVE_Frb=[...]Chunk {0xFAD1BE73F7245FF,0x6C246F83F06A08B,0x906077E146CE994,0x514D03B4F9FDC68,0x7D8CF86A43F4C6E,0x31791EE96200E29,0x79D9FF04BA5063C,0x8CD092FD5BADE60,0x9647EB8686EBEC7,0x6A883EAD5ECB3A4,0x1A00D74C5B87}
-var CURVE_Pxa=[...]Chunk {0x4233F273CCC5E10,0x6408117FB1B1FFA,0xA7978AC166486AA,0xDA6417BDCFDC1D0,0xDCE981D68FA7F5C,0x4169ED790F45048,0xBA06CCE894F26BE,0xB0C98247FD18141,0x30CE35212F353A6,0xFF9A1B9162B0B9E,0xFD835F078BF}
-var CURVE_Pxb=[...]Chunk {0x837F879267F4BC0,0x443F1581FA770ED,0x8FBA0763CB82027,0xA8F7E5DE4945F11,0x780AAE5D219F786,0xF3BB745205342E9,0xCC0A34FF057013C,0xA6DFAF3E689709E,0xD69FBD8D12B6B79,0x6A1715D9469215D,0x1764FA509C41}
-var CURVE_Pya=[...]Chunk {0xC570D1DCC3FB414,0xD0ABFE7F36161E4,0xABA2F61496C849A,0x4E4A05030CD4F3F,0x70F7CECD5CEF83,0x9D4711CBF491613,0xDF8011EA770418E,0x56548E514EC94EC,0xC9E853DFF35EE42,0x5481ABBAAD13633,0x78D8A63783F}
-var CURVE_Pyb=[...]Chunk {0xAFE3E3DB33908AD,0x7CD4290A506594C,0xFA043D85973EC3F,0xFAC7A642BB5E628,0x71A36A52DA82EE2,0x12C2231EDAE0C76,0x994DF2771091B48,0xCFFF7637B76831C,0xD463BD03DA14916,0x1074F23C580C40,0x12188D99546B}
-var CURVE_W=[2][NLEN]Chunk {{0x6008003,0x30020000,0xC0080060000000,0x300000000000000,0x0,0x600000,0x0,0x0,0x0,0x0,0x0},{0x2001,0x8000,0x20000000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}
-var CURVE_SB=[2][2][NLEN]Chunk {{{0x600A004,0x30028000,0xC00A0060000000,0x300000000000000,0x0,0x600000,0x0,0x0,0x0,0x0,0x0},{0x2001,0x8000,0x20000000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x2001,0x8000,0x20000000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x2406C07803A00A,0x2405103C00E8000,0xC817E0780000000,0x1B00000901441,0x400000006C0A206,0xD814422814402,0x6C051024000000,0xD8000000000000,0x9006C,0x240000,0x240000000000}}}
-var CURVE_WB=[4][NLEN]Chunk {{0x2001000,0x10004000,0x40010020000000,0x100000000000000,0x0,0x200000,0x0,0x0,0x0,0x0,0x0},{0xC01C015005,0x900E0054000,0x3803901C0000000,0xE00300000000240,0x1200,0x2401C02400,0x9000000000,0x0,0xC,0x0,0x0},{0x600E00B003,0x4807002C000,0x1C01D00E0000000,0x700180000000120,0x900,0x1200E01200,0x4800000000,0x0,0x6,0x0,0x0},{0x2003001,0x1000C000,0x40030020000000,0x100000000000000,0x0,0x200000,0x0,0x0,0x0,0x0,0x0}}
-var CURVE_BB=[4][4][NLEN]Chunk {{{0x2406C07E04100D,0x2405103F0104000,0xD418507E0000000,0x301B00000901441,0x400000006C0A206,0xD814422E14402,0x6C051024000000,0xD8000000000000,0x9006C,0x240000,0x240000000000},{0x2406C07E04100C,0x2405103F0104000,0xD418507E0000000,0x301B00000901441,0x400000006C0A206,0xD814422E14402,0x6C051024000000,0xD8000000000000,0x9006C,0x240000,0x240000000000},{0x2406C07E04100C,0x2405103F0104000,0xD418507E0000000,0x301B00000901441,0x400000006C0A206,0xD814422E14402,0x6C051024000000,0xD8000000000000,0x9006C,0x240000,0x240000000000},{0x2002,0x8000,0x20000000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x2001,0x8000,0x20000000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x2406C07E04100C,0x2405103F0104000,0xD418507E0000000,0x301B00000901441,0x400000006C0A206,0xD814422E14402,0x6C051024000000,0xD8000000000000,0x9006C,0x240000,0x240000000000},{0x2406C07E04100D,0x2405103F0104000,0xD418507E0000000,0x301B00000901441,0x400000006C0A206,0xD814422E14402,0x6C051024000000,0xD8000000000000,0x9006
C,0x240000,0x240000000000},{0x2406C07E04100C,0x2405103F0104000,0xD418507E0000000,0x301B00000901441,0x400000006C0A206,0xD814422E14402,0x6C051024000000,0xD8000000000000,0x9006C,0x240000,0x240000000000}},{{0x2002,0x8000,0x20000000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x2001,0x8000,0x20000000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x2001,0x8000,0x20000000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x2001,0x8000,0x20000000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x1002,0x4000,0x10000000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x4002,0x10000,0x40000000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x2406C07E04000A,0x2405103F0100000,0xD418407E0000000,0x301B00000901441,0x400000006C0A206,0xD814422E14402,0x6C051024000000,0xD8000000000000,0x9006C,0x240000,0x240000000000},{0x1002,0x4000,0x10000000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}}
-
-const USE_GLV bool=true
-const USE_GS_G2 bool=true
-const USE_GS_GT bool=true
-const GT_STRONG bool=false
-*/
-// BNCX Curve
-/*
-const CURVETYPE int=WEIERSTRASS
-const CURVE_PAIRING_TYPE int=BN_CURVE
-const CURVE_A int= 0
-var CURVE_B = [...]Chunk {0x2,0x0,0x0,0x0,0x0}
-var CURVE_Cof = [...]Chunk {0x1,0x0,0x0,0x0,0x0}
-
-var CURVE_Order=[...]Chunk {0x11C0A636EB1F6D,0xD6EE0CC906CEBE,0x647A6366D2C43F,0x8702A0DB0BDDF,0x24000000}
-var CURVE_Bnx=[...]Chunk {0x3C012B1,0x40,0x0,0x0,0x0}
-var CURVE_Cru=[...]Chunk {0xE0931794235C97,0xDF6471EF875631,0xCA83F1440BD,0x480000,0x0}
-var CURVE_Fra=[...]Chunk {0xD9083355C80EA3,0x7326F173F8215B,0x8AACA718986867,0xA63A0164AFE18B,0x1359082F}
-var CURVE_Frb=[...]Chunk {0x8D1BBC06534710,0x63C7269546C062,0xD9CDBC4E3ABBD8,0x623628A900DC53,0x10A6F7D0}
-var CURVE_Pxa=[...]Chunk {0x851CEEE4D2EC74,0x85BFA03E2726C0,0xF5C34BBB907C,0x7053B256358B25,0x19682D2C}
-var CURVE_Pxb=[...]Chunk {0xA58E8B2E29CFE1,0x97B0C209C30F47,0x37A8E99743F81B,0x3E19F64AA011C9,0x1466B9EC}
-var CURVE_Pya=[...]Chunk {0xFBFCEBCF0BE09F,0xB33D847EC1B30C,0x157DAEE2096361,0x72332B8DD81E22,0xA79EDD9}
-var CURVE_Pyb=[...]Chunk {0x904B228898EE9D,0x4EA569D2EDEBED,0x512D8D3461C286,0xECC4C09035C6E4,0x6160C39}
-var CURVE_Gx =[...]Chunk {0x6623EF5C1B55B2,0xD6EE18093EE1BE,0x647A6366D3243F,0x8702A0DB0BDDF,0x24000000}
-var CURVE_Gy =[...]Chunk {0x1,0x0,0x0,0x0,0x0}
-var CURVE_W=[2][5]Chunk{{0x546349162FEB83,0xB40381200,0x6000,0x0,0x0},{0x7802561,0x80,0x0,0x0,0x0}}
-var CURVE_SB=[2][2][5]Chunk {{{0x5463491DB010E4,0xB40381280,0x6000,0x0,0x0},{0x7802561,0x80,0x0,0x0,0x0}},{{0x7802561,0x80,0x0,0x0,0x0},{0xBD5D5D20BB33EA,0xD6EE0188CEBCBD,0x647A6366D2643F,0x8702A0DB0BDDF,0x24000000}}}
-var CURVE_WB=[4][5]Chunk {{0x1C2118567A84B0,0x3C012B040,0x2000,0x0,0x0},{0xCDF995BE220475,0x94EDA8CA7F9A36,0x8702A0DC07E,0x300000,0x0},{0x66FCCAE0F10B93,0x4A76D4653FCD3B,0x4381506E03F,0x180000,0x0},{0x1C21185DFAAA11,0x3C012B0C0,0x2000,0x0,0x0}}
-var CURVE_BB=[4][4][5]Chunk {{{0x11C0A6332B0CBD,0xD6EE0CC906CE7E,0x647A6366D2C43F,0x8702A0DB0BDDF,0x24000000},{0x11C0A6332B0CBC,0xD6EE0CC906CE7E,0x647A6366D2C43F,0x8702A0DB0BDDF,0x24000000},{0x11C0A6332B0CBC,0xD6EE0CC906CE7E,0x647A6366D2C43F,0x8702A0DB0BDDF,0x24000000},{0x7802562,0x80,0x0,0x0,0x0}},{{0x7802561,0x80,0x0,0x0,0x0},{0x11C0A6332B0CBC,0xD6EE0CC906CE7E,0x647A6366D2C43F,0x8702A0DB0BDDF,0x24000000},{0x11C0A6332B0CBD,0xD6EE0CC906CE7E,0x647A6366D2C43F,0x8702A0DB0BDDF,0x24000000},{0x11C0A6332B0CBC,0xD6EE0CC906CE7E,0x647A6366D2C43F,0x8702A0DB0BDDF,0x24000000}},{{0x7802562,0x80,0x0,0x0,0x0},{0x7802561,0x80,0x0,0x0,0x0},{0x7802561,0x80,0x0,0x0,0x0},{0x7802561,0x80,0x0,0x0,0x0}},{{0x3C012B2,0x40,0x0,0x0,0x0},{0xF004AC2,0x100,0x0,0x0,0x0},{0x11C0A62F6AFA0A,0xD6EE0CC906CE3E,0x647A6366D2C43F,0x8702A0DB0BDDF,0x24000000},{0x3C012B2,0x40,0x0,0x0,0x0}}}
-
-const USE_GLV bool=true
-const USE_GS_G2 bool=true
-const USE_GS_GT bool=true
-const GT_STRONG bool=true
-
-*/
-// BN254 Curve
-/*
-const CURVETYPE int=WEIERSTRASS
-const CURVE_PAIRING_TYPE int=BN_CURVE
-const CURVE_A int= 0
-var CURVE_B = [...]Chunk {0x2,0x0,0x0,0x0,0x0}
-var CURVE_Cof = [...]Chunk {0x1,0x0,0x0,0x0,0x0}
-var CURVE_Order=[...]Chunk {0xD,0x800000000010A1,0x8000000007FF9F,0x40000001BA344D,0x25236482}
-var CURVE_Bnx=[...]Chunk {0x80000000000001,0x40,0x0,0x0,0x0}
-var CURVE_Cru=[...]Chunk {0x80000000000007,0x6CD,0x40000000024909,0x49B362,0x0}
-var CURVE_Fra=[...]Chunk {0x7DE6C06F2A6DE9,0x74924D3F77C2E1,0x50A846953F8509,0x212E7C8CB6499B,0x1B377619}
-var CURVE_Frb=[...]Chunk {0x82193F90D5922A,0x8B6DB2C08850C5,0x2F57B96AC8DC17,0x1ED1837503EAB2,0x9EBEE69}
-var CURVE_Pxa=[...]Chunk {0xEE4224C803FB2B,0x8BBB4898BF0D91,0x7E8C61EDB6A464,0x519EB62FEB8D8C,0x61A10BB}
-var CURVE_Pxb=[...]Chunk {0x8C34C1E7D54CF3,0x746BAE3784B70D,0x8C5982AA5B1F4D,0xBA737833310AA7,0x516AAF9}
-var CURVE_Pya=[...]Chunk {0xF0E07891CD2B9A,0xAE6BDBE09BD19,0x96698C822329BD,0x6BAF93439A90E0,0x21897A0}
-var CURVE_Pyb=[...]Chunk {0x2D1AEC6B3ACE9B,0x6FFD739C9578A,0x56F5F38D37B090,0x7C8B15268F6D44,0xEBB2B0E}
-var CURVE_Gx =[...]Chunk {0x12,0x13A7,0x80000000086121,0x40000001BA344D,0x25236482}
-var CURVE_Gy =[...]Chunk {0x1,0x0,0x0,0x0,0x0}
-var CURVE_W=[2][5]Chunk {{0x3,0x80000000000204,0x6181,0x0,0x0},{0x1,0x81,0x0,0x0,0x0}}
-var CURVE_SB=[2][2][5]Chunk {{{0x4,0x80000000000285,0x6181,0x0,0x0},{0x1,0x81,0x0,0x0,0x0}},{{0x1,0x81,0x0,0x0,0x0},{0xA,0xE9D,0x80000000079E1E,0x40000001BA344D,0x25236482}}}
-var CURVE_WB=[4][5]Chunk {{0x80000000000000,0x80000000000040,0x2080,0x0,0x0},{0x80000000000005,0x54A,0x8000000001C707,0x312241,0x0},{0x80000000000003,0x800000000002C5,0xC000000000E383,0x189120,0x0},{0x80000000000001,0x800000000000C1,0x2080,0x0,0x0}}
-var CURVE_BB=[4][4][5]Chunk {{{0x8000000000000D,0x80000000001060,0x8000000007FF9F,0x40000001BA344D,0x25236482},{0x8000000000000C,0x80000000001060,0x8000000007FF9F,0x40000001BA344D,0x25236482},{0x8000000000000C,0x80000000001060,0x8000000007FF9F,0x40000001BA344D,0x25236482},{0x2,0x81,0x0,0x0,0x0}},{{0x1,0x81,0x0,0x0,0x0},{0x8000000000000C,0x80000000001060,0x8000000007FF9F,0x40000001BA344D,0x25236482},{0x8000000000000D,0x80000000001060,0x8000000007FF9F,0x40000001BA344D,0x25236482},{0x8000000000000C,0x80000000001060,0x8000000007FF9F,0x40000001BA344D,0x25236482}},{{0x2,0x81,0x0,0x0,0x0},{0x1,0x81,0x0,0x0,0x0},{0x1,0x81,0x0,0x0,0x0},{0x1,0x81,0x0,0x0,0x0}},{{0x80000000000002,0x40,0x0,0x0,0x0},{0x2,0x102,0x0,0x0,0x0},{0xA,0x80000000001020,0x8000000007FF9F,0x40000001BA344D,0x25236482},{0x80000000000002,0x40,0x0,0x0,0x0}}}
-
-const USE_GLV bool=true
-const USE_GS_G2 bool=true
-const USE_GS_GT bool=true
-const GT_STRONG bool=false
-*/
-// BN454 Curve
-/*
-const CURVETYPE int=WEIERSTRASS
-const CURVE_PAIRING_TYPE int=BN_CURVE
-const CURVE_A int= 0
-
-var CURVE_Order=[...]Chunk {0x420000000D,0x42006C4200007E0,0x2000144FC0024FC,0x887E01D4FC0091C,0x21C00021D4400DA,0x25B06C01B144009,0xD80000909000,0x240000900};
-var CURVE_B = [...]Chunk {0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
-var CURVE_Cof = [...]Chunk {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
-var CURVE_Gx =[...]Chunk {0x4E00000012,0x4E006C4E0000840,0x800014508002508,0x888401D5080091C,0x21C00021D4400DA,0x25B06C01B144009,0xD80000909000,0x240000900};
-var CURVE_Gy =[...]Chunk {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
-
-var CURVE_Bnx=[...]Chunk {0x100000001,0x10000010000000,0x0,0x0,0x0,0x0,0x0,0x0};
-var CURVE_Cru=[...]Chunk {0x1B00000007,0x1B00121B0000240,0xA00003648000048,0x6C2400364800005,0x36000012360000,0x12000036000,0x0,0x0};
-var CURVE_Fra=[...]Chunk {0x302DC9FD573B0EC,0x7AEEE6C3A90B9B8,0xD06B734A02B17EC,0xDBD9562D6A87D,0x929326ECAFCB5A2,0x32139C5D6DDCE26,0x7A687EBE1CCD92B,0x12E79EC72};
-var CURVE_Frb=[...]Chunk {0xCFD23AE2A8C4F27,0xD311858A56F4E87,0xAF94A1067D50D1B,0x87A8287EDA9609E,0x8F2CD9352474B38,0xF39CCFA443671E2,0x85A50141EC3B6D4,0x111861C8D};
-var CURVE_Pxa=[...]Chunk {0xFBA3BAC20F02B14,0x6BC30BEF0CC2BB1,0xFE2DA6B5FCEFFF3,0x3682EDFC1FE1E7E,0xAD66CC979483454,0xE163BB5D98CBBA1,0xD55083668F14AAF,0x1403D4F80};
-var CURVE_Pxb=[...]Chunk {0x9C06D0EC45BF266,0x365ACBB7823C36E,0xD2E4624790DBC52,0xE0803BE6F2F769F,0x7BA9E2AA951971D,0x25841737EBE5665,0x142E8014B1E40D5,0x15952D69E};
-var CURVE_Pya=[...]Chunk {0x939AB6BBE1B15C7,0xDF26024555C6CB4,0x671C46519474FB5,0xBAA277A8FC5DD54,0xB00871EE82F2FAA,0xFE0A26E1C64C3A,0x7ABC6DB12C5287A,0x1D67A4004};
-var CURVE_Pyb=[...]Chunk {0xC10E6FB60571D60,0xE9271847B128D8E,0xBE70ED2753A65C7,0x75C2604B7433768,0x4F0B46811003851,0xD91F0CA48ABC5EA,0x842C9ADF53F903E,0x976E2360};
-var CURVE_W=[2][8]Chunk {{0x800000003,0x80000080000060,0x60000000C00000C,0x600000C00000,0x0,0x0,0x0,0x0},{0x200000001,0x20000020000000,0x0,0x0,0x0,0x0,0x0,0x0}};
-var CURVE_SB=[2][2][8]Chunk {{{0xA00000004,0xA00000A0000060,0x60000000C00000C,0x600000C00000,0x0,0x0,0x0,0x0},{0x200000001,0x20000020000000,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x200000001,0x20000020000000,0x0,0x0,0x0,0x0,0x0,0x0},{0x3A0000000A,0x3A006C3A0000780,0xC000144F00024F0,0x887801D4F00091B,0x21C00021D4400DA,0x25B06C01B144009,0xD80000909000,0x240000900}}};
-var CURVE_WB=[4][8]Chunk {{0x100000000,0x10000010000020,0x200000004000004,0x200000400000,0x0,0x0,0x0,0x0},{0x1500000005,0x15000C1500001C0,0x2438000038,0x481C00243800004,0x2400000C240000,0xC000024000,0x0,0x0},{0xB00000003,0xB00060B00000E0,0x121C00001C,0x240E00121C00002,0x12000006120000,0x6000012000,0x0,0x0},{0x300000001,0x30000030000020,0x200000004000004,0x200000400000,0x0,0x0,0x0,0x0}};
-var CURVE_BB=[4][4][8]Chunk {{{0x410000000D,0x41006C4100007E0,0x2000144FC0024FC,0x887E01D4FC0091C,0x21C00021D4400DA,0x25B06C01B144009,0xD80000909000,0x240000900},{0x410000000C,0x41006C4100007E0,0x2000144FC0024FC,0x887E01D4FC0091C,0x21C00021D4400DA,0x25B06C01B144009,0xD80000909000,0x240000900},{0x410000000C,0x41006C4100007E0,0x2000144FC0024FC,0x887E01D4FC0091C,0x21C00021D4400DA,0x25B06C01B144009,0xD80000909000,0x240000900},{0x200000002,0x20000020000000,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x200000001,0x20000020000000,0x0,0x0,0x0,0x0,0x0,0x0},{0x410000000C,0x41006C4100007E0,0x2000144FC0024FC,0x887E01D4FC0091C,0x21C00021D4400DA,0x25B06C01B144009,0xD80000909000,0x240000900},{0x410000000D,0x41006C4100007E0,0x2000144FC0024FC,0x887E01D4FC0091C,0x21C00021D4400DA,0x25B06C01B144009,0xD80000909000,0x240000900},{0x410000000C,0x41006C4100007E0,0x2000144FC0024FC,0x887E01D4FC0091C,0x21C00021D4400DA,0x25B06C01B144009,0xD80000909000,0x240000900}},{{0x200000002,0x20000020000000,0x0,0x0,0x0,0x0,0x0,0x0},{0x200
000001,0x20000020000000,0x0,0x0,0x0,0x0,0x0,0x0},{0x200000001,0x20000020000000,0x0,0x0,0x0,0x0,0x0,0x0},{0x200000001,0x20000020000000,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x100000002,0x10000010000000,0x0,0x0,0x0,0x0,0x0,0x0},{0x400000002,0x40000040000000,0x0,0x0,0x0,0x0,0x0,0x0},{0x400000000A,0x40006C4000007E0,0x2000144FC0024FC,0x887E01D4FC0091C,0x21C00021D4400DA,0x25B06C01B144009,0xD80000909000,0x240000900},{0x100000002,0x10000010000000,0x0,0x0,0x0,0x0,0x0,0x0}}};
-
-const USE_GLV bool=true
-const USE_GS_G2 bool=true
-const USE_GS_GT bool=true
-const GT_STRONG bool=false
-*/
-
-
-// BLS383 Curve
-
-const CURVETYPE int=WEIERSTRASS
-const CURVE_PAIRING_TYPE int=BLS_CURVE
-const CURVE_A int= 0
-
-var CURVE_Order=[...]Chunk {0xFFF80000FFF001,0xBFDE0070FE7800,0x3000049C5EDF1C,0xC40007F910007A,0x14641004C,0x0,0x0};
-var CURVE_B = [...]Chunk {0x9,0x0,0x0,0x0,0x0,0x0,0x0};
-var CURVE_Cof = [...]Chunk {0x2A00000052B,0x5560AAAAAB2CA0,0x6055,0x0,0x0,0x0,0x0};
-var CURVE_Gx =[...]Chunk {0xD59B348D10786B,0x3477C0E3F54AD0,0xBF25B734578B9B,0x4F6AC007BB6F65,0xEFD5830FF57E9C,0xADB9F88FB6EC02,0xB08CEE4BC98};
-var CURVE_Gy =[...]Chunk {0x5DA023D145DDB,0x13F518C5FEF7CC,0x56EC3462B2A66F,0x96F3019C7A925F,0x9061047981223E,0x4810AD8F5BE59,0x1F3909337671};
-
-var CURVE_Bnx=[...]Chunk {0x1000000040,0x110,0x0,0x0,0x0,0x0,0x0};
-var CURVE_Cru=[...]Chunk {0xA3AAC4EDA155A9,0xDF2FE8761E5E3D,0xBCDFAADE632625,0x5123128D3035A6,0xDBF3A2BBEAD683,0x5C5FAB20424190,0x7AC52080A9F7};
-var CURVE_Fra=[...]Chunk {0x2BA59A92B4508B,0x63DB7A06EEF343,0x40341CB1DFBC74,0x1639E9D32D55D3,0xB19B3F05CC36D4,0xF323EE4D86AB98,0x5A5FB198672};
-var CURVE_Frb=[...]Chunk {0x81051A97F904E0,0xB7D49A6F086A37,0x8F3EEB8B7DB8AB,0xEEF7983C6C9543,0x7A65F6549CB35D,0x693D1777CBFBEC,0x751F25672384};
-var CURVE_Pxa=[...]Chunk {0x6059885BAC9472,0x7C4D31DE2DC36D,0xBDC90C308C88A7,0x29F01971C688FC,0x3693539C43F167,0xD81E5A561EB8BF,0x4D50722B56BF};
-var CURVE_Pxb=[...]Chunk {0x9B4BD7A272AB23,0x7AF19D4F44DCE8,0x3F6F7B93206A34,0x571DD3E2A819FB,0x3A2BA3B635D7EE,0xAC28C780C1A126,0xEE3617C3E5B};
-var CURVE_Pya=[...]Chunk {0x81D230977BD4FD,0xB660720DFDFC6,0x41FC9590C89A0C,0x2E1FBCF878287A,0x11C23014EEE65,0x28878816BB325E,0x8F40859A05C};
-var CURVE_Pyb=[...]Chunk {0xA5E20A252C4CE6,0x5907A74AFF40C8,0x41760A42448EF3,0xFFEF82B0FDA199,0xA0F29A18D4EA49,0xAC7F7B86E4997B,0x1DCABBA88C12};
-
-// Not used
-var CURVE_W=[2][7]Chunk {{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0}};
-var CURVE_SB=[2][2][7]Chunk {{{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0}}};
-var CURVE_WB=[4][7]Chunk {{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0}};
-var CURVE_BB=[4][4][7]Chunk {{{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0}}};
-
-const USE_GLV bool=true
-const USE_GS_G2 bool=true
-const USE_GS_GT bool=true
-const GT_STRONG bool=false
-
-// BLS455 Curve
-/*
-const CURVETYPE int=WEIERSTRASS
-const CURVE_PAIRING_TYPE int=BLS_CURVE
-const CURVE_A int= 0
-
-var CURVE_Order=[...]Chunk {0x7FFFFC00001,0xA00000400001C,0x25E000750001D10,0xE0000F10004F000,0x80000380002,0x10,0x0,0x0};
-var CURVE_B = [...]Chunk {0xA,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
-var CURVE_Cof = [...]Chunk {0xA9557FFAABFFAAB,0xAAB15555B54AAB6,0x555556AA,0x0,0x0,0x0,0x0,0x0};
-var CURVE_Gx =[...]Chunk {0x6D4C5DDFDFCEDD1,0x35C6F43B3A034FB,0x7F05B56A579C725,0xB1F2B8ECE11B321,0x9F342AB0CFE8392,0xA5911EE32767994,0x3005E40CC56ABED,0x18855F3B};
-var CURVE_Gy =[...]Chunk {0x404FD79A6619B9B,0x69D80A5D6FA0286,0xEE722322D91A493,0xB1EE58431C1E968,0xCA9BC8953801F5F,0xDFAFD40FE9E388E,0x9F8985FC3DEB0D6,0x19A8DB77E};
-
-var CURVE_Bnx=[...]Chunk {0x20000080000800,0x10000,0x0,0x0,0x0,0x0,0x0,0x0};
-var CURVE_Cru=[...]Chunk {0x9202FFC00000AA9,0xFA5190F4A3762A,0x8B2B9BDD548FEC9,0xD7B469DB33A586A,0xC91731354CAFD99,0xF5B48D02FFFE695,0x57955572A900E0E,0x555559555};
-var CURVE_Fra=[...]Chunk {0x9CCFBDCA2EBF21,0x572F54A73379964,0x72819F887545498,0x22BBC1CAD1F8534,0xA82CD7D435944F0,0x4594F818D030F7B,0xEDCBE3ADC0016A7,0x397EA4973};
-var CURVE_Frb=[...]Chunk {0xA033043B5D1438A,0x6E5A00C3F72FC06,0x4717AB46118C70E,0x16993AE842C0609,0x3B78DA012CA06E9,0x501F99EA300E6EA,0x69C971C4E9FF768,0x1BD6B4BE1};
-var CURVE_Pxa=[...]Chunk {0x475F20F0C1F542,0x65D6070F8567E10,0xD780698BB33D776,0x71F685ED1531721,0x303D3FEC5B6A49C,0x8DEF064FF553CEB,0xC0E9A31B4C463,0x2ECB12FA8};
-var CURVE_Pxb=[...]Chunk {0x99086EE6749F03D,0xE89A55A5AC5EF2E,0x7B41AECD88EA016,0x622450FE6163E06,0x755066E1C8E296F,0xA80F219487326E8,0x66DBFBB0BEAEE59,0xECFFCE0};
-var CURVE_Pya=[...]Chunk {0x83235A4581A77F4,0x9F0F367B7A7E10A,0x8FA0C4A66D55B9D,0xEF03F65E0D6EC4C,0x9C7DC299C1A9EC2,0x32453CA21CFA5AC,0x6C3DCD5ABB9C544,0x22471D90A};
-var CURVE_Pyb=[...]Chunk {0xF413B6D9E1FDBA2,0xA7E630913DA0356,0xFBC913D9AC488E2,0x72E7CF61B401585,0x656D801B21C89ED,0xF9E921EEE0558F9,0x3D2B7B03CFC8698,0x33503CA8};
-
-// Not used
-var CURVE_W=[2][8]Chunk {{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}};
-var CURVE_SB=[2][2][8]Chunk {{{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}};
-var CURVE_WB=[4][8]Chunk {{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}};
-var CURVE_BB=[4][4][8]Chunk {{{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}},{{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}};
-
-const USE_GLV bool=true
-const USE_GS_G2 bool=true
-const USE_GS_GT bool=true
-const GT_STRONG bool=false
-*/
-// BNT Curve
-/*
-const CURVETYPE int=WEIERSTRASS
-const CURVE_PAIRING_TYPE int=BN_CURVE
-const CURVE_A int= 0
-var CURVE_B = [...]Chunk {0x2,0x0,0x0,0x0,0x0}
-var CURVE_Cof = [...]Chunk {0x1,0x0,0x0,0x0,0x0}
-var CURVE_Order=[...]Chunk {0x75777E8D30210D,0xD43492B2CB363A,0x3696F8D5F00E88,0x6517014EFA0BAB,0x240120DB}
-var CURVE_Bnx=[...]Chunk {0x806000004081,0x40,0x0,0x0,0x0}
-var CURVE_Cru=[...]Chunk {0xEB53D5AB4FCD87,0x82A5F2BAB11FAD,0x47651504C9764C,0x4801B1,0x0}
-var CURVE_Fra=[...]Chunk {0xF5D14EADC80022,0x4904D6FACCE359,0xF190A13211BE6C,0xC9BBC4394F6509,0x1328A292}
-var CURVE_Frb=[...]Chunk {0xA7EAB040ECA6F1,0xC513DF997D764,0x450657A3DEB01E,0x9B5B3D15AAA6A1,0x10D87E48}
-var CURVE_Pxa=[...]Chunk {0x8987E2288E65BB,0xAD1CAA6313BE,0x325041548B7CCC,0x4C1339EBCC055,0x14483FCD}
-var CURVE_Pxb=[...]Chunk {0x67888808DBE2C0,0x7FE1F81E34853A,0xA631A51B57B95,0x384EC302DA3FC5,0x87F46B3}
-var CURVE_Pya=[...]Chunk {0x202C47E020CA1D,0xB4167E8399F36C,0xC6E5439F72C94C,0x102B0BD74A2C69,0x14E8C29C}
-var CURVE_Pyb=[...]Chunk {0xD8437C716628F2,0x27E167BCB7DC6B,0xA82C7572681D0A,0x62454BD1EDEC18,0x17AFE2A4}
-var CURVE_Gx =[...]Chunk {0x9DBBFEEEB4A712,0x555614F464BABE,0x3696F8D5F06E8A,0x6517014EFA0BAB,0x240120DB}
-var CURVE_Gy =[...]Chunk {0x1,0x0,0x0,0x0,0x0}
-var CURVE_W=[2][5]Chunk{{0x26430061838403,0x81218241998384,0x6001,0x0,0x0},{0x100C000008101,0x80,0x0,0x0,0x0}}
-var CURVE_SB=[2][2][5]Chunk {{{0x2743C061840504,0x81218241998404,0x6001,0x0,0x0},{0x100C000008101,0x80,0x0,0x0,0x0}},{{0x100C000008101,0x80,0x0,0x0,0x0},{0x4F347E2BAC9D0A,0x5313107131B2B6,0x3696F8D5EFAE87,0x6517014EFA0BAB,0x240120DB}}}
-var CURVE_WB=[4][5]Chunk {{0x6140602080C080,0x806080C08880C1,0x2000,0x0,0x0},{0xB53904088C4A85,0xAD2FA352DC6C36,0xDA436358868EDE,0x300120,0x0},{0x5ADCB204464583,0x5697D1A96E363B,0x6D21B1AC43476F,0x180090,0x0},{0x62412020814181,0x806080C0888141,0x2000,0x0,0x0}}
-var CURVE_BB=[4][4][5]Chunk {{{0x74F71E8D2FE08D,0xD43492B2CB35FA,0x3696F8D5F00E88,0x6517014EFA0BAB,0x240120DB},{0x74F71E8D2FE08C,0xD43492B2CB35FA,0x3696F8D5F00E88,0x6517014EFA0BAB,0x240120DB},{0x74F71E8D2FE08C,0xD43492B2CB35FA,0x3696F8D5F00E88,0x6517014EFA0BAB,0x240120DB},{0x100C000008102,0x80,0x0,0x0,0x0}},{{0x100C000008101,0x80,0x0,0x0,0x0},{0x74F71E8D2FE08C,0xD43492B2CB35FA,0x3696F8D5F00E88,0x6517014EFA0BAB,0x240120DB},{0x74F71E8D2FE08D,0xD43492B2CB35FA,0x3696F8D5F00E88,0x6517014EFA0BAB,0x240120DB},{0x74F71E8D2FE08C,0xD43492B2CB35FA,0x3696F8D5F00E88,0x6517014EFA0BAB,0x240120DB}},{{0x100C000008102,0x80,0x0,0x0,0x0},{0x100C000008101,0x80,0x0,0x0,0x0},{0x100C000008101,0x80,0x0,0x0,0x0},{0x100C000008101,0x80,0x0,0x0,0x0}},{{0x806000004082,0x40,0x0,0x0,0x0},{0x2018000010202,0x100,0x0,0x0,0x0},{0x7476BE8D2FA00A,0xD43492B2CB35BA,0x3696F8D5F00E88,0x6517014EFA0BAB,0x240120DB},{0x806000004082,0x40,0x0,0x0,0x0}}}
-
-const USE_GLV bool=true
-const USE_GS_G2 bool=true
-const USE_GS_GT bool=true
-const GT_STRONG bool=true
-
-*/
-
-// BNT2 Curve
-/*
-const CURVETYPE int=WEIERSTRASS
-const CURVE_PAIRING_TYPE int=BN_CURVE
-const CURVE_A int= 0
-var CURVE_B = [...]Chunk {0x2,0x0,0x0,0x0,0x0}
-var CURVE_Cof = [...]Chunk {0x1,0x0,0x0,0x0,0x0}
-var CURVE_Order=[...]Chunk {0xFB71A511AA2BF5,0x8DE127B73833D7,0xF3B89D00021CF,0x410F5AADB74E20,0x24000482}
-var CURVE_Bnx=[...]Chunk {0x20100608205,0x40,0x0,0x0,0x0}
-var CURVE_Cru=[...]Chunk {0x5027444866BD33,0x5B773016470EFB,0xC3617BECF23675,0x480006,0x0}
-var CURVE_Fra=[...]Chunk {0xB268C973AEF062,0xC69B33C3BCE492,0xF67FA37F195BBC,0x29E8CAB6BD0A41,0x124E0B8D}
-var CURVE_Frb=[...]Chunk {0x736240B1B429,0xCD48F52D196D56,0x18BBE650E72612,0x17268FF6FA43DE,0x11B1F8F5}
-var CURVE_Pxa=[...]Chunk {0xCC92399F40A3C8,0xCDA4E96611784A,0x7B056961706B35,0x9693C6318279D7,0x16FC17CF}
-var CURVE_Pxb=[...]Chunk {0x557A8AD8549540,0x6F7BE6F6510610,0x565907A95D17DB,0xBD5975909C8188,0x1EB5B500}
-var CURVE_Pya=[...]Chunk {0x7BECC514220513,0x4A78860E737B14,0x51B83935F12684,0x761422AA9D4DFA,0x1E8EE498}
-var CURVE_Pyb=[...]Chunk {0xB9328F577CE78E,0xB746E26FA5781F,0xA93DBC1FB8E27E,0xBAE33BDBA29D76,0x23CEF4CD}
-var CURVE_Gx =[...]Chunk {0xB2DC2BB460A48A,0x93E428F0D651E8,0xF3B89D00081CF,0x410F5AADB74E20,0x24000482}
-var CURVE_Gy =[...]Chunk {0x1,0x0,0x0,0x0,0x0}
-var CURVE_W=[2][5]Chunk {{0xB76282A1347083,0x60301399E1D10,0x6000,0x0,0x0},{0x40200C10409,0x80,0x0,0x0,0x0}}
-var CURVE_SB=[2][2][5]Chunk {{{0xB76684A1F5748C,0x60301399E1D90,0x6000,0x0,0x0},{0x40200C10409,0x80,0x0,0x0,0x0}},{{0x40200C10409,0x80,0x0,0x0,0x0},{0x440F227075BB72,0x87DE267D9A16C7,0xF3B89CFFFC1CF,0x410F5AADB74E20,0x24000482}}}
-var CURVE_WB=[4][5]Chunk {{0x9272D48A70A224,0x20100688A0945,0x2000,0x0,0x0},{0x5A572CF030EF19,0x9651763543721D,0x8240FD48A1B9A3,0x300004,0x0},{0xAD2C96F848B88F,0xCB28BB1AA1B92E,0x41207EA450DCD1,0x180002,0x0},{0x9276D68B31A62D,0x20100688A09C5,0x2000,0x0,0x0}}
-var CURVE_BB=[4][4][5]Chunk {{{0xFB6FA41149A9F1,0x8DE127B7383397,0xF3B89D00021CF,0x410F5AADB74E20,0x24000482},{0xFB6FA41149A9F0,0x8DE127B7383397,0xF3B89D00021CF,0x410F5AADB74E20,0x24000482},{0xFB6FA41149A9F0,0x8DE127B7383397,0xF3B89D00021CF,0x410F5AADB74E20,0x24000482},{0x40200C1040A,0x80,0x0,0x0,0x0}},{{0x40200C10409,0x80,0x0,0x0,0x0},{0xFB6FA41149A9F0,0x8DE127B7383397,0xF3B89D00021CF,0x410F5AADB74E20,0x24000482},{0xFB6FA41149A9F1,0x8DE127B7383397,0xF3B89D00021CF,0x410F5AADB74E20,0x24000482},{0xFB6FA41149A9F0,0x8DE127B7383397,0xF3B89D00021CF,0x410F5AADB74E20,0x24000482}},{{0x40200C1040A,0x80,0x0,0x0,0x0},{0x40200C10409,0x80,0x0,0x0,0x0},{0x40200C10409,0x80,0x0,0x0,0x0},{0x40200C10409,0x80,0x0,0x0,0x0}},{{0x20100608206,0x40,0x0,0x0,0x0},{0x80401820812,0x100,0x0,0x0,0x0},{0xFB6DA310E927EA,0x8DE127B7383357,0xF3B89D00021CF,0x410F5AADB74E20,0x24000482},{0x20100608206,0x40,0x0,0x0,0x0}}}
-
-const USE_GLV bool=true
-const USE_GS_G2 bool=true
-const USE_GS_GT bool=true
-const GT_STRONG bool=true
-
-*/
-
-
http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/go/RSA.go
----------------------------------------------------------------------
diff --git a/version22/go/RSA.go b/version22/go/RSA.go
deleted file mode 100644
index b8f22fa..0000000
--- a/version22/go/RSA.go
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
-*/
-
-/* RSA API high-level functions */
-
-package main
-
-//import "fmt"
-
-const RSA_RFS int=int(MODBYTES)*FFLEN
-const RSA_SHA256 int=32
-const RSA_SHA384 int=48
-const RSA_SHA512 int=64
-
-const RSA_HASH_TYPE int=RSA_SHA256
-
-
-type rsa_private_key struct {
- p,q,dp,dq,c *FF
-}
-
-func New_rsa_private_key(n int) *rsa_private_key {
- SK:=new(rsa_private_key)
- SK.p=NewFFint(n)
- SK.q=NewFFint(n)
- SK.dp=NewFFint(n)
- SK.dq=NewFFint(n)
- SK.c=NewFFint(n)
- return SK
-}
-
-type rsa_public_key struct {
- e int
- n *FF
-}
-
-func New_rsa_public_key(m int) *rsa_public_key{
- PK:=new(rsa_public_key)
- PK.e=0
- PK.n=NewFFint(m)
- return PK
-}
-
-func hashit(sha int,A []byte,n int) []byte {
- var R []byte
- if sha==RSA_SHA256 {
- H:=NewHASH256()
- if A!=nil {H.Process_array(A)}
- if n>=0 {H.Process_num(int32(n))}
- R=H.Hash()
- }
- if sha==RSA_SHA384 {
- H:=NewHASH384()
- if A!=nil {H.Process_array(A)}
- if n>=0 {H.Process_num(int32(n))}
- R=H.Hash()
- }
- if sha==RSA_SHA512 {
- H:=NewHASH512()
- if A!=nil {H.Process_array(A)}
- if n>=0 {H.Process_num(int32(n))}
- R=H.Hash()
- }
- return R
-}
-
-func RSA_KEY_PAIR(rng *RAND,e int,PRIV *rsa_private_key,PUB *rsa_public_key) { /* IEEE1363 A16.11/A16.12 more or less */
- n:=PUB.n.getlen()/2
- t:=NewFFint(n)
- p1:=NewFFint(n)
- q1:=NewFFint(n)
-
- for true {
- PRIV.p.random(rng)
- for PRIV.p.lastbits(2)!=3 {PRIV.p.inc(1)}
- for !prime(PRIV.p,rng) {
- PRIV.p.inc(4)
- }
-
- p1.copy(PRIV.p)
- p1.dec(1)
-
- if p1.cfactor(e) {continue}
- break;
- }
-
- for true {
- PRIV.q.random(rng);
- for PRIV.q.lastbits(2)!=3 {PRIV.q.inc(1)}
- for !prime(PRIV.q,rng) {
- PRIV.q.inc(4)
- }
-
- q1.copy(PRIV.q);
- q1.dec(1);
-
- if q1.cfactor(e) {continue}
-
- break;
- }
-
- PUB.n=ff_mul(PRIV.p,PRIV.q);
- PUB.e=e;
-
- t.copy(p1)
- t.shr()
- PRIV.dp.set(e)
- PRIV.dp.invmodp(t)
- if PRIV.dp.parity()==0 {PRIV.dp.add(t)}
- PRIV.dp.norm();
-
- t.copy(q1)
- t.shr()
- PRIV.dq.set(e)
- PRIV.dq.invmodp(t)
- if PRIV.dq.parity()==0 {PRIV.dq.add(t)}
- PRIV.dq.norm()
-
- PRIV.c.copy(PRIV.p)
- PRIV.c.invmodp(PRIV.q)
-
-}
-
-/* Mask Generation Function */
-
-func RSA_MGF1(sha int,Z []byte,olen int,K []byte) {
- hlen:=sha
-
- var k int=0
- for i:=0;i<len(K);i++ {K[i]=0}
-
- cthreshold:=olen/hlen
- if olen%hlen!=0 {cthreshold++}
- for counter:=0;counter<cthreshold;counter++ {
- B:=hashit(sha,Z,counter)
-
- if (k+hlen>olen) {
- for i:=0;i<olen%hlen;i++ {K[k]=B[i]; k++}
- } else {
- for i:=0;i<hlen;i++ {K[k]=B[i]; k++}
- }
- }
-}
-
-/* SHAXXX identifier strings */
-var SHA256ID= [...]byte {0x30,0x31,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x01,0x05,0x00,0x04,0x20}
-var SHA384ID= [...]byte {0x30,0x41,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x02,0x05,0x00,0x04,0x30};
-var SHA512ID= [...]byte {0x30,0x51,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x03,0x05,0x00,0x04,0x40};
-
-func PKCS15(sha int,m []byte,w []byte) bool {
- olen:=FF_BITS/8
- hlen:=sha
- idlen:=19
-
- if olen<idlen+hlen+10 {return false}
- H:=hashit(sha,m,-1)
-
- for i:=0;i<len(w);i++ {w[i]=0}
- i:=0
- w[i]=0; i++
- w[i]=1; i++
- for j:=0;j<olen-idlen-hlen-3;j++ {w[i]=0xff; i++}
- w[i]=0; i++
-
- if hlen==RSA_SHA256 {
- for j:=0;j<idlen;j++ {w[i]=SHA256ID[j]; i++}
- }
- if hlen==RSA_SHA384 {
- for j:=0;j<idlen;j++ {w[i]=SHA384ID[j]; i++}
- }
- if hlen==RSA_SHA512 {
- for j:=0;j<idlen;j++ {w[i]=SHA512ID[j]; i++}
- }
- for j:=0;j<hlen;j++ {w[i]=H[j]; i++}
-
- return true
-}
-
-
-/* OAEP Message Encoding for Encryption */
-func RSA_OAEP_ENCODE(sha int,m []byte,rng *RAND,p []byte) []byte {
- olen:=RSA_RFS-1
- mlen:=len(m)
- var f [RSA_RFS]byte
-
- hlen:=sha
-
- SEED:=make([]byte,hlen);
-
- seedlen:=hlen
- if (mlen>olen-hlen-seedlen-1) {return nil}
-
- DBMASK:=make([]byte,olen-seedlen)
-
- h:=hashit(sha,p,-1);
-
- for i:=0;i<hlen;i++ {f[i]=h[i]}
-
- slen:=olen-mlen-hlen-seedlen-1
-
- for i:=0;i<slen;i++ {f[hlen+i]=0}
- f[hlen+slen]=1
- for i:=0;i<mlen;i++ {f[hlen+slen+1+i]=m[i]}
-
- for i:=0;i<seedlen;i++ {SEED[i]=rng.GetByte()}
- RSA_MGF1(sha,SEED,olen-seedlen,DBMASK)
-
- for i:=0;i<olen-seedlen;i++ {DBMASK[i]^=f[i]}
-
- RSA_MGF1(sha,DBMASK,seedlen,f[:])
-
- for i:=0;i<seedlen;i++ {f[i]^=SEED[i]}
-
- for i:=0;i<olen-seedlen;i++ {f[i+seedlen]=DBMASK[i]}
-
- /* pad to length RFS */
- d:=1
- for i:=RSA_RFS-1;i>=d;i-- {
- f[i]=f[i-d]
- }
- for i:=d-1;i>=0;i-- {
- f[i]=0
- }
- return f[:]
-}
-
-/* OAEP Message Decoding for Decryption */
-func RSA_OAEP_DECODE(sha int,p []byte,f []byte) [] byte {
- olen:=RSA_RFS-1
-
- hlen:=sha
- SEED:=make([]byte,hlen)
- seedlen:=hlen;
- CHASH:=make([]byte,hlen)
-
- if olen<seedlen+hlen+1 {return nil}
- DBMASK:=make([]byte,olen-seedlen)
- for i:=0;i<olen-seedlen;i++ {DBMASK[i]=0}
-
- if len(f)<RSA_RFS {
- d:=RSA_RFS-len(f)
- for i:=RSA_RFS-1;i>=d;i-- {
- f[i]=f[i-d]
- }
- for i:=d-1;i>=0;i-- {
- f[i]=0
- }
- }
-
- h:=hashit(sha,p,-1)
- for i:=0;i<hlen;i++ {CHASH[i]=h[i]}
-
- x:=f[0]
-
- for i:=seedlen;i<olen;i++ {
- DBMASK[i-seedlen]=f[i+1]
- }
-
- RSA_MGF1(sha,DBMASK,seedlen,SEED)
- for i:=0;i<seedlen;i++ {SEED[i]^=f[i+1]}
- RSA_MGF1(sha,SEED,olen-seedlen,f)
- for i:=0;i<olen-seedlen;i++ {DBMASK[i]^=f[i]}
-
- comp:=true
- for i:=0;i<hlen;i++ {
- if CHASH[i]!=DBMASK[i] {comp=false}
- }
-
- for i:=0;i<olen-seedlen-hlen;i++ {
- DBMASK[i]=DBMASK[i+hlen]
- }
-
- for i:=0;i<hlen;i++ {
- SEED[i]=0; CHASH[i]=0
- }
-
- var k int
- for k=0;;k++ {
- if k>=olen-seedlen-hlen {return nil}
- if DBMASK[k]!=0 {break}
- }
-
- t:=DBMASK[k]
- if (!comp || x!=0 || t!=0x01) {
- for i:=0;i<olen-seedlen;i++ {DBMASK[i]=0}
- return nil
- }
-
- var r = make([]byte,olen-seedlen-hlen-k-1)
-
- for i:=0;i<olen-seedlen-hlen-k-1;i++ {
- r[i]=DBMASK[i+k+1]
- }
-
- for i:=0;i<olen-seedlen;i++ {DBMASK[i]=0}
-
- return r
-}
-
-/* destroy the Private Key structure */
-func RSA_PRIVATE_KEY_KILL(PRIV *rsa_private_key) {
- PRIV.p.zero();
- PRIV.q.zero();
- PRIV.dp.zero();
- PRIV.dq.zero();
- PRIV.c.zero();
-}
-
-/* RSA encryption with the public key */
-func RSA_ENCRYPT(PUB *rsa_public_key,F []byte,G []byte) {
- n:=PUB.n.getlen()
- f:=NewFFint(n)
-
- ff_fromBytes(f,F)
- f.power(PUB.e,PUB.n)
- f.toBytes(G)
-}
-
-/* RSA decryption with the private key */
-func RSA_DECRYPT(PRIV *rsa_private_key,G []byte,F []byte) {
- n:=PRIV.p.getlen()
- g:=NewFFint(2*n)
-
- ff_fromBytes(g,G);
- jp:=g.dmod(PRIV.p)
- jq:=g.dmod(PRIV.q)
-
- jp.skpow(PRIV.dp,PRIV.p)
- jq.skpow(PRIV.dq,PRIV.q)
-
- g.zero()
- g.dscopy(jp)
- jp.mod(PRIV.q)
- if ff_comp(jp,jq)>0 {jq.add(PRIV.q)}
- jq.sub(jp)
- jq.norm()
-
- t:=ff_mul(PRIV.c,jq)
- jq=t.dmod(PRIV.q)
-
- t=ff_mul(jq,PRIV.p)
- g.add(t)
- g.norm()
-
- g.toBytes(F)
-}
-
http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/go/TestECDH.go
----------------------------------------------------------------------
diff --git a/version22/go/TestECDH.go b/version22/go/TestECDH.go
deleted file mode 100644
index c3fbf87..0000000
--- a/version22/go/TestECDH.go
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
-*/
-
-/* test driver and function exerciser for ECDH/ECIES/ECDSA API Functions */
-
-package main
-
-import "fmt"
-
-func ECDH_printBinary(array []byte) {
- for i:=0;i<len(array);i++ {
- fmt.Printf("%02x", array[i])
- }
- fmt.Printf("\n")
-}
-
-func main() {
-
-// j:=0
- pp:="M0ng00se"
- res:=0
-
- var sha=ECDH_HASH_TYPE
-
- var S1 [ECDH_EGS]byte
- var W0 [2*ECDH_EFS+1]byte
- var W1 [2*ECDH_EFS+1]byte
- var Z0 [ECDH_EFS]byte
- var Z1 [ECDH_EFS]byte
- var RAW [100]byte
- var SALT [8]byte
- var P1 [3]byte
- var P2 [4]byte
- var V [2*ECDH_EFS+1]byte
- var M [17]byte
- var T [12]byte
- var CS [ECDH_EGS]byte
- var DS [ECDH_EGS]byte
-
- rng:=NewRAND()
-
- rng.Clean();
- for i:=0;i<100;i++ {RAW[i]=byte(i)}
-
- rng.Seed(100,RAW[:])
-
-//for j:=0;j<100;j++ {
-
- for i:=0;i<8;i++ {SALT[i]=byte(i+1)} // set Salt
-
- fmt.Printf("Alice's Passphrase= "+pp)
- fmt.Printf("\n");
- PW:=[]byte(pp)
-
-/* private key S0 of size EGS bytes derived from Password and Salt */
-
- S0:=PBKDF2(sha,PW,SALT[:],1000,ECDH_EGS)
-
- fmt.Printf("Alice's private key= 0x")
- ECDH_printBinary(S0)
-
-/* Generate Key pair S/W */
- ECDH_KEY_PAIR_GENERATE(nil,S0,W0[:])
-
- fmt.Printf("Alice's public key= 0x")
- ECDH_printBinary(W0[:]);
-
- res=ECDH_PUBLIC_KEY_VALIDATE(true,W0[:])
- if res!=0 {
- fmt.Printf("ECP Public Key is invalid!\n")
- return
- }
-
-/* Random private key for other party */
- ECDH_KEY_PAIR_GENERATE(rng,S1[:],W1[:])
-
- fmt.Printf("Servers private key= 0x");
- ECDH_printBinary(S1[:])
-
- fmt.Printf("Servers public key= 0x")
- ECDH_printBinary(W1[:])
-
-
- res=ECDH_PUBLIC_KEY_VALIDATE(true,W1[:])
- if res!=0 {
- fmt.Printf("ECP Public Key is invalid!\n")
- return
- }
-/* Calculate common key using DH - IEEE 1363 method */
-
- ECPSVDP_DH(S0,W1[:],Z0[:])
- ECPSVDP_DH(S1[:],W0[:],Z1[:])
-
- same:=true
- for i:=0;i<ECDH_EFS;i++ {
- if Z0[i]!=Z1[i] {same=false}
- }
-
- if !same {
- fmt.Printf("*** ECPSVDP-DH Failed\n");
- return
- }
-
- KEY:=KDF2(sha,Z0[:],nil,ECDH_EAS);
-
- fmt.Printf("Alice's DH Key= 0x"); ECDH_printBinary(KEY)
- fmt.Printf("Servers DH Key= 0x"); ECDH_printBinary(KEY)
-
- if CURVETYPE!=MONTGOMERY {
- fmt.Printf("Testing ECIES\n");
-
- P1[0]=0x0; P1[1]=0x1; P1[2]=0x2
- P2[0]=0x0; P2[1]=0x1; P2[2]=0x2; P2[3]=0x3
-
- for i:=0;i<=16;i++ {M[i]=byte(i)}
-
- C:=ECIES_ENCRYPT(sha,P1[:],P2[:],rng,W1[:],M[:],V[:],T[:])
-
- fmt.Printf("Ciphertext= \n")
- fmt.Printf("V= 0x"); ECDH_printBinary(V[:])
- fmt.Printf("C= 0x"); ECDH_printBinary(C)
- fmt.Printf("T= 0x"); ECDH_printBinary(T[:])
-
-
- RM:=ECIES_DECRYPT(sha,P1[:],P2[:],V[:],C,T[:],S1[:])
- if RM==nil {
- fmt.Printf("*** ECIES Decryption Failed\n")
- return
- } else {fmt.Printf("Decryption succeeded\n")}
-
- fmt.Printf("Message is 0x"); ECDH_printBinary(RM)
-
- fmt.Printf("Testing ECDSA\n");
-
- if ECPSP_DSA(sha,rng,S0,M[:],CS[:],DS[:])!=0 {
- fmt.Printf("***ECDSA Signature Failed\n")
- return
- }
- fmt.Printf("Signature= \n")
- fmt.Printf("C= 0x"); ECDH_printBinary(CS[:])
- fmt.Printf("D= 0x"); ECDH_printBinary(DS[:])
-
- if ECPVP_DSA(sha,W0[:],M[:],CS[:],DS[:])!=0 {
- fmt.Printf("***ECDSA Verification Failed\n")
- return
- } else {fmt.Printf("ECDSA Signature/Verification succeeded \n")}
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/go/TestMPIN.go
----------------------------------------------------------------------
diff --git a/version22/go/TestMPIN.go b/version22/go/TestMPIN.go
deleted file mode 100644
index 60ca3de..0000000
--- a/version22/go/TestMPIN.go
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
-*/
-
-/* test driver and function exerciser for MPIN API Functions */
-
-package main
-
-import "fmt"
-
-func MPIN_printBinary(array []byte) {
- for i:=0;i<len(array);i++ {
- fmt.Printf("%02x", array[i])
- }
- fmt.Printf("\n")
-}
-
-func main() {
-
-
- rng:=NewRAND()
- var raw [100]byte
- for i:=0;i<100;i++ {raw[i]=byte(i+1)}
- rng.Seed(100,raw[:])
-
- var sha=MPIN_HASH_TYPE
-
- const EGS=MPIN_EGS
- const EFS=MPIN_EFS
- const G1S=2*EFS+1 /* Group 1 Size */
- const G2S=4*EFS; /* Group 2 Size */
- const EAS int=16
-
- var S [EGS]byte
- var SST [G2S]byte
- var TOKEN [G1S]byte
- var PERMIT [G1S]byte
- var SEC [G1S]byte
- var xID [G1S]byte
- var xCID [G1S]byte
- var X [EGS]byte
- var Y [EGS]byte
- var E [12*EFS]byte
- var F [12*EFS]byte
- var HID [G1S]byte
- var HTID [G1S]byte
-
- var G1 [12*EFS]byte
- var G2 [12*EFS]byte
- var R [EGS]byte
- var Z [G1S]byte
- var W [EGS]byte
- var T [G1S]byte
- var CK [EAS]byte
- var SK [EAS]byte
-
- var HSID []byte
-
-
-/* Trusted Authority set-up */
-
- MPIN_RANDOM_GENERATE(rng,S[:])
- fmt.Printf("Master Secret s: 0x"); MPIN_printBinary(S[:])
-
- /* Create Client Identity */
- IDstr:= "testUser@miracl.com"
- CLIENT_ID:=[]byte(IDstr)
-
- HCID:=MPIN_HASH_ID(sha,CLIENT_ID) /* Either Client or TA calculates Hash(ID) - you decide! */
-
- fmt.Printf("Client ID= "); MPIN_printBinary(CLIENT_ID)
- fmt.Printf("\n")
-
-/* Client and Server are issued secrets by DTA */
- MPIN_GET_SERVER_SECRET(S[:],SST[:])
- fmt.Printf("Server Secret SS: 0x"); MPIN_printBinary(SST[:])
-
- MPIN_GET_CLIENT_SECRET(S[:],HCID,TOKEN[:])
- fmt.Printf("Client Secret CS: 0x");
- MPIN_printBinary(TOKEN[:])
-
-/* Client extracts PIN from secret to create Token */
- pin:=1234
- fmt.Printf("Client extracts PIN= %d",pin)
- fmt.Printf("\n")
- rtn:=MPIN_EXTRACT_PIN(sha,CLIENT_ID,pin,TOKEN[:])
- if rtn != 0 {
- fmt.Printf("FAILURE: EXTRACT_PIN rtn: %d",rtn);
- fmt.Printf("\n")
- }
-
- fmt.Printf("Client Token TK: 0x")
- MPIN_printBinary(TOKEN[:]);
-
- if FULL {
- MPIN_PRECOMPUTE(TOKEN[:],HCID,G1[:],G2[:])
- }
-
- date:=0
- if PERMITS {
- date=MPIN_today()
-/* Client gets "Time Token" permit from DTA */
- MPIN_GET_CLIENT_PERMIT(sha,date,S[:],HCID,PERMIT[:])
- fmt.Printf("Time Permit TP: 0x"); MPIN_printBinary(PERMIT[:])
-
-/* This encoding makes Time permit look random - Elligator squared */
- MPIN_ENCODING(rng,PERMIT[:])
- fmt.Printf("Encoded Time Permit TP: 0x"); MPIN_printBinary(PERMIT[:])
- MPIN_DECODING(PERMIT[:])
- fmt.Printf("Decoded Time Permit TP: 0x"); MPIN_printBinary(PERMIT[:])
- }
-
- pin=0
- fmt.Printf("\nPIN= ")
- fmt.Scanf("%d",&pin)
-
- pxID:=xID[:]
- pxCID:=xCID[:]
- pHID:=HID[:]
- pHTID:=HTID[:]
- pE:=E[:]
- pF:=F[:]
- pPERMIT:=PERMIT[:]
- var prHID []byte
-
- if date!=0 {
- prHID=pHTID;
- if !PINERROR {
- pxID=nil
- // pHID=nil
- }
- } else {
- prHID=pHID
- pPERMIT=nil
- pxCID=nil
- pHTID=nil
- }
- if !PINERROR {
- pE=nil
- pF=nil
- }
-
- if SINGLE_PASS {
- fmt.Printf("MPIN Single Pass\n")
- timeValue:= MPIN_GET_TIME()
- rtn=MPIN_CLIENT(sha,date,CLIENT_ID,rng,X[:],pin,TOKEN[:],SEC[:],pxID,pxCID,pPERMIT,timeValue,Y[:])
- if rtn != 0 {
- fmt.Printf("FAILURE: CLIENT rtn: %d\n",rtn)
- }
-
- if FULL {
- HCID=MPIN_HASH_ID(sha,CLIENT_ID)
- MPIN_GET_G1_MULTIPLE(rng,1,R[:],HCID,Z[:]) /* Also Send Z=r.ID to Server, remember random r */
- }
-
- rtn=MPIN_SERVER(sha,date,pHID,pHTID,Y[:],SST[:],pxID,pxCID,SEC[:],pE,pF,CLIENT_ID,timeValue)
- if rtn != 0 {
- fmt.Printf("FAILURE: SERVER rtn: %d\n",rtn)
- }
-
- if FULL {
- HSID=MPIN_HASH_ID(sha,CLIENT_ID);
- MPIN_GET_G1_MULTIPLE(rng,0,W[:],prHID,T[:]); /* Also send T=w.ID to client, remember random w */
- }
- } else {
- fmt.Printf("MPIN Multi Pass\n")
- /* Send U=x.ID to server, and recreate secret from token and pin */
- rtn=MPIN_CLIENT_1(sha,date,CLIENT_ID,rng,X[:],pin,TOKEN[:],SEC[:],pxID,pxCID,pPERMIT);
- if rtn != 0 {
- fmt.Printf("FAILURE: CLIENT_1 rtn: %d\n",rtn)
- }
-
- if FULL {
- HCID=MPIN_HASH_ID(sha,CLIENT_ID)
- MPIN_GET_G1_MULTIPLE(rng,1,R[:],HCID,Z[:]) /* Also Send Z=r.ID to Server, remember random r */
- }
-
- /* Server calculates H(ID) and H(T|H(ID)) (if time permits enabled), and maps them to points on the curve HID and HTID resp. */
- MPIN_SERVER_1(sha,date,CLIENT_ID,pHID,pHTID)
-
- /* Server generates Random number Y and sends it to Client */
- MPIN_RANDOM_GENERATE(rng,Y[:]);
-
- if FULL {
- HSID=MPIN_HASH_ID(sha,CLIENT_ID);
- MPIN_GET_G1_MULTIPLE(rng,0,W[:],prHID,T[:]) /* Also send T=w.ID to client, remember random w */
- }
-
- /* Client Second Pass: Inputs Client secret SEC, x and y. Outputs -(x+y)*SEC */
- rtn=MPIN_CLIENT_2(X[:],Y[:],SEC[:])
- if rtn != 0 {
- fmt.Printf("FAILURE: CLIENT_2 rtn: %d\n",rtn)
- }
-
- /* Server Second pass. Inputs hashed client id, random Y, -(x+y)*SEC, xID and xCID and Server secret SST. E and F help kangaroos to find error. */
- /* If PIN error not required, set E and F = null */
-
- rtn=MPIN_SERVER_2(date,pHID,pHTID,Y[:],SST[:],pxID,pxCID,SEC[:],pE,pF)
-
- if rtn!=0 {
- fmt.Printf("FAILURE: SERVER_1 rtn: %d\n",rtn)
- }
-
- if rtn == MPIN_BAD_PIN {
- fmt.Printf("Server says - Bad Pin. I don't know you. Feck off.\n")
- if PINERROR {
- err:=MPIN_KANGAROO(E[:],F[:])
- if err!=0 {fmt.Printf("(Client PIN is out by %d)\n",err)}
- }
- return
- } else {
- fmt.Printf("Server says - PIN is good! You really are "+IDstr)
- fmt.Printf("\n")
- }
-
- if FULL {
- H:=MPIN_HASH_ALL(sha,HCID[:],pxID,pxCID,SEC[:],Y[:],Z[:],T[:]);
- MPIN_CLIENT_KEY(sha,G1[:],G2[:],pin,R[:],X[:],H[:],T[:],CK[:])
- fmt.Printf("Client Key = 0x"); MPIN_printBinary(CK[:])
-
- H=MPIN_HASH_ALL(sha,HSID[:],pxID,pxCID,SEC[:],Y[:],Z[:],T[:]);
- MPIN_SERVER_KEY(sha,Z[:],SST[:],W[:],H[:],pHID,pxID,pxCID,SK[:])
- fmt.Printf("Server Key = 0x"); MPIN_printBinary(SK[:])
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/go/TestRSA.go
----------------------------------------------------------------------
diff --git a/version22/go/TestRSA.go b/version22/go/TestRSA.go
deleted file mode 100644
index 652fd9a..0000000
--- a/version22/go/TestRSA.go
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
-*/
-
-/* test driver and function exerciser for RSA API Functions */
-
-package main
-
-import "fmt"
-
-func RSA_printBinary(array []byte) {
- for i:=0;i<len(array);i++ {
- fmt.Printf("%02x", array[i])
- }
- fmt.Printf("\n")
-}
-
-func main() {
-
- var sha=RSA_HASH_TYPE
- message:="Hello World\n"
-
- pub:=New_rsa_public_key(FFLEN)
- priv:=New_rsa_private_key(HFLEN)
-
- var ML [RSA_RFS]byte
- var C [RSA_RFS]byte
- var S [RSA_RFS]byte
- var RAW [100]byte
-
- rng:=NewRAND()
-
- rng.Clean();
- for i:=0;i<100;i++ {RAW[i]=byte(i)}
-
- rng.Seed(100,RAW[:]);
-//for (i=0;i<10;i++)
-//{
- fmt.Printf("Generating public/private key pair\n")
- RSA_KEY_PAIR(rng,65537,priv,pub)
-
- M:=[]byte(message)
-
- fmt.Printf("Encrypting test string\n")
- E:=RSA_OAEP_ENCODE(sha,M,rng,nil) /* OAEP encode message M to E */
-
- RSA_ENCRYPT(pub,E,C[:]) /* encrypt encoded message */
- fmt.Printf("Ciphertext= 0x"); RSA_printBinary(C[:])
-
- fmt.Printf("Decrypting test string\n");
- RSA_DECRYPT(priv,C[:],ML[:])
- MS:=RSA_OAEP_DECODE(sha,nil,ML[:]) /* OAEP decode message */
-
- message=string(MS)
- fmt.Printf(message)
-
- fmt.Printf("Signing message\n")
- PKCS15(sha,M,C[:]);
-
- RSA_DECRYPT(priv,C[:],S[:]) /* create signature in S */
-
- fmt.Printf("Signature= 0x"); RSA_printBinary(S[:])
-
- RSA_ENCRYPT(pub,S[:],ML[:])
-
- cmp:=true
- if len(C)!=len(ML) {
- cmp=false
- } else {
- for j:=0;j<len(C);j++ {
- if C[j]!=ML[j] {cmp=false}
- }
- }
- if cmp {
- fmt.Printf("Signature is valid")
- } else {
- fmt.Printf("Signature is INVALID")
- }
-
-
-//}
- RSA_PRIVATE_KEY_KILL(priv)
-}
http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/go/readme.txt
----------------------------------------------------------------------
diff --git a/version22/go/readme.txt b/version22/go/readme.txt
deleted file mode 100644
index 054048c..0000000
--- a/version22/go/readme.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-AMCL is very simple to build for Go.
-
-This version supports both 32-bit and 64-bit builds.
-If your processor and operating system are both 64-bit, a 64-bit build
-will probably be best. Otherwise use a 32-bit build.
-
-Next - decide the modulus and curve type you want to use. Edit ROM32.go
-or ROM64.go where indicated. You will probably want to use one of the curves whose
-details are already in there.
-
-Three example API files are provided, TestMPIN.go which
-supports our M-Pin (tm) protocol, TestECDH.go which supports elliptic
-curve key exchange, digital signature and public key crypto, and TestRSA.go
-which supports the RSA method.
-
-In the ROM32.go/ROM64.go file you must provide the curve constants.
-Several examples are provided there, if you are willing to use one of these.
-
-Use ROM32.go for a 32-bit build
-Use ROM64.go for a 64-bit build
-
-To help generate the ROM constants for your own curve some MIRACL helper
-programs are included. The programs bngen.cpp and blsgen.cpp generate ROM
-data for a BN and BLS pairing friendly curves, and the program ecgen.cpp
-generates ROM data for regular EC curves.
-
-The MIRACL based program check.cpp helps choose the best number base for
-big number representation, given the word-length and the size of the modulus.
-
-The program bigtobig.cpp converts a big number to the AMCL
-BIG format.
-
-
-For a quick jumpstart:-
-
-go run TestMPIN.go MPIN.go PAIR.go FP12.go FP4.go FP2.go FP.go BIG.go DBIG.go ECP.go ECP2.go HASH256.go HASH384.go HASH512.go AES.go RAND.go ROM64.go
-
-or
-
-go run TestECDH.go ECDH.go FP.go BIG.go DBIG.go ECP.go HASH256.go HASH384.go HASH512.go AES.go RAND.go ROM64.go
-
-or
-
-go run TestRSA.go RSA.go FF.go BIG.go DBIG.go HASH256.go HASH384.go HASH512.go AES.go RAND.go ROM64.go
-
-also
-
-go run BenchtestEC.go RSA.go FF.go FP.go BIG.go DBIG.go ECP.go HASH256.go HASH384.go HASH512.go AES.go RAND.go ROM64.go
-
-go run BenchtestPAIR.go PAIR.go FP12.go FP4.go FP2.go FP.go BIG.go DBIG.go ECP.go ECP2.go HASH256.go HASH384.go HASH512.go AES.go RAND.go ROM64.go
\ No newline at end of file