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