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:09 UTC

[04/51] [partial] incubator-milagro-crypto git commit: update code

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version3/cpp/big.h
----------------------------------------------------------------------
diff --git a/version3/cpp/big.h b/version3/cpp/big.h
deleted file mode 100644
index 1f4f451..0000000
--- a/version3/cpp/big.h
+++ /dev/null
@@ -1,595 +0,0 @@
-#ifndef BIG_XXX_H
-#define BIG_XXX_H
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <inttypes.h>
-#include "arch.h"
-#include "amcl.h"
-#include "config_big_XXX.h"
-
-using namespace amcl;
-
-
-//#define UNWOUND
-
-#define BIGBITS_XXX (8*MODBYTES_XXX)
-#define NLEN_XXX (1+((8*MODBYTES_XXX-1)/BASEBITS_XXX))
-#define DNLEN_XXX 2*NLEN_XXX
-#define BMASK_XXX (((chunk)1<<BASEBITS_XXX)-1) /**< Mask = 2^BASEBITS-1 */
-#define NEXCESS_XXX (1<<(CHUNK-BASEBITS_XXX-1))           /**< 2^(CHUNK-BASEBITS-1) - digit cannot be multiplied by more than this before normalisation */
-
-#define HBITS_XXX (BASEBITS_XXX/2)      /**< Number of bits in number base divided by 2 */
-#define HMASK_XXX (((chunk)1<<HBITS_XXX)-1)    /**< Mask = 2^HBITS-1 */
-
-//#define DEBUG_NORM
-
-#ifdef DEBUG_NORM  /* Add an extra location to track chunk extension */
-#define MPV_XXX NLEN_XXX
-#define MNV_XXX (NLEN_XXX+1)
-#define DMPV_XXX DNLEN_XXX
-#define DMNV_XXX (DNLEN_XXX+1)
-
-#endif
-
-namespace XXX {
-
-#ifdef DEBUG_NORM 
-typedef chunk BIG[NLEN_XXX+2];   /**< Define type BIG as array of chunks */
-typedef chunk DBIG[DNLEN_XXX+2]; /**< Define type DBIG as array of chunks */
-#else
-typedef chunk BIG[NLEN_XXX];     /**< Define type BIG as array of chunks */
-typedef chunk DBIG[DNLEN_XXX];   /**< Define type DBIG as array of chunks */
-#endif
-
-/* BIG number prototypes */
-
-/**	@brief Tests for BIG equal to zero
- *
-	@param x a BIG number
-	@return 1 if zero, else returns 0
- */
-extern int BIG_iszilch(BIG x);
-/**	@brief Tests for BIG equal to one
- *
-	@param x a BIG number
-	@return 1 if one, else returns 0
- */
-extern int BIG_isunity(BIG x);
-/**	@brief Tests for DBIG equal to zero
- *
-	@param x a DBIG number
-	@return 1 if zero, else returns 0
- */
-extern int BIG_diszilch(DBIG x);
-/**	@brief Outputs a BIG number to the console
- *
-	@param x a BIG number
- */
-extern void BIG_output(BIG x);
-/**	@brief Outputs a BIG number to the console in raw form (for debugging)
- *
-	@param x a BIG number
- */
-extern void BIG_rawoutput(BIG x);
-/**	@brief Conditional constant time swap of two BIG numbers
- *
-	Conditionally swaps parameters in constant time (without branching)
-	@param x a BIG number
-	@param y another BIG number
-	@param s swap takes place if not equal to 0
- */
-extern void BIG_cswap(BIG x,BIG y,int s);
-/**	@brief Conditional copy of BIG number
- *
-	Conditionally copies second parameter to the first (without branching)
-	@param x a BIG number
-	@param y another BIG number
-	@param s copy takes place if not equal to 0
- */
-extern void BIG_cmove(BIG x,BIG y,int s);
-/**	@brief Conditional copy of DBIG number
- *
-	Conditionally copies second parameter to the first (without branching)
-	@param x a DBIG number
-	@param y another DBIG number
-	@param s copy takes place if not equal to 0
- */
-extern void BIG_dcmove(BIG x,BIG y,int s);
-/**	@brief Convert from BIG number to byte array
- *
-	@param a byte array
-	@param x BIG number
- */
-extern void BIG_toBytes(char *a,BIG x);
-/**	@brief Convert to BIG number from byte array
- *
-	@param x BIG number
-	@param a byte array
- */
-extern void BIG_fromBytes(BIG x,char *a);
-/**	@brief Convert to BIG number from byte array of given length
- *
-	@param x BIG number
-	@param a byte array
-	@param s byte array length
- */
-extern void BIG_fromBytesLen(BIG x,char *a,int s);
-/**@brief Convert to DBIG number from byte array of given length
- *
-   @param x DBIG number
-   @param a byte array
-   @param s byte array length
- */
-extern void BIG_dfromBytesLen(DBIG x,char *a,int s);
-/**	@brief Outputs a DBIG number to the console
- *
-	@param x a DBIG number
- */
-extern void BIG_doutput(DBIG x);
-
-/**	@brief Outputs a DBIG number to the console
- *
-	@param x a DBIG number
- */
-extern void BIG_drawoutput(DBIG x);
-
-/**	@brief Copy BIG from Read-Only Memory to a BIG
- *
-	@param x BIG number
-	@param y BIG number in ROM
- */
-extern void BIG_rcopy(BIG x,const BIG y);
-/**	@brief Copy BIG to another BIG
- *
-	@param x BIG number
-	@param y BIG number to be copied
- */
-extern void BIG_copy(BIG x,BIG y);
-/**	@brief Copy DBIG to another DBIG
- *
-	@param x DBIG number
-	@param y DBIG number to be copied
- */
-extern void BIG_dcopy(DBIG x,DBIG y);
-/**	@brief Copy BIG to upper half of DBIG
- *
-	@param x DBIG number
-	@param y BIG number to be copied
- */
-extern void BIG_dsucopy(DBIG x,BIG y);
-/**	@brief Copy BIG to lower half of DBIG
- *
-	@param x DBIG number
-	@param y BIG number to be copied
- */
-extern void BIG_dscopy(DBIG x,BIG y);
-/**	@brief Copy lower half of DBIG to a BIG
- *
-	@param x BIG number
-	@param y DBIG number to be copied
- */
-extern void BIG_sdcopy(BIG x,DBIG y);
-/**	@brief Copy upper half of DBIG to a BIG
- *
-	@param x BIG number
-	@param y DBIG number to be copied
- */
-extern void BIG_sducopy(BIG x,DBIG y);
-/**	@brief Set BIG to zero
- *
-	@param x BIG number to be set to zero
- */
-extern void BIG_zero(BIG x);
-/**	@brief Set DBIG to zero
- *
-	@param x DBIG number to be set to zero
- */
-extern void BIG_dzero(DBIG x);
-/**	@brief Set BIG to one (unity)
- *
-	@param x BIG number to be set to one.
- */
-extern void BIG_one(BIG x);
-/**	@brief Set BIG to inverse mod 2^256
- *
-	@param x BIG number to be inverted
- */
-extern void BIG_invmod2m(BIG x);
-/**	@brief Set BIG to sum of two BIGs - output not normalised
- *
-	@param x BIG number, sum of other two
-	@param y BIG number
-	@param z BIG number
- */
-extern void BIG_add(BIG x,BIG y,BIG z);
-
-/**	@brief Set BIG to logical or of two BIGs - output normalised
- *
-	@param x BIG number, or of other two
-	@param y BIG number
-	@param z BIG number
- */
-extern void BIG_or(BIG x,BIG y,BIG z);
-
-/**	@brief Increment BIG by a small integer - output not normalised
- *
-	@param x BIG number to be incremented
-	@param i integer
- */
-extern void BIG_inc(BIG x,int i);
-/**	@brief Set BIG to difference of two BIGs
- *
-	@param x BIG number, difference of other two - output not normalised
-	@param y BIG number
-	@param z BIG number
- */
-extern void BIG_sub(BIG x,BIG y,BIG z);
-/**	@brief Decrement BIG by a small integer - output not normalised
- *
-	@param x BIG number to be decremented
-	@param i integer
- */
-extern void BIG_dec(BIG x,int i);
-/**	@brief Set DBIG to sum of two DBIGs
- *
-	@param x DBIG number, sum of other two - output not normalised
-	@param y DBIG number
-	@param z DBIG number
- */
-extern void BIG_dadd(DBIG x,DBIG y,DBIG z);
-/**	@brief Set DBIG to difference of two DBIGs
- *
-	@param x DBIG number, difference of other two - output not normalised
-	@param y DBIG number
-	@param z DBIG number
- */
-extern void BIG_dsub(DBIG x,DBIG y,DBIG z);
-/**	@brief Multiply BIG by a small integer - output not normalised
- *
-	@param x BIG number, product of other two
-	@param y BIG number
-	@param i small integer
- */
-extern void BIG_imul(BIG x,BIG y,int i);
-/**	@brief Multiply BIG by not-so-small small integer - output normalised
- *
-	@param x BIG number, product of other two
-	@param y BIG number
-	@param i small integer
-	@return Overflowing bits
- */
-extern chunk BIG_pmul(BIG x,BIG y,int i);
-/**	@brief Divide BIG by 3 - output normalised
- *
-	@param x BIG number
-	@return Remainder
- */
-extern int BIG_div3(BIG x);
-/**	@brief Multiply BIG by even bigger small integer resulting in a DBIG - output normalised
- *
-	@param x DBIG number, product of other two
-	@param y BIG number
-	@param i small integer
- */
-extern void BIG_pxmul(DBIG x,BIG y,int i);
-/**	@brief Multiply BIG by another BIG resulting in DBIG - inputs normalised and output normalised
- *
-	@param x DBIG number, product of other two
-	@param y BIG number
-	@param z BIG number
- */
-extern void BIG_mul(DBIG x,BIG y,BIG z);
-/**	@brief Multiply BIG by another BIG resulting in another BIG - inputs normalised and output normalised
- *
-	Note that the product must fit into a BIG, and x must be distinct from y and z
-	@param x BIG number, product of other two
-	@param y BIG number
-	@param z BIG number
- */
-extern void BIG_smul(BIG x,BIG y,BIG z);
-/**	@brief Square BIG resulting in a DBIG - input normalised and output normalised
- *
-	@param x DBIG number, square of a BIG
-	@param y BIG number to be squared
- */
-extern void BIG_sqr(DBIG x,BIG y);
-
-/**	@brief Montgomery reduction of a DBIG to a BIG  - input normalised and output normalised
- *
-	@param a BIG number, reduction of a BIG
-	@param md BIG number, the modulus
-	@param MC the Montgomery Constant
-	@param d DBIG number to be reduced
- */
-extern void BIG_monty(BIG a,BIG md,chunk MC,DBIG d);
-
-/**	@brief Shifts a BIG left by any number of bits - input must be normalised, output normalised
- *
-	@param x BIG number to be shifted
-	@param s Number of bits to shift
- */
-extern void BIG_shl(BIG x,int s);
-/**	@brief Fast shifts a BIG left by a small number of bits - input must be normalised, output will be normalised
- *
-	The number of bits to be shifted must be less than BASEBITS
-	@param x BIG number to be shifted
-	@param s Number of bits to shift
-	@return Overflow bits
- */
-extern int BIG_fshl(BIG x,int s);
-/**	@brief Shifts a DBIG left by any number of bits - input must be normalised, output normalised
- *
-	@param x DBIG number to be shifted
-	@param s Number of bits to shift
- */
-extern void BIG_dshl(DBIG x,int s);
-/**	@brief Shifts a BIG right by any number of bits - input must be normalised, output normalised
- *
-	@param x BIG number to be shifted
-	@param s Number of bits to shift
- */
-extern void BIG_shr(BIG x,int s);
-
-
-/**	@brief Fast time-critical combined shift by 1 bit, subtract and normalise
- *
-	@param r BIG number normalised output
-	@param a BIG number to be subtracted from
-	@param m BIG number to be shifted and subtracted
-	@return sign of r
- */
-extern int BIG_ssn(BIG r,BIG a, BIG m);
-
-/**	@brief Fast shifts a BIG right by a small number of bits - input must be normalised, output will be normalised
- *
-	The number of bits to be shifted must be less than BASEBITS
-	@param x BIG number to be shifted
-	@param s Number of bits to shift
-	@return Shifted out bits
- */
-extern int BIG_fshr(BIG x,int s);
-/**	@brief Shifts a DBIG right by any number of bits - input must be normalised, output normalised
- *
-	@param x DBIG number to be shifted
-	@param s Number of bits to shift
- */
-extern void BIG_dshr(DBIG x,int s);
-/**	@brief Splits a DBIG into two BIGs - input must be normalised, outputs normalised
- *
-	Internal function. The value of s must be approximately in the middle of the DBIG.
-	Typically used to extract z mod 2^MODBITS and z/2^MODBITS
-	@param x BIG number, top half of z
-	@param y BIG number, bottom half of z
-	@param z DBIG number to be split in two.
-	@param s Bit position at which to split
-	@return carry-out from top half
- */
-extern chunk BIG_split(BIG x,BIG y,DBIG z,int s);
-/**	@brief Normalizes a BIG number - output normalised
- *
-	All digits of the input BIG are reduced mod 2^BASEBITS
-	@param x BIG number to be normalised
- */
-extern chunk BIG_norm(BIG x);
-/**	@brief Normalizes a DBIG number - output normalised
- *
-	All digits of the input DBIG are reduced mod 2^BASEBITS
-	@param x DBIG number to be normalised
- */
-extern void BIG_dnorm(DBIG x);
-/**	@brief Compares two BIG numbers. Inputs must be normalised externally
- *
-	@param x first BIG number to be compared
-	@param y second BIG number to be compared
-	@return -1 is x<y, 0 if x=y, 1 if x>y
- */
-extern int BIG_comp(BIG x,BIG y);
-/**	@brief Compares two DBIG numbers. Inputs must be normalised externally
- *
-	@param x first DBIG number to be compared
-	@param y second DBIG number to be compared
-	@return -1 is x<y, 0 if x=y, 1 if x>y
- */
-extern int BIG_dcomp(DBIG x,DBIG y);
-/**	@brief Calculate number of bits in a BIG - output normalised
- *
-	@param x BIG number
-	@return Number of bits in x
- */
-extern int BIG_nbits(BIG x);
-/**	@brief Calculate number of bits in a DBIG - output normalised
- *
-	@param x DBIG number
-	@return Number of bits in x
- */
-extern int BIG_dnbits(DBIG x);
-/**	@brief Reduce x mod n - input and output normalised
- *
-	Slow but rarely used
-	@param x BIG number to be reduced mod n
-	@param n The modulus
- */
-extern void BIG_mod(BIG x,BIG n);
-/**	@brief Divide x by n - output normalised
- *
-	Slow but rarely used
-	@param x BIG number to be divided by n
-	@param n The Divisor
- */
-extern void BIG_sdiv(BIG x,BIG n);
-/**	@brief  x=y mod n - output normalised
- *
-	Slow but rarely used. y is destroyed.
-	@param x BIG number, on exit = y mod n
-	@param y DBIG number
-	@param n Modulus
- */
-extern void BIG_dmod(BIG x,DBIG y,BIG n);
-/**	@brief  x=y/n - output normalised
- *
-	Slow but rarely used. y is destroyed.
-	@param x BIG number, on exit = y/n
-	@param y DBIG number
-	@param n Modulus
- */
-extern void BIG_ddiv(BIG x,DBIG y,BIG n);
-/**	@brief  return parity of BIG, that is the least significant bit
- *
-	@param x BIG number
-	@return 0 or 1
- */
-extern int BIG_parity(BIG x);
-/**	@brief  return i-th of BIG
- *
-	@param x BIG number
-	@param i the bit of x to be returned
-	@return 0 or 1
- */
-extern int BIG_bit(BIG x,int i);
-/**	@brief  return least significant bits of a BIG
- *
-	@param x BIG number
-	@param n number of bits to return. Assumed to be less than BASEBITS.
-	@return least significant n bits as an integer
- */
-extern int BIG_lastbits(BIG x,int n);
-/**	@brief  Create a random BIG from a random number generator
- *
-	Assumes that the random number generator has been suitably initialised
-	@param x BIG number, on exit a random number
-	@param r A pointer to a Cryptographically Secure Random Number Generator
- */
-extern void BIG_random(BIG x,csprng *r);
-/**	@brief  Create an unbiased random BIG from a random number generator, reduced with respect to a modulus
- *
-	Assumes that the random number generator has been suitably initialised
-	@param x BIG number, on exit a random number
-	@param n The modulus
-	@param r A pointer to a Cryptographically Secure Random Number Generator
- */
-extern void BIG_randomnum(BIG x,BIG n,csprng *r);
-/**	brief  return NAF (Non-Adjacent-Form) value as +/- 1, 3 or 5, inputs must be normalised
- *
-	Given x and 3*x extracts NAF value from given bit position, and returns number of bits processed, and number of trailing zeros detected if any
-	param x BIG number
-	param x3 BIG number, three times x
-	param i bit position
-	param nbs pointer to integer returning number of bits processed
-	param nzs pointer to integer returning number of trailing 0s
-	return + or - 1, 3 or 5
-*/
-
-/**	@brief  Calculate x=y*z mod n
- *
-	Slow method for modular multiplication
-	@param x BIG number, on exit = y*z mod n
-	@param y BIG number
-	@param z BIG number
-	@param n The BIG Modulus
- */
-extern void BIG_modmul(BIG x,BIG y,BIG z,BIG n);
-/**	@brief  Calculate x=y/z mod n
- *
-	Slow method for modular division
-	@param x BIG number, on exit = y/z mod n
-	@param y BIG number
-	@param z BIG number
-	@param n The BIG Modulus
- */
-extern void BIG_moddiv(BIG x,BIG y,BIG z,BIG n);
-/**	@brief  Calculate x=y^2 mod n
- *
-	Slow method for modular squaring
-	@param x BIG number, on exit = y^2 mod n
-	@param y BIG number
-	@param n The BIG Modulus
- */
-extern void BIG_modsqr(BIG x,BIG y,BIG n);
-/**	@brief  Calculate x=-y mod n
- *
-	Modular negation
-	@param x BIG number, on exit = -y mod n
-	@param y BIG number
-	@param n The BIG Modulus
- */
-extern void BIG_modneg(BIG x,BIG y,BIG n);
-/**	@brief  Calculate jacobi Symbol (x/y)
- *
-	@param x BIG number
-	@param y BIG number
-	@return Jacobi symbol, -1,0 or 1
- */
-extern int BIG_jacobi(BIG x,BIG y);
-/**	@brief  Calculate x=1/y mod n
- *
-	Modular Inversion - This is slow. Uses binary method.
-	@param x BIG number, on exit = 1/y mod n
-	@param y BIG number
-	@param n The BIG Modulus
- */
-extern void BIG_invmodp(BIG x,BIG y,BIG n);
-/** @brief Calculate x=x mod 2^m
- *
-	Truncation
-	@param x BIG number, on reduced mod 2^m
-	@param m new truncated size
-*/
-extern void BIG_mod2m(BIG x,int m);
-
-/**	@brief Calculates a*b+c+*d
- *
-	Calculate partial product of a.b, add in carry c, and add total to d
-	@param a multiplier
-	@param b multiplicand
-	@param c carry
-	@param d pointer to accumulated bottom half of result
-	@return top half of result
- */
-
-#ifdef dchunk
-
-/* Method required to calculate x*y+c+r, bottom half in r, top half returned */
-inline chunk muladd(chunk x,chunk y,chunk c,chunk *r)
-{
-    dchunk prod=(dchunk)x*y+c+*r;
-    *r=(chunk)prod&BMASK_XXX;
-    return (chunk)(prod>>BASEBITS_XXX);
-}
-
-#else
-
-/* No integer type available that can store double the wordlength */
-/* accumulate partial products */
-
-inline chunk muladd(chunk x,chunk y,chunk c,chunk *r)
-{
-    chunk x0,x1,y0,y1;
-    chunk bot,top,mid,carry;
-    x0=x&HMASK;
-    x1=(x>>HBITS_XXX);
-    y0=y&HMASK_XXX;
-    y1=(y>>HBITS_XXX);
-    bot=x0*y0;
-    top=x1*y1;
-    mid=x0*y1+x1*y0;
-    x0=mid&HMASK_XXX;
-    x1=(mid>>HBITS_XXX);
-    bot+=x0<<HBITS_XXX;
-    bot+=*r;
-    bot+=c;
-
-    top+=x1;
-    carry=bot>>BASEBITS_XXX;
-    bot&=BMASK_XXX;
-    top+=carry;
-
-    *r=bot;
-    return top;
-}
-
-#endif
-
-}
-
-#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version3/cpp/config16.py
----------------------------------------------------------------------
diff --git a/version3/cpp/config16.py b/version3/cpp/config16.py
deleted file mode 100644
index d22a76a..0000000
--- a/version3/cpp/config16.py
+++ /dev/null
@@ -1,370 +0,0 @@
-import os
-import sys
-
-deltext=""
-if sys.platform.startswith("linux")  :
-	deltext="rm"
-	copytext="cp"
-if sys.platform.startswith("darwin")  :
-	deltext="rm"
-	copytext="cp"
-if sys.platform.startswith("win") :
-	deltext="del"
-	copytext="copy"
-
-def replace(namefile,oldtext,newtext):
-	f = open(namefile,'r')
-	filedata = f.read()
-	f.close()
-
-	newdata = filedata.replace(oldtext,newtext)
-
-	f = open(namefile,'w')
-	f.write(newdata)
-	f.close()
-
-
-def rsaset(tb,tff,nb,base,ml) :
-	bd="B"+tb+"_"+base
-	fnameh="config_big_"+bd+".h"
-	os.system(copytext+" config_big.h "+fnameh)
-	replace(fnameh,"XXX",bd)
-	replace(fnameh,"@NB@",nb)
-	replace(fnameh,"@BASE@",base)
-
-	fnameh="config_ff_"+tff+".h"
-	os.system(copytext+" config_ff.h "+fnameh)
-	replace(fnameh,"XXX",bd)
-	replace(fnameh,"WWW",tff)
-	replace(fnameh,"@ML@",ml)
-
-	fnamec="big_"+bd+".cpp"
-	fnameh="big_"+bd+".h"
-
-	os.system(copytext+" big.cpp "+fnamec)
-	os.system(copytext+" big.h "+fnameh)
-
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	fnamec="ff_"+tff+".cpp"
-	fnameh="ff_"+tff+".h"
-
-	os.system(copytext+" ff.cpp "+fnamec)
-	os.system(copytext+" ff.h "+fnameh)
-
-	replace(fnamec,"WWW",tff)
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"WWW",tff)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	fnamec="rsa_"+tff+".cpp"
-	fnameh="rsa_"+tff+".h"
-
-	os.system(copytext+" rsa.cpp "+fnamec)
-	os.system(copytext+" rsa.h "+fnameh)
-
-	replace(fnamec,"WWW",tff)
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"WWW",tff)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-def curveset(tb,tf,tc,nb,base,nbt,m8,mt,ct,pf,stw,sx,cs) :
-	bd="B"+tb+"_"+base
-	fnameh="config_big_"+bd+".h"
-	os.system(copytext+" config_big.h "+fnameh)
-	replace(fnameh,"XXX",bd)
-	replace(fnameh,"@NB@",nb)
-	replace(fnameh,"@BASE@",base)
-
-	fnameh="config_field_"+tf+".h"
-	os.system(copytext+" config_field.h "+fnameh)
-	replace(fnameh,"XXX",bd)
-	replace(fnameh,"YYY",tf)
-	replace(fnameh,"@NBT@",nbt)
-	replace(fnameh,"@M8@",m8)
-	replace(fnameh,"@MT@",mt)
-
-	ib=int(base)
-	inb=int(nb)
-	inbt=int(nbt)
-	sh=ib*(1+((8*inb-1)//ib))-inbt
-
-	if sh > 6 :
-		sh=6
-	replace(fnameh,"@SH@",str(sh))
-
-	fnameh="config_curve_"+tc+".h"	
-	os.system(copytext+" config_curve.h "+fnameh)
-	replace(fnameh,"XXX",bd)
-	replace(fnameh,"YYY",tf)
-	replace(fnameh,"ZZZ",tc)
-	replace(fnameh,"@CT@",ct)
-	replace(fnameh,"@PF@",pf)
-
-	replace(fnameh,"@ST@",stw)
-	replace(fnameh,"@SX@",sx)
-	replace(fnameh,"@CS@",cs)
-
-
-	fnamec="big_"+bd+".cpp"
-	fnameh="big_"+bd+".h"
-
-	os.system(copytext+" big.cpp "+fnamec)
-	os.system(copytext+" big.h "+fnameh)
-
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	fnamec="fp_"+tf+".cpp"
-	fnameh="fp_"+tf+".h"
-
-	os.system(copytext+" fp.cpp "+fnamec)
-	os.system(copytext+" fp.h "+fnameh)
-
-	replace(fnamec,"YYY",tf)
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"YYY",tf)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	os.system("g++ -O3 -c rom_field_"+tf+".cpp")
-
-	fnamec="ecp_"+tc+".cpp"
-	fnameh="ecp_"+tc+".h"
-
-	os.system(copytext+" ecp.cpp "+fnamec)
-	os.system(copytext+" ecp.h "+fnameh)
-
-	replace(fnamec,"ZZZ",tc)
-	replace(fnamec,"YYY",tf)
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"ZZZ",tc)
-	replace(fnameh,"YYY",tf)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	fnamec="ecdh_"+tc+".cpp"
-	fnameh="ecdh_"+tc+".h"
-
-	os.system(copytext+" ecdh.cpp "+fnamec)
-	os.system(copytext+" ecdh.h "+fnameh)
-
-	replace(fnamec,"ZZZ",tc)
-	replace(fnamec,"YYY",tf)
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"ZZZ",tc)
-	replace(fnameh,"YYY",tf)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	os.system("g++ -O3 -c rom_curve_"+tc+".cpp")
-
-	if pf != "NOT" :
-		fnamec="fp2_"+tf+".cpp"
-		fnameh="fp2_"+tf+".h"
-
-		os.system(copytext+" fp2.cpp "+fnamec)
-		os.system(copytext+" fp2.h "+fnameh)
-		replace(fnamec,"YYY",tf)
-		replace(fnamec,"XXX",bd)
-		replace(fnameh,"YYY",tf)
-		replace(fnameh,"XXX",bd)
-		os.system("g++ -O3 -c "+fnamec)
-
-		fnamec="fp4_"+tf+".cpp"
-		fnameh="fp4_"+tf+".h"
-
-		os.system(copytext+" fp4.cpp "+fnamec)
-		os.system(copytext+" fp4.h "+fnameh)
-		replace(fnamec,"YYY",tf)
-		replace(fnamec,"XXX",bd)
-		replace(fnamec,"ZZZ",tc)
-		replace(fnameh,"YYY",tf)
-		replace(fnameh,"XXX",bd)
-		replace(fnameh,"ZZZ",tc)
-		os.system("g++ -O3 -c "+fnamec)
-
-		fnamec="fp12_"+tf+".cpp"
-		fnameh="fp12_"+tf+".h"
-
-		os.system(copytext+" fp12.cpp "+fnamec)
-		os.system(copytext+" fp12.h "+fnameh)
-		replace(fnamec,"YYY",tf)
-		replace(fnamec,"XXX",bd)
-		replace(fnameh,"YYY",tf)
-		replace(fnameh,"XXX",bd)
-		os.system("g++ -O3 -c "+fnamec)
-
-		fnamec="ecp2_"+tc+".cpp"
-		fnameh="ecp2_"+tc+".h"
-
-		os.system(copytext+" ecp2.cpp "+fnamec)
-		os.system(copytext+" ecp2.h "+fnameh)
-		replace(fnamec,"ZZZ",tc)
-		replace(fnamec,"YYY",tf)
-		replace(fnamec,"XXX",bd)
-		replace(fnameh,"ZZZ",tc)
-		replace(fnameh,"YYY",tf)
-		replace(fnameh,"XXX",bd)
-		os.system("g++ -O3 -c "+fnamec)
-
-		fnamec="pair_"+tc+".cpp"
-		fnameh="pair_"+tc+".h"
-
-		os.system(copytext+" pair.cpp "+fnamec)
-		os.system(copytext+" pair.h "+fnameh)
-		replace(fnamec,"ZZZ",tc)
-		replace(fnamec,"YYY",tf)
-		replace(fnamec,"XXX",bd)
-		replace(fnameh,"ZZZ",tc)
-		replace(fnameh,"YYY",tf)
-		replace(fnameh,"XXX",bd)
-		os.system("g++ -O3 -c "+fnamec)
-
-		fnamec="mpin_"+tc+".cpp"
-		fnameh="mpin_"+tc+".h"
-
-		os.system(copytext+" mpin.cpp "+fnamec)
-		os.system(copytext+" mpin.h "+fnameh)
-		replace(fnamec,"ZZZ",tc)
-		replace(fnamec,"YYY",tf)
-		replace(fnamec,"XXX",bd)
-		replace(fnameh,"ZZZ",tc)
-		replace(fnameh,"YYY",tf)
-		replace(fnameh,"XXX",bd)
-		os.system("g++ -O3 -c "+fnamec)
-
-replace("arch.h","@WL@","16")
-print("Elliptic Curves")
-print("1. ED25519")
-print("2. NUMS256E")
-
-print("Pairing-Friendly Elliptic Curves")
-print("3. BN254")
-print("4. BN254CX")
-
-print("RSA")
-print("5. RSA2048")
-
-
-selection=[]
-ptr=0
-max=6
-
-curve_selected=False
-pfcurve_selected=False
-rsa_selected=False
-
-while ptr<max:
-	x=int(input("Choose a Scheme to support - 0 to finish: "))
-	if x == 0:
-		break
-#	print("Choice= ",x)
-	already=False
-	for i in range(0,ptr):
-		if x==selection[i]:
-			already=True
-			break
-	if already:
-		continue
-	
-	selection.append(x)
-	ptr=ptr+1
-
-# curveset(big,field,curve,big_length_bytes,bits_in_base,modulus_bits,modulus_mod_8,modulus_type,curve_type,pairing_friendly)
-# for each curve give names for big, field and curve. In many cases the latter two will be the same. 
-# Typically "big" is the size in bits, always a multiple of 8, "field" describes the modulus, and "curve" is the common name for the elliptic curve   
-# big_length_bytes is "big" divided by 8
-# Next give the number base used for 16 bit architectures, as n where the base is 2^n (note that these must be fixed for the same "big" name, if is ever re-used for another curve)
-# modulus_bits is the bit length of the modulus, typically the same or slightly smaller than "big"
-# modulus_mod_8 is the remainder when the modulus is divided by 8
-# modulus_type is NOT_SPECIAL, or PSEUDO_MERSENNE, or MONTGOMERY_Friendly, or GENERALISED_MERSENNE (supported for GOLDILOCKS only)
-# curve_type is WEIERSTRASS, EDWARDS or MONTGOMERY
-# pairing_friendly is BN, BLS or NOT (if not pairing friendly)
-# if pairing friendly. M or D type twist, and sign of the family parameter x
-
-
-	if x==1:
-		curveset("256","F25519","ED25519","32","13","255","5","PSEUDO_MERSENNE","EDWARDS","NOT","","","128")
-		curve_selected=True
-	if x==2:
-		curveset("256","F256PME","NUMS256E","32","13","256","3","PSEUDO_MERSENNE","EDWARDS","NOT","","","128")
-		curve_selected=True
-
-
-	if x==3:
-		curveset("256","BN254","BN254","32","13","254","3","NOT_SPECIAL","WEIERSTRASS","BN","D_TYPE","NEGATIVEX","128")
-		pfcurve_selected=True
-	if x==4:
-		curveset("256","BN254CX","BN254CX","32","13","254","3","NOT_SPECIAL","WEIERSTRASS","BN","D_TYPE","NEGATIVEX","128")
-		pfcurve_selected=True
-
-# rsaset(big,ring,big_length_bytes,bits_in_base,multiplier)
-# for each choice give distinct names for "big" and "ring".
-# Typically "big" is the length in bits of the underlying big number type
-# "ring" is the RSA modulus size = "big" times 2^m
-# big_length_bytes is "big" divided by 8
-# Next give the number base used for 16 bit architectures, as n where the base is 2^n
-# multiplier is 2^m (see above)
-
-# There are choices here, different ways of getting the same result, but some faster than others
-	if x==5:
-		#256 is slower but may allow reuse of 256-bit BIGs used for elliptic curve
-		#512 is faster.. but best is 1024
-		rsaset("256","RSA2048","32","13","8")
-		rsa_selected=True
-
-
-os.system(deltext+" big.*")
-os.system(deltext+" fp.*")
-os.system(deltext+" ecp.*")
-os.system(deltext+" ecdh.*")
-os.system(deltext+" ff.*")
-os.system(deltext+" rsa.*")
-os.system(deltext+" config_big.h")
-os.system(deltext+" config_field.h")
-os.system(deltext+" config_curve.h")
-os.system(deltext+" config_ff.h")
-os.system(deltext+" fp2.*")
-os.system(deltext+" fp4.*")
-os.system(deltext+" fp12.*")
-os.system(deltext+" ecp2.*")
-os.system(deltext+" pair.*")
-os.system(deltext+" mpin.*")
-
-# create library
-os.system("g++ -O3 -c randapi.cpp")
-if curve_selected :
-	os.system("g++ -O3 -c ecdh_support.cpp")
-if rsa_selected :
-	os.system("g++ -O3 -c rsa_support.cpp")
-if pfcurve_selected :
-	os.system("g++ -O3 -c pbc_support.cpp")
-
-os.system("g++ -O3 -c hash.cpp")
-os.system("g++ -O3 -c rand.cpp")
-os.system("g++ -O3 -c oct.cpp")
-os.system("g++ -O3 -c aes.cpp")
-os.system("g++ -O3 -c gcm.cpp")
-os.system("g++ -O3 -c newhope.cpp")
-
-if sys.platform.startswith("win") :
-	os.system("for %i in (*.o) do @echo %~nxi >> f.list")
-	os.system("ar rc amcl.a @f.list")
-	os.system(deltext+" f.list")
-
-else :
-	os.system("ar rc amcl.a *.o")
-
-os.system(deltext+" *.o")
-
-
-#print("Your section was ")
-#for i in range(0,ptr):
-#	print (selection[i])
-

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version3/cpp/config32.py
----------------------------------------------------------------------
diff --git a/version3/cpp/config32.py b/version3/cpp/config32.py
deleted file mode 100644
index b2ab9b0..0000000
--- a/version3/cpp/config32.py
+++ /dev/null
@@ -1,641 +0,0 @@
-import os
-import sys
-
-deltext=""
-if sys.platform.startswith("linux")  :
-	deltext="rm"
-	copytext="cp"
-if sys.platform.startswith("darwin")  :
-	deltext="rm"
-	copytext="cp"
-if sys.platform.startswith("win") :
-	deltext="del"
-	copytext="copy"
-
-def replace(namefile,oldtext,newtext):
-	f = open(namefile,'r')
-	filedata = f.read()
-	f.close()
-
-	newdata = filedata.replace(oldtext,newtext)
-
-	f = open(namefile,'w')
-	f.write(newdata)
-	f.close()
-
-
-def rsaset(tb,tff,nb,base,ml) :
-	bd="B"+tb+"_"+base
-	fnameh="config_big_"+bd+".h"
-	os.system(copytext+" config_big.h "+fnameh)
-	replace(fnameh,"XXX",bd)
-	replace(fnameh,"@NB@",nb)
-	replace(fnameh,"@BASE@",base)
-
-	fnameh="config_ff_"+tff+".h"
-	os.system(copytext+" config_ff.h "+fnameh)
-	replace(fnameh,"XXX",bd)
-	replace(fnameh,"WWW",tff)
-	replace(fnameh,"@ML@",ml)
-
-	fnamec="big_"+bd+".cpp"
-	fnameh="big_"+bd+".h"
-
-	os.system(copytext+" big.cpp "+fnamec)
-	os.system(copytext+" big.h "+fnameh)
-
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	fnamec="ff_"+tff+".cpp"
-	fnameh="ff_"+tff+".h"
-
-	os.system(copytext+" ff.cpp "+fnamec)
-	os.system(copytext+" ff.h "+fnameh)
-
-	replace(fnamec,"WWW",tff)
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"WWW",tff)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	fnamec="rsa_"+tff+".cpp"
-	fnameh="rsa_"+tff+".h"
-
-	os.system(copytext+" rsa.cpp "+fnamec)
-	os.system(copytext+" rsa.h "+fnameh)
-
-	replace(fnamec,"WWW",tff)
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"WWW",tff)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-def curveset(tb,tf,tc,nb,base,nbt,m8,mt,ct,pf,stw,sx,cs) :
-	bd="B"+tb+"_"+base
-	fnameh="config_big_"+bd+".h"
-	os.system(copytext+" config_big.h "+fnameh)
-	replace(fnameh,"XXX",bd)
-	replace(fnameh,"@NB@",nb)
-	replace(fnameh,"@BASE@",base)
-
-	fnameh="config_field_"+tf+".h"
-	os.system(copytext+" config_field.h "+fnameh)
-	replace(fnameh,"XXX",bd)
-	replace(fnameh,"YYY",tf)
-	replace(fnameh,"@NBT@",nbt)
-	replace(fnameh,"@M8@",m8)
-	replace(fnameh,"@MT@",mt)
-
-	ib=int(base)
-	inb=int(nb)
-	inbt=int(nbt)
-	sh=ib*(1+((8*inb-1)//ib))-inbt
-
-	if sh > 14 :
-		sh=14
-	replace(fnameh,"@SH@",str(sh))
-
-	fnameh="config_curve_"+tc+".h"	
-	os.system(copytext+" config_curve.h "+fnameh)
-	replace(fnameh,"XXX",bd)
-	replace(fnameh,"YYY",tf)
-	replace(fnameh,"ZZZ",tc)
-	replace(fnameh,"@CT@",ct)
-	replace(fnameh,"@PF@",pf)
-
-	replace(fnameh,"@ST@",stw)
-	replace(fnameh,"@SX@",sx)
-	replace(fnameh,"@CS@",cs)
-
-	fnamec="big_"+bd+".cpp"
-	fnameh="big_"+bd+".h"
-
-	os.system(copytext+" big.cpp "+fnamec)
-	os.system(copytext+" big.h "+fnameh)
-
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	fnamec="fp_"+tf+".cpp"
-	fnameh="fp_"+tf+".h"
-
-	os.system(copytext+" fp.cpp "+fnamec)
-	os.system(copytext+" fp.h "+fnameh)
-
-	replace(fnamec,"YYY",tf)
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"YYY",tf)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	os.system("g++ -O3 -c rom_field_"+tf+".cpp")
-
-	fnamec="ecp_"+tc+".cpp"
-	fnameh="ecp_"+tc+".h"
-
-	os.system(copytext+" ecp.cpp "+fnamec)
-	os.system(copytext+" ecp.h "+fnameh)
-
-	replace(fnamec,"ZZZ",tc)
-	replace(fnamec,"YYY",tf)
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"ZZZ",tc)
-	replace(fnameh,"YYY",tf)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	fnamec="ecdh_"+tc+".cpp"
-	fnameh="ecdh_"+tc+".h"
-
-	os.system(copytext+" ecdh.cpp "+fnamec)
-	os.system(copytext+" ecdh.h "+fnameh)
-
-	replace(fnamec,"ZZZ",tc)
-	replace(fnamec,"YYY",tf)
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"ZZZ",tc)
-	replace(fnameh,"YYY",tf)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	os.system("g++ -O3 -c rom_curve_"+tc+".cpp")
-
-	if pf != "NOT" :
-		fnamec="fp2_"+tf+".cpp"
-		fnameh="fp2_"+tf+".h"
-
-		os.system(copytext+" fp2.cpp "+fnamec)
-		os.system(copytext+" fp2.h "+fnameh)
-		replace(fnamec,"YYY",tf)
-		replace(fnamec,"XXX",bd)
-		replace(fnameh,"YYY",tf)
-		replace(fnameh,"XXX",bd)
-		os.system("g++ -O3 -c "+fnamec)
-
-		fnamec="fp4_"+tf+".cpp"
-		fnameh="fp4_"+tf+".h"
-
-		os.system(copytext+" fp4.cpp "+fnamec)
-		os.system(copytext+" fp4.h "+fnameh)
-		replace(fnamec,"YYY",tf)
-		replace(fnamec,"XXX",bd)
-		replace(fnamec,"ZZZ",tc)
-		replace(fnameh,"YYY",tf)
-		replace(fnameh,"XXX",bd)
-		replace(fnameh,"ZZZ",tc)
-		os.system("g++ -O3 -c "+fnamec)
-
-		if cs == "128" :
-			fnamec="fp12_"+tf+".cpp"
-			fnameh="fp12_"+tf+".h"
-
-			os.system(copytext+" fp12.cpp "+fnamec)
-			os.system(copytext+" fp12.h "+fnameh)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-			fnamec="ecp2_"+tc+".cpp"
-			fnameh="ecp2_"+tc+".h"
-
-			os.system(copytext+" ecp2.cpp "+fnamec)
-			os.system(copytext+" ecp2.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-			fnamec="pair_"+tc+".cpp"
-			fnameh="pair_"+tc+".h"
-
-			os.system(copytext+" pair.cpp "+fnamec)
-			os.system(copytext+" pair.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-			fnamec="mpin_"+tc+".cpp"
-			fnameh="mpin_"+tc+".h"
-
-			os.system(copytext+" mpin.cpp "+fnamec)
-			os.system(copytext+" mpin.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-		if cs == "192" :
-			fnamec="fp8_"+tf+".cpp"
-			fnameh="fp8_"+tf+".h"
-
-			os.system(copytext+" fp8.cpp "+fnamec)
-			os.system(copytext+" fp8.h "+fnameh)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			os.system("g++ -O3 -c "+fnamec)
-
-
-			fnamec="fp24_"+tf+".cpp"
-			fnameh="fp24_"+tf+".h"
-
-			os.system(copytext+" fp24.cpp "+fnamec)
-			os.system(copytext+" fp24.h "+fnameh)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-			fnamec="ecp4_"+tc+".cpp"
-			fnameh="ecp4_"+tc+".h"
-
-			os.system(copytext+" ecp4.cpp "+fnamec)
-			os.system(copytext+" ecp4.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-			fnamec="pair192_"+tc+".cpp"
-			fnameh="pair192_"+tc+".h"
-
-			os.system(copytext+" pair192.cpp "+fnamec)
-			os.system(copytext+" pair192.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-			fnamec="mpin192_"+tc+".cpp"
-			fnameh="mpin192_"+tc+".h"
-
-			os.system(copytext+" mpin192.cpp "+fnamec)
-			os.system(copytext+" mpin192.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-		if cs == "256" :
-
-			fnamec="fp8_"+tf+".cpp"
-			fnameh="fp8_"+tf+".h"
-
-			os.system(copytext+" fp8.cpp "+fnamec)
-			os.system(copytext+" fp8.h "+fnameh)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			os.system("g++ -O3 -c "+fnamec)
-
-
-			fnamec="ecp8_"+tc+".cpp"
-			fnameh="ecp8_"+tc+".h"
-
-			os.system(copytext+" ecp8.cpp "+fnamec)
-			os.system(copytext+" ecp8.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-
-			fnamec="fp16_"+tf+".cpp"
-			fnameh="fp16_"+tf+".h"
-
-			os.system(copytext+" fp16.cpp "+fnamec)
-			os.system(copytext+" fp16.h "+fnameh)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			os.system("g++ -O3 -c "+fnamec)
-
-
-			fnamec="fp48_"+tf+".cpp"
-			fnameh="fp48_"+tf+".h"
-
-			os.system(copytext+" fp48.cpp "+fnamec)
-			os.system(copytext+" fp48.h "+fnameh)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-
-			fnamec="pair256_"+tc+".cpp"
-			fnameh="pair256_"+tc+".h"
-
-			os.system(copytext+" pair256.cpp "+fnamec)
-			os.system(copytext+" pair256.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-			fnamec="mpin256_"+tc+".cpp"
-			fnameh="mpin256_"+tc+".h"
-
-			os.system(copytext+" mpin256.cpp "+fnamec)
-			os.system(copytext+" mpin256.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-replace("arch.h","@WL@","32")
-print("Elliptic Curves")
-print("1. ED25519")
-print("2. C25519")
-print("3. NIST256")
-print("4. BRAINPOOL")
-print("5. ANSSI")
-print("6. HIFIVE")
-print("7. GOLDILOCKS")
-print("8. NIST384")
-print("9. C41417")
-print("10. NIST521\n")
-print("11. NUMS256W")
-print("12. NUMS256E")
-print("13. NUMS384W")
-print("14. NUMS384E")
-print("15. NUMS512W")
-print("16. NUMS512E")
-print("17. SECP256K1\n")
-
-print("Pairing-Friendly Elliptic Curves")
-print("18. BN254")
-print("19. BN254CX")
-print("20. BLS383")
-print("21. BLS381")
-print("22. FP256BN")
-print("23. FP512BN")
-print("24. BLS461\n")
-print("25. BLS24")
-print("26. BLS48\n")
-
-print("RSA")
-print("27. RSA2048")
-print("28. RSA3072")
-print("29. RSA4096")
-
-selection=[]
-ptr=0
-max=30
-
-
-curve_selected=False
-pfcurve_selected=False
-rsa_selected=False
-
-while ptr<max:
-	x=int(input("Choose a Scheme to support - 0 to finish: "))
-	if x == 0:
-		break
-#	print("Choice= ",x)
-	already=False
-	for i in range(0,ptr):
-		if x==selection[i]:
-			already=True
-			break
-	if already:
-		continue
-	
-	selection.append(x)
-	ptr=ptr+1
-
-# curveset(big,field,curve,big_length_bytes,bits_in_base,modulus_bits,modulus_mod_8,modulus_type,curve_type,pairing_friendly,sextic twist,sign of x,curve security)
-# for each curve give names for big, field and curve. In many cases the latter two will be the same. 
-# Typically "big" is the size in bits, always a multiple of 8, "field" describes the modulus, and "curve" is the common name for the elliptic curve   
-# big_length_bytes is "big" divided by 8
-# Next give the number base used for 32 bit architecture, as n where the base is 2^n (note that these must be fixed for the same "big" name, if is ever re-used for another curve)
-# modulus_bits is the bit length of the modulus, typically the same or slightly smaller than "big"
-# modulus_mod_8 is the remainder when the modulus is divided by 8
-# modulus_type is NOT_SPECIAL, or PSEUDO_MERSENNE, or MONTGOMERY_Friendly, or GENERALISED_MERSENNE (supported for GOLDILOCKS only)
-# curve_type is WEIERSTRASS, EDWARDS or MONTGOMERY
-# pairing_friendly is BN, BLS or NOT (if not pairing friendly)
-# if pairing friendly. M or D type twist, and sign of the family parameter x
-# curve security is AES equiavlent, rounded up.
-
-	if x==1:
-		curveset("256","F25519","ED25519","32","29","255","5","PSEUDO_MERSENNE","EDWARDS","NOT","","","128")
-		curve_selected=True
-	if x==2:
-		curveset("256","F25519","C25519","32","29","255","5","PSEUDO_MERSENNE","MONTGOMERY","NOT","","","128")
-		curve_selected=True
-	if x==3:
-		curveset("256","NIST256","NIST256","32","28","256","7","NOT_SPECIAL","WEIERSTRASS","NOT","","","128")
-		curve_selected=True
-	if x==4:
-		curveset("256","BRAINPOOL","BRAINPOOL","32","28","256","7","NOT_SPECIAL","WEIERSTRASS","NOT","","","128")
-		curve_selected=True
-	if x==5:
-		curveset("256","ANSSI","ANSSI","32","28","256","7","NOT_SPECIAL","WEIERSTRASS","NOT","","","128")
-		curve_selected=True
-
-	if x==6:
-		curveset("336","HIFIVE","HIFIVE","42","29","336","5","PSEUDO_MERSENNE","EDWARDS","NOT","","","192")
-		curve_selected=True
-	if x==7:
-		curveset("448","GOLDILOCKS","GOLDILOCKS","56","29","448","7","GENERALISED_MERSENNE","EDWARDS","NOT","","","256")
-		curve_selected=True
-	if x==8:
-		curveset("384","NIST384","NIST384","48","29","384","7","NOT_SPECIAL","WEIERSTRASS","NOT","","","192")
-		curve_selected=True
-	if x==9:
-		curveset("416","C41417","C41417","52","29","414","7","PSEUDO_MERSENNE","EDWARDS","NOT","","","256")
-		curve_selected=True
-	if x==10:
-		curveset("528","NIST521","NIST521","66","28","521","7","PSEUDO_MERSENNE","WEIERSTRASS","NOT","","","256")
-		curve_selected=True
-
-	if x==11:
-		curveset("256","F256PMW","NUMS256W","32","28","256","3","PSEUDO_MERSENNE","WEIERSTRASS","NOT","","","128")
-		curve_selected=True
-	if x==12:
-		curveset("256","F256PME","NUMS256E","32","29","256","3","PSEUDO_MERSENNE","EDWARDS","NOT","","","128")
-		curve_selected=True
-	if x==13:
-		curveset("384","F384PM","NUMS384W","48","29","384","3","PSEUDO_MERSENNE","WEIERSTRASS","NOT","","","192")
-		curve_selected=True
-	if x==14:
-		curveset("384","F384PM","NUMS384E","48","29","384","3","PSEUDO_MERSENNE","EDWARDS","NOT","","","192")
-		curve_selected=True
-	if x==15:
-		curveset("512","F512PM","NUMS512W","64","29","512","7","PSEUDO_MERSENNE","WEIERSTRASS","NOT","","","256")
-		curve_selected=True
-	if x==16:
-		curveset("512","F512PM","NUMS512E","64","29","512","7","PSEUDO_MERSENNE","EDWARDS","NOT","","","256")
-		curve_selected=True
-
-	if x==17:
-		curveset("256","SECP256K1","SECP256K1","32","28","256","7","NOT_SPECIAL","WEIERSTRASS","NOT","","","128")
-		curve_selected=True
-
-	if x==18:
-		curveset("256","BN254","BN254","32","28","254","3","NOT_SPECIAL","WEIERSTRASS","BN","D_TYPE","NEGATIVEX","128")
-		pfcurve_selected=True
-	if x==19:
-		curveset("256","BN254CX","BN254CX","32","28","254","3","NOT_SPECIAL","WEIERSTRASS","BN","D_TYPE","NEGATIVEX","128")
-		pfcurve_selected=True
-	if x==20:
-		curveset("384","BLS383","BLS383","48","29","383","3","NOT_SPECIAL","WEIERSTRASS","BLS","M_TYPE","POSITIVEX","128")
-		pfcurve_selected=True
-
-	if x==21:
-		curveset("384","BLS381","BLS381","48","29","381","3","NOT_SPECIAL","WEIERSTRASS","BLS","M_TYPE","NEGATIVEX","128")
-		pfcurve_selected=True
-
-
-	if x==22:
-		curveset("256","FP256BN","FP256BN","32","28","256","3","NOT_SPECIAL","WEIERSTRASS","BN","M_TYPE","NEGATIVEX","128")
-		pfcurve_selected=True
-	if x==23:
-		curveset("512","FP512BN","FP512BN","64","29","512","3","NOT_SPECIAL","WEIERSTRASS","BN","M_TYPE","POSITIVEX","128")
-		pfcurve_selected=True
-# https://eprint.iacr.org/2017/334.pdf
-	if x==24:
-		curveset("464","BLS461","BLS461","58","28","461","3","NOT_SPECIAL","WEIERSTRASS","BLS","M_TYPE","NEGATIVEX","128")
-		pfcurve_selected=True
-
-	if x==25:
-		curveset("480","BLS24","BLS24","60","29","479","3","NOT_SPECIAL","WEIERSTRASS","BLS","M_TYPE","POSITIVEX","192")
-		pfcurve_selected=True
-
-
-	if x==26:
-		curveset("560","BLS48","BLS48","70","29","556","3","NOT_SPECIAL","WEIERSTRASS","BLS","M_TYPE","POSITIVEX","256")
-		pfcurve_selected=True
-
-
-# rsaset(big,ring,big_length_bytes,bit_bits_in_base,multiplier)
-# for each choice give distinct names for "big" and "ring".
-# Typically "big" is the length in bits of the underlying big number type
-# "ring" is the RSA modulus size = "big" times 2^m
-# big_length_bytes is "big" divided by 8
-# Next give the number base used for 32 bit architectures, as n where the base is 2^n
-# multiplier is 2^m (see above)
-
-# There are choices here, different ways of getting the same result, but some faster than others
-	if x==27:
-		#256 is slower but may allow reuse of 256-bit BIGs used for elliptic curve
-		#512 is faster.. but best is 1024
-		rsaset("1024","RSA2048","128","28","2")
-		#rsaset("512","RSA2048","64","29","4")
-		#rsaset("256","RSA2048","32","29","8")
-		rsa_selected=True
-	if x==28:
-		rsaset("384","RSA3072","48","28","8")
-		rsa_selected=True
-	if x==29:
-		#rsaset("256","RSA4096","32","29","16")
-		rsaset("512","RSA4096","64","29","8")
-		rsa_selected=True
-
-
-os.system(deltext+" big.*")
-os.system(deltext+" fp.*")
-os.system(deltext+" ecp.*")
-os.system(deltext+" ecdh.*")
-os.system(deltext+" ff.*")
-os.system(deltext+" rsa.*")
-os.system(deltext+" config_big.h")
-os.system(deltext+" config_field.h")
-os.system(deltext+" config_curve.h")
-os.system(deltext+" config_ff.h")
-os.system(deltext+" fp2.*")
-os.system(deltext+" fp4.*")
-os.system(deltext+" fp8.*")
-os.system(deltext+" fp16.*")
-
-os.system(deltext+" fp12.*")
-os.system(deltext+" fp24.*")
-os.system(deltext+" fp48.*")
-
-os.system(deltext+" ecp2.*")
-os.system(deltext+" ecp4.*")
-os.system(deltext+" ecp8.*")
-
-os.system(deltext+" pair.*")
-os.system(deltext+" mpin.*")
-
-os.system(deltext+" pair192.*")
-os.system(deltext+" mpin192.*")
-
-os.system(deltext+" pair256.*")
-os.system(deltext+" mpin256.*")
-
-# create library
-os.system("g++ -O3 -c randapi.cpp")
-if curve_selected :
-	os.system("g++ -O3 -c ecdh_support.cpp")
-if rsa_selected :
-	os.system("g++ -O3 -c rsa_support.cpp")
-if pfcurve_selected :
-	os.system("g++ -O3 -c pbc_support.cpp")
-
-os.system("g++ -O3 -c hash.cpp")
-os.system("g++ -O3 -c rand.cpp")
-os.system("g++ -O3 -c oct.cpp")
-os.system("g++ -O3 -c aes.cpp")
-os.system("g++ -O3 -c gcm.cpp")
-os.system("g++ -O3 -c newhope.cpp")
-
-if sys.platform.startswith("win") :
-	os.system("for %i in (*.o) do @echo %~nxi >> f.list")
-	os.system("ar rc amcl.a @f.list")
-	os.system(deltext+" f.list")
-
-else :
-	os.system("ar rc amcl.a *.o")
-
-os.system(deltext+" *.o")
-
-
-#print("Your section was ")
-#for i in range(0,ptr):
-#	print (selection[i])
-

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version3/cpp/config64.py
----------------------------------------------------------------------
diff --git a/version3/cpp/config64.py b/version3/cpp/config64.py
deleted file mode 100644
index faa6a90..0000000
--- a/version3/cpp/config64.py
+++ /dev/null
@@ -1,641 +0,0 @@
-import os
-import sys
-
-deltext=""
-if sys.platform.startswith("linux")  :
-	deltext="rm"
-	copytext="cp"
-if sys.platform.startswith("darwin")  :
-	deltext="rm"
-	copytext="cp"
-if sys.platform.startswith("win") :
-	deltext="del"
-	copytext="copy"
-
-def replace(namefile,oldtext,newtext):
-	f = open(namefile,'r')
-	filedata = f.read()
-	f.close()
-
-	newdata = filedata.replace(oldtext,newtext)
-
-	f = open(namefile,'w')
-	f.write(newdata)
-	f.close()
-
-
-def rsaset(tb,tff,nb,base,ml) :
-	bd="B"+tb+"_"+base
-	fnameh="config_big_"+bd+".h"
-	os.system(copytext+" config_big.h "+fnameh)
-	replace(fnameh,"XXX",bd)
-	replace(fnameh,"@NB@",nb)
-	replace(fnameh,"@BASE@",base)
-
-	fnameh="config_ff_"+tff+".h"
-	os.system(copytext+" config_ff.h "+fnameh)
-	replace(fnameh,"XXX",bd)
-	replace(fnameh,"WWW",tff)
-	replace(fnameh,"@ML@",ml)
-
-	fnamec="big_"+bd+".cpp"
-	fnameh="big_"+bd+".h"
-
-	os.system(copytext+" big.cpp "+fnamec)
-	os.system(copytext+" big.h "+fnameh)
-
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	fnamec="ff_"+tff+".cpp"
-	fnameh="ff_"+tff+".h"
-
-	os.system(copytext+" ff.cpp "+fnamec)
-	os.system(copytext+" ff.h "+fnameh)
-
-	replace(fnamec,"WWW",tff)
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"WWW",tff)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	fnamec="rsa_"+tff+".cpp"
-	fnameh="rsa_"+tff+".h"
-
-	os.system(copytext+" rsa.cpp "+fnamec)
-	os.system(copytext+" rsa.h "+fnameh)
-
-	replace(fnamec,"WWW",tff)
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"WWW",tff)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-def curveset(tb,tf,tc,nb,base,nbt,m8,mt,ct,pf,stw,sx,cs) :
-	bd="B"+tb+"_"+base
-	fnameh="config_big_"+bd+".h"
-	os.system(copytext+" config_big.h "+fnameh)
-	replace(fnameh,"XXX",bd)
-	replace(fnameh,"@NB@",nb)
-	replace(fnameh,"@BASE@",base)
-
-	fnameh="config_field_"+tf+".h"
-	os.system(copytext+" config_field.h "+fnameh)
-	replace(fnameh,"XXX",bd)
-	replace(fnameh,"YYY",tf)
-	replace(fnameh,"@NBT@",nbt)
-	replace(fnameh,"@M8@",m8)
-	replace(fnameh,"@MT@",mt)
-
-	ib=int(base)
-	inb=int(nb)
-	inbt=int(nbt)
-	sh=ib*(1+((8*inb-1)//ib))-inbt
-
-	if sh > 30 :
-		sh=30
-	replace(fnameh,"@SH@",str(sh))
-
-	fnameh="config_curve_"+tc+".h"	
-	os.system(copytext+" config_curve.h "+fnameh)
-	replace(fnameh,"XXX",bd)
-	replace(fnameh,"YYY",tf)
-	replace(fnameh,"ZZZ",tc)
-	replace(fnameh,"@CT@",ct)
-	replace(fnameh,"@PF@",pf)
-
-	replace(fnameh,"@ST@",stw)
-	replace(fnameh,"@SX@",sx)
-	replace(fnameh,"@CS@",cs)
-
-
-	fnamec="big_"+bd+".cpp"
-	fnameh="big_"+bd+".h"
-
-	os.system(copytext+" big.cpp "+fnamec)
-	os.system(copytext+" big.h "+fnameh)
-
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	fnamec="fp_"+tf+".cpp"
-	fnameh="fp_"+tf+".h"
-
-	os.system(copytext+" fp.cpp "+fnamec)
-	os.system(copytext+" fp.h "+fnameh)
-
-	replace(fnamec,"YYY",tf)
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"YYY",tf)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	os.system("g++ -O3 -c rom_field_"+tf+".cpp")
-
-	fnamec="ecp_"+tc+".cpp"
-	fnameh="ecp_"+tc+".h"
-
-	os.system(copytext+" ecp.cpp "+fnamec)
-	os.system(copytext+" ecp.h "+fnameh)
-
-	replace(fnamec,"ZZZ",tc)
-	replace(fnamec,"YYY",tf)
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"ZZZ",tc)
-	replace(fnameh,"YYY",tf)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	fnamec="ecdh_"+tc+".cpp"
-	fnameh="ecdh_"+tc+".h"
-
-	os.system(copytext+" ecdh.cpp "+fnamec)
-	os.system(copytext+" ecdh.h "+fnameh)
-
-	replace(fnamec,"ZZZ",tc)
-	replace(fnamec,"YYY",tf)
-	replace(fnamec,"XXX",bd)
-	replace(fnameh,"ZZZ",tc)
-	replace(fnameh,"YYY",tf)
-	replace(fnameh,"XXX",bd)
-	os.system("g++ -O3 -c "+fnamec)
-
-	os.system("g++ -O3 -c rom_curve_"+tc+".cpp")
-
-	if pf != "NOT" :
-		fnamec="fp2_"+tf+".cpp"
-		fnameh="fp2_"+tf+".h"
-
-		os.system(copytext+" fp2.cpp "+fnamec)
-		os.system(copytext+" fp2.h "+fnameh)
-		replace(fnamec,"YYY",tf)
-		replace(fnamec,"XXX",bd)
-		replace(fnameh,"YYY",tf)
-		replace(fnameh,"XXX",bd)
-		os.system("g++ -O3 -c "+fnamec)
-
-		fnamec="fp4_"+tf+".cpp"
-		fnameh="fp4_"+tf+".h"
-
-		os.system(copytext+" fp4.cpp "+fnamec)
-		os.system(copytext+" fp4.h "+fnameh)
-		replace(fnamec,"YYY",tf)
-		replace(fnamec,"XXX",bd)
-		replace(fnamec,"ZZZ",tc)
-		replace(fnameh,"YYY",tf)
-		replace(fnameh,"XXX",bd)
-		replace(fnameh,"ZZZ",tc)
-		os.system("g++ -O3 -c "+fnamec)
-
-		if cs == "128" :
-			fnamec="fp12_"+tf+".cpp"
-			fnameh="fp12_"+tf+".h"
-
-			os.system(copytext+" fp12.cpp "+fnamec)
-			os.system(copytext+" fp12.h "+fnameh)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-			fnamec="ecp2_"+tc+".cpp"
-			fnameh="ecp2_"+tc+".h"
-
-			os.system(copytext+" ecp2.cpp "+fnamec)
-			os.system(copytext+" ecp2.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-			fnamec="pair_"+tc+".cpp"
-			fnameh="pair_"+tc+".h"
-
-			os.system(copytext+" pair.cpp "+fnamec)
-			os.system(copytext+" pair.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-			fnamec="mpin_"+tc+".cpp"
-			fnameh="mpin_"+tc+".h"
-
-			os.system(copytext+" mpin.cpp "+fnamec)
-			os.system(copytext+" mpin.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-		if cs == "192" :
-			fnamec="fp8_"+tf+".cpp"
-			fnameh="fp8_"+tf+".h"
-
-			os.system(copytext+" fp8.cpp "+fnamec)
-			os.system(copytext+" fp8.h "+fnameh)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			os.system("g++ -O3 -c "+fnamec)
-
-
-			fnamec="fp24_"+tf+".cpp"
-			fnameh="fp24_"+tf+".h"
-
-			os.system(copytext+" fp24.cpp "+fnamec)
-			os.system(copytext+" fp24.h "+fnameh)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-			fnamec="ecp4_"+tc+".cpp"
-			fnameh="ecp4_"+tc+".h"
-
-			os.system(copytext+" ecp4.cpp "+fnamec)
-			os.system(copytext+" ecp4.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-			fnamec="pair192_"+tc+".cpp"
-			fnameh="pair192_"+tc+".h"
-
-			os.system(copytext+" pair192.cpp "+fnamec)
-			os.system(copytext+" pair192.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-			fnamec="mpin192_"+tc+".cpp"
-			fnameh="mpin192_"+tc+".h"
-
-			os.system(copytext+" mpin192.cpp "+fnamec)
-			os.system(copytext+" mpin192.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-		if cs == "256" :
-
-			fnamec="fp8_"+tf+".cpp"
-			fnameh="fp8_"+tf+".h"
-
-			os.system(copytext+" fp8.cpp "+fnamec)
-			os.system(copytext+" fp8.h "+fnameh)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			os.system("g++ -O3 -c "+fnamec)
-
-
-			fnamec="ecp8_"+tc+".cpp"
-			fnameh="ecp8_"+tc+".h"
-
-			os.system(copytext+" ecp8.cpp "+fnamec)
-			os.system(copytext+" ecp8.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-
-			fnamec="fp16_"+tf+".cpp"
-			fnameh="fp16_"+tf+".h"
-
-			os.system(copytext+" fp16.cpp "+fnamec)
-			os.system(copytext+" fp16.h "+fnameh)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			os.system("g++ -O3 -c "+fnamec)
-
-
-			fnamec="fp48_"+tf+".cpp"
-			fnameh="fp48_"+tf+".h"
-
-			os.system(copytext+" fp48.cpp "+fnamec)
-			os.system(copytext+" fp48.h "+fnameh)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-
-			fnamec="pair256_"+tc+".cpp"
-			fnameh="pair256_"+tc+".h"
-
-			os.system(copytext+" pair256.cpp "+fnamec)
-			os.system(copytext+" pair256.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-			fnamec="mpin256_"+tc+".cpp"
-			fnameh="mpin256_"+tc+".h"
-
-			os.system(copytext+" mpin256.cpp "+fnamec)
-			os.system(copytext+" mpin256.h "+fnameh)
-			replace(fnamec,"ZZZ",tc)
-			replace(fnamec,"YYY",tf)
-			replace(fnamec,"XXX",bd)
-			replace(fnameh,"ZZZ",tc)
-			replace(fnameh,"YYY",tf)
-			replace(fnameh,"XXX",bd)
-			os.system("g++ -O3 -c "+fnamec)
-
-replace("arch.h","@WL@","64")
-print("Elliptic Curves")
-print("1. ED25519")
-print("2. C25519")
-print("3. NIST256")
-print("4. BRAINPOOL")
-print("5. ANSSI")
-print("6. HIFIVE")
-print("7. GOLDILOCKS")
-print("8. NIST384")
-print("9. C41417")
-print("10. NIST521\n")
-print("11. NUMS256W")
-print("12. NUMS256E")
-print("13. NUMS384W")
-print("14. NUMS384E")
-print("15. NUMS512W")
-print("16. NUMS512E")
-print("17. SECP256K1\n")
-
-print("Pairing-Friendly Elliptic Curves")
-print("18. BN254")
-print("19. BN254CX")
-print("20. BLS383")
-print("21. BLS381")
-print("22. FP256BN")
-print("23. FP512BN")
-print("24. BLS461\n")
-print("25. BLS24")
-print("26. BLS48\n")
-
-print("RSA")
-print("27. RSA2048")
-print("28. RSA3072")
-print("29. RSA4096")
-
-selection=[]
-ptr=0
-max=30
-
-curve_selected=False
-pfcurve_selected=False
-rsa_selected=False
-
-while ptr<max:
-	x=int(input("Choose a Scheme to support - 0 to finish: "))
-	if x == 0:
-		break
-#	print("Choice= ",x)
-	already=False
-	for i in range(0,ptr):
-		if x==selection[i]:
-			already=True
-			break
-	if already:
-		continue
-	
-	selection.append(x)
-	ptr=ptr+1
-
-# curveset(big,field,curve,big_length_bytes,bits_in_base,modulus_bits,modulus_mod_8,modulus_type,curve_type,pairing_friendly,sextic twist,sign of x,curve security)
-# for each curve give names for big, field and curve. In many cases the latter two will be the same. 
-# Typically "big" is the size in bits, always a multiple of 8, "field" describes the modulus, and "curve" is the common name for the elliptic curve   
-# big_length_bytes is "big" divided by 8
-# Next give the number base used for 64 bit architectures, as n where the base is 2^n (note that these must be fixed for the same "big" name, if is ever re-used for another curve)
-# modulus_bits is the bit length of the modulus, typically the same or slightly smaller than "big"
-# modulus_mod_8 is the remainder when the modulus is divided by 8
-# modulus_type is NOT_SPECIAL, or PSEUDO_MERSENNE, or MONTGOMERY_Friendly, or GENERALISED_MERSENNE (supported for GOLDILOCKS only)
-# curve_type is WEIERSTRASS, EDWARDS or MONTGOMERY
-# pairing_friendly is BN, BLS or NOT (if not pairing friendly)
-# if pairing friendly. M or D type twist, and sign of the family parameter x
-# curve security is AES equiavlent, rounded up.
-
-
-	if x==1:
-		curveset("256","F25519","ED25519","32","56","255","5","PSEUDO_MERSENNE","EDWARDS","NOT","","","128")
-		curve_selected=True
-	if x==2:
-		curveset("256","F25519","C25519","32","56","255","5","PSEUDO_MERSENNE","MONTGOMERY","NOT","","","128")
-		curve_selected=True
-	if x==3:
-		curveset("256","NIST256","NIST256","32","56","256","7","NOT_SPECIAL","WEIERSTRASS","NOT","","","128")
-		curve_selected=True
-	if x==4:
-		curveset("256","BRAINPOOL","BRAINPOOL","32","56","256","7","NOT_SPECIAL","WEIERSTRASS","NOT","","","128")
-		curve_selected=True
-	if x==5:
-		curveset("256","ANSSI","ANSSI","32","56","256","7","NOT_SPECIAL","WEIERSTRASS","NOT","","","128")
-		curve_selected=True
-
-	if x==6:
-		curveset("336","HIFIVE","HIFIVE","42","60","336","5","PSEUDO_MERSENNE","EDWARDS","NOT","","","192")
-		curve_selected=True
-	if x==7:
-		curveset("448","GOLDILOCKS","GOLDILOCKS","56","58","448","7","GENERALISED_MERSENNE","EDWARDS","NOT","","","256")
-		curve_selected=True
-	if x==8:
-		curveset("384","NIST384","NIST384","48","56","384","7","NOT_SPECIAL","WEIERSTRASS","NOT","","","192")
-		curve_selected=True
-	if x==9:
-		curveset("416","C41417","C41417","52","60","414","7","PSEUDO_MERSENNE","EDWARDS","NOT","","","256")
-		curve_selected=True
-	if x==10:
-		curveset("528","NIST521","NIST521","66","60","521","7","PSEUDO_MERSENNE","WEIERSTRASS","NOT","","","256")
-		curve_selected=True
-
-	if x==11:
-		curveset("256","F256PMW","NUMS256W","32","56","256","3","PSEUDO_MERSENNE","WEIERSTRASS","NOT","","","128")
-		curve_selected=True
-	if x==12:
-		curveset("256","F256PME","NUMS256E","32","56","256","3","PSEUDO_MERSENNE","EDWARDS","NOT","","","128")
-		curve_selected=True
-	if x==13:
-		curveset("384","F384PM","NUMS384W","48","56","384","3","PSEUDO_MERSENNE","WEIERSTRASS","NOT","","","192")
-		curve_selected=True
-	if x==14:
-		curveset("384","F384PM","NUMS384E","48","56","384","3","PSEUDO_MERSENNE","EDWARDS","NOT","","","192")
-		curve_selected=True
-	if x==15:
-		curveset("512","F512PM","NUMS512W","64","56","512","7","PSEUDO_MERSENNE","WEIERSTRASS","NOT","","","256")
-		curve_selected=True
-	if x==16:
-		curveset("512","F512PM","NUMS512E","64","56","512","7","PSEUDO_MERSENNE","EDWARDS","NOT","","","256")
-		curve_selected=True
-
-	if x==17:
-		curveset("256","SECP256K1","SECP256K1","32","56","256","7","NOT_SPECIAL","WEIERSTRASS","NOT","","","128")
-		curve_selected=True
-
-	if x==18:
-		curveset("256","BN254","BN254","32","56","254","3","NOT_SPECIAL","WEIERSTRASS","BN","D_TYPE","NEGATIVEX","128")
-		pfcurve_selected=True
-	if x==19:
-		curveset("256","BN254CX","BN254CX","32","56","254","3","NOT_SPECIAL","WEIERSTRASS","BN","D_TYPE","NEGATIVEX","128")
-		pfcurve_selected=True
-	if x==20:
-		curveset("384","BLS383","BLS383","48","58","383","3","NOT_SPECIAL","WEIERSTRASS","BLS","M_TYPE","POSITIVEX","128")
-		pfcurve_selected=True
-
-	if x==21:
-		curveset("384","BLS381","BLS381","48","58","381","3","NOT_SPECIAL","WEIERSTRASS","BLS","M_TYPE","NEGATIVEX","128")
-		pfcurve_selected=True
-
-	if x==22:
-		curveset("256","FP256BN","FP256BN","32","56","256","3","NOT_SPECIAL","WEIERSTRASS","BN","M_TYPE","NEGATIVEX","128")
-		pfcurve_selected=True
-	if x==23:
-		curveset("512","FP512BN","FP512BN","64","60","512","3","NOT_SPECIAL","WEIERSTRASS","BN","M_TYPE","POSITIVEX","128")
-		pfcurve_selected=True
-# https://eprint.iacr.org/2017/334.pdf
-	if x==24:
-		curveset("464","BLS461","BLS461","58","60","461","3","NOT_SPECIAL","WEIERSTRASS","BLS","M_TYPE","NEGATIVEX","128")
-		pfcurve_selected=True
-
-	if x==25:
-		curveset("480","BLS24","BLS24","60","56","479","3","NOT_SPECIAL","WEIERSTRASS","BLS","M_TYPE","POSITIVEX","192")
-		pfcurve_selected=True
-
-	if x==26:
-		curveset("560","BLS48","BLS48","70","58","556","3","NOT_SPECIAL","WEIERSTRASS","BLS","M_TYPE","POSITIVEX","256")
-		pfcurve_selected=True
-
-
-# rsaset(big,ring,big_length_bytes,bits_in_base,multiplier)
-# for each choice give distinct names for "big" and "ring".
-# Typically "big" is the length in bits of the underlying big number type
-# "ring" is the RSA modulus size = "big" times 2^m
-# big_length_bytes is "big" divided by 8
-# Next give the number base used for 64 bit architectures, as n where the base is 2^n
-# multiplier is 2^m (see above)
-
-# There are choices here, different ways of getting the same result, but some faster than others
-	if x==27:
-		#256 is slower but may allow reuse of 256-bit BIGs used for elliptic curve
-		#512 is faster.. but best is 1024
-		rsaset("1024","RSA2048","128","58","2")
-		#rsaset("512","RSA2048","64","60","4")
-		#rsaset("256","RSA2048","32","56","8")
-		rsa_selected=True
-	if x==28:
-		rsaset("384","RSA3072","48","56","8")
-		rsa_selected=True
-	if x==29:
-		#rsaset("256","RSA4096","32","56","16")
-		rsaset("512","RSA4096","64","60","8")
-		rsa_selected=True
-
-
-os.system(deltext+" big.*")
-os.system(deltext+" fp.*")
-os.system(deltext+" ecp.*")
-os.system(deltext+" ecdh.*")
-os.system(deltext+" ff.*")
-os.system(deltext+" rsa.*")
-os.system(deltext+" config_big.h")
-os.system(deltext+" config_field.h")
-os.system(deltext+" config_curve.h")
-os.system(deltext+" config_ff.h")
-os.system(deltext+" fp2.*")
-os.system(deltext+" fp4.*")
-os.system(deltext+" fp8.*")
-os.system(deltext+" fp16.*")
-
-os.system(deltext+" fp12.*")
-os.system(deltext+" fp24.*")
-os.system(deltext+" fp48.*")
-
-os.system(deltext+" ecp2.*")
-os.system(deltext+" ecp4.*")
-os.system(deltext+" ecp8.*")
-
-os.system(deltext+" pair.*")
-os.system(deltext+" mpin.*")
-
-os.system(deltext+" pair192.*")
-os.system(deltext+" mpin192.*")
-
-os.system(deltext+" pair256.*")
-os.system(deltext+" mpin256.*")
-
-
-# create library
-os.system("g++ -O3 -c randapi.cpp")
-if curve_selected :
-	os.system("g++ -O3 -c ecdh_support.cpp")
-if rsa_selected :
-	os.system("g++ -O3 -c rsa_support.cpp")
-if pfcurve_selected :
-	os.system("g++ -O3 -c pbc_support.cpp")
-
-os.system("g++ -O3 -c hash.cpp")
-os.system("g++ -O3 -c rand.cpp")
-os.system("g++ -O3 -c oct.cpp")
-os.system("g++ -O3 -c aes.cpp")
-os.system("g++ -O3 -c gcm.cpp")
-os.system("g++ -O3 -c newhope.cpp")
-
-if sys.platform.startswith("win") :
-	os.system("for %i in (*.o) do @echo %~nxi >> f.list")
-	os.system("ar rc amcl.a @f.list")
-	os.system(deltext+" f.list")
-
-else :
-	os.system("ar rc amcl.a *.o")
-
-os.system(deltext+" *.o")
-
-
-#print("Your section was ")
-#for i in range(0,ptr):
-#	print (selection[i])
-

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version3/cpp/config_big.h
----------------------------------------------------------------------
diff --git a/version3/cpp/config_big.h b/version3/cpp/config_big.h
deleted file mode 100644
index 6d12010..0000000
--- a/version3/cpp/config_big.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef CONFIG_BIG_XXX_H
-#define CONFIG_BIG_XXX_H
-
-#include"amcl.h"
-
-// BIG stuff
-
-#define MODBYTES_XXX @NB@  
-#define BASEBITS_XXX @BASE@ 
-
-
-#endif

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version3/cpp/config_curve.h
----------------------------------------------------------------------
diff --git a/version3/cpp/config_curve.h b/version3/cpp/config_curve.h
deleted file mode 100644
index 4f905d5..0000000
--- a/version3/cpp/config_curve.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef CONFIG_CURVE_ZZZ_H
-#define CONFIG_CURVE_ZZZ_H
-
-#include"amcl.h"
-#include"config_field_YYY.h"
-
-// ECP stuff
-
-#define CURVETYPE_ZZZ @CT@  
-#define PAIRING_FRIENDLY_ZZZ @PF@
-#define CURVE_SECURITY_ZZZ @CS@
-
-#if PAIRING_FRIENDLY_ZZZ != NOT
-#define USE_GLV_ZZZ	  /**< Note this method is patented (GLV), so maybe you want to comment this out */
-#define USE_GS_G2_ZZZ /**< Well we didn't patent it :) But may be covered by GLV patent :( */
-#define USE_GS_GT_ZZZ /**< Not patented, so probably safe to always use this */
-
-#define POSITIVEX 0
-#define NEGATIVEX 1
-
-#define SEXTIC_TWIST_ZZZ @ST@
-#define SIGN_OF_X_ZZZ @SX@ 
-
-#endif
-
-
-#if CURVE_SECURITY_ZZZ == 128
-#define AESKEY_ZZZ 16 /**< Symmetric Key size - 128 bits */
-#define HASH_TYPE_ZZZ SHA256  /**< Hash type */
-#endif
-
-#if CURVE_SECURITY_ZZZ == 192
-#define AESKEY_ZZZ 24 /**< Symmetric Key size - 192 bits */
-#define HASH_TYPE_ZZZ SHA384  /**< Hash type */
-#endif
-
-#if CURVE_SECURITY_ZZZ == 256
-#define AESKEY_ZZZ 32 /**< Symmetric Key size - 256 bits */
-#define HASH_TYPE_ZZZ SHA512  /**< Hash type */
-#endif
-
-
-
-namespace ZZZ_BIG=XXX;
-namespace ZZZ_FP=YYY;
-
-#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version3/cpp/config_ff.h
----------------------------------------------------------------------
diff --git a/version3/cpp/config_ff.h b/version3/cpp/config_ff.h
deleted file mode 100644
index 33cb95a..0000000
--- a/version3/cpp/config_ff.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef CONFIG_RSA_WWW_H
-#define CONFIG_RSA_WWW_H
-
-#include "amcl.h"
-#include "config_big_XXX.h"
-
-// FF stuff
-
-#define FFLEN_WWW @ML@ /**< 2^n multiplier of BIGBITS to specify supported Finite Field size, e.g 2048=256*2^3 where BIGBITS=256 */
-
-namespace WWW_BIG=XXX;
-
-#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version3/cpp/config_field.h
----------------------------------------------------------------------
diff --git a/version3/cpp/config_field.h b/version3/cpp/config_field.h
deleted file mode 100644
index ab86941..0000000
--- a/version3/cpp/config_field.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef CONFIG_FIELD_YYY_H
-#define CONFIG_FIELD_YYY_H
-
-#include"amcl.h"
-#include "config_big_XXX.h"
-
-// FP stuff
-
-#define MBITS_YYY @NBT@	        
-#define MOD8_YYY @M8@	 
-#define MODTYPE_YYY @MT@
-#define MAXXES_YYY @SH@
-
-
-#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version3/cpp/ecdh.cpp
----------------------------------------------------------------------
diff --git a/version3/cpp/ecdh.cpp b/version3/cpp/ecdh.cpp
deleted file mode 100644
index d088b4d..0000000
--- a/version3/cpp/ecdh.cpp
+++ /dev/null
@@ -1,435 +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.
-*/
-
-/* ECDH/ECIES/ECDSA Functions - see main program below */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <time.h>
-
-#include "ecdh_ZZZ.h"
-
-using namespace XXX;
-using namespace YYY;
-
-/* Calculate a public/private EC GF(p) key pair. W=S.G mod EC(p),
- * where S is the secret key and W is the public key
- * and G is fixed generator.
- * If RNG is NULL then the private key is provided externally in S
- * otherwise it is generated randomly internally */
-int ZZZ::ECP_KEY_PAIR_GENERATE(csprng *RNG,octet* S,octet *W)
-{
-    BIG r,gx,gy,s;
-    ECP G;
-    int res=0;
-
-	ECP_generator(&G);
-
-    BIG_rcopy(r,CURVE_Order);
-    if (RNG!=NULL)
-    {
-        BIG_randomnum(s,r,RNG);
-    }
-    else
-    {
-        BIG_fromBytes(s,S->val);
-        BIG_mod(s,r);
-    }
-
-#ifdef AES_S
-    BIG_mod2m(s,2*AES_S);
-//	BIG_toBytes(S->val,s);
-#endif
-
-    S->len=EGS_ZZZ;
-    BIG_toBytes(S->val,s);
-
-
-    ECP_mul(&G,s);
-
-	ECP_toOctet(W,&G,false);	// To use point compression on public keys, change to true 
-
-/*
-
-#if CURVETYPE_ZZZ!=MONTGOMERY
-    ECP_get(gx,gy,&G);
-#else
-    ECP_get(gx,&G);
-
-#endif
-
-
-
-#if CURVETYPE_ZZZ!=MONTGOMERY
-    W->len=2*EFS_ZZZ+1;
-    W->val[0]=4;
-    BIG_toBytes(&(W->val[1]),gx);
-    BIG_toBytes(&(W->val[EFS_ZZZ+1]),gy);
-#else
-    W->len=EFS_ZZZ+1;
-    W->val[0]=2;
-    BIG_toBytes(&(W->val[1]),gx);
-#endif
-*/
-
-    return res;
-}
-
-/* Validate public key */
-int ZZZ::ECP_PUBLIC_KEY_VALIDATE(octet *W)
-{
-    BIG q,r,wx,k;
-    ECP WP;
-    int valid,nb;
-    int res=0;
-
-    BIG_rcopy(q,Modulus);
-    BIG_rcopy(r,CURVE_Order);
-
-	valid=ECP_fromOctet(&WP,W);
-	if (!valid) res=ECDH_INVALID_PUBLIC_KEY;
-
-/*
-    BIG_fromBytes(wx,&(W->val[1]));
-    if (BIG_comp(wx,q)>=0) res=ECDH_INVALID_PUBLIC_KEY;
-#if CURVETYPE_ZZZ!=MONTGOMERY
-    BIG wy;
-    BIG_fromBytes(wy,&(W->val[EFS_ZZZ+1]));
-    if (BIG_comp(wy,q)>=0) res=ECDH_INVALID_PUBLIC_KEY;
-#endif
-*/
-    if (res==0)
-    {
-
-//#if CURVETYPE_ZZZ!=MONTGOMERY
-//        valid=ECP_set(&WP,wx,wy);
-//#else
-//        valid=ECP_set(&WP,wx);
-//#endif
-//        if (!valid || ECP_isinf(&WP)) res=ECDH_INVALID_PUBLIC_KEY;
-//        if (res==0 )
-//        {/* Check point is not in wrong group */
-			nb=BIG_nbits(q);
-			BIG_one(k);
-			BIG_shl(k,(nb+4)/2);
-			BIG_add(k,q,k);
-			BIG_sdiv(k,r); /* get co-factor */
-
-			while (BIG_parity(k)==0)
-			{
-				ECP_dbl(&WP);
-				BIG_fshr(k,1);
-			}
-
-			if (!BIG_isunity(k)) ECP_mul(&WP,k);
-			if (ECP_isinf(&WP)) res=ECDH_INVALID_PUBLIC_KEY;
-//        }
-    }
-
-    return res;
-}
-
-/* IEEE-1363 Diffie-Hellman online calculation Z=S.WD */
-int ZZZ::ECP_SVDP_DH(octet *S,octet *WD,octet *Z)
-{
-    BIG r,s,wx;
-    int valid;
-    ECP W;
-    int res=0;
-
-    BIG_fromBytes(s,S->val);
-
-	valid=ECP_fromOctet(&W,WD);
-/*
-    BIG_fromBytes(wx,&(WD->val[1]));
-#if CURVETYPE_ZZZ!=MONTGOMERY
-    BIG wy;
-    BIG_fromBytes(wy,&(WD->val[EFS_ZZZ+1]));
-    valid=ECP_set(&W,wx,wy);
-#else
-    valid=ECP_set(&W,wx);
-#endif
-*/
-    if (!valid) res=ECDH_ERROR;
-    if (res==0)
-    {
-        BIG_rcopy(r,CURVE_Order);
-        BIG_mod(s,r);
-
-        ECP_mul(&W,s);
-        if (ECP_isinf(&W)) res=ECDH_ERROR;
-        else
-        {
-#if CURVETYPE_ZZZ!=MONTGOMERY
-            ECP_get(wx,wx,&W);
-#else
-            ECP_get(wx,&W);
-#endif
-            Z->len=MODBYTES_XXX;
-            BIG_toBytes(Z->val,wx);
-        }
-    }
-    return res;
-}
-
-#if CURVETYPE_ZZZ!=MONTGOMERY
-
-/* IEEE ECDSA Signature, C and D are signature on F using private key S */
-int ZZZ::ECP_SP_DSA(int sha,csprng *RNG,octet *K,octet *S,octet *F,octet *C,octet *D)
-{
-    char h[128];
-    octet H= {0,sizeof(h),h};
-
-    BIG r,s,f,c,d,u,vx,w;
-    ECP G,V;
-
-    ehashit(sha,F,-1,NULL,&H,sha);
-
-	ECP_generator(&G);
-
-	BIG_rcopy(r,CURVE_Order);
-
-    BIG_fromBytes(s,S->val);
-
-    int hlen=H.len;
-    if (H.len>MODBYTES_XXX) hlen=MODBYTES_XXX;
-    BIG_fromBytesLen(f,H.val,hlen);
-
-
-	if (RNG!=NULL)
-	{
-
-		do
-		{
-		
-            BIG_randomnum(u,r,RNG);
-            BIG_randomnum(w,r,RNG); /* side channel masking */
-       
-#ifdef AES_S
-			BIG_mod2m(u,2*AES_S);
-#endif
-			ECP_copy(&V,&G);
-			ECP_mul(&V,u);
-
-			ECP_get(vx,vx,&V);
-
-			BIG_copy(c,vx);
-			BIG_mod(c,r);
-			if (BIG_iszilch(c)) continue;
-        
-            BIG_modmul(u,u,w,r);
-        
-
-			BIG_invmodp(u,u,r);
-			BIG_modmul(d,s,c,r);
-
-			BIG_add(d,f,d);
-        
-            BIG_modmul(d,d,w,r);
-       
-			BIG_modmul(d,u,d,r);
-
-		}
-		while (BIG_iszilch(d));
-	}
-	else
-	{
-		BIG_fromBytes(u,K->val);
-		BIG_mod(u,r);
-
-#ifdef AES_S
-		BIG_mod2m(u,2*AES_S);
-#endif
-		ECP_copy(&V,&G);
-		ECP_mul(&V,u);
-
-		ECP_get(vx,vx,&V);
-
-		BIG_copy(c,vx);
-		BIG_mod(c,r);
-		if (BIG_iszilch(c)) return ECDH_ERROR;
-        
-		BIG_invmodp(u,u,r);
-		BIG_modmul(d,s,c,r);
-
-		BIG_add(d,f,d);
-  
-		BIG_modmul(d,u,d,r);
-		if (BIG_iszilch(d)) return ECDH_ERROR;
-
-    }
-
-    C->len=D->len=EGS_ZZZ;
-
-    BIG_toBytes(C->val,c);
-    BIG_toBytes(D->val,d);
-
-    return 0;
-}
-
-/* IEEE1363 ECDSA Signature Verification. Signature C and D on F is verified using public key W */
-int ZZZ::ECP_VP_DSA(int sha,octet *W,octet *F, octet *C,octet *D)
-{
-    char h[128];
-    octet H= {0,sizeof(h),h};
-
-    BIG r,wx,wy,f,c,d,h2;
-    int res=0;
-    ECP G,WP;
-    int valid;
-
-    ehashit(sha,F,-1,NULL,&H,sha);
-
-	ECP_generator(&G);
-
-    BIG_rcopy(r,CURVE_Order);
-
-    OCT_shl(C,C->len-MODBYTES_XXX);
-    OCT_shl(D,D->len-MODBYTES_XXX);
-
-    BIG_fromBytes(c,C->val);
-    BIG_fromBytes(d,D->val);
-
-    int hlen=H.len;
-    if (hlen>MODBYTES_XXX) hlen=MODBYTES_XXX;
-
-    BIG_fromBytesLen(f,H.val,hlen);
-
-    //BIG_fromBytes(f,H.val);
-
-    if (BIG_iszilch(c) || BIG_comp(c,r)>=0 || BIG_iszilch(d) || BIG_comp(d,r)>=0)
-        res=ECDH_INVALID;
-
-    if (res==0)
-    {
-        BIG_invmodp(d,d,r);
-        BIG_modmul(f,f,d,r);
-        BIG_modmul(h2,c,d,r);
-
-		valid=ECP_fromOctet(&WP,W);
-/*
-        BIG_fromBytes(wx,&(W->val[1]));
-        BIG_fromBytes(wy,&(W->val[EFS_ZZZ+1]));
-
-        valid=ECP_set(&WP,wx,wy);
-*/
-        if (!valid) res=ECDH_ERROR;
-        else
-        {
-            ECP_mul2(&WP,&G,h2,f);
-
-            if (ECP_isinf(&WP)) res=ECDH_INVALID;
-            else
-            {
-                ECP_get(d,d,&WP);
-                BIG_mod(d,r);
-                if (BIG_comp(d,c)!=0) res=ECDH_INVALID;
-            }
-        }
-    }
-
-    return res;
-}
-
-/* IEEE1363 ECIES encryption. Encryption of plaintext M uses public key W and produces ciphertext V,C,T */
-void ZZZ::ECP_ECIES_ENCRYPT(int sha,octet *P1,octet *P2,csprng *RNG,octet *W,octet *M,int tlen,octet *V,octet *C,octet *T)
-{
-
-    int i,len;
-    char z[EFS_ZZZ],vz[3*EFS_ZZZ+1],k[2*AESKEY_ZZZ],k1[AESKEY_ZZZ],k2[AESKEY_ZZZ],l2[8],u[EFS_ZZZ];
-    octet Z= {0,sizeof(z),z};
-    octet VZ= {0,sizeof(vz),vz};
-    octet K= {0,sizeof(k),k};
-    octet K1= {0,sizeof(k1),k1};
-    octet K2= {0,sizeof(k2),k2};
-    octet L2= {0,sizeof(l2),l2};
-    octet U= {0,sizeof(u),u};
-
-    if (ECP_KEY_PAIR_GENERATE(RNG,&U,V)!=0) return;
-    if (ECP_SVDP_DH(&U,W,&Z)!=0) return;
-
-    OCT_copy(&VZ,V);
-    OCT_joctet(&VZ,&Z);
-
-    KDF2(sha,&VZ,P1,2*AESKEY_ZZZ,&K);
-
-    K1.len=K2.len=AESKEY_ZZZ;
-    for (i=0; i<AESKEY_ZZZ; i++)
-    {
-        K1.val[i]=K.val[i];
-        K2.val[i]=K.val[AESKEY_ZZZ+i];
-    }
-
-    AES_CBC_IV0_ENCRYPT(&K1,M,C);
-
-    OCT_jint(&L2,P2->len,8);
-
-    len=C->len;
-    OCT_joctet(C,P2);
-    OCT_joctet(C,&L2);
-    HMAC(sha,C,&K2,tlen,T);
-    C->len=len;
-}
-
-/* IEEE1363 ECIES decryption. Decryption of ciphertext V,C,T using private key U outputs plaintext M */
-int ZZZ::ECP_ECIES_DECRYPT(int sha,octet *P1,octet *P2,octet *V,octet *C,octet *T,octet *U,octet *M)
-{
-
-    int i,len;
-    char z[EFS_ZZZ],vz[3*EFS_ZZZ+1],k[2*AESKEY_ZZZ],k1[AESKEY_ZZZ],k2[AESKEY_ZZZ],l2[8],tag[32];
-    octet Z= {0,sizeof(z),z};
-    octet VZ= {0,sizeof(vz),vz};
-    octet K= {0,sizeof(k),k};
-    octet K1= {0,sizeof(k1),k1};
-    octet K2= {0,sizeof(k2),k2};
-    octet L2= {0,sizeof(l2),l2};
-    octet TAG= {0,sizeof(tag),tag};
-
-    if (ECP_SVDP_DH(U,V,&Z)!=0) return 0;
-
-    OCT_copy(&VZ,V);
-    OCT_joctet(&VZ,&Z);
-
-    KDF2(sha,&VZ,P1,2*AESKEY_ZZZ,&K);
-
-    K1.len=K2.len=AESKEY_ZZZ;
-    for (i=0; i<AESKEY_ZZZ; i++)
-    {
-        K1.val[i]=K.val[i];
-        K2.val[i]=K.val[AESKEY_ZZZ+i];
-    }
-
-    if (!AES_CBC_IV0_DECRYPT(&K1,C,M)) return 0;
-
-    OCT_jint(&L2,P2->len,8);
-
-    len=C->len;
-    OCT_joctet(C,P2);
-    OCT_joctet(C,&L2);
-    HMAC(sha,C,&K2,T->len,&TAG);
-    C->len=len;
-
-    if (!OCT_ncomp(T,&TAG,T->len)) return 0;
-
-    return 1;
-
-}
-
-#endif

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version3/cpp/ecdh.h
----------------------------------------------------------------------
diff --git a/version3/cpp/ecdh.h b/version3/cpp/ecdh.h
deleted file mode 100644
index f1f1873..0000000
--- a/version3/cpp/ecdh.h
+++ /dev/null
@@ -1,154 +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.
-*/
-
-/**
- * @file ecdh.h
- * @author Mike Scott and Kealan McCusker
- * @date 2nd June 2015
- * @brief ECDH Header file for implementation of standard EC protocols
- *
- * declares functions
- *
- */
-
-#ifndef ECDH_ZZZ_H
-#define ECDH_ZZZ_H
-
-#include "ecp_ZZZ.h"
-#include "ecdh_support.h"
-
-using namespace amcl;
-
-
-/*** START OF USER CONFIGURABLE SECTION -  ***/
-
-/*** START OF USER CONFIGURABLE SECTION -  ***/
-
-
-/*** END OF USER CONFIGURABLE SECTION ***/
-
-#define EGS_ZZZ MODBYTES_XXX  /**< ECC Group Size in bytes */
-#define EFS_ZZZ MODBYTES_XXX  /**< ECC Field Size in bytes */
-
-#define ECDH_OK                     0     /**< Function completed without error */
-/*#define ECDH_DOMAIN_ERROR          -1*/
-#define ECDH_INVALID_PUBLIC_KEY    -2	/**< Public Key is Invalid */
-#define ECDH_ERROR                 -3	/**< ECDH Internal Error */
-#define ECDH_INVALID               -4	/**< ECDH Internal Error */
-/*#define ECDH_DOMAIN_NOT_FOUND      -5
-#define ECDH_OUT_OF_MEMORY         -6
-#define ECDH_DIV_BY_ZERO           -7
-#define ECDH_BAD_ASSUMPTION        -8*/
-
-
-namespace ZZZ {
-
-/* ECDH primitives */
-/**	@brief Generate an ECC public/private key pair
- *
-	@param R is a pointer to a cryptographically secure random number generator
-	@param s the private key, an output internally randomly generated if R!=NULL, otherwise must be provided as an input
-	@param W the output public key, which is s.G, where G is a fixed generator
-	@return 0 or an error code
- */
-extern int  ECP_KEY_PAIR_GENERATE(csprng *R,octet *s,octet *W);
-/**	@brief Validate an ECC public key
- *
-	@param W the input public key to be validated
-	@return 0 if public key is OK, or an error code
- */
-extern int  ECP_PUBLIC_KEY_VALIDATE(octet *W);
-
-/* ECDH primitives */
-
-/**	@brief Generate Diffie-Hellman shared key
- *
-	IEEE-1363 Diffie-Hellman shared secret calculation
-	@param s is the input private key,
-	@param W the input public key of the other party
-	@param K the output shared key, in fact the x-coordinate of s.W
-	@return 0 or an error code
- */
-extern int ECP_SVDP_DH(octet *s,octet *W,octet *K);
-/*extern int ECPSVDP_DHC(octet *,octet *,int,octet *);*/
-
-/*#if CURVETYPE!=MONTGOMERY */
-/* ECIES functions */
-/*#if CURVETYPE!=MONTGOMERY */
-/* ECIES functions */
-/**	@brief ECIES Encryption
- *
-	IEEE-1363 ECIES Encryption
-	@param h is the hash type
-	@param P1 input Key Derivation parameters
-	@param P2 input Encoding parameters
-	@param R is a pointer to a cryptographically secure random number generator
-	@param W the input public key of the recieving party
-	@param M is the plaintext message to be encrypted
-	@param len the length of the HMAC tag
-	@param V component of the output ciphertext
-	@param C the output ciphertext
-	@param T the output HMAC tag, part of the ciphertext
- */
-extern void ECP_ECIES_ENCRYPT(int h,octet *P1,octet *P2,csprng *R,octet *W,octet *M,int len,octet *V,octet *C,octet *T);
-/**	@brief ECIES Decryption
- *
-	IEEE-1363 ECIES Decryption
-	@param h is the hash type
-	@param P1 input Key Derivation parameters
-	@param P2 input Encoding parameters
-	@param V component of the input ciphertext
-	@param C the input ciphertext
-	@param T the input HMAC tag, part of the ciphertext
-	@param U the input private key for decryption
-	@param M the output plaintext message
-	@return 1 if successful, else 0
- */
-extern int ECP_ECIES_DECRYPT(int h,octet *P1,octet *P2,octet *V,octet *C,octet *T,octet *U,octet *M);
-
-/* ECDSA functions */
-/**	@brief ECDSA Signature
- *
-	IEEE-1363 ECDSA Signature
-	@param h is the hash type
-	@param R is a pointer to a cryptographically secure random number generator
-        @param k Ephemeral key. This value is used when R=NULL
-	@param s the input private signing key
-	@param M the input message to be signed
-	@param c component of the output signature
-	@param d component of the output signature
-
- */
-extern int ECP_SP_DSA(int h,csprng *R,octet *k,octet *s,octet *M,octet *c,octet *d);
-/**	@brief ECDSA Signature Verification
- *
-	IEEE-1363 ECDSA Signature Verification
-	@param h is the hash type
-	@param W the input public key
-	@param M the input message
-	@param c component of the input signature
-	@param d component of the input signature
-	@return 0 or an error code
- */
-extern int ECP_VP_DSA(int h,octet *W,octet *M,octet *c,octet *d);
-/*#endif*/
-}
-
-#endif
-