http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/rust/src/rom32.rs
----------------------------------------------------------------------
diff --git a/version22/rust/src/rom32.rs b/version22/rust/src/rom32.rs
deleted file mode 100644
index 72f5e00..0000000
--- a/version22/rust/src/rom32.rs
+++ /dev/null
@@ -1,349 +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.
-*/
-
-pub type Chunk=i32;
-pub type DChunk=i64;
-pub const CHUNK:usize=32;
-
-pub const NOT_SPECIAL:usize =0;
-pub const PSEUDO_MERSENNE:usize=1;
-pub const MONTGOMERY_FRIENDLY:usize=2;
-pub const GENERALISED_MERSENNE:usize=3;
-pub const WEIERSTRASS:usize=0;
-pub const EDWARDS:usize=1;
-pub const MONTGOMERY:usize=2;
-pub const BN_CURVE: usize=0;
-pub const BLS_CURVE: usize=1;
-
-
-// Curve 25519
-#[cfg(feature = "Ed25519")]
-pub const MODBITS: usize = 255;
-#[cfg(feature = "Ed25519")]
-pub const MOD8: usize = 5;
-#[cfg(feature = "Ed25519")]
-pub const BASEBITS: usize = 29;
-#[cfg(feature = "Ed25519")]
-pub const AES_S: usize=0;
-
-// GOLDILOCKS
-#[cfg(feature = "GOLDILOCKS")]
-pub const MODBITS: usize=448;
-#[cfg(feature = "GOLDILOCKS")]
-pub const MOD8: usize=7;
-#[cfg(feature = "GOLDILOCKS")]
-pub const BASEBITS: usize=29;
-#[cfg(feature = "GOLDILOCKS")]
-pub const AES_S: usize= 0;
-
-
-// BN254 Curve
-#[cfg(feature = "BN254")]
-pub const MODBITS:usize = 254; /* Number of bits in Modulus */
-#[cfg(feature = "BN254")]
-pub const MOD8:usize = 3;   /* Modulus mod 8 */
-#[cfg(feature = "BN254")]
-pub const BASEBITS:usize = 29;
-#[cfg(feature = "BN254")]
-pub const AES_S:usize=0;
-
-// BLS383 Curve
-#[cfg(feature = "BLS383")]
-pub const MODBITS:usize = 383; /* Number of bits in Modulus */
-#[cfg(feature = "BLS383")]
-pub const MOD8: usize = 3;  /* Modulus mod 8 */
-#[cfg(feature = "BLS383")]
-pub const BASEBITS:usize = 28;
-#[cfg(feature = "BLS383")]
-pub const AES_S: usize= 0;
-
-// BLS455 Curve
-#[cfg(feature = "BLS455")]
-pub const MODBITS:usize = 455; /* Number of bits in Modulus */
-#[cfg(feature = "BLS455")]
-pub const MOD8: usize = 3;  /* Modulus mod 8 */
-#[cfg(feature = "BLS455")]
-pub const BASEBITS:usize = 29;
-#[cfg(feature = "BLS455")]
-pub const AES_S: usize= 128;
-
-//---------------
-
-/* RSA/DH modulus length as multiple of BIGBITS */
-pub const FFLEN:usize=4;
-
-pub const NLEN: usize = (1+((MODBITS-1)/BASEBITS));
-pub const BIG_HEX_STRING_LEN:usize = NLEN * 16 + NLEN - 1;
-pub const DNLEN: usize = 2*NLEN;
-pub const BMASK: Chunk= ((1<<BASEBITS)-1);
-pub const MODBYTES: usize = 1+(MODBITS-1)/8;
-pub const NEXCESS:isize = (1<<((CHUNK)-BASEBITS-1));
-pub const FEXCESS:Chunk = ((1 as Chunk)<<(BASEBITS*(NLEN)-MODBITS));
-pub const OMASK:Chunk = (-1)<<(MODBITS%BASEBITS);
-pub const TBITS:usize=MODBITS%BASEBITS; // Number of active bits in top word
-pub const TMASK:Chunk=(1<<TBITS)-1;
-pub const BIGBITS:usize = (MODBYTES*8);
-pub const HBITS: usize=(BASEBITS/2);
-pub const HMASK: Chunk= ((1<<HBITS)-1);
-
-/* Finite field support - for RSA, DH etc. */
-pub const FF_BITS:usize=(BIGBITS*FFLEN); /* Finite Field Size in bits - must 
be 256.2^n */
-pub const HFLEN:usize=(FFLEN/2);  /* Useful for half-size RSA private key 
operations */
-
-pub const P_MBITS:usize=(MODBYTES as usize)*8;
-pub const P_MB: usize=(P_MBITS%BASEBITS);
-pub const P_OMASK:Chunk=((-1)<<(P_MBITS%BASEBITS));
-pub const P_FEXCESS: Chunk=(1<<(BASEBITS*NLEN-P_MBITS));
-pub const P_TBITS: usize=(P_MBITS%BASEBITS);
-
-
-// Curve25519 Modulus 
-#[cfg(feature = "Ed25519")]
-pub const MODTYPE:usize=PSEUDO_MERSENNE;
-#[cfg(feature = "Ed25519")]
-pub const 
MODULUS:[Chunk;NLEN]=[0x1FFFFFED,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFFF];
-#[cfg(feature = "Ed25519")]
-pub const MCONST:Chunk=19;
-
-//GOLDILOCKS
-#[cfg(feature = "GOLDILOCKS")]
-pub const MODTYPE: usize=GENERALISED_MERSENNE;
-#[cfg(feature = "GOLDILOCKS")]
-pub const 
MODULUS:[Chunk;NLEN]=[0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FDFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFF];
-#[cfg(feature = "GOLDILOCKS")]
-pub const MCONST: Chunk=0x1;
-
-
-// BN254 Curve Modulus
-#[cfg(feature = "BN254")]
-pub const MODTYPE:usize = NOT_SPECIAL;
-#[cfg(feature = "BN254")]
-pub const MODULUS:[Chunk;NLEN] = 
[0x13,0x18000000,0x4E9,0x2000000,0x8612,0x6C00000,0x6E8D1,0x10480000,0x252364];
-#[cfg(feature = "BN254")]
-pub const MCONST:Chunk=0x179435E5;
-
-// BLS383 Curve
-#[cfg(feature = "BLS383")]
-pub const MODTYPE:usize = NOT_SPECIAL;
-#[cfg(feature = "BLS383")]
-pub const MODULUS:[Chunk;NLEN] = 
[0xAAD556B,0xACAAB52,0x5F75D7A,0x1BB0147,0xD5D7520,0xCF73083,0xF99EB16,0x531820,0xA68EA32,0x2C01355,0x552A785,0x5C6105C,0x80A9F7,0x7AC52];
-#[cfg(feature = "BLS383")]
-pub const MCONST:Chunk=0x123D0BD;
-
-// BLS455 Curve
-#[cfg(feature = "BLS455")]
-pub const MODTYPE:usize = NOT_SPECIAL;
-#[cfg(feature = "BLS455")]
-pub const MODULUS:[Chunk;NLEN] = 
[0x2AB,0x1500000C,0xAAA55AA,0xB12AAD6,0x6D1BA6C,0xCCA5674,0x12E2CF6E,0xA9F9662,0x34BD939,0x12D8EAB1,0xFD9978E,0x9240600,0xE0F95B,0xAAB9550,0x55555E5,0xAAAAB];
-#[cfg(feature = "BLS455")]
-pub const MCONST:Chunk=0x1F4017FD;
-
-
-// Ed25519 Curve 
-#[cfg(feature = "Ed25519")]
-pub const CURVETYPE:usize=EDWARDS;
-#[cfg(feature = "Ed25519")]
-pub const CURVE_A:isize = -1;
-#[cfg(feature = "Ed25519")]
-pub const 
CURVE_B:[Chunk;NLEN]=[0x135978A3,0xF5A6E50,0x10762ADD,0x149A82,0x1E898007,0x3CBBBC,0x19CE331D,0x1DC56DFF,0x52036C];
-#[cfg(feature = "Ed25519")]
-pub const 
CURVE_ORDER:[Chunk;NLEN]=[0x1CF5D3ED,0x9318D2,0x1DE73596,0x1DF3BD45,0x14D,0x0,0x0,0x0,0x100000];
-#[cfg(feature = "Ed25519")]
-pub const 
CURVE_GX:[Chunk;NLEN]=[0xF25D51A,0xAB16B04,0x969ECB2,0x198EC12A,0xDC5C692,0x1118FEEB,0xFFB0293,0x1A79ADCA,0x216936];
-#[cfg(feature = "Ed25519")]
-pub const 
CURVE_GY:[Chunk;NLEN]=[0x6666658,0x13333333,0x19999999,0xCCCCCCC,0x6666666,0x13333333,0x19999999,0xCCCCCCC,0x666666];
-
-// GOLDILOCKS
-#[cfg(feature = "GOLDILOCKS")]
-pub const CURVETYPE: usize=EDWARDS;
-#[cfg(feature = "GOLDILOCKS")]
-pub const CURVE_A: isize=1;
-#[cfg(feature = "GOLDILOCKS")]
-pub const 
CURVE_ORDER:[Chunk;NLEN]=[0xB5844F3,0x1BC61495,0x1163D548,0x1984E51B,0x3690216,0xDA4D76B,0xFA7113B,0x1FEF9944,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FF];
-#[cfg(feature = "GOLDILOCKS")]
-pub const 
CURVE_B:[Chunk;NLEN]=[0x1FFF6756,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FDFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFF];
-#[cfg(feature = "GOLDILOCKS")]
-pub const 
CURVE_GX:[Chunk;NLEN]=[0x15555555,0xAAAAAAA,0x15555555,0xAAAAAAA,0x15555555,0xAAAAAAA,0x15555555,0x152AAAAA,0xAAAAAAA,0x15555555,0xAAAAAAA,0x15555555,0xAAAAAAA,0x15555555,0xAAAAAAA,0x1555];
-#[cfg(feature = "GOLDILOCKS")]
-pub const 
CURVE_GY:[Chunk;NLEN]=[0xA9386ED,0x1757DE6F,0x13681AF6,0x19657DA3,0x3098BBB,0x12C19D15,0x12E03595,0xE515B18,0x17B7E36D,0x1AC426E,0xDBB5E8,0x10D8560,0x159D6205,0xB8246D9,0x17A58D2B,0x15C0];
-
-// BN254 Curve
-#[cfg(feature = "BN254")]
-pub const CURVETYPE:usize = WEIERSTRASS;
-#[cfg(feature = "BN254")]
-pub const CURVE_PAIRING_TYPE:usize = BN_CURVE;
-#[cfg(feature = "BN254")]
-pub const CURVE_A:isize = 0;
-#[cfg(feature = "BN254")]
-pub const CURVE_B:[Chunk;NLEN]=[0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_ORDER:[Chunk;NLEN]=[0xD,0x8000000,0x428,0x1F000000,0x7FF9,0x6C00000,0x6E8D1,0x10480000,0x252364];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_GX:[Chunk;NLEN]=[0x12,0x18000000,0x4E9,0x2000000,0x8612,0x6C00000,0x6E8D1,0x10480000,0x252364];
-#[cfg(feature = "BN254")]
-pub const CURVE_GY:[Chunk;NLEN]=[0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0];
-
-#[cfg(feature = "BN254")]
-pub const 
CURVE_FRA:[Chunk;NLEN]=[0xF2A6DE9,0xBEF3603,0xFDDF0B8,0x12E9249A,0x953F850,0xDA85423,0x1232D926,0x32425CF,0x1B3776];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_FRB:[Chunk;NLEN]=[0x10D5922A,0xC10C9FC,0x10221431,0xF16DB65,0x16AC8DC1,0x1917ABDC,0xDD40FAA,0xD23DA30,0x9EBEE];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_PXA:[Chunk;NLEN]=[0x803FB2B,0xF721126,0x62FC364,0x9177691,0x1EDB6A46,0x63F4630,0x18BFAE36,0x176A33D6,0x61A10];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_PXB:[Chunk;NLEN]=[0x7D54CF3,0xC61A60F,0xDE12DC3,0x1AE8D75C,0xAA5B1F4,0x13C62CC1,0xCCC42A,0x1F374E6F,0x516AA];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_PYA:[Chunk;NLEN]=[0x11CD2B9A,0xF8703C4,0xF826F46,0x1A15CD7B,0x822329B,0x104B34C6,0xD0E6A43,0x140D75F2,0x21897];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_PYB:[Chunk;NLEN]=[0xB3ACE9B,0x1168D763,0xE7255E2,0xDFFAE,0x18D37B09,0x22B7AF9,0x149A3DB5,0x1CF9162,0xEBB2B];
-#[cfg(feature = "BN254")]
-pub const CURVE_BNX:[Chunk;NLEN]=[0x1,0x4000000,0x10,0x0,0x0,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BN254")]
-pub const CURVE_COF:[Chunk;NLEN]=[0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_CRU:[Chunk;NLEN]=[0x7,0xC000000,0x1B3,0x12000000,0x2490,0x11200000,0x126CD,0x0,0x0];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_W:[[Chunk;NLEN];2]=[[0x3,0x0,0x81,0x3000000,0x618,0x0,0x0,0x0,0x0],[0x1,0x8000000,0x20,0x0,0x0,0x0,0x0,0x0,0x0]];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_SB:[[[Chunk;NLEN];2];2]=[[[0x4,0x8000000,0xA1,0x3000000,0x618,0x0,0x0,0x0,0x0],[0x1,0x8000000,0x20,0x0,0x0,0x0,0x0,0x0,0x0]],[[0x1,0x8000000,0x20,0x0,0x0,0x0,0x0,0x0,0x0],[0xA,0x8000000,0x3A7,0x1C000000,0x79E1,0x6C00000,0x6E8D1,0x10480000,0x252364]]];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_WB:[[Chunk;NLEN];4]=[[0x0,0x4000000,0x10,0x1000000,0x208,0x0,0x0,0x0,0x0],[0x5,0x14000000,0x152,0xE000000,0x1C70,0xC00000,0xC489,0x0,0x0],[0x3,0xC000000,0xB1,0x7000000,0xE38,0x10600000,0x6244,0x0,0x0],[0x1,0xC000000,0x30,0x1000000,0x208,0x0,0x0,0x0,0x0]];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_BB:[[[Chunk;NLEN];4];4]=[[[0xD,0x4000000,0x418,0x1F000000,0x7FF9,0x6C00000,0x6E8D1,0x10480000,0x252364],[0xC,0x4000000,0x418,0x1F000000,0x7FF9,0x6C00000,0x6E8D1,0x10480000,0x252364],[0xC,0x4000000,0x418,0x1F000000,0x7FF9,0x6C00000,0x6E8D1,0x10480000,0x252364],[0x2,0x8000000,0x20,0x0,0x0,0x0,0x0,0x0,0x0]],[[0x1,0x8000000,0x20,0x0,0x0,0x0,0x0,0x0,0x0],[0xC,0x4000000,0x418,0x1F000000,0x7FF9,0x6C00000,0x6E8D1,0x10480000,0x252364],[0xD,0x4000000,0x418,0x1F000000,0x7FF9,0x6C00000,0x6E8D1,0x10480000,0x252364],[0xC,0x4000000,0x418,0x1F000000,0x7FF9,0x6C00000,0x6E8D1,0x10480000,0x252364]],[[0x2,0x8000000,0x20,0x0,0x0,0x0,0x0,0x0,0x0],[0x1,0x8000000,0x20,0x0,0x0,0x0,0x0,0x0,0x0],[0x1,0x8000000,0x20,0x0,0x0,0x0,0x0,0x0,0x0],[0x1,0x8000000,0x20,0x0,0x0,0x0,0x0,0x0,0x0]],[[0x2,0x4000000,0x10,0x0,0x0,0x0,0x0,0x0,0x0],[0x2,0x10000000,0x40,0x0,0x0,0x0,0x0,0x0,0x0],[0xA,0x0,0x408,0x1F000000,0x7FF9,0x6C00000,0x6E8D1,0x10480000,0x252364],[0x2,0x4000000,0x10,0x0,0x0,0x0,0x0,0x0,0x0]]];
-
-#[cfg(feature = "BN254")]
-pub const USE_GLV:bool = true;
-#[cfg(feature = "BN254")]
-pub const USE_GS_G2:bool = true;
-#[cfg(feature = "BN254")]
-pub const USE_GS_GT:bool = true;
-#[cfg(feature = "BN254")]
-pub const GT_STRONG:bool = false;
-
-
-
-// BLS383 Curve
-#[cfg(feature = "BLS383")]
-pub const CURVETYPE:usize = WEIERSTRASS;
-#[cfg(feature = "BLS383")]
-pub const CURVE_PAIRING_TYPE:usize = BLS_CURVE;
-#[cfg(feature = "BLS383")]
-pub const CURVE_A:isize = 0;
-
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_ORDER:[Chunk;NLEN]=[0xFFF001,0xFFF8000,0xFE7800,0xBFDE007,0xC5EDF1C,0x3000049,0x910007A,0xC40007F,0x641004C,0x14,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_B:[Chunk;NLEN]=[0x9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_COF:[Chunk;NLEN]=[0x52B,0x2A00,0xAAB2CA0,0x5560AAA,0x6055,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_GX:[Chunk;NLEN]=[0xD10786B,0xD59B348,0x3F54AD0,0x3477C0E,0x4578B9B,0xBF25B73,0x7BB6F65,0x4F6AC00,0xFF57E9C,0xEFD5830,0xFB6EC02,0xADB9F88,0xEE4BC98,0xB08C];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_GY:[Chunk;NLEN]=[0xD145DDB,0x5DA023,0x5FEF7CC,0x13F518C,0x2B2A66F,0x56EC346,0xC7A925F,0x96F3019,0x981223E,0x9061047,0x8F5BE59,0x4810AD,0x9337671,0x1F390];
-
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_BNX:[Chunk;NLEN]=[0x40,0x100,0x110,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_CRU:[Chunk;NLEN]=[0xDA155A9,0xA3AAC4E,0x61E5E3D,0xDF2FE87,0xE632625,0xBCDFAAD,0xD3035A6,0x5123128,0xBEAD683,0xDBF3A2B,0x424190,0x5C5FAB2,0x80A9F7,0x7AC52];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_FRA:[Chunk;NLEN]=[0x2B4508B,0x2BA59A9,0x6EEF343,0x63DB7A0,0x1DFBC74,0x40341CB,0x32D55D3,0x1639E9D,0x5CC36D4,0xB19B3F0,0xD86AB98,0xF323EE4,0xB198672,0x5A5F];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_FRB:[Chunk;NLEN]=[0x7F904E0,0x81051A9,0xF086A37,0xB7D49A6,0xB7DB8AB,0x8F3EEB8,0xC6C9543,0xEEF7983,0x49CB35D,0x7A65F65,0x7CBFBEC,0x693D177,0x5672384,0x751F2];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_PXA:[Chunk;NLEN]=[0xBAC9472,0x6059885,0xE2DC36D,0x7C4D31D,0x8C88A7,0xBDC90C3,0x1C688FC,0x29F0197,0xC43F167,0x3693539,0x61EB8BF,0xD81E5A5,0x22B56BF,0x4D507];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_PXB:[Chunk;NLEN]=[0x272AB23,0x9B4BD7A,0xF44DCE8,0x7AF19D4,0x3206A34,0x3F6F7B9,0x2A819FB,0x571DD3E,0x635D7EE,0x3A2BA3B,0xC1A126,0xAC28C78,0x17C3E5B,0xEE36];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_PYA:[Chunk;NLEN]=[0x77BD4FD,0x81D2309,0xDFDFC6,0xB66072,0xC89A0C,0x41FC959,0x878287A,0x2E1FBCF,0x14EEE65,0x11C230,0x6BB325E,0x2887881,0x859A05C,0x8F40];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_PYB:[Chunk;NLEN]=[0x52C4CE6,0xA5E20A2,0xAFF40C8,0x5907A74,0x2448EF3,0x41760A4,0xFDA199,0xFFEF82B,0x8D4EA49,0xA0F29A1,0x6E4997B,0xAC7F7B8,0xBA88C12,0x1DCAB];
-
-#[cfg(feature = "BLS383")]
-pub const CURVE_W:[[Chunk;0];2]=[[],[]];
-#[cfg(feature = "BLS383")]
-pub const CURVE_SB:[[[Chunk;0];2];2]=[[[],[]],[[],[]]];
-#[cfg(feature = "BLS383")]
-pub const CURVE_WB:[[Chunk;0];4]=[[],[],[],[]];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_BB:[[[Chunk;0];4];4]=[[[],[],[],[]],[[],[],[],[]],[[],[],[],[]],[[],[],[],[]]];
-
-
-#[cfg(feature = "BLS383")]
-pub const USE_GLV:bool = true;
-#[cfg(feature = "BLS383")]
-pub const USE_GS_G2:bool = true;
-#[cfg(feature = "BLS383")]
-pub const USE_GS_GT:bool = true;
-#[cfg(feature = "BLS383")]
-pub const GT_STRONG:bool = false;
-
-// BLS455 Curve
-#[cfg(feature = "BLS455")]
-pub const CURVETYPE:usize = WEIERSTRASS;
-#[cfg(feature = "BLS455")]
-pub const CURVE_PAIRING_TYPE:usize = BLS_CURVE;
-#[cfg(feature = "BLS455")]
-pub const CURVE_A:isize = 0;
-
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_ORDER:[Chunk;NLEN]=[0x1FC00001,0x3FFF,0x10000070,0x1400000,0x1D100,0xF0003A8,0x13C0009,0x1E200,0x180002E0,0x400001,0x4000,0x0,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_B:[Chunk;NLEN]=[0xA,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_COF:[Chunk;NLEN]=[0xABFFAAB,0x14AABFFD,0xD52AADA,0x1562AAAB,0x15556AAA,0x2A,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_GX:[Chunk;NLEN]=[0x1DFCEDD1,0x16A62EEF,0xE80D3ED,0xB8DE876,0x179C7253,0x182DAB52,0x46CC85F,0x1E571D9C,0x1E8392B1,0x1A155867,0x19E6527C,0x23DC64E,0xABEDA59,0xF20662B,0x17CECC01,0x310A];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_GY:[Chunk;NLEN]=[0x6619B9B,0x27EBCD,0x1BE80A19,0x13B014BA,0x191A4936,0x13911916,0x107A5A3B,0x1DCB0863,0x1F5FB1,0xDE44A9C,0x18E23B2A,0x1FA81FD3,0xB0D6DFA,0xC2FE1EF,0xDDFA7E2,0x3351B];
-
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_BNX:[Chunk;NLEN]=[0x800,0x1000004,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_CRU:[Chunk;NLEN]=[0xAA9,0x9017FE0,0x128DD8AA,0x1F4A321E,0x148FEC90,0x195CDEEA,0xE961AA2,0x168D3B66,0xAFD99D7,0xB989AA6,0x1F9A5724,0x91A05FF,0xE0EF5B,0xAAB9548,0x55555E5,0xAAAAB];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_FRA:[Chunk;NLEN]=[0xA2EBF21,0x4E67DEE,0xCDE6590,0xE5EA94E,0x15454985,0x140CFC43,0x7E14D1C,0x1778395A,0x1944F022,0x166BEA1A,0xC3DEEA0,0x9F031A0,0x16A7459,0x1F1D6E00,0x125CFB72,0x72FD4];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_FRB:[Chunk;NLEN]=[0x15D1438A,0x1019821D,0x1DCBF01A,0x1CB40187,0x118C70E6,0x18BD5A30,0xB018251,0x13275D08,0xA06E916,0x1C6D0096,0x39BA8ED,0x1F33D460,0x1F768501,0xB8E274F,0x12F85A72,0x37AD6];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_PXA:[Chunk;NLEN]=[0x10C1F542,0x23AF907,0x159F840,0xBAC0E1F,0x133D7766,0x1C034C5D,0x14C5C875,0x1ED0BDA2,0x16A49C71,0x1E9FF62D,0x14F3ACC0,0x1E0C9FEA,0xC4638DE,0x74D18DA,0xBEA0030,0x5D962];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_PXB:[Chunk;NLEN]=[0x749F03D,0xC843773,0xB17BCBA,0x1134AB4B,0x8EA016E,0x1A0D766C,0x58F819E,0x48A1FCC,0xE296F62,0x83370E4,0xC9BA1D5,0x1E43290E,0xEE59A80,0x1FDD85F5,0x1F3819B6,0x1D9F];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_PYA:[Chunk;NLEN]=[0x181A77F4,0x191AD22,0x1E9F842A,0x1E1E6CF6,0xD55B9D9,0x1D062533,0x15BB1323,0x7ECBC1,0x1A9EC2EF,0x1EE14CE0,0x1E96B271,0xA794439,0x1C544324,0xE6AD5DC,0x16429B0F,0x448E3];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_PYB:[Chunk;NLEN]=[0x1E1FDBA2,0x1A09DB6C,0xF680D5B,0xFCC6122,0xC488E2A,0x1E489ECD,0x1005617E,0x1CF9EC36,0x1C89ED72,0x16C00D90,0x1563E595,0x1243DDC0,0x8698F9E,0x1BD81E7E,0xF2A0F4A,0x66A0];
-
-#[cfg(feature = "BLS455")]
-pub const CURVE_W:[[Chunk;0];2]=[[],[]];
-#[cfg(feature = "BLS455")]
-pub const CURVE_SB:[[[Chunk;0];2];2]=[[[],[]],[[],[]]];
-#[cfg(feature = "BLS455")]
-pub const CURVE_WB:[[Chunk;0];4]=[[],[],[],[]];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_BB:[[[Chunk;0];4];4]=[[[],[],[],[]],[[],[],[],[]],[[],[],[],[]],[[],[],[],[]]];
-
-
-#[cfg(feature = "BLS455")]
-pub const USE_GLV:bool = true;
-#[cfg(feature = "BLS455")]
-pub const USE_GS_G2:bool = true;
-#[cfg(feature = "BLS455")]
-pub const USE_GS_GT:bool = true;
-#[cfg(feature = "BLS455")]
-pub const GT_STRONG:bool = false;
-

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/rust/src/rom64.rs
----------------------------------------------------------------------
diff --git a/version22/rust/src/rom64.rs b/version22/rust/src/rom64.rs
deleted file mode 100644
index fc900ab..0000000
--- a/version22/rust/src/rom64.rs
+++ /dev/null
@@ -1,348 +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.
-*/
-
-pub type Chunk=i64;
-//pub type DChunk=i128;
-pub const CHUNK:usize=64;
-
-pub const NOT_SPECIAL:usize =0;
-pub const PSEUDO_MERSENNE:usize=1;
-pub const MONTGOMERY_FRIENDLY:usize=2;
-pub const GENERALISED_MERSENNE:usize=3;
-pub const WEIERSTRASS:usize=0;
-pub const EDWARDS:usize=1;
-pub const MONTGOMERY:usize=2;
-pub const BN_CURVE: usize=0;
-pub const BLS_CURVE: usize=1;
-
-
-// Curve 25519
-#[cfg(feature = "Ed25519")]
-pub const MODBITS: usize = 255;
-#[cfg(feature = "Ed25519")]
-pub const MOD8: usize = 5;
-#[cfg(feature = "Ed25519")]
-pub const BASEBITS: usize = 56;
-#[cfg(feature = "Ed25519")]
-pub const AES_S: usize=0;
-
-// GOLDILOCKS
-#[cfg(feature = "GOLDILOCKS")]
-pub const MODBITS: usize=448;
-#[cfg(feature = "GOLDILOCKS")]
-pub const MOD8: usize=7;
-#[cfg(feature = "GOLDILOCKS")]
-pub const BASEBITS: usize=60;
-#[cfg(feature = "GOLDILOCKS")]
-pub const AES_S: usize= 0;
-
-
-// BN254 Curve
-#[cfg(feature = "BN254")]
-pub const MODBITS:usize = 254; /* Number of bits in Modulus */
-#[cfg(feature = "BN254")]
-pub const MOD8:usize = 3;   /* Modulus mod 8 */
-#[cfg(feature = "BN254")]
-pub const BASEBITS:usize = 56;
-#[cfg(feature = "BN254")]
-pub const AES_S:usize=0;
-
-// BLS383 Curve
-#[cfg(feature = "BLS383")]
-pub const MODBITS:usize = 383; /* Number of bits in Modulus */
-#[cfg(feature = "BLS383")]
-pub const MOD8: usize = 3;  /* Modulus mod 8 */
-#[cfg(feature = "BLS383")]
-pub const BASEBITS:usize = 56;
-#[cfg(feature = "BLS383")]
-pub const AES_S: usize= 0;
-
-// BLS455 Curve
-#[cfg(feature = "BLS455")]
-pub const MODBITS:usize = 455; /* Number of bits in Modulus */
-#[cfg(feature = "BLS455")]
-pub const MOD8: usize = 3;  /* Modulus mod 8 */
-#[cfg(feature = "BLS455")]
-pub const BASEBITS:usize = 60;
-#[cfg(feature = "BLS455")]
-pub const AES_S: usize= 128;
-
-//---------------
-
-/* RSA/DH modulus length as multiple of BIGBITS */
-pub const FFLEN:usize=8;
-
-pub const NLEN: usize = (1+((MODBITS-1)/BASEBITS));
-pub const BIG_HEX_STRING_LEN:usize = NLEN * 16 + NLEN - 1;
-pub const DNLEN: usize = 2*NLEN;
-pub const BMASK: Chunk= ((1<<BASEBITS)-1);
-pub const MODBYTES: usize = 1+(MODBITS-1)/8;
-pub const NEXCESS:isize = (1<<((CHUNK)-BASEBITS-1));
-pub const FEXCESS:Chunk = ((1 as Chunk)<<(BASEBITS*(NLEN)-MODBITS));
-pub const OMASK:Chunk = (-1)<<(MODBITS%BASEBITS);
-pub const TBITS:usize=MODBITS%BASEBITS; // Number of active bits in top word
-pub const TMASK:Chunk=(1<<TBITS)-1;
-pub const BIGBITS:usize = (MODBYTES*8);
-pub const HBITS: usize=(BASEBITS/2);
-pub const HMASK: Chunk= ((1<<HBITS)-1);
-
-/* Finite field support - for RSA, DH etc. */
-pub const FF_BITS:usize=(BIGBITS*FFLEN); /* Finite Field Size in bits - must 
be 256.2^n */
-pub const HFLEN:usize=(FFLEN/2);  /* Useful for half-size RSA private key 
operations */
-
-pub const P_MBITS:usize=(MODBYTES as usize)*8;
-pub const P_MB: usize=(P_MBITS%BASEBITS);
-pub const P_OMASK:Chunk=((-1)<<(P_MBITS%BASEBITS));
-pub const P_FEXCESS: Chunk=(1<<(BASEBITS*NLEN-P_MBITS));
-pub const P_TBITS: usize=(P_MBITS%BASEBITS);
-
-
-// Curve25519 Modulus 
-#[cfg(feature = "Ed25519")]
-pub const MODTYPE:usize=PSEUDO_MERSENNE;
-#[cfg(feature = "Ed25519")]
-pub const 
MODULUS:[Chunk;NLEN]=[0xFFFFFFFFFFFFED,0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFF,0x7FFFFFFF];
-#[cfg(feature = "Ed25519")]
-pub const MCONST:Chunk=19;
-
-//GOLDILOCKS
-#[cfg(feature = "GOLDILOCKS")]
-pub const MODTYPE: usize=GENERALISED_MERSENNE;
-#[cfg(feature = "GOLDILOCKS")]
-pub const MODULUS: [Chunk;NLEN]= 
[0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFEFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFF];
-#[cfg(feature = "GOLDILOCKS")]
-pub const MCONST: Chunk=0x1;
-
-// BN254 Curve Modulus
-#[cfg(feature = "BN254")]
-pub const MODTYPE:usize = NOT_SPECIAL;
-#[cfg(feature = "BN254")]
-pub const MODULUS:[Chunk;NLEN] = 
[0x13,0x13A7,0x80000000086121,0x40000001BA344D,0x25236482];
-#[cfg(feature = "BN254")]
-pub const MCONST:Chunk=0x435E50D79435E5;
-
-// BLS383 Curve
-#[cfg(feature = "BLS383")]
-pub const MODTYPE:usize = NOT_SPECIAL;
-#[cfg(feature = "BLS383")]
-pub const MODULUS:[Chunk;NLEN] = 
[0xACAAB52AAD556B,0x1BB01475F75D7A,0xCF73083D5D7520,0x531820F99EB16,0x2C01355A68EA32,0x5C6105C552A785,0x7AC52080A9F7];
-#[cfg(feature = "BLS383")]
-pub const MCONST:Chunk=0xA59AB3B123D0BD;
-
-
-// BLS455 Curve
-#[cfg(feature = "BLS455")]
-pub const MODTYPE:usize = NOT_SPECIAL;
-#[cfg(feature = "BLS455")]
-pub const MODULUS:[Chunk;NLEN] = 
[0xAA00001800002AB,0xC589556B2AA956A,0xB9994ACE86D1BA6,0x3954FCB314B8B3D,0xE3A5B1D56234BD9,0x95B49203003F665,0x57955572AA00E0F,0x555559555];
-#[cfg(feature = "BLS455")]
-pub const MCONST:Chunk=0xB3EF8137F4017FD;
-
-
-// Ed25519 Curve 
-#[cfg(feature = "Ed25519")]
-pub const CURVETYPE:usize=EDWARDS;
-#[cfg(feature = "Ed25519")]
-pub const CURVE_A:isize = -1;
-#[cfg(feature = "Ed25519")]
-pub const 
CURVE_B:[Chunk;NLEN]=[0xEB4DCA135978A3,0xA4D4141D8AB75,0x797779E8980070,0x2B6FFE738CC740,0x52036CEE];
-#[cfg(feature = "Ed25519")]
-pub const 
CURVE_ORDER:[Chunk;NLEN]=[0x12631A5CF5D3ED,0xF9DEA2F79CD658,0x14DE,0x0,0x10000000];
-#[cfg(feature = "Ed25519")]
-pub const 
CURVE_GX:[Chunk;NLEN]=[0x562D608F25D51A,0xC7609525A7B2C9,0x31FDD6DC5C692C,0xCD6E53FEC0A4E2,0x216936D3];
-#[cfg(feature = "Ed25519")]
-pub const 
CURVE_GY:[Chunk;NLEN]=[0x66666666666658,0x66666666666666,0x66666666666666,0x66666666666666,0x66666666];
-
-// GOLDILOCKS
-#[cfg(feature = "GOLDILOCKS")]
-pub const CURVETYPE: usize= EDWARDS;
-#[cfg(feature = "GOLDILOCKS")]
-pub const CURVE_A: isize = 1;
-#[cfg(feature = "GOLDILOCKS")]
-pub const CURVE_B: 
[Chunk;NLEN]=[0xFFFFFFFFFFF6756,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFEFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFF];
-#[cfg(feature = "GOLDILOCKS")]
-pub const CURVE_ORDER: 
[Chunk;NLEN]=[0x378C292AB5844F3,0x6CC2728DC58F552,0xEDB49AED6369021,0xFFFF7CCA23E9C44,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFF,0x3FFFFFF];
-#[cfg(feature = "GOLDILOCKS")]
-pub const CURVE_GX: 
[Chunk;NLEN]=[0x555555555555555,0x555555555555555,0x555555555555555,0xAAA955555555555,0xAAAAAAAAAAAAAAA,0xAAAAAAAAAAAAAAA,0xAAAAAAAAAAAAAAA,0xAAAAAAA];
-#[cfg(feature = "GOLDILOCKS")]
-pub const CURVE_GY: 
[Chunk;NLEN]=[0xAEAFBCDEA9386ED,0xBCB2BED1CDA06BD,0x565833A2A3098BB,0x6D728AD8C4B80D6,0x7A035884DD7B7E3,0x205086C2B0036ED,0x34AD7048DB359D6,0xAE05E96];
-
-
-// BN254 Curve
-#[cfg(feature = "BN254")]
-pub const CURVETYPE:usize = WEIERSTRASS;
-#[cfg(feature = "BN254")]
-pub const CURVE_PAIRING_TYPE:usize = BN_CURVE;
-#[cfg(feature = "BN254")]
-pub const CURVE_A:isize = 0;
-#[cfg(feature = "BN254")]
-pub const CURVE_B:[Chunk;NLEN]=[0x2,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_ORDER:[Chunk;NLEN]=[0xD,0x800000000010A1,0x8000000007FF9F,0x40000001BA344D,0x25236482];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_GX:[Chunk;NLEN]=[0x12,0x13A7,0x80000000086121,0x40000001BA344D,0x25236482];
-#[cfg(feature = "BN254")]
-pub const CURVE_GY:[Chunk;NLEN]=[0x1,0x0,0x0,0x0,0x0];
-
-#[cfg(feature = "BN254")]
-pub const 
CURVE_FRA:[Chunk;NLEN]=[0x7DE6C06F2A6DE9,0x74924D3F77C2E1,0x50A846953F8509,0x212E7C8CB6499B,0x1B377619];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_FRB:[Chunk;NLEN]=[0x82193F90D5922A,0x8B6DB2C08850C5,0x2F57B96AC8DC17,0x1ED1837503EAB2,0x9EBEE69];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_PXA:[Chunk;NLEN]=[0xEE4224C803FB2B,0x8BBB4898BF0D91,0x7E8C61EDB6A464,0x519EB62FEB8D8C,0x61A10BB];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_PXB:[Chunk;NLEN]=[0x8C34C1E7D54CF3,0x746BAE3784B70D,0x8C5982AA5B1F4D,0xBA737833310AA7,0x516AAF9];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_PYA:[Chunk;NLEN]=[0xF0E07891CD2B9A,0xAE6BDBE09BD19,0x96698C822329BD,0x6BAF93439A90E0,0x21897A0];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_PYB:[Chunk;NLEN]=[0x2D1AEC6B3ACE9B,0x6FFD739C9578A,0x56F5F38D37B090,0x7C8B15268F6D44,0xEBB2B0E];
-#[cfg(feature = "BN254")]
-pub const CURVE_BNX:[Chunk;NLEN]=[0x80000000000001,0x40,0x0,0x0,0x0];
-#[cfg(feature = "BN254")]
-pub const CURVE_COF:[Chunk;NLEN]=[0x1,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_CRU:[Chunk;NLEN]=[0x80000000000007,0x6CD,0x40000000024909,0x49B362,0x0];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_W:[[Chunk;NLEN];2]=[[0x3,0x80000000000204,0x6181,0x0,0x0],[0x1,0x81,0x0,0x0,0x0]];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_SB:[[[Chunk;NLEN];2];2]=[[[0x4,0x80000000000285,0x6181,0x0,0x0],[0x1,0x81,0x0,0x0,0x0]],[[0x1,0x81,0x0,0x0,0x0],[0xA,0xE9D,0x80000000079E1E,0x40000001BA344D,0x25236482]]];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_WB:[[Chunk;NLEN];4]=[[0x80000000000000,0x80000000000040,0x2080,0x0,0x0],[0x80000000000005,0x54A,0x8000000001C707,0x312241,0x0],[0x80000000000003,0x800000000002C5,0xC000000000E383,0x189120,0x0],[0x80000000000001,0x800000000000C1,0x2080,0x0,0x0]];
-#[cfg(feature = "BN254")]
-pub const 
CURVE_BB:[[[Chunk;NLEN];4];4]=[[[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]]];
-
-#[cfg(feature = "BN254")]
-pub const USE_GLV:bool = true;
-#[cfg(feature = "BN254")]
-pub const USE_GS_G2:bool = true;
-#[cfg(feature = "BN254")]
-pub const USE_GS_GT:bool = true;
-#[cfg(feature = "BN254")]
-pub const GT_STRONG:bool = false;
-
-// BLS383 Curve
-#[cfg(feature = "BLS383")]
-pub const CURVETYPE:usize = WEIERSTRASS;
-#[cfg(feature = "BLS383")]
-pub const CURVE_PAIRING_TYPE:usize = BLS_CURVE;
-#[cfg(feature = "BLS383")]
-pub const CURVE_A:isize = 0;
-
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_ORDER:[Chunk;NLEN]=[0xFFF80000FFF001,0xBFDE0070FE7800,0x3000049C5EDF1C,0xC40007F910007A,0x14641004C,0x0,0x0];
-#[cfg(feature = "BLS383")]
-pub const CURVE_B:[Chunk;NLEN]=[0x9,0x0,0x0,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_COF:[Chunk;NLEN]=[0x2A00000052B,0x5560AAAAAB2CA0,0x6055,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_GX:[Chunk;NLEN]=[0xD59B348D10786B,0x3477C0E3F54AD0,0xBF25B734578B9B,0x4F6AC007BB6F65,0xEFD5830FF57E9C,0xADB9F88FB6EC02,0xB08CEE4BC98];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_GY:[Chunk;NLEN]=[0x5DA023D145DDB,0x13F518C5FEF7CC,0x56EC3462B2A66F,0x96F3019C7A925F,0x9061047981223E,0x4810AD8F5BE59,0x1F3909337671];
-
-#[cfg(feature = "BLS383")]
-pub const CURVE_BNX:[Chunk;NLEN]=[0x1000000040,0x110,0x0,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_CRU:[Chunk;NLEN]=[0xA3AAC4EDA155A9,0xDF2FE8761E5E3D,0xBCDFAADE632625,0x5123128D3035A6,0xDBF3A2BBEAD683,0x5C5FAB20424190,0x7AC52080A9F7];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_FRA:[Chunk;NLEN]=[0x2BA59A92B4508B,0x63DB7A06EEF343,0x40341CB1DFBC74,0x1639E9D32D55D3,0xB19B3F05CC36D4,0xF323EE4D86AB98,0x5A5FB198672];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_FRB:[Chunk;NLEN]=[0x81051A97F904E0,0xB7D49A6F086A37,0x8F3EEB8B7DB8AB,0xEEF7983C6C9543,0x7A65F6549CB35D,0x693D1777CBFBEC,0x751F25672384];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_PXA:[Chunk;NLEN]=[0x6059885BAC9472,0x7C4D31DE2DC36D,0xBDC90C308C88A7,0x29F01971C688FC,0x3693539C43F167,0xD81E5A561EB8BF,0x4D50722B56BF];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_PXB:[Chunk;NLEN]=[0x9B4BD7A272AB23,0x7AF19D4F44DCE8,0x3F6F7B93206A34,0x571DD3E2A819FB,0x3A2BA3B635D7EE,0xAC28C780C1A126,0xEE3617C3E5B];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_PYA:[Chunk;NLEN]=[0x81D230977BD4FD,0xB660720DFDFC6,0x41FC9590C89A0C,0x2E1FBCF878287A,0x11C23014EEE65,0x28878816BB325E,0x8F40859A05C];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_PYB:[Chunk;NLEN]=[0xA5E20A252C4CE6,0x5907A74AFF40C8,0x41760A42448EF3,0xFFEF82B0FDA199,0xA0F29A18D4EA49,0xAC7F7B86E4997B,0x1DCABBA88C12];
-
-#[cfg(feature = "BLS383")]
-pub const CURVE_W:[[Chunk;0];2]=[[],[]];
-#[cfg(feature = "BLS383")]
-pub const CURVE_SB:[[[Chunk;0];2];2]=[[[],[]],[[],[]]];
-#[cfg(feature = "BLS383")]
-pub const CURVE_WB:[[Chunk;0];4]=[[],[],[],[]];
-#[cfg(feature = "BLS383")]
-pub const 
CURVE_BB:[[[Chunk;0];4];4]=[[[],[],[],[]],[[],[],[],[]],[[],[],[],[]],[[],[],[],[]]];
-
-
-#[cfg(feature = "BLS383")]
-pub const USE_GLV:bool = true;
-#[cfg(feature = "BLS383")]
-pub const USE_GS_G2:bool = true;
-#[cfg(feature = "BLS383")]
-pub const USE_GS_GT:bool = true;
-#[cfg(feature = "BLS383")]
-pub const GT_STRONG:bool = false;
-
-
-// BLS455 Curve
-#[cfg(feature = "BLS455")]
-pub const CURVETYPE:usize = WEIERSTRASS;
-#[cfg(feature = "BLS455")]
-pub const CURVE_PAIRING_TYPE:usize = BLS_CURVE;
-#[cfg(feature = "BLS455")]
-pub const CURVE_A:isize = 0;
-
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_ORDER:[Chunk;NLEN]=[0x7FFFFC00001,0xA00000400001C,0x25E000750001D10,0xE0000F10004F000,0x80000380002,0x10,0x0,0x0];
-#[cfg(feature = "BLS455")]
-pub const CURVE_B:[Chunk;NLEN]=[0xA,0x0,0x0,0x0,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_COF:[Chunk;NLEN]=[0xA9557FFAABFFAAB,0xAAB15555B54AAB6,0x555556AA,0x0,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_GX:[Chunk;NLEN]=[0x6D4C5DDFDFCEDD1,0x35C6F43B3A034FB,0x7F05B56A579C725,0xB1F2B8ECE11B321,0x9F342AB0CFE8392,0xA5911EE32767994,0x3005E40CC56ABED,0x18855F3B];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_GY:[Chunk;NLEN]=[0x404FD79A6619B9B,0x69D80A5D6FA0286,0xEE722322D91A493,0xB1EE58431C1E968,0xCA9BC8953801F5F,0xDFAFD40FE9E388E,0x9F8985FC3DEB0D6,0x19A8DB77E];
-
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_BNX:[Chunk;NLEN]=[0x20000080000800,0x10000,0x0,0x0,0x0,0x0,0x0,0x0];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_CRU:[Chunk;NLEN]=[0x9202FFC00000AA9,0xFA5190F4A3762A,0x8B2B9BDD548FEC9,0xD7B469DB33A586A,0xC91731354CAFD99,0xF5B48D02FFFE695,0x57955572A900E0E,0x555559555];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_FRA:[Chunk;NLEN]=[0x9CCFBDCA2EBF21,0x572F54A73379964,0x72819F887545498,0x22BBC1CAD1F8534,0xA82CD7D435944F0,0x4594F818D030F7B,0xEDCBE3ADC0016A7,0x397EA4973];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_FRB:[Chunk;NLEN]=[0xA033043B5D1438A,0x6E5A00C3F72FC06,0x4717AB46118C70E,0x16993AE842C0609,0x3B78DA012CA06E9,0x501F99EA300E6EA,0x69C971C4E9FF768,0x1BD6B4BE1];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_PXA:[Chunk;NLEN]=[0x475F20F0C1F542,0x65D6070F8567E10,0xD780698BB33D776,0x71F685ED1531721,0x303D3FEC5B6A49C,0x8DEF064FF553CEB,0xC0E9A31B4C463,0x2ECB12FA8];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_PXB:[Chunk;NLEN]=[0x99086EE6749F03D,0xE89A55A5AC5EF2E,0x7B41AECD88EA016,0x622450FE6163E06,0x755066E1C8E296F,0xA80F219487326E8,0x66DBFBB0BEAEE59,0xECFFCE0];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_PYA:[Chunk;NLEN]=[0x83235A4581A77F4,0x9F0F367B7A7E10A,0x8FA0C4A66D55B9D,0xEF03F65E0D6EC4C,0x9C7DC299C1A9EC2,0x32453CA21CFA5AC,0x6C3DCD5ABB9C544,0x22471D90A];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_PYB:[Chunk;NLEN]=[0xF413B6D9E1FDBA2,0xA7E630913DA0356,0xFBC913D9AC488E2,0x72E7CF61B401585,0x656D801B21C89ED,0xF9E921EEE0558F9,0x3D2B7B03CFC8698,0x33503CA8];
-
-#[cfg(feature = "BLS455")]
-pub const CURVE_W:[[Chunk;0];2]=[[],[]];
-#[cfg(feature = "BLS455")]
-pub const CURVE_SB:[[[Chunk;0];2];2]=[[[],[]],[[],[]]];
-#[cfg(feature = "BLS455")]
-pub const CURVE_WB:[[Chunk;0];4]=[[],[],[],[]];
-#[cfg(feature = "BLS455")]
-pub const 
CURVE_BB:[[[Chunk;0];4];4]=[[[],[],[],[]],[[],[],[],[]],[[],[],[],[]],[[],[],[],[]]];
-
-
-#[cfg(feature = "BLS455")]
-pub const USE_GLV:bool = true;
-#[cfg(feature = "BLS455")]
-pub const USE_GS_G2:bool = true;
-#[cfg(feature = "BLS455")]
-pub const USE_GS_GT:bool = true;
-#[cfg(feature = "BLS455")]
-pub const GT_STRONG:bool = false;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/rust/src/rsa.rs
----------------------------------------------------------------------
diff --git a/version22/rust/src/rsa.rs b/version22/rust/src/rsa.rs
deleted file mode 100644
index 4915816..0000000
--- a/version22/rust/src/rsa.rs
+++ /dev/null
@@ -1,372 +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.
-*/
-
-//mod big;
-//use big::BIG;
-//mod dbig;
-//use dbig::DBIG;
-//mod ff;
-use ff::FF;
-//mod big;
-//mod dbig;
-//mod rom;
-use rom;
-//mod rand;
-use rand::RAND;
-//mod hash256;
-use hash256::HASH256;
-//mod hash384;
-use hash384::HASH384;
-//mod hash512;
-use hash512::HASH512;
-
-pub const RFS:usize =(rom::MODBYTES as usize)*rom::FFLEN;
-pub const SHA256:usize=32;
-pub const SHA384:usize=48;
-pub const SHA512:usize=64;
-
-pub const HASH_TYPE:usize=SHA256;
-
-pub struct RsaPrivateKey {
-       p:FF,
-       q:FF,
-       dp:FF,
-       dq:FF,
-       c:FF
-}
-
-pub struct RsaPublicKey {
-       e: isize,
-       n: FF
-}
-
-pub fn new_private_key(n: usize) -> RsaPrivateKey {
-       RsaPrivateKey 
{p:FF::new_int(n),q:FF::new_int(n),dp:FF::new_int(n),dq:FF::new_int(n),c:FF::new_int(n)}
-}
-
-pub fn new_public_key(m: usize) -> RsaPublicKey {
-       RsaPublicKey {e:0,n:FF::new_int(m)}
-}
-
-fn hashit(sha: usize,a: Option<&[u8]>,n: isize,w: &mut [u8]) {
-       if sha==SHA256 {
-               let mut h=HASH256::new();
-               if let Some(x)=a {
-                       h.process_array(x);
-               }
-               if n>=0 {h.process_num(n as i32)}
-        let hs=h.hash();       
-        for i in 0..sha {w[i]=hs[i]}
-       }
-       if sha==SHA384 {
-               let mut h=HASH384::new();
-               if let Some(x)=a {
-                       h.process_array(x);
-               }
-               if n>=0 {h.process_num(n as i32)}
-        let hs=h.hash();       
-        for i in 0..sha {w[i]=hs[i]}
-       }
-       if sha==SHA512 {
-               let mut h=HASH512::new();
-               if let Some(x)=a {
-                       h.process_array(x);
-               }
-               if n>=0 {h.process_num(n as i32)}
-        let hs=h.hash();       
-        for i in 0..sha {w[i]=hs[i]}
-       }
-}
-
-pub fn key_pair(rng: &mut RAND,e: isize,prv: &mut RsaPrivateKey,pbc: &mut 
RsaPublicKey) { /* IEEE1363 A16.11/A16.12 more or less */
-       let n=pbc.n.getlen()/2;
-       let mut t=FF::new_int(n);
-       let mut p1=FF::new_int(n);
-       let mut q1=FF::new_int(n);
-
-       loop {
-               prv.p.random(rng);
-               while prv.p.lastbits(2)!=3 {prv.p.inc(1)}               
-               while !FF::prime(&prv.p,rng) {                  
-                       prv.p.inc(4);           
-               }
-               
-               p1.copy(&prv.p);
-               p1.dec(1);
-
-               if p1.cfactor(e) {continue}
-               break;
-       }
-
-       loop {
-               prv.q.random(rng);
-               while prv.q.lastbits(2)!=3 {prv.q.inc(1)}
-               while !FF::prime(&prv.q,rng) {
-                       prv.q.inc(4);
-               }
-                       
-               q1.copy(&prv.q);
-               q1.dec(1);
-
-               if q1.cfactor(e) {continue}
-
-               break;
-       }
-       
-       pbc.n=FF::mul(&prv.p,&prv.q);
-       pbc.e=e;
-
-       t.copy(&p1);
-       t.shr();
-       prv.dp.set(e);
-       prv.dp.invmodp(&t);
-       if prv.dp.parity()==0 {prv.dp.add(&t)}
-       prv.dp.norm();
-
-       t.copy(&q1);
-       t.shr();
-       prv.dq.set(e);
-       prv.dq.invmodp(&t);
-       if prv.dq.parity()==0 {prv.dq.add(&t)}
-       prv.dq.norm();
-
-       prv.c.copy(&prv.p);
-       prv.c.invmodp(&prv.q);
-}
-
-/* Mask Generation Function */
-
-pub fn mgf1(sha: usize,z: &[u8],olen: usize,k: &mut [u8]) {
-       let hlen=sha;
-
-       let mut j=0;
-       for i in 0..k.len() {k[i]=0}
-
-       let mut cthreshold=olen/hlen; 
-       if olen%hlen!=0 {cthreshold+=1}
-       for counter in 0..cthreshold {
-               let mut b:[u8;64]=[0;64];               
-               hashit(sha,Some(z),counter as isize,&mut b);
-
-               if j+hlen>olen {
-                       for i in 0..(olen%hlen) {k[j]=b[i]; j+=1}
-               } else {
-                       for i in 0..hlen {k[j]=b[i]; j+=1}
-               }
-       }       
-}
-
-/* SHAXXX identifier strings */
-const SHA256ID:[u8;19]= 
[0x30,0x31,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x01,0x05,0x00,0x04,0x20];
-const SHA384ID:[u8;19]= 
[0x30,0x41,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x02,0x05,0x00,0x04,0x30];
-const SHA512ID:[u8;19]= 
[0x30,0x51,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x03,0x05,0x00,0x04,0x40];
-
-pub fn pkcs15(sha: usize,m: &[u8],w: &mut [u8]) -> bool {
-       let olen=rom::FF_BITS/8;
-       let hlen=sha;
-       let idlen=19;
-       let mut b:[u8;64]=[0;64];  /* Not good */       
-
-       if olen<idlen+hlen+10 {return false}
-       hashit(sha,Some(m),-1,&mut b);
-
-       for i in 0..w.len() {w[i]=0}
-       let mut i=0;
-       w[i]=0; i+=1;
-       w[i]=1; i+=1;
-       for _ in 0..olen-idlen-hlen-3 {w[i]=0xff; i+=1}
-       w[i]=0; i+=1;
-
-       if hlen==SHA256 {
-               for j in 0..idlen {w[i]=SHA256ID[j]; i+=1}
-       }
-       if hlen==SHA384 {
-               for j in 0..idlen {w[i]=SHA384ID[j]; i+=1}
-       }
-       if hlen==SHA512 {
-               for j in 0..idlen {w[i]=SHA512ID[j]; i+=1}
-       }
-       for j in 0..hlen {w[i]=b[j]; i+=1}
-
-       return true;
-}
-
-/* OAEP Message Encoding for Encryption */
-pub fn oaep_encode(sha: usize,m: &[u8],rng: &mut RAND,p: Option<&[u8]>,f: &mut 
[u8]) -> bool { 
-       let olen=RFS-1;
-       let mlen=m.len();
-
-       let hlen=sha;
-
-       let mut seed:[u8;64]=[0;64];
-
-       let seedlen=hlen;
-       if mlen>olen-hlen-seedlen-1 {return false} 
-
-       let mut dbmask:[u8;RFS]=[0;RFS];
-
-       hashit(sha,p,-1,f);
-       let slen=olen-mlen-hlen-seedlen-1;      
-
-       for i in 0..slen {f[hlen+i]=0}
-       f[hlen+slen]=1;
-       for i in 0..mlen {f[hlen+slen+1+i]=m[i]}
-
-       for i in 0..seedlen {seed[i]=rng.getbyte()}
-       
-       mgf1(sha,&seed,olen-seedlen,&mut dbmask);
-
-       for i in 0..olen-seedlen {dbmask[i]^=f[i]}
-
-       mgf1(sha,&dbmask[0..olen-seedlen],seedlen,f);
-
-       for i in 0..seedlen {f[i]^=seed[i]}
-
-       for i in 0..olen-seedlen {f[i+seedlen]=dbmask[i]}
-
-       /* pad to length RFS */
-       let d=1;
-       for i in (d..RFS).rev() {
-               f[i]=f[i-d];
-       }
-       for i in (0..d).rev() {
-               f[i]=0;
-       }
-       return true;
-}
-
-/* OAEP Message Decoding for Decryption */
-pub fn oaep_decode(sha: usize,p: Option<&[u8]>,f: &mut [u8]) -> usize {
-       let olen=RFS-1;
-
-       let hlen=sha;
-       let mut seed:[u8;64]=[0;64];
-       let seedlen=hlen;
-       let mut chash:[u8;64]=[0;64];
-       
-       if olen<seedlen+hlen+1 {return 0}
-       let mut dbmask:[u8;RFS]=[0;RFS];
-       //for i in 0..olen-seedlen {dbmask[i]=0}
-
-       if f.len()<RFS {
-               let d=RFS-f.len();
-               for i in (d..RFS).rev() {
-                       f[i]=f[i-d];
-               }
-               for i in (0..d).rev() {
-                       f[i]=0;
-               }
-       }
-
-       hashit(sha,p,-1,&mut chash);
-
-       let x=f[0];
-
-       for i in seedlen..olen {
-               dbmask[i-seedlen]=f[i+1];
-       }
-
-       mgf1(sha,&dbmask[0..olen-seedlen],seedlen,&mut seed);
-       for i in 0..seedlen {seed[i]^=f[i+1]}
-       mgf1(sha,&seed,olen-seedlen,f);
-       for i in 0..olen-seedlen {dbmask[i]^=f[i]}
-
-       let mut comp=true;
-       for i in 0..hlen {
-               if chash[i]!=dbmask[i] {comp=false}
-       }
-
-       for i in 0..olen-seedlen-hlen {
-               dbmask[i]=dbmask[i+hlen]
-       }
-
-       for i in 0..hlen {
-               seed[i]=0; chash[i]=0
-       }
-               
-       let mut k=0;
-       loop {
-               if k>=olen-seedlen-hlen {return 0}
-               if dbmask[k]!=0 {break}
-               k+=1;
-       }
-
-       let t=dbmask[k];
-       if !comp || x!=0 || t!=0x01 {
-               for i in 0..olen-seedlen {dbmask[i]=0}
-               return 0;
-       }
-
-       for i in 0..olen-seedlen-hlen-k-1 {
-               f[i]=dbmask[i+k+1];
-       }
-       
-       for i in 0..olen-seedlen  {dbmask[i]=0}
-
-       return olen-seedlen-hlen-k-1;
-}
-
-/* destroy the Private Key structure */
-pub fn private_key_kill(prv: &mut RsaPrivateKey) {
-       prv.p.zero();
-       prv.q.zero();
-       prv.dp.zero();
-       prv.dq.zero();
-       prv.c.zero();
-}
-
-/* RSA encryption with the public key */
-pub fn encrypt(pbc: &RsaPublicKey,f: &[u8],g: &mut [u8]) {
-       let m=pbc.n.getlen();
-       let mut r=FF::new_int(m);
-
-       FF::frombytes(&mut r,f);
-       r.power(pbc.e,&pbc.n);
-       r.tobytes(g);
-}
-
-/* RSA decryption with the private key */
-pub fn decrypt(prv: &RsaPrivateKey,g: &[u8],f: &mut [u8]) {
-       let n=prv.p.getlen();
-       let mut r=FF::new_int(2*n);
-
-       FF::frombytes(&mut r,g);
-       let mut jp=r.dmod(&prv.p);
-       let mut jq=r.dmod(&prv.q);
-
-       jp.skpow(&prv.dp,&prv.p);
-       jq.skpow(&prv.dq,&prv.q);
-
-       r.zero();
-       r.dscopy(&jp);
-       jp.rmod(&prv.q);
-       if FF::comp(&jp,&jq)>0 {jq.add(&prv.q)}
-       jq.sub(&jp);
-       jq.norm();
-
-       let mut t=FF::mul(&prv.c,&jq);
-       jq=t.dmod(&prv.q);
-
-       t=FF::mul(&jq,&prv.p);
-       r.add(&t);
-       r.norm();
-
-       r.tobytes(f);
-}
-

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/rust/tests/benchtest_ec.rs
----------------------------------------------------------------------
diff --git a/version22/rust/tests/benchtest_ec.rs 
b/version22/rust/tests/benchtest_ec.rs
deleted file mode 100644
index eee1ced..0000000
--- a/version22/rust/tests/benchtest_ec.rs
+++ /dev/null
@@ -1,185 +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.
-*/
-
-extern crate amcl;
-
-use  amcl::ecdh;
-use  amcl::ecp;
-use  amcl::ecp2;
-use  amcl::fp;
-use  amcl::fp2;
-use  amcl::fp4;
-use  amcl::fp12;
-use  amcl::big;
-use  amcl::dbig;
-use  amcl::rand;
-use  amcl::hash256;
-use  amcl::hash384;
-use  amcl::hash512;
-use  amcl::aes;
-use  amcl::rom;
-use  amcl::ff;
-use  amcl::rsa;
-
-use rand::RAND;
-use ecp::ECP;
-use big::BIG;
-
-use std::time::Instant;
-
-const MIN_ITERS:isize=10;
-const MIN_TIME: isize=10;
-
-#[allow(non_snake_case)]
-#[test]
-fn benchtest_ec()
-{
-       let mut raw:[u8;100]=[0;100];   
-       let mut fail=false;
-       let mut pbc=rsa::new_public_key(rom::FFLEN);
-       let mut prv=rsa::new_private_key(rom::HFLEN);   
-       let mut c: [u8;rsa::RFS]=[0;rsa::RFS];
-       let mut m: [u8;rsa::RFS]=[0;rsa::RFS];
-       let mut p: [u8;rsa::RFS]=[0;rsa::RFS];  
-
-       let mut rng=RAND::new();
-       rng.clean();
-       for i in 0..100 {raw[i]=i as u8}
-
-       rng.seed(100,&raw);     
-
-       if rom::CURVETYPE==rom::WEIERSTRASS {
-               println!("Weierstrass parameterization");
-       }               
-       if rom::CURVETYPE==rom::EDWARDS {
-               println!("Edwards parameterization");
-       }
-       if rom::CURVETYPE==rom::MONTGOMERY {
-               println!("Montgomery parameterization");
-       }
-
-       if rom::MODTYPE==rom::PSEUDO_MERSENNE {
-               println!("Pseudo-Mersenne Modulus");
-       }
-       if rom::MODTYPE==rom::MONTGOMERY_FRIENDLY {
-               println!("Montgomery friendly Modulus");
-       }
-       if rom::MODTYPE==rom::GENERALISED_MERSENNE {
-               println!("Generalised-Mersenne Modulus");
-       }
-       if rom::MODTYPE==rom::NOT_SPECIAL {
-               println!("Not special Modulus");
-       }
-
-       println!("Modulus size {:} bits",rom::MODBITS); 
-       println!("{:} bit build",rom::CHUNK); 
-
-       let mut G:ECP;
-
-       let gx=BIG::new_ints(&rom::CURVE_GX);
-       
-       if rom::CURVETYPE!=rom::MONTGOMERY {
-               let gy=BIG::new_ints(&rom::CURVE_GY);
-               G=ECP::new_bigs(&gx,&gy);
-       } else {
-               G=ECP::new_big(&gx);
-       }
-
-       let mut r=BIG::new_ints(&rom::CURVE_ORDER);
-       let mut s=BIG::randomnum(&r,&mut rng);
-
-       let mut P=G.mul(&mut r);
-       if !P.is_infinity() {
-               println!("FAILURE - rG!=O");
-               fail=true;
-       } 
-
-       let start = Instant::now();
-       let mut iterations=0;
-       let mut dur=0 as u64;
-       while dur<(MIN_TIME as u64)*1000 || iterations<MIN_ITERS {
-               P=G.mul(&mut s);
-               iterations+=1;
-               let elapsed=start.elapsed();
-               dur=(elapsed.as_secs() * 1_000) + (elapsed.subsec_nanos() / 
1_000_000) as u64;
-       } 
-       let duration=(dur as f64)/(iterations as f64);
-       print!("EC  mul - {:} iterations  ",iterations);
-       println!(" {:0.2} ms per iteration",duration);
-
-       println!("Generating {:}-bit RSA public/private key 
pair",rom::FFLEN*rom::BIGBITS);
-
-
-       let start = Instant::now();
-       let mut iterations=0;
-       let mut dur=0 as u64;
-       while dur<(MIN_TIME as u64)*1000 || iterations<MIN_ITERS {
-               rsa::key_pair(&mut rng,65537,&mut prv,&mut pbc);
-               iterations+=1;
-               let elapsed=start.elapsed();
-               dur=(elapsed.as_secs() * 1_000) + (elapsed.subsec_nanos() / 
1_000_000) as u64;
-       } 
-       let duration=(dur as f64)/(iterations as f64);
-       print!("RSA gen - {:} iterations  ",iterations);
-       println!(" {:0.2} ms per iteration",duration);
-
-       for i in 0..rsa::RFS {m[i]=(i%128) as u8;}
-
-       let start = Instant::now();
-       let mut iterations=0;
-       let mut dur=0 as u64;
-       while dur<(MIN_TIME as u64)*1000 || iterations<MIN_ITERS {
-               rsa::encrypt(&pbc,&m,&mut c); 
-               iterations+=1;
-               let elapsed=start.elapsed();
-               dur=(elapsed.as_secs() * 1_000) + (elapsed.subsec_nanos() / 
1_000_000) as u64;
-       } 
-       let duration=(dur as f64)/(iterations as f64);
-       print!("RSA enc - {:} iterations  ",iterations);
-       println!(" {:0.2} ms per iteration",duration);
-
-       let start = Instant::now();
-       let mut iterations=0;
-       let mut dur=0 as u64;
-       while dur<(MIN_TIME as u64)*1000 || iterations<MIN_ITERS {
-               rsa::decrypt(&prv,&c,&mut p); 
-               iterations+=1;
-               let elapsed=start.elapsed();
-               dur=(elapsed.as_secs() * 1_000) + (elapsed.subsec_nanos() / 
1_000_000) as u64;
-       } 
-       let duration=(dur as f64)/(iterations as f64);
-       print!("RSA dec - {:} iterations  ",iterations);
-       println!(" {:0.2} ms per iteration",duration);
-
-       let mut cmp=true;
-       for i in 0..rsa::RFS {
-                       if p[i]!=m[i] {cmp=false;}
-               }
-
-       if !cmp {
-               println!("FAILURE - RSA decryption");
-               fail=true;
-       }
-
-       if !fail {
-               println!("All tests pass");
-       }
-
-       assert!(!fail)
-}

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/rust/tests/benchtest_pair.rs
----------------------------------------------------------------------
diff --git a/version22/rust/tests/benchtest_pair.rs 
b/version22/rust/tests/benchtest_pair.rs
deleted file mode 100644
index 67a9035..0000000
--- a/version22/rust/tests/benchtest_pair.rs
+++ /dev/null
@@ -1,245 +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.
-*/
-
-extern crate amcl;
-
-use amcl::mpin;
-use amcl::ecp;
-use amcl::ecp2;
-use amcl::fp;
-use amcl::fp2;
-use amcl::fp4;
-use amcl::fp12;
-use amcl::pair;
-use amcl::big;
-use amcl::dbig;
-use amcl::rand;
-use amcl::hash256;
-use amcl::hash384;
-use amcl::hash512;
-use amcl::aes;
-use amcl::rom;
-
-use rand::RAND;
-use ecp::ECP;
-use big::BIG;
-use ecp2::ECP2;
-use fp2::FP2;
-
-use std::time::Instant;
-
-const MIN_ITERS:isize=10;
-const MIN_TIME: isize=10;
-
-#[allow(non_snake_case)]
-#[test]
-fn benchtest_pair()
-{
-       let mut raw:[u8;100]=[0;100];   
-       let mut fail=false;
-
-       let mut rng=RAND::new();
-       rng.clean();
-       for i in 0..100 {raw[i]=i as u8}
-
-       rng.seed(100,&raw);     
-
-       if rom::CURVE_PAIRING_TYPE==rom::BN_CURVE {
-               println!("BN Pairing-Friendly Curve");
-       }
-       if rom::CURVE_PAIRING_TYPE==rom::BLS_CURVE {
-               println!("BLS Pairing-Friendly Curve");
-       }
-
-       println!("Modulus size {:} bits",rom::MODBITS); 
-       println!("{:} bit build",rom::CHUNK); 
-
-       let mut G:ECP;
-
-       let gx=BIG::new_ints(&rom::CURVE_GX);
-       
-       let gy=BIG::new_ints(&rom::CURVE_GY);
-       G=ECP::new_bigs(&gx,&gy);
-
-       let mut r=BIG::new_ints(&rom::CURVE_ORDER);
-       let mut s=BIG::randomnum(&r,&mut rng);
-
-       let mut P=pair::g1mul(&mut G,&mut r);
-
-       if !P.is_infinity() {
-               println!("FAILURE - rP!=O");
-               fail=true;
-       }
-
-       let start = Instant::now();
-       let mut iterations=0;
-       let mut dur=0 as u64;
-       while dur<(MIN_TIME as u64)*1000 || iterations<MIN_ITERS {
-               P=pair::g1mul(&mut G,&mut s);
-               iterations+=1;
-               let elapsed=start.elapsed();
-               dur=(elapsed.as_secs() * 1_000) + (elapsed.subsec_nanos() / 
1_000_000) as u64;
-       } 
-       let duration=(dur as f64)/(iterations as f64);
-       print!("G1  mul              - {:} iterations  ",iterations);
-       println!(" {:0.2} ms per iteration",duration);
-
-       let mut 
Q=ECP2::new_fp2s(&FP2::new_bigs(&BIG::new_ints(&rom::CURVE_PXA),&BIG::new_ints(&rom::CURVE_PXB)),&FP2::new_bigs(&BIG::new_ints(&rom::CURVE_PYA),&BIG::new_ints(&rom::CURVE_PYB)));
-
-       let mut W=pair::g2mul(&mut Q,&mut r);
-
-       if !W.is_infinity() {
-               println!("FAILURE - rQ!=O");
-               fail=true;
-       }
-
-       let start = Instant::now();
-       let mut iterations=0;
-       let mut dur=0 as u64;
-       while dur<(MIN_TIME as u64)*1000 || iterations<MIN_ITERS {
-               W=pair::g2mul(&mut Q,&mut s);
-               iterations+=1;
-               let elapsed=start.elapsed();
-               dur=(elapsed.as_secs() * 1_000) + (elapsed.subsec_nanos() / 
1_000_000) as u64;
-       } 
-       let duration=(dur as f64)/(iterations as f64);
-       print!("G2  mul              - {:} iterations  ",iterations);
-       println!(" {:0.2} ms per iteration",duration);
-
-       let mut w=pair::ate(&mut Q,&mut P);
-       w=pair::fexp(&w);
-
-       let mut g=pair::gtpow(&mut w,&mut r);
-
-       if !g.isunity() {
-               println!("FAILURE - g^r!=1");
-               return;
-       }
-
-       let start = Instant::now();
-       let mut iterations=0;
-       let mut dur=0 as u64;
-       while dur<(MIN_TIME as u64)*1000 || iterations<MIN_ITERS {
-               g=pair::gtpow(&mut w,&mut s);
-               iterations+=1;
-               let elapsed=start.elapsed();
-               dur=(elapsed.as_secs() * 1_000) + (elapsed.subsec_nanos() / 
1_000_000) as u64;
-       } 
-       let duration=(dur as f64)/(iterations as f64);
-       print!("GT  pow              - {:} iterations  ",iterations);
-       println!(" {:0.2} ms per iteration",duration);
-
-
-       let mut f = 
FP2::new_bigs(&BIG::new_ints(&rom::CURVE_FRA),&BIG::new_ints(&rom::CURVE_FRB));
-       let q=BIG::new_ints(&rom::MODULUS);
-
-       let mut m=BIG::new_copy(&q);
-       m.rmod(&mut r);
-
-       let mut a=BIG::new_copy(&s);
-       a.rmod(&mut m);
-
-       let mut b=BIG::new_copy(&s);
-       b.div(&mut m);
-
-       g.copy(&w);
-       let mut c=g.trace();
-
-       g.frob(&mut f);
-       let cp=g.trace();
-
-       w.conj();
-       g.mul(&mut w);
-       let cpm1=g.trace();
-       g.mul(&mut w);
-       let cpm2=g.trace();
-
-       let start = Instant::now();
-       let mut iterations=0;
-       let mut dur=0 as u64;
-       while dur<(MIN_TIME as u64)*1000 || iterations<MIN_ITERS {
-               c=c.xtr_pow2(&cp,&cpm1,&cpm2,&mut a,&mut b);
-               iterations+=1;
-               let elapsed=start.elapsed();
-               dur=(elapsed.as_secs() * 1_000) + (elapsed.subsec_nanos() / 
1_000_000) as u64;
-       } 
-       let duration=(dur as f64)/(iterations as f64);
-       print!("GT  pow (compressed) - {:} iterations  ",iterations);
-       println!(" {:0.2} ms per iteration",duration);
-
-       let start = Instant::now();
-       let mut iterations=0;
-       let mut dur=0 as u64;
-       while dur<(MIN_TIME as u64)*1000 || iterations<MIN_ITERS {
-               w=pair::ate(&mut Q,&mut P);
-               iterations+=1;
-               let elapsed=start.elapsed();
-               dur=(elapsed.as_secs() * 1_000) + (elapsed.subsec_nanos() / 
1_000_000) as u64;
-       } 
-       let duration=(dur as f64)/(iterations as f64);
-       print!("PAIRing ATE          - {:} iterations  ",iterations);
-       println!(" {:0.2} ms per iteration",duration);
-
-
-       let start = Instant::now();
-       let mut iterations=0;
-       let mut dur=0 as u64;
-       while dur<(MIN_TIME as u64)*1000 || iterations<MIN_ITERS {
-               g=pair::fexp(&w);
-               iterations+=1;
-               let elapsed=start.elapsed();
-               dur=(elapsed.as_secs() * 1_000) + (elapsed.subsec_nanos() / 
1_000_000) as u64;
-       } 
-       let duration=(dur as f64)/(iterations as f64);
-       print!("PAIRing FEXP         - {:} iterations  ",iterations);
-       println!(" {:0.2} ms per iteration",duration);
-
-       P.copy(&G);
-       Q.copy(&W);
-
-       P=pair::g1mul(&mut P,&mut s);
-       g=pair::ate(&mut Q,&mut P);
-       g=pair::fexp(&g);
-
-       P.copy(&G);
-       Q=pair::g2mul(&mut Q,&mut s);
-       w=pair::ate(&mut Q,&mut P);
-       w=pair::fexp(&w);
-
-       if !g.equals(&mut w) {
-               println!("FAILURE - e(sQ,p)!=e(Q,sP) ");
-               fail=true;
-       }
-
-       Q.copy(&W);
-       g=pair::ate(&mut Q,&mut P);
-       g=pair::fexp(&g);
-       g=pair::gtpow(&mut g,&mut s);
-
-       if !g.equals(&mut w) {
-               println!("FAILURE - e(sQ,p)!=e(Q,P)^s ");
-               fail=true;
-       }
-
-       if !fail {
-               println!("All tests pass");
-       }
-
-       assert!(!fail)
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/rust/tests/test_ecdh.rs
----------------------------------------------------------------------
diff --git a/version22/rust/tests/test_ecdh.rs 
b/version22/rust/tests/test_ecdh.rs
deleted file mode 100644
index 4623d17..0000000
--- a/version22/rust/tests/test_ecdh.rs
+++ /dev/null
@@ -1,180 +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.
-*/
-
-extern crate amcl;
-
-use amcl::ecdh;
-use amcl::ecp;
-use amcl::ecp2;
-use amcl::fp;
-use amcl::fp2;
-use amcl::fp4;
-use amcl::fp12;
-use amcl::big;
-use amcl::dbig;
-use amcl::rand;
-use amcl::hash256;
-use amcl::hash384;
-use amcl::hash512;
-use amcl::aes;
-use amcl::rom;
-use rand::RAND;
-
-pub fn printbinary(array: &[u8]) {
-       for i in 0..array.len() {
-               print!("{:02X}", array[i])
-       }
-       println!("")
-}
-
-#[test]
-fn test_ecdh()
-{
-       let pw="M0ng00se";
-       let pp:&[u8] = b"M0ng00se";
-       let sha=ecdh::HASH_TYPE;
-       let mut salt:[u8;8]=[0;8];
-       let mut raw:[u8;100]=[0;100];   
-       let mut s1:[u8;ecdh::EGS]=[0;ecdh::EGS];
-       let mut w0:[u8;2*ecdh::EFS+1]=[0;2*ecdh::EFS+1];
-       let mut w1:[u8;2*ecdh::EFS+1]=[0;2*ecdh::EFS+1];
-       let mut z0:[u8;ecdh::EFS]=[0;ecdh::EFS];
-       let mut z1:[u8;ecdh::EFS]=[0;ecdh::EFS];
-       let mut key:[u8;ecdh::EAS]=[0;ecdh::EAS];
-       let mut cs: [u8;ecdh::EGS]=[0;ecdh::EGS];
-       let mut ds: [u8;ecdh::EGS]=[0;ecdh::EGS];       
-       let mut m: Vec<u8> = vec![0;32];   // array that could be of any 
length. So use heap.
-       let mut p1: [u8;3]=[0;3];
-       let mut p2: [u8;4]=[0;4];       
-       let mut v: [u8;2*ecdh::EFS+1]=[0;2*ecdh::EFS+1];
-       let mut t: [u8;12]=[0;12];
-
-       let mut rng=RAND::new();
-       rng.clean();
-       for i in 0..100 {raw[i]=i as u8}
-
-       rng.seed(100,&raw);     
-
-       for i in 0..8 {salt[i]=(i+1) as u8}  // set Salt        
-
-       println!("Alice's Passphrase= {}",pw);
-
-       let mut s0:[u8;ecdh::EFS]=[0;ecdh::EGS];
-       ecdh::pbkdf2(sha,pp,&salt,1000,ecdh::EGS,&mut s0);
-
-       print!("Alice's private key= 0x");
-       printbinary(&s0);
-
-/* Generate Key pair S/W */
-       ecdh::key_pair_generate(None,&mut s0,&mut w0);
-
-       print!("Alice's public key= 0x");
-       printbinary(&w0);
-
-       let mut res=ecdh::public_key_validate(true,&w0);
-       if res!=0 {
-               println!("ECP Public Key is invalid!");
-               return;
-       }
-
-/* Random private key for other party */
-       ecdh::key_pair_generate(Some(&mut rng),&mut s1,&mut w1);
-
-       print!("Servers private key= 0x");
-       printbinary(&s1);
-
-       print!("Servers public key= 0x");
-       printbinary(&w1);
-
-
-       res=ecdh::public_key_validate(true,&w1);
-       if res!=0 {
-               println!("ECP Public Key is invalid!");
-               return;
-       }
-/* Calculate common key using DH - IEEE 1363 method */
-
-       ecdh::ecpsvdp_dh(&s0,&w1,&mut z0);
-       ecdh::ecpsvdp_dh(&s1,&w0,&mut z1);
-
-       let mut same=true;
-       for i in 0..ecdh::EFS {
-               if z0[i]!=z1[i] {same=false}
-       }
-
-       if !same {
-               println!("*** ECPSVDP-DH Failed");
-               return;
-       }
-
-       ecdh::kdf2(sha,&z0,None,ecdh::EAS,&mut key);
-
-       print!("Alice's DH Key=  0x"); printbinary(&key);
-       print!("Servers DH Key=  0x"); printbinary(&key);
-
-       if rom::CURVETYPE!=rom::MONTGOMERY {
-
-               for i in 0..17 {m[i]=i as u8} 
-
-               println!("Testing ECIES");
-
-               p1[0]=0x0; p1[1]=0x1; p1[2]=0x2;
-               p2[0]=0x0; p2[1]=0x1; p2[2]=0x2; p2[3]=0x3;
-
-               let cc=ecdh::ecies_encrypt(sha,&p1,&p2,&mut 
rng,&w1,&m[0..17],&mut v,&mut t);
-
-               if let Some(mut c)=cc {
-                       println!("Ciphertext= ");
-                       print!("V= 0x"); printbinary(&v);
-                       print!("C= 0x"); printbinary(&c);
-                       print!("T= 0x"); printbinary(&t);
-               
-
-                       let mm=ecdh::ecies_decrypt(sha,&p1,&p2,&v,&mut 
c,&t,&s1);
-                       if let Some(rm)=mm {
-                               println!("Decryption succeeded");
-                               println!("Message is 0x"); printbinary(&rm);    
                        
-                       }
-                       else {
-                               println!("*** ECIES Decryption Failed");
-                               return;
-                       } 
-               }
-               else {
-                       println!("*** ECIES Encryption Failed");
-                       return;
-               } 
-
-               println!("Testing ECDSA");
-
-               if ecdh::ecpsp_dsa(sha,&mut rng,&s0,&m[0..17],&mut cs,&mut 
ds)!=0 {
-                       println!("***ECDSA Signature Failed");
-                       return;
-               }
-               println!("Signature= ");
-               print!("C= 0x"); printbinary(&cs);
-               print!("D= 0x"); printbinary(&ds);
-
-               if ecdh::ecpvp_dsa(sha,&w0,&m[0..17],&cs,&ds)!=0 {
-                       println!("***ECDSA Verification Failed");
-                       return;
-               } else {println!("ECDSA Signature/Verification succeeded ")}
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/rust/tests/test_mpin.rs
----------------------------------------------------------------------
diff --git a/version22/rust/tests/test_mpin.rs 
b/version22/rust/tests/test_mpin.rs
deleted file mode 100644
index 8900254..0000000
--- a/version22/rust/tests/test_mpin.rs
+++ /dev/null
@@ -1,217 +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.
-*/
-
-use std::io;
-
-extern crate amcl;
-
-use amcl::mpin;
-use amcl::ecp;
-use amcl::ecp2;
-use amcl::fp;
-use amcl::fp2;
-use amcl::fp4;
-use amcl::fp12;
-use amcl::pair;
-use amcl::big;
-use amcl::dbig;
-use amcl::rand;
-use amcl::hash256;
-use amcl::hash384;
-use amcl::hash512;
-use amcl::aes;
-use amcl::rom;
-
-use rand::RAND;
-
-pub fn printbinary(array: &[u8]) {
-       for i in 0..array.len() {
-               print!("{:02X}", array[i])
-       }
-       println!("")
-}
-
-#[test]
-fn test_mpin()
-{
-       let mut raw:[u8;100]=[0;100];   
-       let mut s:[u8;mpin::EGS]=[0;mpin::EGS];
-       const RM:usize=rom::MODBYTES as usize;
-       let mut hcid:[u8;RM]=[0;RM];
-       let mut hsid:[u8;RM]=[0;RM];
-
-       const G1S:usize=2*mpin::EFS+1; /* Group 1 Size */
-       const G2S:usize=4*mpin::EFS; /* Group 2 Size */
-       const EAS:usize=16;
-
-       let mut sst:[u8;G2S]=[0;G2S];
-       let mut token: [u8;G1S]=[0;G1S];        
-       let mut permit:[u8;G1S]=[0;G1S];        
-       let mut g1: [u8;12*mpin::EFS]=[0;12*mpin::EFS];
-       let mut g2: [u8;12*mpin::EFS]=[0;12*mpin::EFS]; 
-       let mut xid: [u8;G1S]=[0;G1S];
-       let mut xcid: [u8;G1S]=[0;G1S]; 
-       let mut x: [u8;mpin::EGS]=[0;mpin::EGS];        
-       let mut y: [u8;mpin::EGS]=[0;mpin::EGS];
-       let mut sec: [u8;G1S]=[0;G1S];  
-       let mut r: [u8;mpin::EGS]=[0;mpin::EGS];
-       let mut z: [u8;G1S]=[0;G1S];    
-       let mut hid: [u8;G1S]=[0;G1S];
-       let mut htid: [u8;G1S]=[0;G1S];
-       let mut rhid: [u8;G1S]=[0;G1S];
-       let mut w: [u8;mpin::EGS]=[0;mpin::EGS];
-       let mut t: [u8;G1S]=[0;G1S];
-       let mut e: [u8;12*mpin::EFS]=[0;12*mpin::EFS];
-       let mut f: [u8;12*mpin::EFS]=[0;12*mpin::EFS];
-       let mut h: [u8;RM]=[0;RM];
-       let mut ck: [u8;EAS]=[0;EAS];
-       let mut sk: [u8;EAS]=[0;EAS];   
-
-
-       let sha=mpin::HASH_TYPE;
-       let mut rng=RAND::new();
-       rng.clean();
-       for i in 0..100 {raw[i]=(i+1) as u8}
-
-       rng.seed(100,&raw);     
-
-/* Trusted Authority set-up */
-
-       mpin::random_generate(&mut rng,&mut s);
-       print!("Master Secret s: 0x");  printbinary(&s);
-
-/* Create Client Identity */
-       let name= "[email protected]";
-       let client_id=name.as_bytes();
-
-       print!("Client ID= "); printbinary(&client_id); 
-
-
-       mpin::hash_id(sha,&client_id,&mut hcid);  /* Either Client or TA 
calculates Hash(ID) - you decide! */
-               
-/* Client and Server are issued secrets by DTA */
-       mpin::get_server_secret(&s,&mut sst);
-       print!("Server Secret SS: 0x");  printbinary(&sst);     
-
-       mpin::get_client_secret(&mut s,&hcid,&mut token);
-       print!("Client Secret CS: 0x"); printbinary(&token); 
-
-/* Client extracts PIN from secret to create Token */
-       let pin:i32=1234;
-       println!("Client extracts PIN= {}",pin);
-       let mut rtn=mpin::extract_pin(sha,&client_id,pin,&mut token);
-       if rtn != 0 {
-               println!("FAILURE: EXTRACT_PIN rtn: {}",rtn);
-       }
-
-       print!("Client Token TK: 0x"); printbinary(&token); 
-
-       if mpin::FULL {
-               mpin::precompute(&token,&hcid,&mut g1,&mut g2);
-       }
-
-       let mut date=0;
-       if mpin::PERMITS {
-               date=mpin::today();
-/* Client gets "Time Token" permit from DTA */ 
-               mpin::get_client_permit(sha,date,&s,&hcid,&mut permit);
-               print!("Time Permit TP: 0x");  printbinary(&permit);
-
-/* This encoding makes Time permit look random - Elligator squared */
-               mpin::encoding(&mut rng,&mut permit);
-               print!("Encoded Time Permit TP: 0x"); printbinary(&permit);
-               mpin::decoding(&mut permit);
-               print!("Decoded Time Permit TP: 0x"); printbinary(&permit);
-       }
-
-       print!("\nPIN= "); let _ =io::Write::flush(&mut io::stdout());
-    let mut input_text = String::new();
-    let _ = io::stdin().read_line(&mut input_text);
-
-    let pin=input_text.trim().parse::<usize>().unwrap();
-
-       println!("MPIN Multi Pass");
-/* Send U=x.ID to server, and recreate secret from token and pin */
-       rtn=mpin::client_1(sha,date,&client_id,Some(&mut rng),&mut 
x,pin,&token,&mut sec,Some(&mut xid[..]),Some(&mut xcid[..]),Some(&permit[..]));
-       if rtn != 0 {
-               println!("FAILURE: CLIENT_1 rtn: {}",rtn);
-       }
-  
-       if mpin::FULL {
-               mpin::hash_id(sha,&client_id,&mut hcid);
-               mpin::get_g1_multiple(Some(&mut rng),1,&mut r,&hcid,&mut z);  
/* Also Send Z=r.ID to Server, remember random r */
-       }
-  
-/* Server calculates H(ID) and H(T|H(ID)) (if time mpin::PERMITS enabled), and 
maps them to points on the curve HID and HTID resp. */
-               
-       mpin::server_1(sha,date,&client_id,&mut hid,Some(&mut htid[..]));
-
-
-    if date!=0 {rhid.clone_from_slice(&htid[..]);}
-    else {rhid.clone_from_slice(&hid[..]);}
-       
-/* Server generates Random number Y and sends it to Client */
-       mpin::random_generate(&mut rng,&mut y);
-  
-       if mpin::FULL {
-               mpin::hash_id(sha,&client_id,&mut hsid);
-               mpin::get_g1_multiple(Some(&mut rng),0,&mut w,&rhid,&mut 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,&mut sec);
-       if rtn != 0 {
-               println!("FAILURE: CLIENT_2 rtn: {}",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 */
-  
-       if !mpin::PINERROR {
-               
rtn=mpin::server_2(date,&hid,Some(&htid[..]),&y,&sst,Some(&xid[..]),Some(&xcid[..]),&sec,None,None);
-       } else {
-               
rtn=mpin::server_2(date,&hid,Some(&htid[..]),&y,&sst,Some(&xid[..]),Some(&xcid[..]),&sec,Some(&mut
 e),Some(&mut f));
-       }
-
-       if rtn == mpin::BAD_PIN {
-               println!("Server says - Bad Pin. I don't know you. Feck off.");
-               if mpin::PINERROR {
-                       let err=mpin::kangaroo(&e,&f);
-                       if err!=0 {println!("(Client PIN is out by {})",err)}
-               }
-               return;
-       } else {
-               println!("Server says - PIN is good! You really are {}",name);
-       }
-
-       if  mpin::FULL {
-
-               let mut pxcid=None;
-               if mpin::PERMITS {pxcid=Some(&xcid[..])};
-
-               mpin::hash_all(sha,&hcid,&xid,pxcid,&sec,&y,&z,&t,&mut h);      
-               mpin::client_key(sha,&g1,&g2,pin,&r,&x,&h,&t,&mut ck);
-               print!("Client Key =  0x");  printbinary(&ck);
-
-               mpin::hash_all(sha,&hsid,&xid,pxcid,&sec,&y,&z,&t,&mut h);      
                
-               mpin::server_key(sha,&z,&sst,&w,&h,&hid,&xid,pxcid,&mut sk);
-               print!("Server Key =  0x"); printbinary(&sk);
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/rust/tests/test_rsa.rs
----------------------------------------------------------------------
diff --git a/version22/rust/tests/test_rsa.rs b/version22/rust/tests/test_rsa.rs
deleted file mode 100644
index dd63b67..0000000
--- a/version22/rust/tests/test_rsa.rs
+++ /dev/null
@@ -1,109 +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.
-*/
-
-extern crate amcl;
-
-use  amcl::ff;
-use  amcl::big;
-use  amcl::dbig;
-use  amcl::rom;
-use  amcl::rand;
-use  amcl::hash256;
-use  amcl::hash384;
-use  amcl::hash512;
-use  amcl::rsa;
-
-use rand::RAND;
-
-pub fn printbinary(array: &[u8]) {
-       for i in 0..array.len() {
-               print!("{:02X}", array[i]);
-       }
-       println!("");
-} 
-
-use std::str;
-//use std::process;
-
-#[test]
-fn test_rsa()
-{
-       let sha=rsa::HASH_TYPE;
-       let message:&[u8] = b"Hello World\n";
-
-       let mut pbc=rsa::new_public_key(rom::FFLEN);
-       let mut prv=rsa::new_private_key(rom::HFLEN);
-
-       let mut ml:[u8;rsa::RFS]=[0;rsa::RFS];
-       let mut ms:[u8;rsa::RFS]=[0;rsa::RFS];  
-       let mut c: [u8;rsa::RFS]=[0;rsa::RFS];
-       let mut s: [u8;rsa::RFS]=[0;rsa::RFS];
-       let mut e: [u8;rsa::RFS]=[0;rsa::RFS];
-
-       let mut raw:[u8;100]=[0;100];
-       
-       let mut rng=RAND::new();
-
-       rng.clean();
-       for i in 0..100 {raw[i]=i as u8}
-
-       rng.seed(100,&raw);
-
-       println!("Generating public/private key pair");
-       rsa::key_pair(&mut rng,65537,&mut prv,&mut pbc);
-
-       println!("Encrypting test string\n");
-       rsa::oaep_encode(sha,&message,&mut rng,None,&mut e); /* OAEP encode 
message M to E  */
-
-       rsa::encrypt(&pbc,&e,&mut c);    /* encrypt encoded message */
-       print!("Ciphertext= 0x"); printbinary(&c);
-
-       println!("Decrypting test string");
-       rsa::decrypt(&prv,&c,&mut ml);
-       let mlen=rsa::oaep_decode(sha,None,&mut ml); /* OAEP decode message  */
-
-       let mess=str::from_utf8(&ml[0..mlen]).unwrap();
-       print!("{}",&mess);
-
-       println!("Signing message");
-       rsa::pkcs15(sha,message,&mut c); 
-
-       rsa::decrypt(&prv,&c,&mut s);  /* create signature in S */ 
-
-       print!("Signature= 0x"); printbinary(&s);
-
-       rsa::encrypt(&pbc,&s,&mut ms);
-
-       let mut cmp=true;
-       if c.len()!=ms.len() {
-               cmp=false;
-       } else {
-               for j in 0..c.len() {
-                       if c[j]!=ms[j] {cmp=false}
-               }
-       }
-       if cmp {
-               println!("Signature is valid");
-       } else {
-               println!("Signature is INVALID");
-       }
-
-       rsa::private_key_kill(&mut prv);
-}
-

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/swift/BenchtestEC.swift
----------------------------------------------------------------------
diff --git a/version22/swift/BenchtestEC.swift 
b/version22/swift/BenchtestEC.swift
deleted file mode 100644
index 126873c..0000000
--- a/version22/swift/BenchtestEC.swift
+++ /dev/null
@@ -1,161 +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.
- */
-
-//
-//  TestECDH.swift
-//
-//  Created by Michael Scott on 02/07/2015.
-//  Copyright (c) 2015 Michael Scott. All rights reserved.
-//
-
-import Foundation
-//import amcl // comment out for Xcode
-
-public func BenchtestEC()
-{
-    let pub=rsa_public_key(Int(ROM.FFLEN))
-    let priv=rsa_private_key(Int(ROM.HFLEN))
-    var C=[UInt8](repeating: 0,count: RSA.RFS)
-    var P=[UInt8](repeating: 0,count: RSA.RFS)
-    var M=[UInt8](repeating: 0,count: RSA.RFS)
-    let MIN_TIME=10.0
-    let MIN_ITERS=10
-    
-    var fail=false;
-    var RAW=[UInt8](repeating: 0,count: 100)
-    
-    let rng=RAND()
-    rng.clean();
-    for i in 0 ..< 100 {RAW[i]=UInt8(i&0xff)}
-    
-    rng.seed(100,RAW)
-    
-    if ROM.CURVETYPE==ROM.WEIERSTRASS {
-        print("Weierstrass parameterisation")
-    }
-    if ROM.CURVETYPE==ROM.EDWARDS {
-        print("Edwards parameterisation")
-    }
-    if ROM.CURVETYPE==ROM.MONTGOMERY {
-        print("Montgomery representation")
-    }
-    if ROM.MODTYPE==ROM.PSEUDO_MERSENNE {
-        print("Pseudo-Mersenne Modulus")
-    }
-    if ROM.MODTYPE==ROM.MONTGOMERY_FRIENDLY {
-        print("Montgomery Friendly Modulus")
-    }
-    if ROM.MODTYPE==ROM.GENERALISED_MERSENNE {
-        print("Generalised-Mersenne Modulus")
-    }
-    if ROM.MODTYPE==ROM.NOT_SPECIAL {
-        print("Not special Modulus")
-    }
-    print("Modulus size \(ROM.MODBITS) bits")
-    print("\(ROM.CHUNK) bit build")
-    
-    let gx=BIG(ROM.CURVE_Gx);
-    var s:BIG
-    var G:ECP
-    if ROM.CURVETYPE != ROM.MONTGOMERY
-    {
-        let gy=BIG(ROM.CURVE_Gy)
-        G=ECP(gx,gy)
-    }
-    else
-        {G=ECP(gx)}
-    
-    let r=BIG(ROM.CURVE_Order)
-    s=BIG.randomnum(r,rng)
-    
-    var W=G.mul(r)
-    if !W.is_infinity() {
-        print("FAILURE - rG!=O")
-        fail=true;
-    }
-    
-    var start=Date()
-    var iterations=0
-    var elapsed=0.0
-    while elapsed<MIN_TIME || iterations<MIN_ITERS {
-        W=G.mul(s)
-        iterations+=1
-        elapsed = -start.timeIntervalSinceNow
-    }
-    elapsed=1000.0*elapsed/Double(iterations)
-    print(String(format: "EC  mul - %d iterations",iterations),terminator: "");
-    print(String(format: " %.2f ms per iteration",elapsed))
-    
-    print("Generating \(ROM.FFLEN*ROM.BIGBITS) RSA public/private key pair")
-    
-    start=Date()
-    iterations=0
-    elapsed=0.0
-    while elapsed<MIN_TIME || iterations<MIN_ITERS {
-        RSA.KEY_PAIR(rng,65537,priv,pub)
-        iterations+=1
-        elapsed = -start.timeIntervalSinceNow
-    }
-    elapsed=1000.0*elapsed/Double(iterations)
-    print(String(format: "RSA gen - %d iterations",iterations),terminator: "");
-    print(String(format: " %.2f ms per iteration",elapsed))
-    
-    for i in 0..<RSA.RFS {M[i]=UInt8(i%128)}
-    
-    start=Date()
-    iterations=0
-    elapsed=0.0
-    while elapsed<MIN_TIME || iterations<MIN_ITERS {
-        RSA.ENCRYPT(pub,M,&C)
-        iterations+=1
-        elapsed = -start.timeIntervalSinceNow
-    }
-    elapsed=1000.0*elapsed/Double(iterations)
-    print(String(format: "RSA enc - %d iterations",iterations),terminator: "");
-    print(String(format: " %.2f ms per iteration",elapsed))
-   
-    start=Date()
-    iterations=0
-    elapsed=0.0
-    while elapsed<MIN_TIME || iterations<MIN_ITERS {
-        RSA.DECRYPT(priv,C,&P)
-        iterations+=1
-        elapsed = -start.timeIntervalSinceNow
-    }
-    elapsed=1000.0*elapsed/Double(iterations)
-    print(String(format: "RSA dec - %d iterations",iterations),terminator: "");
-    print(String(format: " %.2f ms per iteration",elapsed))
-   
-    var cmp=true
-    for i in 0..<RSA.RFS {
-        if P[i] != M[i] {cmp=false}
-    }
-    
-    if !cmp {
-        print("FAILURE - RSA decryption")
-        fail=true;
-    }
-    
-    if !fail {
-       print("All tests pass")
-    }
-}
-
-//BenchtestEC()
-

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/swift/BenchtestPAIR.swift
----------------------------------------------------------------------
diff --git a/version22/swift/BenchtestPAIR.swift 
b/version22/swift/BenchtestPAIR.swift
deleted file mode 100644
index 6b60f21..0000000
--- a/version22/swift/BenchtestPAIR.swift
+++ /dev/null
@@ -1,206 +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.
- */
-
-//
-//  TestMPIN.swift
-//
-//  Created by Michael Scott on 08/07/2015.
-//  Copyright (c) 2015 Michael Scott. All rights reserved.
-//
-
-import Foundation
-//import amcl  // comment out for Xcode
-
-public func BenchtestPAIR()
-{
-    let MIN_TIME=10.0
-    let MIN_ITERS=10
-    
-    let rng=RAND()
-    var fail=false;
-    
-    var RAW=[UInt8](repeating: 0,count: 100)
-    
-    for i in 0 ..< 100 {RAW[i]=UInt8((i+1)&0xff)}
-    rng.seed(100,RAW)
-
-    if ROM.CURVE_PAIRING_TYPE==ROM.BN_CURVE {
-        print("BN Pairing-Friendly Curve")
-    }
-    if ROM.CURVE_PAIRING_TYPE==ROM.BLS_CURVE {
-        print("BLS Pairing-Friendly Curve")
-    }
-    print("Modulus size \(ROM.MODBITS) bits")
-    print("\(ROM.CHUNK) bit build")
-    
-    let gx=BIG(ROM.CURVE_Gx);
-
-    let gy=BIG(ROM.CURVE_Gy)
-    let G=ECP(gx,gy)
-    
-    let r=BIG(ROM.CURVE_Order)
-    let s=BIG.randomnum(r,rng)
-    
-    var P=PAIR.G1mul(G,r);
-    
-    if !P.is_infinity() {
-        print("FAILURE - rP!=O")
-        fail=true
-    }
-    
-    var start=Date()
-    var iterations=0
-    var elapsed=0.0
-    while elapsed<MIN_TIME || iterations<MIN_ITERS {
-        P=PAIR.G1mul(G,s)
-        iterations+=1
-        elapsed = -start.timeIntervalSinceNow
-    }
-    elapsed=1000.0*elapsed/Double(iterations)
-    print(String(format: "G1  mul              - %d 
iterations",iterations),terminator: "");
-    print(String(format: " %.2f ms per iteration",elapsed))
-    
-    var 
Q=ECP2(FP2(BIG(ROM.CURVE_Pxa),BIG(ROM.CURVE_Pxb)),FP2(BIG(ROM.CURVE_Pya),BIG(ROM.CURVE_Pyb)))
-    
-    var W=PAIR.G2mul(Q,r)
-    
-    if !W.is_infinity() {
-        print("FAILURE - rQ!=O")
-        fail=true
-    }
-    
-    start=Date()
-    iterations=0
-    elapsed=0.0
-    while elapsed<MIN_TIME || iterations<MIN_ITERS {
-        W=PAIR.G2mul(Q,s)
-        iterations+=1
-        elapsed = -start.timeIntervalSinceNow
-    }
-    elapsed=1000.0*elapsed/Double(iterations)
-    print(String(format: "G2  mul              - %d 
iterations",iterations),terminator: "");
-    print(String(format: " %.2f ms per iteration",elapsed))
-    
-    var w=PAIR.ate(Q,P)
-    w=PAIR.fexp(w)
-    
-    var g=PAIR.GTpow(w,r)
-    
-    if !g.isunity() {
-        print("FAILURE - g^r!=1")
-        fail=true
-    }
-    
-    start=Date()
-    iterations=0
-    elapsed=0.0
-    while elapsed<MIN_TIME || iterations<MIN_ITERS {
-        g=PAIR.GTpow(w,s)
-        iterations+=1
-        elapsed = -start.timeIntervalSinceNow
-    }
-    elapsed=1000.0*elapsed/Double(iterations)
-    print(String(format: "GT  pow              - %d 
iterations",iterations),terminator: "");
-    print(String(format: " %.2f ms per iteration",elapsed))
-   
-    let f=FP2(BIG(ROM.CURVE_Fra),BIG(ROM.CURVE_Frb))
-    let q=BIG(ROM.Modulus)
-    
-    var m=BIG(q)
-    m.mod(r)
-    
-    let a=BIG(s)
-    a.mod(m)
-    
-    let b=BIG(s)
-    b.div(m)
-    
-    g.copy(w)
-    var c=g.trace()
-    
-    g.frob(f)
-    let cp=g.trace()
-    
-    w.conj()
-    g.mul(w);
-    let cpm1=g.trace()
-    
-    g.mul(w)
-    let cpm2=g.trace()
-    
-    start=Date()
-    iterations=0
-    elapsed=0.0
-    while elapsed<MIN_TIME || iterations<MIN_ITERS {
-        c=c.xtr_pow2(cp,cpm1,cpm2,a,b)
-        iterations+=1
-        elapsed = -start.timeIntervalSinceNow
-    }
-    elapsed=1000.0*elapsed/Double(iterations)
-    print(String(format: "GT  pow (compressed) - %d 
iterations",iterations),terminator: "");
-    print(String(format: " %.2f ms per iteration",elapsed))
-    
-    start=Date()
-    iterations=0
-    elapsed=0.0
-    while elapsed<MIN_TIME || iterations<MIN_ITERS {
-        w=PAIR.ate(Q,P)
-        iterations+=1
-        elapsed = -start.timeIntervalSinceNow
-    }
-    elapsed=1000.0*elapsed/Double(iterations)
-    print(String(format: "PAIRing ATE          - %d 
iterations",iterations),terminator: "");
-    print(String(format: " %.2f ms per iteration",elapsed))
-
-    start=Date()
-    iterations=0
-    elapsed=0.0
-    while elapsed<MIN_TIME || iterations<MIN_ITERS {
-        g=PAIR.fexp(w)
-        iterations+=1
-        elapsed = -start.timeIntervalSinceNow
-    }
-    elapsed=1000.0*elapsed/Double(iterations)
-    print(String(format: "PAIRing FEXP         - %d 
iterations",iterations),terminator: "");
-    print(String(format: " %.2f ms per iteration",elapsed))
- 
-    P.copy(G)
-    Q.copy(W)
-    
-    P=PAIR.G1mul(P,s)
-    g=PAIR.ate(Q,P)
-    g=PAIR.fexp(g)
-    
-    P.copy(G)
-    Q=PAIR.G2mul(Q,s)
-    w=PAIR.ate(Q,P)
-    w=PAIR.fexp(w)
-    
-    if !g.equals(w) {
-        print("FAILURE - e(sQ,P)!=e(Q,sP)")
-        fail=true
-    }
-    
-    if !fail {
-        print("All tests pass")
-    }
-}
-
-//BenchtestPAIR()
-

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/1add7560/version22/swift/TestECDH.swift
----------------------------------------------------------------------
diff --git a/version22/swift/TestECDH.swift b/version22/swift/TestECDH.swift
deleted file mode 100644
index 3302d75..0000000
--- a/version22/swift/TestECDH.swift
+++ /dev/null
@@ -1,167 +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.
-*/
-
-//
-//  TestECDH.swift
-//
-//  Created by Michael Scott on 02/07/2015.
-//  Copyright (c) 2015 Michael Scott. All rights reserved.
-//
-
-import Foundation
-//import amcl // comment out for Xcode
-
-public func TestECDH()
-{
-    let pp=String("M0ng00se");
-    
-    let EGS=ECDH.EGS
-    let EFS=ECDH.EFS
-    let EAS=16
-    let sha=ECDH.HASH_TYPE
-    
-    var S1=[UInt8](repeating: 0,count: EGS)
-    var W0=[UInt8](repeating: 0,count: 2*EFS+1)
-    var W1=[UInt8](repeating: 0,count: 2*EFS+1)
-    var Z0=[UInt8](repeating: 0,count: EFS)
-    var Z1=[UInt8](repeating: 0,count: EFS)
-    var RAW=[UInt8](repeating: 0,count: 100)
-    var SALT=[UInt8](repeating: 0,count: 8)
-    var P1=[UInt8](repeating: 0,count: 3)
-    var P2=[UInt8](repeating: 0,count: 4)
-    var V=[UInt8](repeating: 0,count: 2*EFS+1)
-    var M=[UInt8](repeating: 0,count: 17)
-    var T=[UInt8](repeating: 0,count: 12)
-    var CS=[UInt8](repeating: 0,count: EGS)
-    var DS=[UInt8](repeating: 0,count: EGS)
-    
-    let rng=RAND()
-    
-    rng.clean();
-    for i in 0 ..< 100 {RAW[i]=UInt8(i&0xff)}
-    
-    rng.seed(100,RAW)
-    
-    
-    for i in 0 ..< 8 {SALT[i]=UInt8(i+1)}  // set Salt
-    
-    print("Alice's Passphrase= " + pp!)
-    let PW=[UInt8]( (!pp).utf8)
-    
-    /* private key S0 of size EGS bytes derived from Password and Salt */
-    
-    var S0=ECDH.PBKDF2(sha,PW,SALT,1000,EGS)
-    print("Alice's private key= 0x",terminator: ""); ECDH.printBinary(S0)
-    
-    /* Generate Key pair S/W */
-    ECDH.KEY_PAIR_GENERATE(nil,&S0,&W0);
-    
-    print("Alice's public key= 0x",terminator: ""); ECDH.printBinary(W0)
-    
-    var res=ECDH.PUBLIC_KEY_VALIDATE(true,W0);
-
-    if res != 0
-    {
-        print("ECP Public Key is invalid!");
-        return;
-    }
-    
-    /* Random private key for other party */
-    ECDH.KEY_PAIR_GENERATE(rng,&S1,&W1)
-    
-    print("Servers private key= 0x",terminator: ""); ECDH.printBinary(S1)
-    
-    print("Servers public key= 0x",terminator: ""); ECDH.printBinary(W1);
-    
-    res=ECDH.PUBLIC_KEY_VALIDATE(true,W1)
-    if res != 0
-    {
-        print("ECP Public Key is invalid!")
-        return
-    }
-    
-    /* Calculate common key using DH - IEEE 1363 method */
-    
-    ECDH.ECPSVDP_DH(S0,W1,&Z0)
-    ECDH.ECPSVDP_DH(S1,W0,&Z1)
-    
-    var same=true
-    for i in 0 ..< EFS
-    {
-        if Z0[i] != Z1[i] {same=false}
-    }
-    
-    if (!same)
-    {
-        print("*** ECPSVDP-DH Failed")
-        return
-    }
-    
-    let KEY=ECDH.KDF2(sha,Z0,nil,EAS)
-    
-    print("Alice's DH Key=  0x",terminator: ""); ECDH.printBinary(KEY)
-    print("Servers DH Key=  0x",terminator: ""); ECDH.printBinary(KEY)
-
-    if ROM.CURVETYPE != ROM.MONTGOMERY
-    {
-        print("Testing ECIES")
-    
-        P1[0]=0x0; P1[1]=0x1; P1[2]=0x2
-        P2[0]=0x0; P2[1]=0x1; P2[2]=0x2; P2[3]=0x3
-    
-        for i in 0...16 {M[i]=UInt8(i&0xff)}
-    
-        let C=ECDH.ECIES_ENCRYPT(sha,P1,P2,rng,W1,M,&V,&T)
-
-        print("Ciphertext= ")
-        print("V= 0x",terminator: ""); ECDH.printBinary(V)
-        print("C= 0x",terminator: ""); ECDH.printBinary(C)
-        print("T= 0x",terminator: ""); ECDH.printBinary(T)
-
-        M=ECDH.ECIES_DECRYPT(sha,P1,P2,V,C,T,S1)
-        if M.count==0
-        {
-            print("*** ECIES Decryption Failed\n")
-            return
-        }
-        else {print("Decryption succeeded")}
-    
-        print("Message is 0x"); ECDH.printBinary(M)
-    
-        print("Testing ECDSA")
-
-        if ECDH.ECPSP_DSA(sha,rng,S0,M,&CS,&DS) != 0
-        {
-            print("***ECDSA Signature Failed")
-            return
-        }
-        print("Signature= ")
-        print("C= 0x",terminator: ""); ECDH.printBinary(CS)
-        print("D= 0x",terminator: ""); ECDH.printBinary(DS)
-    
-        if ECDH.ECPVP_DSA(sha,W0,M,CS,DS) != 0
-        {
-            print("***ECDSA Verification Failed")
-            return
-        }
-        else {print("ECDSA Signature/Verification succeeded ")}
-    }
-}
-
-//TestECDH()  // comment out for Xcode


Reply via email to