http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_curve_FP512BN.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_curve_FP512BN.c b/version3/c/rom_curve_FP512BN.c
new file mode 100644
index 0000000..fa29e20
--- /dev/null
+++ b/version3/c/rom_curve_FP512BN.c
@@ -0,0 +1,87 @@
+#include "arch.h"
+#include "ecp_FP512BN.h"
+
+/* Curve FP512BN - Pairing friendly BN curve */
+
+/* ISO curve */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+
+const int CURVE_Cof_I_FP512BN= 1;
+const int CURVE_A_FP512BN= 0;
+const int CURVE_B_I_FP512BN= 3;
+const BIG_512_29 CURVE_B_FP512BN= 
{0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const BIG_512_29 CURVE_Order_FP512BN= 
{0x119A09ED,0x153252FA,0x1E68AD01,0x627C09,0x79A34A1,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF};
+const BIG_512_29 CURVE_Gx_FP512BN= 
{0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const BIG_512_29 CURVE_Gy_FP512BN= 
{0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+
+const BIG_512_29 CURVE_Bnx_FP512BN= 
{0x1E1BD80F,0x59835DA,0xC3DFC04,0x5EB8061,0x688,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const BIG_512_29 CURVE_Cof_FP512BN= 
{0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+
+const BIG_512_29 CURVE_Cru_FP512BN= 
{0x1C79298A,0x1838B104,0x2C5F052,0x1DCCF337,0x6092AEC,0x4B35F29,0x1EB361E,0x11384EA,0x3074B20,0x17BB08FD,0x3A8B3E3,0xD70D66F,0x3D2A614,0x1CF63EE4,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF};
+
+const BIG_512_29 CURVE_Pxa_FP512BN= 
{0xDB646B5,0x183D4B70,0x1CBFFA3,0x11F0E632,0x1C78F221,0x1F10DE5D,0x171B715E,0xF0C6A29,0x10B02453,0xBE63C66,0xE6D5F69,0x166B1E1B,0x4BBBD29,0x179E750F,0x6E9D04,0xC912B10,0x1339E138,0x1D8B2};
+const BIG_512_29 CURVE_Pxb_FP512BN= 
{0x1A8AE0E9,0xDAE5F7E,0x22446CF,0x1948239B,0x15ADCE40,0xB709C1E,0x18357943,0xE50AA4D,0x19781E22,0x12B35CA6,0x11DAA2C0,0x18D8DDE4,0x5EA656D,0x15F45A41,0xD311A02,0xCFCD913,0x13CBF850,0x240E0};
+const BIG_512_29 CURVE_Pya_FP512BN= 
{0xDDE67A1,0x12401895,0x17BEE178,0x142F5AC2,0xB7BC5CD,0x92A1404,0x1A3B748C,0x17BD82A7,0x14B6CD18,0xAC34CE,0x1740FB97,0x1ECC15F9,0x17085B1D,0x1D1BA793,0x1BD6AC32,0x18F70525,0xC84C827,0x3780F};
+const BIG_512_29 CURVE_Pyb_FP512BN= 
{0x84F8E8B,0xC5B8C36,0xFDD85A1,0xB84449,0x19C08DFF,0x56BF713,0x1C5290C4,0x187C5CA0,0x1DA2897F,0x24B0CA0,0x326D8F4,0x2310CF6,0x1021438C,0xFBAEC8F,0xD9030C5,0x1CF06358,0x1CEC8B04,0x28D1D};
+const BIG_512_29 CURVE_W_FP512BN[2]= 
{{0x9834583,0x887C4BA,0x5A85CFC,0xBF7223A,0xF63FE96,0x1FFFFFFE,0x1FFFFFFF,0x1FFFFFFF,0xFFFFFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1C37B01F,0xB306BB5,0x187BF808,0xBD700C2,0xD10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}};
+const BIG_512_29 CURVE_SB_FP512BN[2][2]= 
{{{0xD4B9564,0x1D575904,0xD2C64F3,0x202177,0xF63F186,0x1FFFFFFE,0x1FFFFFFF,0x1FFFFFFF,0xFFFFFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x156259CE,0xA01E744,0x5ECB4F9,0x148B7B47,0x79A2790,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}},{{0x1C37B01F,0xB306BB5,0x187BF808,0xBD700C2,0xD10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x9834583,0x887C4BA,0x5A85CFC,0xBF7223A,0xF63FE96,0x1FFFFFFE,0x1FFFFFFF,0x1FFFFFFF,0xFFFFFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}};
+const BIG_512_29 CURVE_WB_FP512BN[4]= 
{{0x155A29F0,0x16D59B55,0xF4C305,0x18858C0B,0x5215FBF,0xAAAAAAA,0x15555555,0xAAAAAAA,0x555555,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x2355D4B,0x1758095D,0x1FE13C5F,0x41F83FA,0xBB5E5CF,0x97D4EF1,0xB503D62,0x172C0C9B,0x16315274,0x15E1A9A8,0x859835D,0x2C3DFC0,0x105EB806,0x68,0x0,0x0,0x0,0x0},{0x289AAD,0x1E781F9C,0x60F9C31,0x1505822E,0x15DAF62B,0x4BEA778,0x15A81EB1,0xB96064D,0xB18A93A,0x1AF0D4D4,0x42CC1AE,0x161EFE0,0x82F5C03,0x34,0x0,0x0,0x0,0x0},{0x192279D1,0xBA52F9F,0x878CAFD,0xCAE8B48,0x52152AF,0xAAAAAAA,0x15555555,0xAAAAAAA,0x555555,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}};
+const BIG_512_29 CURVE_BB_FP512BN[4][4]= 
{{{0x1E1BD810,0x59835DA,0xC3DFC04,0x5EB8061,0x688,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},
+        
{0x1E1BD80F,0x59835DA,0xC3DFC04,0x5EB8061,0x688,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},
+        
{0x1E1BD80F,0x59835DA,0xC3DFC04,0x5EB8061,0x688,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},
+        
{0x156259CF,0xA01E744,0x5ECB4F9,0x148B7B47,0x79A2790,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}
+    },
+    {   
{0x1C37B01F,0xB306BB5,0x187BF808,0xBD700C2,0xD10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},
+        
{0x137E31DE,0xF9A1D1F,0x122AB0FD,0x1A76FBA8,0x79A2E18,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF},
+        
{0x137E31DD,0xF9A1D1F,0x122AB0FD,0x1A76FBA8,0x79A2E18,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF},
+        
{0x137E31DE,0xF9A1D1F,0x122AB0FD,0x1A76FBA8,0x79A2E18,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}
+    },
+    {   
{0x1C37B01E,0xB306BB5,0x187BF808,0xBD700C2,0xD10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},
+        
{0x1C37B01F,0xB306BB5,0x187BF808,0xBD700C2,0xD10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},
+        
{0x1C37B01F,0xB306BB5,0x187BF808,0xBD700C2,0xD10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},
+        
{0x1C37B01F,0xB306BB5,0x187BF808,0xBD700C2,0xD10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}
+    },
+    {   
{0x137E31DF,0xF9A1D1F,0x122AB0FD,0x1A76FBA8,0x79A2E18,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF},
+        
{0x192AA9AF,0x1ED17B8E,0xD70BCF0,0x8B47A84,0x79A1A80,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF},
+        
{0x1C37B01D,0xB306BB5,0x187BF808,0xBD700C2,0xD10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},
+        
{0x137E31DF,0xF9A1D1F,0x122AB0FD,0x1A76FBA8,0x79A2E18,0x12EF5593,0x2E39231,0x3D597D3,0x45146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF}
+    }
+};
+
+
+#endif
+
+#if CHUNK==64
+
+const int CURVE_Cof_I_FP512BN= 1;
+const int CURVE_A_FP512BN= 0;
+const int CURVE_B_I_FP512BN= 3;
+const BIG_512_60 CURVE_B_FP512BN= 
{0x3L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const BIG_512_60 CURVE_Order_FP512BN= 
{0x6A64A5F519A09EDL,0x10313E04F9A2B40L,0xC65DEAB2679A34AL,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL};
+const BIG_512_60 CURVE_Gx_FP512BN= 
{0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const BIG_512_60 CURVE_Gy_FP512BN= 
{0x2L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+
+const BIG_512_60 CURVE_Bnx_FP512BN= 
{0xB306BB5E1BD80FL,0x82F5C030B0F7F01L,0x68L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const BIG_512_60 CURVE_Cof_FP512BN= 
{0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+
+const BIG_512_60 CURVE_Cru_FP512BN= 
{0xB0716209C79298AL,0xCEE6799B8B17C14L,0x78966BE526092AEL,0x20089C27507ACD8L,0xF8EF7611FA3074BL,0x6146B86B378EA2CL,0xFFFF9EC7DC83D2AL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL};
+
+const BIG_512_60 CURVE_Pxa_FP512BN= 
{0xF07A96E0DB646B5L,0x18F87319072FFE8L,0x7BE21BCBBC78F22L,0x537863514DC6DC5L,0xDA57CC78CD0B024L,0xD29B358F0DB9B57L,0x7412F3CEA1E4BBBL,0xE138648958801BAL,0x3B165339L};
+const BIG_512_60 CURVE_Pxb_FP512BN= 
{0xDB5CBEFDA8AE0E9L,0xCA411CD88911B3L,0xD6E1383D5ADCE4L,0x227285526E0D5E5L,0xB02566B94D9781EL,0x56DC6C6EF2476A8L,0x680ABE8B4825EA6L,0xF85067E6C89B4C4L,0x481C13CBL};
+const BIG_512_60 CURVE_Pya_FP512BN= 
{0x2480312ADDE67A1L,0xDA17AD615EFB85EL,0x312542808B7BC5CL,0x18BDEC153E8EDD2L,0xE5C158699D4B6CDL,0xB1DF660AFCDD03EL,0xB0CBA374F277085L,0xC827C7B8292EF5AL,0x6F01EC84L};
+const BIG_512_60 CURVE_Pyb_FP512BN= 
{0x58B7186C84F8E8BL,0xF05C2224BF76168L,0x10AD7EE279C08DFL,0x7FC3E2E50714A43L,0x3D04961941DA289L,0x38C118867B0C9B6L,0xC315F75D91F0214L,0x8B04E7831AC3640L,0x51A3BCECL};
+const BIG_512_60 CURVE_W_FP512BN[2]= 
{{0x110F89749834583L,0x65FB911D16A173FL,0xFFFFFFFFCF63FE9L,0xFFFFFFFFFFFFFFFL,0xFFFFL,0x0L,0x0L,0x0L,0x0L},{0x1660D76BC37B01FL,0x5EB806161EFE02L,0xD1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}};
+const BIG_512_60 CURVE_SB_FP512BN[2][2]= 
{{{0xFAAEB208D4B9564L,0x601010BBB4B193CL,0xFFFFFFFFCF63F18L,0xFFFFFFFFFFFFFFFL,0xFFFFL,0x0L,0x0L,0x0L,0x0L},{0x5403CE8956259CEL,0xA45BDA397B2D3EL,0xC65DEAB2679A279L,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}},{{0x1660D76BC37B01FL,0x5EB806161EFE02L,0xD1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x110F89749834583L,0x65FB911D16A173FL,0xFFFFFFFFCF63FE9L,0xFFFFFFFFFFFFFFFL,0xFFFFL,0x0L,0x0L,0x0L,0x0L}}};
+const BIG_512_60 CURVE_WB_FP512BN[4]= 
{{0x6DAB36AB55A29F0L,0xFC42C60583D30C1L,0x5555555545215FBL,0x555555555555555L,0x5555L,0x0L,0x0L,0x0L,0x0L},{0xEEB012BA2355D4BL,0xF20FC1FD7F84F17L,0x892FA9DE2BB5E5CL,0x74B96064DAD40F5L,0xD76BC3535163152L,0x806161EFE021660L,0xD105EBL,0x0L,0x0L},{0x7CF03F380289AADL,0xBA82C117183E70CL,0xC497D4EF15DAF62L,0x3A5CB0326D6A07AL,0x6BB5E1A9A8B18A9L,0xC030B0F7F010B30L,0x6882F5L,0x0L,0x0L},{0x574A5F3F92279D1L,0xF65745A421E32BFL,0x55555555452152AL,0x555555555555555L,0x5555L,0x0L,0x0L,0x0L,0x0L}};
+const BIG_512_60 CURVE_BB_FP512BN[4][4]= 
{{{0xB306BB5E1BD810L,0x82F5C030B0F7F01L,0x68L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0xB306BB5E1BD80FL,0x82F5C030B0F7F01L,0x68L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0xB306BB5E1BD80FL,0x82F5C030B0F7F01L,0x68L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x5403CE8956259CFL,0xA45BDA397B2D3EL,0xC65DEAB2679A279L,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}},{{0x1660D76BC37B01FL,0x5EB806161EFE02L,0xD1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x5F343A3F37E31DEL,0x8D3B7DD448AAC3FL,0xC65DEAB2679A2E1L,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL},{0x5F343A3F37E31DDL,0x8D3B7DD448AAC3FL,0xC65DEAB2679A2E1L,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL},{0x5F343A3F37E31DEL,0x8D3B7DD448AAC3FL,0xC65DEAB2679A2E1L,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0x
 
FFFFFFFFL}},{{0x1660D76BC37B01EL,0x5EB806161EFE02L,0xD1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x1660D76BC37B01FL,0x5EB806161EFE02L,0xD1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x1660D76BC37B01FL,0x5EB806161EFE02L,0xD1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x1660D76BC37B01FL,0x5EB806161EFE02L,0xD1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L}},{{0x5F343A3F37E31DFL,0x8D3B7DD448AAC3FL,0xC65DEAB2679A2E1L,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL},{0x3DA2F71D92AA9AFL,0x45A3D4235C2F3CL,0xC65DEAB2679A1A8L,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL},{0x1660D76BC37B01DL,0x5EB806161EFE02L,0xD1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x5F343A3F37E31DFL,0x8D3B7DD448AAC3FL,0xC65DEAB2679A2E1L,0xCF1EACBE98B8E48L,0x3C111B0EF445146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL}}};
+
+
+#endif
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_curve_GOLDILOCKS.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_curve_GOLDILOCKS.c 
b/version3/c/rom_curve_GOLDILOCKS.c
new file mode 100644
index 0000000..3b168c8
--- /dev/null
+++ b/version3/c/rom_curve_GOLDILOCKS.c
@@ -0,0 +1,37 @@
+#include "arch.h"
+#include "ecp_GOLDILOCKS.h"
+
+/* Curve GOLDILOCKS */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+
+const int CURVE_Cof_I_GOLDILOCKS= 4;
+const BIG_448_29 CURVE_Cof_GOLDILOCKS= 
{0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const int CURVE_A_GOLDILOCKS= 1;
+const int CURVE_B_I_GOLDILOCKS= -39081;
+const BIG_448_29 CURVE_B_GOLDILOCKS= 
{0x1FFF6756,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FDFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFF};
+const BIG_448_29 CURVE_Order_GOLDILOCKS= 
{0xB5844F3,0x1BC61495,0x1163D548,0x1984E51B,0x3690216,0xDA4D76B,0xFA7113B,0x1FEF9944,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FF};
+const BIG_448_29 CURVE_Gx_GOLDILOCKS= 
{0x15555555,0xAAAAAAA,0x15555555,0xAAAAAAA,0x15555555,0xAAAAAAA,0x15555555,0x152AAAAA,0xAAAAAAA,0x15555555,0xAAAAAAA,0x15555555,0xAAAAAAA,0x15555555,0xAAAAAAA,0x1555};
+const BIG_448_29 CURVE_Gy_GOLDILOCKS= 
{0xA9386ED,0x1757DE6F,0x13681AF6,0x19657DA3,0x3098BBB,0x12C19D15,0x12E03595,0xE515B18,0x17B7E36D,0x1AC426E,0xDBB5E8,0x10D8560,0x159D6205,0xB8246D9,0x17A58D2B,0x15C0};
+
+#endif
+
+#if CHUNK==64
+
+const int CURVE_Cof_I_GOLDILOCKS= 4;
+const BIG_448_58 CURVE_Cof_GOLDILOCKS= 
{0x4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const int CURVE_A_GOLDILOCKS= 1;
+const int CURVE_B_I_GOLDILOCKS= -39081;
+const BIG_448_58 CURVE_B_GOLDILOCKS= 
{0x3FFFFFFFFFF6756L,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FBFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFL};
+const BIG_448_58 CURVE_Order_GOLDILOCKS= 
{0x378C292AB5844F3L,0x3309CA37163D548L,0x1B49AED63690216L,0x3FDF3288FA7113BL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0xFFFFFFFFFFL};
+const BIG_448_58 CURVE_Gx_GOLDILOCKS= 
{0x155555555555555L,0x155555555555555L,0x155555555555555L,0x2A5555555555555L,0x2AAAAAAAAAAAAAAL,0x2AAAAAAAAAAAAAAL,0x2AAAAAAAAAAAAAAL,0x2AAAAAAAAAAL};
+const BIG_448_58 CURVE_Gy_GOLDILOCKS= 
{0x2EAFBCDEA9386EDL,0x32CAFB473681AF6L,0x25833A2A3098BBBL,0x1CA2B6312E03595L,0x35884DD7B7E36DL,0x21B0AC00DBB5E8L,0x17048DB359D6205L,0x2B817A58D2BL};
+#endif
+
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_curve_HIFIVE.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_curve_HIFIVE.c b/version3/c/rom_curve_HIFIVE.c
new file mode 100644
index 0000000..20a25e5
--- /dev/null
+++ b/version3/c/rom_curve_HIFIVE.c
@@ -0,0 +1,37 @@
+#include "arch.h"
+#include "ecp_HIFIVE.h"
+
+/* Curve HIFIVE */
+
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+
+const int CURVE_Cof_I_HIFIVE= 8;
+const BIG_336_29 CURVE_Cof_HIFIVE= 
{0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const int CURVE_A_HIFIVE= 1;
+const int CURVE_B_I_HIFIVE= 11111;
+const BIG_336_29 CURVE_B_HIFIVE= 
{0x2B67,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const BIG_336_29 CURVE_Order_HIFIVE= 
{0x1E9FA805,0x197CACB9,0x1E4EEA9E,0x17AD70F,0x1FA9850C,0x38A0A,0x0,0x0,0x0,0x0,0x0,0x4000};
+const BIG_336_29 CURVE_Gx_HIFIVE= 
{0xC,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const BIG_336_29 CURVE_Gy_HIFIVE= 
{0x5FE8632,0x15F63428,0xD976C4,0x1AACA194,0x35B6DB5,0x8E3F7A,0x52D1B0E,0xF0A7A36,0x1C161D00,0x8170C70,0x1185AD59,0x181B};
+#endif
+
+#if CHUNK==64
+
+const int CURVE_Cof_I_HIFIVE= 8;
+const BIG_336_60 CURVE_Cof_HIFIVE= {0x8L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const int CURVE_A_HIFIVE= 1;
+const int CURVE_B_I_HIFIVE= 11111;
+const BIG_336_60 CURVE_B_HIFIVE= {0x2B67L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const BIG_336_60 CURVE_Order_HIFIVE= 
{0xB2F95973E9FA805L,0xC0BD6B87F93BAA7L,0x71415FA9850L,0x0L,0x0L,0x200000000L};
+const BIG_336_60 CURVE_Gx_HIFIVE= {0xCL,0x0L,0x0L,0x0L,0x0L,0x0L};
+const BIG_336_60 CURVE_Gy_HIFIVE= 
{0x2BEC68505FE8632L,0x5D5650CA0365DB1L,0x3811C7EF435B6DBL,0x7853D1B14B46CL,0x56502E18E1C161DL,0xC0DC616BL};
+#endif
+
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_curve_NIST256.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_curve_NIST256.c b/version3/c/rom_curve_NIST256.c
new file mode 100644
index 0000000..2915b4d
--- /dev/null
+++ b/version3/c/rom_curve_NIST256.c
@@ -0,0 +1,37 @@
+#include "arch.h"
+#include "ecp_NIST256.h"
+
+/* Curve NIST256 */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+
+const int CURVE_Cof_I_NIST256= 1;
+const BIG_256_28 CURVE_Cof_NIST256= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const int CURVE_A_NIST256= -3;
+const int CURVE_B_I_NIST256= 0;
+const BIG_256_28 CURVE_B_NIST256= 
{0x7D2604B,0xCE3C3E2,0x3B0F63B,0x6B0CC5,0x6BC651D,0x5576988,0x7B3EBBD,0xAA3A93E,0xAC635D8,0x5};
+const BIG_256_28 CURVE_Order_NIST256= 
{0xC632551,0xB9CAC2F,0x79E84F3,0xFAADA71,0xFFFBCE6,0xFFFFFFF,0xFFFFFF,0x0,0xFFFFFFF,0xF};
+const BIG_256_28 CURVE_Gx_NIST256= 
{0x898C296,0xA13945D,0xB33A0F4,0x7D812DE,0xF27703,0xE563A44,0x7F8BCE6,0xE12C424,0xB17D1F2,0x6};
+const BIG_256_28 CURVE_Gy_NIST256= 
{0x7BF51F5,0xB640683,0x15ECECB,0x33576B3,0xE162BCE,0x4A7C0F9,0xB8EE7EB,0xFE1A7F9,0xFE342E2,0x4};
+
+
+#endif
+
+#if CHUNK==64
+
+const int CURVE_Cof_I_NIST256= 1;
+const BIG_256_56 CURVE_Cof_NIST256= {0x1L,0x0L,0x0L,0x0L,0x0L};
+const int CURVE_A_NIST256= -3;
+const int CURVE_B_I_NIST256= 0;
+const BIG_256_56 CURVE_B_NIST256= 
{0xCE3C3E27D2604BL,0x6B0CC53B0F63BL,0x55769886BC651DL,0xAA3A93E7B3EBBDL,0x5AC635D8L};
+const BIG_256_56 CURVE_Order_NIST256= 
{0xB9CAC2FC632551L,0xFAADA7179E84F3L,0xFFFFFFFFFFBCE6L,0xFFFFFFL,0xFFFFFFFFL};
+const BIG_256_56 CURVE_Gx_NIST256= 
{0xA13945D898C296L,0x7D812DEB33A0F4L,0xE563A440F27703L,0xE12C4247F8BCE6L,0x6B17D1F2L};
+const BIG_256_56 CURVE_Gy_NIST256= 
{0xB6406837BF51F5L,0x33576B315ECECBL,0x4A7C0F9E162BCEL,0xFE1A7F9B8EE7EBL,0x4FE342E2L};
+#endif
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_curve_NIST384.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_curve_NIST384.c b/version3/c/rom_curve_NIST384.c
new file mode 100644
index 0000000..d246ec1
--- /dev/null
+++ b/version3/c/rom_curve_NIST384.c
@@ -0,0 +1,36 @@
+#include "arch.h"
+#include "ecp_NIST384.h"
+
+/* Curve NIST384 */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+
+const int CURVE_Cof_I_NIST384= 1;
+const BIG_384_29 CURVE_Cof_NIST384= 
{0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const int CURVE_A_NIST384= -3;
+const int CURVE_B_I_NIST384= 0;
+const BIG_384_29 CURVE_B_NIST384= 
{0x13EC2AEF,0x142E476E,0xBB4674A,0xC731B14,0x1875AC65,0x447A809,0x4480C50,0xDDFD028,0x19181D9C,0x1F1FC168,0x623815A,0x47DCFC9,0x1312FA7E,0x59};
+const BIG_384_29 CURVE_Order_NIST384= 
{0xCC52973,0x760CB56,0xC29DEBB,0x141B6491,0x12DDF581,0x6C0FA1B,0x1FFF1D8D,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7F};
+const BIG_384_29 CURVE_Gx_NIST384= 
{0x12760AB7,0x12A2F1C3,0x154A5B0E,0x5E4BB7E,0x2A38550,0xF0412A,0xE6167DD,0xC5174F3,0x146E1D3B,0x1799056B,0x3AC71C7,0x1D160A6F,0x87CA22B,0x55};
+const BIG_384_29 CURVE_Gy_NIST384= 
{0x10EA0E5F,0x1218EBE4,0x1FA0675E,0x1639C3A,0xB8C00A6,0x1889DAF8,0x11F3A768,0x17A51342,0x9F8F41D,0x1C9496E1,0x1767A62F,0xC4C58DE,0x17DE4A9,0x1B};
+#endif
+
+#if CHUNK==64
+
+const int CURVE_Cof_I_NIST384= 1;
+const BIG_384_56 CURVE_Cof_NIST384= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const int CURVE_A_NIST384= -3;
+const int CURVE_B_I_NIST384= 0;
+const BIG_384_56 CURVE_B_NIST384= 
{0x85C8EDD3EC2AEFL,0x398D8A2ED19D2AL,0x8F5013875AC656L,0xFE814112031408L,0xF82D19181D9C6EL,0xE7E4988E056BE3L,0xB3312FA7E23EL};
+const BIG_384_56 CURVE_Order_NIST384= 
{0xEC196ACCC52973L,0xDB248B0A77AECL,0x81F4372DDF581AL,0xFFFFFFFFC7634DL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFL};
+const BIG_384_56 CURVE_Gx_NIST384= 
{0x545E3872760AB7L,0xF25DBF55296C3AL,0xE082542A385502L,0x8BA79B9859F741L,0x20AD746E1D3B62L,0x5378EB1C71EF3L,0xAA87CA22BE8BL};
+const BIG_384_56 CURVE_Gy_NIST384= 
{0x431D7C90EA0E5FL,0xB1CE1D7E819D7AL,0x13B5F0B8C00A60L,0x289A147CE9DA31L,0x92DC29F8F41DBDL,0x2C6F5D9E98BF92L,0x3617DE4A9626L};
+#endif
+
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_curve_NIST521.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_curve_NIST521.c b/version3/c/rom_curve_NIST521.c
new file mode 100644
index 0000000..0262632
--- /dev/null
+++ b/version3/c/rom_curve_NIST521.c
@@ -0,0 +1,35 @@
+#include "arch.h"
+#include "ecp_NIST521.h"
+
+/* Curve NIST521 */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+
+const int CURVE_Cof_I_NIST521= 1;
+const BIG_528_28 CURVE_Cof_NIST521= 
{0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const int CURVE_A_NIST521= -3;
+const int CURVE_B_I_NIST521= 0;
+const BIG_528_28 CURVE_B_NIST521= 
{0xB503F00,0x451FD46,0xC34F1EF,0xDF883D2,0xF073573,0xBD3BB1B,0xB1652C0,0xEC7E937,0x6193951,0xF109E15,0x489918E,0x15F3B8B,0x25B99B3,0xEEA2DA7,0xB68540,0x929A21A,0xE1C9A1F,0x3EB9618,0x5195};
+const BIG_528_28 CURVE_Order_NIST521= 
{0x1386409,0x6FB71E9,0xC47AEBB,0xC9B8899,0x5D03BB5,0x48F709A,0xB7FCC01,0xBF2F966,0x1868783,0xFFFFFA5,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0x1FFFF};
+const BIG_528_28 CURVE_Gx_NIST521= 
{0x2E5BD66,0x7E7E31C,0xA429BF9,0xB3C1856,0x8DE3348,0x27A2FFA,0x8FE1DC1,0xEFE7592,0x14B5E77,0x4D3DBAA,0x8AF606B,0xB521F82,0x139053F,0x429C648,0x62395B4,0x9E3ECB6,0x404E9CD,0x8E06B70,0xC685};
+const BIG_528_28 CURVE_Gy_NIST521= 
{0xFD16650,0xBE94769,0x2C24088,0x7086A27,0x761353C,0x13FAD0,0xC550B9,0x5EF4264,0x7EE7299,0x3E662C9,0xFBD1727,0x446817A,0x449579B,0xD998F54,0x42C7D1B,0x5C8A5FB,0xA3BC004,0x296A789,0x11839};
+#endif
+
+#if CHUNK==64
+
+const int CURVE_Cof_I_NIST521= 1;
+const BIG_528_60 CURVE_Cof_NIST521= 
{0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const int CURVE_A_NIST521= -3;
+const int CURVE_B_I_NIST521= 0;
+const BIG_528_60 CURVE_B_NIST521= 
{0xF451FD46B503F00L,0x73DF883D2C34F1EL,0x2C0BD3BB1BF0735L,0x3951EC7E937B165L,0x9918EF109E15619L,0x5B99B315F3B8B48L,0xB68540EEA2DA72L,0x8E1C9A1F929A21AL,0x51953EB961L};
+const BIG_528_60 CURVE_Order_NIST521= 
{0xB6FB71E91386409L,0xB5C9B8899C47AEBL,0xC0148F709A5D03BL,0x8783BF2F966B7FCL,0xFFFFFFFFFFA5186L,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0x1FFFFFFFFFFL};
+const BIG_528_60 CURVE_Gx_NIST521= 
{0x97E7E31C2E5BD66L,0x48B3C1856A429BFL,0xDC127A2FFA8DE33L,0x5E77EFE75928FE1L,0xF606B4D3DBAA14BL,0x39053FB521F828AL,0x62395B4429C6481L,0x404E9CD9E3ECB6L,0xC6858E06B7L};
+const BIG_528_60 CURVE_Gy_NIST521= 
{0x8BE94769FD16650L,0x3C7086A272C2408L,0xB9013FAD076135L,0x72995EF42640C55L,0xD17273E662C97EEL,0x49579B446817AFBL,0x42C7D1BD998F544L,0x9A3BC0045C8A5FBL,0x11839296A78L};
+#endif
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_curve_NUMS256E.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_curve_NUMS256E.c b/version3/c/rom_curve_NUMS256E.c
new file mode 100644
index 0000000..3f040ac
--- /dev/null
+++ b/version3/c/rom_curve_NUMS256E.c
@@ -0,0 +1,43 @@
+#include "arch.h"
+#include "ecp_NUMS256E.h"
+
+/*  NUMS 256-bit Curve - Edwards */
+
+#if CHUNK==16
+
+const int CURVE_Cof_I_NUMS256E= 4;
+const BIG_256_13 CURVE_Cof_NUMS256E= 
{0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const int CURVE_A_NUMS256E= 1;
+const int CURVE_B_I_NUMS256E= -15342;
+const BIG_256_13 CURVE_B_NUMS256E= 
{0x355,0x1FFE,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FF};
+const BIG_256_13 CURVE_Order_NUMS256E= 
{0xAF5,0x16EA,0x43B,0xF63,0x11A4,0x1CD,0x1D65,0x14A5,0x155A,0x20C,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80};
+const BIG_256_13 CURVE_Gx_NUMS256E= 
{0x13DA,0x1768,0x40B,0x1D81,0xA0D,0x1AC3,0xC20,0x1DC,0x198A,0x1061,0x6F5,0x1241,0x15F6,0xF1E,0x1734,0x46F,0xAEA,0x7DB,0x1D45,0x114};
+const BIG_256_13 CURVE_Gy_NUMS256E= 
{0x9E6,0xC54,0x19DE,0xC2D,0x12FA,0x1769,0x215,0x1B02,0x1F61,0x38A,0x4,0xC97,0x1D9A,0xB32,0x1F3A,0x4B8,0x19D9,0x14FE,0x154F,0x89};
+
+#endif
+
+#if CHUNK==32
+
+const int CURVE_Cof_I_NUMS256E= 4;
+const BIG_256_29 CURVE_Cof_NUMS256E= {0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const int CURVE_A_NUMS256E= 1;
+const int CURVE_B_I_NUMS256E= -15342;
+const BIG_256_29 CURVE_B_NUMS256E= 
{0x1FFFC355,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0xFFFFFF};
+const BIG_256_29 CURVE_Order_NUMS256E= 
{0xEDD4AF5,0x123D8C87,0x1650E6C6,0xAB54A5E,0x419,0x0,0x0,0x0,0x400000};
+const BIG_256_29 CURVE_Gx_NUMS256E= 
{0xEED13DA,0x6F60481,0x20D61A8,0x13141DC6,0x9BD60C3,0x1EAFB490,0xDF73478,0x1F6D5D44,0x8A7514};
+const BIG_256_29 CURVE_Gy_NUMS256E= 
{0x198A89E6,0x1D30B73B,0x15BB4CB,0x1EC3B021,0x18010715,0x12ECD325,0x171F3A59,0x13FB3B24,0x44D53E};
+
+#endif
+
+#if CHUNK==64
+
+const int CURVE_Cof_I_NUMS256E= 4;
+const BIG_256_56 CURVE_Cof_NUMS256E= {0x4L,0x0L,0x0L,0x0L,0x0L};
+const int CURVE_A_NUMS256E= 1;
+const int CURVE_B_I_NUMS256E= -15342;
+const BIG_256_56 CURVE_B_NUMS256E= 
{0xFFFFFFFFFFC355L,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFL};
+const BIG_256_56 CURVE_Order_NUMS256E= 
{0x47B190EEDD4AF5L,0x5AA52F59439B1AL,0x4195L,0x0L,0x40000000L};
+const BIG_256_56 CURVE_Gx_NUMS256E= 
{0xDEC0902EED13DAL,0x8A0EE3083586A0L,0x5F69209BD60C39L,0x6AEA237DCD1E3DL,0x8A7514FBL};
+const BIG_256_56 CURVE_Gy_NUMS256E= 
{0xA616E7798A89E6L,0x61D810856ED32FL,0xD9A64B8010715FL,0xD9D925C7CE9665L,0x44D53E9FL};
+
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_curve_NUMS256W.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_curve_NUMS256W.c b/version3/c/rom_curve_NUMS256W.c
new file mode 100644
index 0000000..941d6a5
--- /dev/null
+++ b/version3/c/rom_curve_NUMS256W.c
@@ -0,0 +1,34 @@
+#include "arch.h"
+#include "ecp_NUMS256W.h"
+
+/*  NUMS 256-bit Curve - Weierstrass */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+const int CURVE_Cof_I_NUMS256W= 1;
+const BIG_256_28 CURVE_Cof_NUMS256W= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const int CURVE_A_NUMS256W= -3;
+const int CURVE_B_I_NUMS256W= 152961;
+const BIG_256_28 CURVE_B_NUMS256W= 
{0x25581,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const BIG_256_28 CURVE_Order_NUMS256W= 
{0x751A825,0xAB20294,0x65C6020,0x8275EA2,0xFFFE43C,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xF};
+const BIG_256_28 CURVE_Gx_NUMS256W= 
{0x21AACB1,0x52EE1EB,0x4C73ABC,0x9B0903D,0xB098357,0xA04F42C,0x1297A95,0x5AAADB6,0xC9ED6B6,0xB};
+const BIG_256_28 CURVE_Gy_NUMS256W= 
{0x184DE9F,0xB5B9CB2,0x10FBB80,0xC3D1153,0x35C955,0xF77E04E,0x673448B,0x3399B6A,0x8FC0F1,0xD};
+
+#endif
+
+#if CHUNK==64
+const int CURVE_Cof_I_NUMS256W= 1;
+const BIG_256_56 CURVE_Cof_NUMS256W= {0x1L,0x0L,0x0L,0x0L,0x0L};
+const int CURVE_A_NUMS256W= -3;
+const int CURVE_B_I_NUMS256W= 152961;
+const BIG_256_56 CURVE_B_NUMS256W= {0x25581L,0x0L,0x0L,0x0L,0x0L};
+const BIG_256_56 CURVE_Order_NUMS256W= 
{0xAB20294751A825L,0x8275EA265C6020L,0xFFFFFFFFFFE43CL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFL};
+const BIG_256_56 CURVE_Gx_NUMS256W= 
{0x52EE1EB21AACB1L,0x9B0903D4C73ABCL,0xA04F42CB098357L,0x5AAADB61297A95L,0xBC9ED6B6L};
+const BIG_256_56 CURVE_Gy_NUMS256W= 
{0xB5B9CB2184DE9FL,0xC3D115310FBB80L,0xF77E04E035C955L,0x3399B6A673448BL,0xD08FC0F1L};
+
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_curve_NUMS384E.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_curve_NUMS384E.c b/version3/c/rom_curve_NUMS384E.c
new file mode 100644
index 0000000..4d9d249
--- /dev/null
+++ b/version3/c/rom_curve_NUMS384E.c
@@ -0,0 +1,34 @@
+#include "arch.h"
+#include "ecp_NUMS384E.h"
+
+/*  NUMS 384-bit Curve - Edwards */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+
+const int CURVE_Cof_I_NUMS384E= 4;
+const BIG_384_29 CURVE_Cof_NUMS384E= 
{0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const int CURVE_A_NUMS384E= 1;
+const int CURVE_B_I_NUMS384E= -11556;
+const BIG_384_29 CURVE_B_NUMS384E= 
{0x1FFFD19F,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7F};
+const BIG_384_29 CURVE_Order_NUMS384E= 
{0x6A3897D,0x5CEE627,0xD721E48,0x8AAB556,0x1E1CF61E,0xD0E5A35,0x1FFF891C,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1F};
+const BIG_384_29 CURVE_Gx_NUMS384E= 
{0xC206BDE,0x6AA0723,0x116504D4,0x52562CA,0x163406FF,0x1FD47998,0x10015D8F,0x8DCB7C9,0x15B30BF4,0x14D72AED,0x102DA884,0xB524CD9,0x1B111FB4,0x30};
+const BIG_384_29 CURVE_Gy_NUMS384E= 
{0x10729392,0xC681F0F,0x1B123727,0x561F28D,0x1964B007,0xC7BFB22,0x1D5A0C3E,0xE9E284B,0x1716AD82,0x11D886E,0x1CE2C69,0x134DDD61,0x983E67B,0x41};
+#endif
+
+#if CHUNK==64
+
+const int CURVE_Cof_I_NUMS384E= 4;
+const BIG_384_56 CURVE_Cof_NUMS384E= {0x4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const int CURVE_A_NUMS384E= 1;
+const int CURVE_B_I_NUMS384E= -11556;
+const BIG_384_56 CURVE_B_NUMS384E= 
{0xFFFFFFFFFFD19FL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFL};
+const BIG_384_56 CURVE_Order_NUMS384E= 
{0xB9DCC4E6A3897DL,0x555AAB35C87920L,0x1CB46BE1CF61E4L,0xFFFFFFFFE2471AL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0x3FFFFFFFFFFFL};
+const BIG_384_56 CURVE_Gx_NUMS384E= 
{0xD540E46C206BDEL,0x92B16545941350L,0xA8F33163406FF2L,0xE5BE4C005763FFL,0xE55DB5B30BF446L,0x266CC0B6A2129AL,0x61B111FB45A9L};
+const BIG_384_56 CURVE_Gy_NUMS384E= 
{0x8D03E1F0729392L,0xB0F946EC48DC9DL,0xF7F645964B0072L,0xF1425F56830F98L,0xB10DD716AD8274L,0xEEB08738B1A423L,0x82983E67B9A6L};
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_curve_NUMS384W.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_curve_NUMS384W.c b/version3/c/rom_curve_NUMS384W.c
new file mode 100644
index 0000000..5d04877
--- /dev/null
+++ b/version3/c/rom_curve_NUMS384W.c
@@ -0,0 +1,34 @@
+#include "arch.h"
+#include "ecp_NUMS384W.h"
+
+/*  NUMS 384-bit Curve - Weierstrass */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+
+const int CURVE_Cof_I_NUMS384W= 1;
+const BIG_384_29 CURVE_Cof_NUMS384W= 
{0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const int CURVE_A_NUMS384W= -3;
+const int CURVE_B_I_NUMS384W= -34568;
+const BIG_384_29 CURVE_B_NUMS384W= 
{0x1FFF77BB,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7F};
+const BIG_384_29 CURVE_Order_NUMS384W= 
{0x1B0E61B9,0x26C0FB3,0xDF89E98,0x153A7A98,0x16881BED,0x178F75AE,0x1FFF587A,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7F};
+const BIG_384_29 CURVE_Gx_NUMS384W= 
{0x98152A,0x1CE5D021,0x18711EFA,0x1DDA201E,0xC742522,0x148D9536,0x7D3CEF4,0x19BF703F,0x60225C1,0x12082F8D,0x12203288,0x2DE3038,0x17956F0B,0x3A};
+const BIG_384_29 CURVE_Gy_NUMS384W= 
{0x6180716,0x3A5C763,0x1D2B4997,0xD69B77F,0x837EBCD,0x1BE890D,0xE72E482,0xEFF0FEE,0x1EB00469,0x2C267B,0x15F8CF4C,0x3371C71,0xDEE368E,0x56};
+#endif
+
+#if CHUNK==64
+
+const int CURVE_Cof_I_NUMS384W= 1;
+const BIG_384_56 CURVE_Cof_NUMS384W= {0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const int CURVE_A_NUMS384W= -3;
+const int CURVE_B_I_NUMS384W= -34568;
+const BIG_384_56 CURVE_B_NUMS384W= 
{0xFFFFFFFFFF77BBL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFL};
+const BIG_384_56 CURVE_Order_NUMS384W= 
{0x4D81F67B0E61B9L,0x9D3D4C37E27A60L,0x1EEB5D6881BEDAL,0xFFFFFFFFD61EAFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFL};
+const BIG_384_56 CURVE_Gx_NUMS384W= 
{0x9CBA042098152AL,0xED100F61C47BEBL,0x1B2A6CC742522EL,0xFB81F9F4F3BD29L,0x5F1A60225C1CDL,0x181C4880CA2241L,0x757956F0B16FL};
+const BIG_384_56 CURVE_Gy_NUMS384W= 
{0x74B8EC66180716L,0xB4DBBFF4AD265CL,0x7D121A837EBCD6L,0xF87F739CB92083L,0x84CF7EB0046977L,0x8E38D7E33D3005L,0xACDEE368E19BL};
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_curve_NUMS512E.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_curve_NUMS512E.c b/version3/c/rom_curve_NUMS512E.c
new file mode 100644
index 0000000..b31b6b5
--- /dev/null
+++ b/version3/c/rom_curve_NUMS512E.c
@@ -0,0 +1,33 @@
+#include "arch.h"
+#include "ecp_NUMS512E.h"
+
+/*  NUMS 512-bit Curve - Edwards */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+const int CURVE_Cof_I_NUMS512E= 4;
+const BIG_512_29 CURVE_Cof_NUMS512E= 
{0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const int CURVE_A_NUMS512E= 1;
+const int CURVE_B_I_NUMS512E= -78296;
+const BIG_512_29 CURVE_B_NUMS512E= 
{0x1FFECBEF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF};
+const BIG_512_29 CURVE_Order_NUMS512E= 
{0x1BEED46D,0x1A3467A8,0x1BFB3FD9,0xC0AF0DB,0x86F52A4,0xC64B85B,0x6EA78FF,0xDA5F9F2,0x1FB4F063,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFF};
+const BIG_512_29 CURVE_Gx_NUMS512E= 
{0x19EC57FE,0xDCD594C,0x113C0571,0xA4A84F9,0x104AD0FE,0x4C92B44,0xC3DE2F7,0x9DDC8CE,0x74621C1,0x1139DC0A,0x9E85FAF,0x1B894704,0x1D1E79F4,0x9E29997,0x32DE223,0x16D38F43,0x116D128D,0x6FC71};
+const BIG_512_29 CURVE_Gy_NUMS512E= 
{0x1E2F5E1,0x136EF606,0x1C7407CC,0xDA71537,0xC1FD026,0x3431576,0x15898068,0x1E5D32C6,0x120CA53,0xC84F41A,0xA4ADAE5,0x104B3A45,0x76F726D,0x1512B772,0x3D5DEA0,0x194E3316,0x1FF39D49,0x3684D};
+#endif
+
+#if CHUNK==64
+
+const int CURVE_Cof_I_NUMS512E= 4;
+const BIG_512_56 CURVE_Cof_NUMS512E= 
{0x4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const int CURVE_A_NUMS512E= 1;
+const int CURVE_B_I_NUMS512E= -78296;
+const BIG_512_56 CURVE_B_NUMS512E= 
{0xFFFFFFFFFECBEFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFL};
+const BIG_512_56 CURVE_Order_NUMS512E= 
{0x468CF51BEED46DL,0x5786DEFECFF67L,0xC970B686F52A46L,0x2FCF91BA9E3FD8L,0xFFFFFFB4F0636DL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0x3FL};
+const BIG_512_56 CURVE_Gx_NUMS512E= 
{0xB9AB2999EC57FEL,0x25427CC4F015C5L,0x92568904AD0FE5L,0xEE46730F78BDC9L,0x3B81474621C14EL,0xA38227A17EBE27L,0x332FD1E79F4DC4L,0x7A18CB7888D3C5L,0x8E316D128DB69CL,0xDFL};
+const BIG_512_56 CURVE_Gy_NUMS512E= 
{0x6DDEC0C1E2F5E1L,0xD38A9BF1D01F32L,0x862AECC1FD0266L,0xE9963562601A06L,0x9E834120CA53F2L,0x9D22A92B6B9590L,0x6EE476F726D825L,0x98B0F577A82A25L,0x9BFF39D49CA71L,0x6DL};
+#endif

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_curve_NUMS512W.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_curve_NUMS512W.c b/version3/c/rom_curve_NUMS512W.c
new file mode 100644
index 0000000..f222aa7
--- /dev/null
+++ b/version3/c/rom_curve_NUMS512W.c
@@ -0,0 +1,34 @@
+#include "arch.h"
+#include "ecp_NUMS512W.h"
+
+/*  NUMS 512-bit Curve - Weierstrass */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+
+const int CURVE_Cof_I_NUMS512W= 1;
+const BIG_512_29 CURVE_Cof_NUMS512W= 
{0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const int CURVE_A_NUMS512W= -3;
+const int CURVE_B_I_NUMS512W= 121243;
+const BIG_512_29 CURVE_B_NUMS512W= 
{0x1D99B,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const BIG_512_29 CURVE_Order_NUMS512W= 
{0x433555D,0x10A9F9C8,0x1F3490F3,0xD166CC0,0xBDC63B5,0xC76CBE8,0xC6D3F09,0x1F729CF0,0x1F5B3CA4,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF};
+const BIG_512_29 CURVE_Gx_NUMS512W= 
{0xCABAE57,0x4143CAC,0x1BD778B7,0x1AC026FA,0x15831D5,0x14312AB,0x167A4DE5,0xA20ED66,0x195021A1,0x129836CF,0x1141B830,0xA03ED0A,0xCAD83BB,0x1E9DA94C,0xDC00A80,0x1527B45,0x1447141D,0x1D601};
+const BIG_512_29 CURVE_Gy_NUMS512W= 
{0x183527A6,0x1D043B01,0x1F43FA48,0x16B83C99,0x5602CF2,0x1420592D,0x17A70486,0x1B5161DD,0x14A28415,0x3DE8A78,0x3D2C983,0x17797719,0x197DBDEA,0x15D88025,0x1BBB718F,0xAD679C1,0x14CA29AD,0x4A1D2};
+#endif
+
+#if CHUNK==64
+
+const int CURVE_Cof_I_NUMS512W= 1;
+const BIG_512_56 CURVE_Cof_NUMS512W= 
{0x1L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const int CURVE_A_NUMS512W= -3;
+const int CURVE_B_I_NUMS512W= 121243;
+const BIG_512_56 CURVE_B_NUMS512W= 
{0x1D99BL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const BIG_512_56 CURVE_Order_NUMS512W= 
{0x153F390433555DL,0x8B36607CD243CEL,0xED97D0BDC63B56L,0x94E7831B4FC258L,0xFFFFFF5B3CA4FBL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFL};
+const BIG_512_56 CURVE_Gx_NUMS512W= 
{0x8287958CABAE57L,0x60137D6F5DE2DCL,0x86255615831D5DL,0x76B359E937942L,0x6D9F95021A151L,0xF6854506E0C253L,0x5298CAD83BB501L,0xDA2B7002A03D3BL,0xC03447141D0A93L,0x3AL};
+const BIG_512_56 CURVE_Gy_NUMS512W= 
{0xA08760383527A6L,0x5C1E4CFD0FE923L,0x40B25A5602CF2BL,0x8B0EEDE9C121A8L,0xD14F14A28415DAL,0xBB8C8F4B260C7BL,0x4B97DBDEABBCL,0xCE0EEEDC63EBB1L,0x3A54CA29AD56B3L,0x94L};
+#endif

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_curve_SECP256K1.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_curve_SECP256K1.c b/version3/c/rom_curve_SECP256K1.c
new file mode 100644
index 0000000..df6c3f0
--- /dev/null
+++ b/version3/c/rom_curve_SECP256K1.c
@@ -0,0 +1,39 @@
+#include "arch.h"
+#include "ecp_SECP256K1.h"
+
+/* Curve SECP256K1 */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+
+const int CURVE_Cof_I_SECP256K1= 1;
+const BIG_256_28 CURVE_Cof_SECP256K1= 
{0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const int CURVE_A_SECP256K1= 0;
+const int CURVE_B_I_SECP256K1= 7;
+const BIG_256_28 CURVE_B_SECP256K1= {0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const BIG_256_28 CURVE_Order_SECP256K1= 
{0x364141,0xD25E8CD,0x8A03BBF,0xDCE6AF4,0xFFEBAAE,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xF};
+const BIG_256_28 CURVE_Gx_SECP256K1= 
{0x6F81798,0xF2815B1,0xE28D959,0xFCDB2DC,0xB07029B,0x95CE870,0xC55A062,0xF9DCBBA,0x9BE667E,0x7};
+const BIG_256_28 CURVE_Gy_SECP256K1= 
{0xB10D4B8,0x47D08FF,0x554199C,0xB448A68,0x8A8FD17,0xFC0E110,0x55DA4FB,0x26A3C46,0x83ADA77,0x4};
+
+
+
+#endif
+
+#if CHUNK==64
+
+const int CURVE_Cof_I_SECP256K1= 1;
+const BIG_256_56 CURVE_Cof_SECP256K1= {0x1L,0x0L,0x0L,0x0L,0x0L};
+const int CURVE_A_SECP256K1= 0;
+const int CURVE_B_I_SECP256K1= 7;
+const BIG_256_56 CURVE_B_SECP256K1= {0x7L,0x0L,0x0L,0x0L,0x0L};
+const BIG_256_56 CURVE_Order_SECP256K1= 
{0xD25E8CD0364141L,0xDCE6AF48A03BBFL,0xFFFFFFFFFEBAAEL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFL};
+const BIG_256_56 CURVE_Gx_SECP256K1= 
{0xF2815B16F81798L,0xFCDB2DCE28D959L,0x95CE870B07029BL,0xF9DCBBAC55A062L,0x79BE667EL};
+const BIG_256_56 CURVE_Gy_SECP256K1= 
{0x47D08FFB10D4B8L,0xB448A68554199CL,0xFC0E1108A8FD17L,0x26A3C4655DA4FBL,0x483ADA77L};
+
+#endif
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_25519.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_25519.c b/version3/c/rom_field_25519.c
new file mode 100644
index 0000000..475a743
--- /dev/null
+++ b/version3/c/rom_field_25519.c
@@ -0,0 +1,33 @@
+#include "arch.h"
+#include "fp_25519.h"
+
+/* Curve 25519 */
+
+#if CHUNK==16
+
+// Base Bits= 13
+const BIG_256_13 Modulus_25519= 
{0x1FED,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0xFF};
+const BIG_256_13 R2modp_25519= 
{0x400,0x2D,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const chunk MConst_25519= 0x13;
+
+#endif
+
+#if CHUNK==32
+
+// Base Bits= 29
+const BIG_256_29 Modulus_25519= 
{0x1FFFFFED,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFFF};
+const BIG_256_29 R2modp_25519= {0x169000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const chunk MConst_25519= 0x13;
+
+
+#endif
+
+#if CHUNK==64
+// Base Bits= 56
+const BIG_256_56 Modulus_25519= 
{0xFFFFFFFFFFFFEDL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0x7FFFFFFFL};
+const BIG_256_56 R2modp_25519= {0xA4000000000000L,0x5L,0x0L,0x0L,0x0L};
+const chunk MConst_25519= 0x13L;
+
+
+#endif
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_256PME.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_256PME.c b/version3/c/rom_field_256PME.c
new file mode 100644
index 0000000..cf31ee1
--- /dev/null
+++ b/version3/c/rom_field_256PME.c
@@ -0,0 +1,28 @@
+#include "arch.h"
+#include "fp_256PME.h"
+
+/* NUMS 256-bit modulus */
+
+
+#if CHUNK==16
+// Base Bits= 13
+const BIG_256_13 Modulus_256PME= 
{0x1F43,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FFF,0x1FF};
+const BIG_256_13 R2modp_256PME= 
{0x900,0x45C,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const chunk MConst_256PME= 0xBD;
+#endif
+
+#if CHUNK==32
+// Base Bits= 29
+const BIG_256_29 Modulus_256PME= 
{0x1FFFFF43,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0xFFFFFF};
+const BIG_256_29 R2modp_256PME= {0x22E2400,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const chunk MConst_256PME= 0xBD;
+
+#endif
+
+#if CHUNK==64
+// Base Bits= 56
+const BIG_256_56 Modulus_256PME= 
{0xFFFFFFFFFFFF43L,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFL};
+const BIG_256_56 R2modp_256PME= {0x89000000000000L,0x8BL,0x0L,0x0L,0x0L};
+const chunk MConst_256PME= 0xBDL;
+
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_256PMW.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_256PMW.c b/version3/c/rom_field_256PMW.c
new file mode 100644
index 0000000..2775033
--- /dev/null
+++ b/version3/c/rom_field_256PMW.c
@@ -0,0 +1,26 @@
+#include "arch.h"
+#include "fp_256PMW.h"
+
+/* NUMS 256-bit modulus */
+
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 28
+const BIG_256_28 Modulus_256PMW= 
{0xFFFFF43,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xF};
+const BIG_256_28 R2modp_256PMW= 
{0x0,0x8900000,0x8B,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const chunk MConst_256PMW= 0xBD;
+#endif
+
+#if CHUNK==64
+// Base Bits= 56
+const BIG_256_56 Modulus_256PMW= 
{0xFFFFFFFFFFFF43L,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFL};
+const BIG_256_56 R2modp_256PMW= {0x89000000000000L,0x8BL,0x0L,0x0L,0x0L};
+const chunk MConst_256PMW= 0xBDL;
+
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_384PM.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_384PM.c b/version3/c/rom_field_384PM.c
new file mode 100644
index 0000000..e692b56
--- /dev/null
+++ b/version3/c/rom_field_384PM.c
@@ -0,0 +1,25 @@
+#include "arch.h"
+#include "fp_384PM.h"
+
+/* NUMS 384-bit modulus */
+
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 29
+const BIG_384_29 Modulus_384PM= 
{0x1FFFFEC3,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7F};
+const BIG_384_29 R2modp_384PM= 
{0x0,0x4448000,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const chunk MConst_384PM= 0x13D;
+#endif
+
+#if CHUNK==64
+// Base Bits= 56
+const BIG_384_56 Modulus_384PM= 
{0xFFFFFFFFFFFEC3L,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFL};
+const BIG_384_56 R2modp_384PM= {0x188890000L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const chunk MConst_384PM= 0x13DL;
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_512PM.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_512PM.c b/version3/c/rom_field_512PM.c
new file mode 100644
index 0000000..d305f50
--- /dev/null
+++ b/version3/c/rom_field_512PM.c
@@ -0,0 +1,25 @@
+#include "arch.h"
+#include "fp_512PM.h"
+
+/* NUMS 512-bit modulus */
+
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 29
+const BIG_512_29 Modulus_512PM= 
{0x1FFFFDC7,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF};
+const BIG_512_29 R2modp_512PM= 
{0xB100000,0x278,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const chunk MConst_512PM= 0x239;
+#endif
+
+#if CHUNK==64
+// Base Bits= 56
+const BIG_512_56 Modulus_512PM= 
{0xFFFFFFFFFFFDC7L,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFL};
+const BIG_512_56 R2modp_512PM= 
{0x0L,0xF0B10000000000L,0x4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const chunk MConst_512PM= 0x239L;
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_ANSSI.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_ANSSI.c b/version3/c/rom_field_ANSSI.c
new file mode 100644
index 0000000..be52634
--- /dev/null
+++ b/version3/c/rom_field_ANSSI.c
@@ -0,0 +1,25 @@
+#include "arch.h"
+#include "fp_ANSSI.h"
+
+/* ANNSI Curve */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 28
+const BIG_256_28 Modulus_ANSSI= 
{0x86E9C03,0xFCF353D,0x8CA6DE8,0xADBCABC,0x35B3961,0xE8CE424,0xF10126D,0xB3AD58,0x1FD178C,0xF};
+const BIG_256_28 R2modp_ANSSI= 
{0x288CC9C,0x18D2374,0x646BD2B,0x4929E67,0xD6F7F2D,0x220E6C1,0xABCE02E,0x751B1FD,0x7401B78,0xE};
+const chunk MConst_ANSSI= 0x64E1155;
+#endif
+
+#if CHUNK==64
+// Base Bits= 56
+const BIG_256_56 Modulus_ANSSI= 
{0xFCF353D86E9C03L,0xADBCABC8CA6DE8L,0xE8CE42435B3961L,0xB3AD58F10126DL,0xF1FD178CL};
+const BIG_256_56 R2modp_ANSSI= 
{0x18D2374288CC9CL,0x4929E67646BD2BL,0x220E6C1D6F7F2DL,0x751B1FDABCE02EL,0xE7401B78L};
+const chunk MConst_ANSSI= 0x97483A164E1155L;
+#endif
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_BLS24.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_BLS24.c b/version3/c/rom_field_BLS24.c
new file mode 100644
index 0000000..efc25e9
--- /dev/null
+++ b/version3/c/rom_field_BLS24.c
@@ -0,0 +1,32 @@
+#include "arch.h"
+#include "fp_BLS24.h"
+
+/* Curve BLS24 - Pairing friendly BLS24 curve */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 29
+// Base Bits= 29
+const BIG_480_29 Modulus_BLS24= 
{0xA06152B,0x2260B3A,0xB4C36BE,0x5FFC5D0,0xBDB6A64,0x5B78E2E,0x1C1A28CA,0x10E6441B,0x1F244061,0xB4704F0,0x141E5CCD,0x9837504,0x3F2E77E,0xD763740,0x1316EA0E,0xF0079,0x555C};
+const BIG_480_29 R2modp_BLS24= 
{0x8533EA9,0x6A02789,0x183B24DE,0x1E45ECF8,0xC8F8F37,0x10CAD209,0x4C0C4B8,0x9B1FABD,0xDEBE4C0,0xDC353F9,0x18A18E26,0x10F489BB,0x31206A5,0x19673BBF,0x6BE69F9,0xB091169,0x9CD};
+const chunk MConst_BLS24= 0x95FE7D;
+const BIG_480_29 Fra_BLS24= 
{0x1BF96F1D,0xAE53A55,0x31BFEEB,0x183FF17A,0x6237469,0x12A4F4F1,0x12101FE3,0x16E79D94,0xFF59267,0x5EB4EB4,0x78CC49F,0x274BA33,0x149184F3,0x16C6DCBA,0x1C90B694,0x10F729CE,0x4BBC};
+const BIG_480_29 Frb_BLS24= 
{0xE0CA60E,0x1740D0E4,0x83037D2,0xDBFD456,0x5B7F5FA,0x1312993D,0xA0A08E6,0x19FEA687,0xF2EADF9,0x55BB63C,0xC91982E,0x70EBAD1,0xF61628B,0x16AF5A85,0x16863379,0xF17D6AA,0x99F};
+
+#endif
+
+#if CHUNK==64
+// Base Bits= 56
+const BIG_480_56 Modulus_BLS24= 
{0x44C1674A06152BL,0xFFE2E82D30DAF8L,0x6F1C5CBDB6A642L,0x3220DF068A328BL,0xE09E1F24406187L,0xBA825079733568L,0x6E803F2E77E4C1L,0x3CCC5BA839AECL,0x555C0078L};
+const BIG_480_56 R2modp_BLS24= 
{0x6A4A1FE013DF5BL,0xE8E46D4D1BDE65L,0x1F841391F45C67L,0x9148A4516FB28L,0x4398524EDF4C88L,0x41C0E241B6DCE8L,0xE42C208C19411L,0xA7FE6FD73A7B1CL,0xFCCCA76L};
+const chunk MConst_BLS24= 0xBD5D7D8095FE7DL;
+const BIG_480_56 Fra_BLS24= 
{0x5CA74ABBF96F1DL,0x1FF8BD0C6FFBADL,0x49E9E26237469CL,0x3CECA48407F8E5L,0x69D68FF59267B7L,0x5D199E33127CBDL,0xB97549184F313AL,0x4E77242DA52D8DL,0x4BBC87B9L};
+const BIG_480_56 Frb_BLS24= 
{0xE81A1C8E0CA60EL,0xDFEA2B20C0DF4AL,0x25327A5B7F5FA6L,0xF5343A828239A6L,0x76C78F2EADF9CFL,0x5D68B24660B8ABL,0xB50AF61628B387L,0xB555A18CDE6D5EL,0x99F78BEL};
+
+
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_BLS381.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_BLS381.c b/version3/c/rom_field_BLS381.c
new file mode 100644
index 0000000..39d22e2
--- /dev/null
+++ b/version3/c/rom_field_BLS381.c
@@ -0,0 +1,30 @@
+#include "arch.h"
+#include "fp_BLS381.h"
+
+/* Curve BLS381 - Pairing friendly BLS curve */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 29
+const BIG_384_29 Modulus_BLS381= 
{0x1FFFAAAB,0xFF7FFFF,0x14FFFFEE,0x17FFFD62,0xF6241EA,0x9507B58,0xAFD9CC3,0x109E70A2,0x1764774B,0x121A5D66,0x12C6E9ED,0x12FFCD34,0x111EA3,0xD};
+const BIG_384_29 R2modp_BLS381= 
{0x15BEF7AE,0x1031CD0E,0x2DD93E8,0x9226323,0xE6E2CD2,0x11684DAA,0x1170E5DB,0x88E25B1,0x1B366399,0x1C536F47,0xD1F9CBC,0x278B67F,0x1EA66A2B,0xC};
+const chunk MConst_BLS381= 0x1FFCFFFD;
+const BIG_384_29 Fra_BLS381= 
{0x12235FB8,0x83BAF6C,0x19E04F63,0x1D4A7AC7,0xB9C4F67,0x1EBC25D,0x1D3DEC91,0x1FA797AB,0x1F0FD603,0x1016068,0x108C6FAD,0x5760CCF,0x104D3BF0,0xC};
+const BIG_384_29 Frb_BLS381= 
{0xDDC4AF3,0x7BC5093,0x1B1FB08B,0x1AB5829A,0x3C5F282,0x764B8FB,0xDBFB032,0x10F6D8F6,0x1854A147,0x1118FCFD,0x23A7A40,0xD89C065,0xFC3E2B3,0x0};
+
+#endif
+
+#if CHUNK==64
+// Base Bits= 58
+const BIG_384_58 Modulus_BLS381= 
{0x1FEFFFFFFFFAAABL,0x2FFFFAC54FFFFEEL,0x12A0F6B0F6241EAL,0x213CE144AFD9CC3L,0x2434BACD764774BL,0x25FF9A692C6E9EDL,0x1A0111EA3L};
+const BIG_384_58 R2modp_BLS381= 
{0x20639A1D5BEF7AEL,0x1244C6462DD93E8L,0x22D09B54E6E2CD2L,0x111C4B63170E5DBL,0x38A6DE8FB366399L,0x4F16CFED1F9CBCL,0x19EA66A2BL};
+const chunk MConst_BLS381= 0x1F3FFFCFFFCFFFDL;
+const BIG_384_58 Fra_BLS381= 
{0x10775ED92235FB8L,0x3A94F58F9E04F63L,0x3D784BAB9C4F67L,0x3F4F2F57D3DEC91L,0x202C0D1F0FD603L,0xAEC199F08C6FADL,0x1904D3BF0L};
+const BIG_384_58 Frb_BLS381= 
{0xF78A126DDC4AF3L,0x356B0535B1FB08BL,0xEC971F63C5F282L,0x21EDB1ECDBFB032L,0x2231F9FB854A147L,0x1B1380CA23A7A40L,0xFC3E2B3L};
+
+#endif

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_BLS383.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_BLS383.c b/version3/c/rom_field_BLS383.c
new file mode 100644
index 0000000..b197120
--- /dev/null
+++ b/version3/c/rom_field_BLS383.c
@@ -0,0 +1,30 @@
+#include "arch.h"
+#include "fp_BLS383.h"
+
+/* Curve BLS383 - Pairing friendly BLS curve */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 29
+const BIG_384_29 Modulus_BLS383= 
{0x5AAB0AB,0x11B8EB24,0x19214AF6,0x187E5314,0x124F47A8,0x1C00B4B0,0x1446B0C6,0x59E6CB4,0x4A0AD46,0xFF5494,0x81B6B71,0x956DD6B,0x16556956,0x2A};
+const BIG_384_29 R2modp_BLS383= 
{0x116907F4,0x405B700,0x1752AC11,0x67A9E7C,0x1941C581,0x1AEA38C4,0xB1E4D22,0xCE841AE,0xA0FC49B,0xB4B1F48,0x13852312,0x1B3FDCED,0x1FECE397,0x26};
+const chunk MConst_BLS383= 0x73435FD;
+const BIG_384_29 Fra_BLS383= 
{0x1311DAC1,0x296B969,0x19DCF806,0x126901FC,0xD8C8A36,0x1A2572A8,0xA1A0959,0x1A47F743,0x110E4C6C,0x1608DA97,0xCE2E7F0,0x4FED178,0xACD5BF0,0x11};
+const BIG_384_29 Frb_BLS383= 
{0x1298D5EA,0xF2231BA,0x1F4452F0,0x6155117,0x4C2BD72,0x1DB4208,0xA2CA76D,0xB567571,0x139260D9,0xAF679FC,0x1B388380,0x4580BF2,0xB880D66,0x19};
+
+#endif
+
+#if CHUNK==64
+// Base Bits= 58
+const BIG_384_58 Modulus_BLS383= 
{0x2371D6485AAB0ABL,0x30FCA6299214AF6L,0x3801696124F47A8L,0xB3CD969446B0C6L,0x1FEA9284A0AD46L,0x12ADBAD681B6B71L,0x556556956L};
+const BIG_384_58 R2modp_BLS383= 
{0x80B6E0116907F4L,0xCF53CF9752AC11L,0x35D47189941C581L,0x19D0835CB1E4D22L,0x16963E90A0FC49BL,0x367FB9DB3852312L,0x4DFECE397L};
+const chunk MConst_BLS383= 0x1BC0571073435FDL;
+const BIG_384_58 Fra_BLS383= 
{0x52D72D3311DAC1L,0x24D203F99DCF806L,0x344AE550D8C8A36L,0x348FEE86A1A0959L,0x2C11B52F10E4C6CL,0x9FDA2F0CE2E7F0L,0x22ACD5BF0L};
+const BIG_384_58 Frb_BLS383= 
{0x1E446375298D5EAL,0xC2AA22FF4452F0L,0x3B684104C2BD72L,0x16ACEAE2A2CA76DL,0x15ECF3F939260D9L,0x8B017E5B388380L,0x32B880D66L};
+
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_BLS461.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_BLS461.c b/version3/c/rom_field_BLS461.c
new file mode 100644
index 0000000..c2e561a
--- /dev/null
+++ b/version3/c/rom_field_BLS461.c
@@ -0,0 +1,31 @@
+#include "arch.h"
+#include "fp_BLS461.h"
+
+/* Curve BLS461 - Pairing friendly BLS curve */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 28
+const BIG_464_28 Modulus_BLS461= 
{0xAAAAAAB,0xAC0000A,0x54AAAAA,0x5555,0x400020,0x91557F0,0xF26AA,0xFA5C1CC,0xB42A8DF,0x7B14848,0x8BACCA4,0x6F1E32D,0x4935FBD,0x55D6941,0xD5A555A,0x5545554,0x1555};
+const BIG_464_28 R2modp_BLS461= 
{0xC9B6A33,0x2ECD087,0x3CCB2B1,0xCD461FE,0x8CB5AB2,0xC5B9635,0x5312E92,0xB659F64,0x3B596FA,0x8679006,0xA92E2B3,0x3CE05E3,0x363550F,0x7C07A8E,0x382C083,0x6347FEA,0xBD};
+const chunk MConst_BLS461= 0xFFFFFFD;
+const BIG_464_28 Fra_BLS461= 
{0xB812A3A,0x7117BF9,0x99C400F,0xC6308A5,0x5BF8A1,0x510E075,0x45FA5A6,0xCE4858D,0x770B31A,0xBC2CB04,0xE2FC61E,0xD073588,0x4366190,0x4DFEFA8,0x69E55E2,0x504B7F,0x12E4};
+const BIG_464_28 Frb_BLS461= 
{0xF298071,0x3AE8410,0xBAE6A9B,0x39D4CAF,0xFE4077E,0x404777A,0xBAF8104,0x2C13C3E,0x3D1F5C5,0xBEE7D44,0xA8B0685,0x9EAADA4,0x5CFE2C,0x7D7999,0x6BBFF78,0x50409D5,0x271};
+
+#endif
+
+#if CHUNK==64
+// Base Bits=60
+const BIG_464_60 Modulus_BLS461= 
{0xAAC0000AAAAAAABL,0x20000555554AAAAL,0x6AA91557F004000L,0xA8DFFA5C1CC00F2L,0xACCA47B14848B42L,0x935FBD6F1E32D8BL,0xD5A555A55D69414L,0x15555545554L};
+const BIG_464_60 R2modp_BLS461= 
{0x96D08774614DDA8L,0xCD45F539225D5BDL,0xD712EB760C95AB1L,0xB3B687155F30B55L,0xC4E62A05C3F5B81L,0xBA1151676CA3CD0L,0x7EDD8A958F442BEL,0x12B89DD3F91L};
+const chunk MConst_BLS461= 0xC0005FFFFFFFDL;
+const BIG_464_60 Fra_BLS461= 
{0xF7117BF9B812A3AL,0xA1C6308A599C400L,0x5A6510E07505BF8L,0xB31ACE4858D45FAL,0xFC61EBC2CB04770L,0x366190D073588E2L,0x69E55E24DFEFA84L,0x12E40504B7FL};
+const BIG_464_60 Frb_BLS461= 
{0xB3AE8410F298071L,0x7E39D4CAFBAE6A9L,0x104404777AFE407L,0xF5C52C13C3EBAF8L,0xB0685BEE7D443D1L,0x5CFE2C9EAADA4A8L,0x6BBFF7807D79990L,0x27150409D5L};
+
+
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_BLS48.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_BLS48.c b/version3/c/rom_field_BLS48.c
new file mode 100644
index 0000000..5bf4488
--- /dev/null
+++ b/version3/c/rom_field_BLS48.c
@@ -0,0 +1,32 @@
+#include "arch.h"
+#include "fp_BLS48.h"
+
+/* Curve BLS48 - Pairing friendly BLS48 curve */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+
+// Base Bits= 29
+const BIG_560_29 Modulus_BLS48= 
{0x1CF6AC0B,0x17B7307F,0x19877E7B,0x12CE0134,0x14228402,0x1BD4C386,0x1DACBB04,0x40410D0,0x25A415,0x980B53E,0xDE6E250,0x15D9AAD6,0x5DA950,0x1029B7A,0x54AB351,0x14AD90CE,0x3729047,0x1FE7E2D9,0x145F610B,0x1F};
+const BIG_560_29 R2modp_BLS48= 
{0xD59D0FA,0x12F01FD0,0xDE8FD41,0x35AAEE1,0xB937F48,0x50700E8,0x1F50EFCE,0x1019B13C,0x3470A2F,0x11094115,0xF9FB72D,0x6AD10E2,0x1CFD9F8,0x44F4785,0x2B48793,0x1148ED3,0xF609E61,0x1EE34BC7,0x1735D29E,0x0};
+const chunk MConst_BLS48= 0x9DA805D;
+const BIG_560_29 Fra_BLS48= 
{0x1325BF89,0x1311E7EC,0xCD0A56F,0x1A0FD46E,0xE83BCCA,0xCA97DD0,0x18D1D297,0x5F1E137,0x7AB9F2C,0x13FC255F,0x1C9DECEB,0x9DEF4A2,0x3C0F60B,0x1D9909E4,0x1FF27FF7,0x1DBF8208,0x89BB36C,0x40044E0,0x62E01EE,0x5};
+const BIG_560_29 Frb_BLS48= 
{0x1325BF89,0x1311E7EC,0xCD0A56F,0x1A0FD46E,0xE83BCCA,0xCA97DD0,0x18D1D297,0x5F1E137,0x7AB9F2C,0x13FC255F,0x1C9DECEB,0x9DEF4A2,0x3C0F60B,0x1D9909E4,0x1FF27FF7,0x1DBF8208,0x89BB36C,0x40044E0,0x62E01EE,0x5};
+
+#endif
+
+#if CHUNK==64
+
+// Base Bits= 58
+const BIG_560_58 Modulus_BLS48= 
{0x2F6E60FFCF6AC0BL,0x259C02699877E7BL,0x37A9870D4228402L,0x80821A1DACBB04L,0x13016A7C025A415L,0x2BB355ACDE6E250L,0x20536F405DA950L,0x295B219C54AB351L,0x3FCFC5B23729047L,0x3F45F610BL};
+const BIG_560_58 R2modp_BLS48= 
{0x25E03FA0D59D0FAL,0x6B55DC2DE8FD41L,0xA0E01D0B937F48L,0x20336279F50EFCEL,0x2212822A3470A2FL,0xD5A21C4F9FB72DL,0x89E8F0A1CFD9F8L,0x2291DA62B48793L,0x3DC6978EF609E61L,0x1735D29EL};
+const chunk MConst_BLS48= 0x21BFCBCA9DA805DL;
+const BIG_560_58 Fra_BLS48= 
{0x2623CFD9325BF89L,0x341FA8DCCD0A56FL,0x1952FBA0E83BCCAL,0xBE3C26F8D1D297L,0x27F84ABE7AB9F2CL,0x13BDE945C9DECEBL,0x3B3213C83C0F60BL,0x3B7F0411FF27FF7L,0x80089C089BB36CL,0xA62E01EEL};
+const BIG_560_58 Frb_BLS48= 
{0x2623CFD9325BF89L,0x341FA8DCCD0A56FL,0x1952FBA0E83BCCAL,0xBE3C26F8D1D297L,0x27F84ABE7AB9F2CL,0x13BDE945C9DECEBL,0x3B3213C83C0F60BL,0x3B7F0411FF27FF7L,0x80089C089BB36CL,0xA62E01EEL};
+
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_BN254.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_BN254.c b/version3/c/rom_field_BN254.c
new file mode 100644
index 0000000..c244a87
--- /dev/null
+++ b/version3/c/rom_field_BN254.c
@@ -0,0 +1,37 @@
+#include "arch.h"
+#include "fp_BN254.h"
+
+/* Curve BN254 - Pairing friendly BN curve */
+
+/* Nogami's fast curve */
+
+#if CHUNK==16
+
+// Base Bits= 13
+const BIG_256_13 Modulus_BN254= 
{0x13,0x0,0x0,0x0,0x1A70,0x9,0x0,0x0,0x100,0x309,0x2,0x0,0x1800,0x1A26,0x6E8,0x0,0x0,0x412,0x8D9,0x4A};
+const BIG_256_13 R2modp_BN254= 
{0xF32,0x239,0x14DC,0xCE8,0x928,0x11B6,0x130F,0x1183,0x56E,0x1AEE,0x124F,0xD2A,0x7F8,0x1CE6,0x1B50,0x77C,0x3A,0x1A9E,0x1EFD,0x1C};
+const chunk MConst_BN254= 0x15E5;
+const BIG_256_13 Fra_BN254= 
{0xDE9,0x1953,0x101B,0x1BCD,0xE17,0x1BE1,0x14FD,0x1249,0x974,0x1C28,0x54F,0x108D,0x150A,0x4CD,0x12D9,0xF91,0x12E,0x10C9,0xDDD,0x36};
+const BIG_256_13 Frb_BN254= 
{0x122A,0x6AC,0xFE4,0x432,0xC58,0x428,0xB02,0xDB6,0x178B,0x6E0,0x1AB2,0xF72,0x2F5,0x1559,0x140F,0x106E,0x1ED1,0x1348,0x1AFB,0x13};
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 28
+const BIG_256_28 Modulus_BN254= 
{0x13,0x0,0x13A7,0x0,0x86121,0x8000000,0x1BA344D,0x4000000,0x5236482,0x2};
+const BIG_256_28 R2modp_BN254= 
{0xF5E7E39,0x2F2A96F,0xB96F13C,0x64E8642,0xC7146,0x9926F7B,0x4DACD24,0x8321E7B,0xD127A2E,0x1};
+const chunk MConst_BN254= 0x79435E5;
+const BIG_256_28 Fra_BN254= 
{0xF2A6DE9,0x7DE6C06,0xF77C2E1,0x74924D3,0x53F8509,0x50A8469,0xCB6499B,0x212E7C8,0xB377619,0x1};
+const BIG_256_28 Frb_BN254= 
{0xD5922A,0x82193F9,0x8850C5,0x8B6DB2C,0xAC8DC17,0x2F57B96,0x503EAB2,0x1ED1837,0x9EBEE69,0x0};
+
+#endif
+
+#if CHUNK==64
+// Base Bits= 56
+const BIG_256_56 Modulus_BN254= 
{0x13L,0x13A7L,0x80000000086121L,0x40000001BA344DL,0x25236482L};
+const BIG_256_56 R2modp_BN254= 
{0x2F2A96FF5E7E39L,0x64E8642B96F13CL,0x9926F7B00C7146L,0x8321E7B4DACD24L,0x1D127A2EL};
+const chunk MConst_BN254= 0x435E50D79435E5L;
+const BIG_256_56 Fra_BN254= 
{0x7DE6C06F2A6DE9L,0x74924D3F77C2E1L,0x50A846953F8509L,0x212E7C8CB6499BL,0x1B377619L};
+const BIG_256_56 Frb_BN254= 
{0x82193F90D5922AL,0x8B6DB2C08850C5L,0x2F57B96AC8DC17L,0x1ED1837503EAB2L,0x9EBEE69L};
+#endif
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_BN254CX.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_BN254CX.c b/version3/c/rom_field_BN254CX.c
new file mode 100644
index 0000000..1209f0c
--- /dev/null
+++ b/version3/c/rom_field_BN254CX.c
@@ -0,0 +1,38 @@
+#include "arch.h"
+#include "fp_BN254CX.h"
+
+/* Curve BN254CX - Pairing friendly BN curve */
+
+/* CertiVox BN curve/field  */
+
+#if CHUNK==16
+
+// Base Bits= 13
+const BIG_256_13 Modulus_BN254CX= 
{0x15B3,0xDA,0x1BD7,0xC47,0x1BE6,0x1F70,0x24,0x1DC3,0x1FD6,0x1921,0x19B4,0x14C6,0x1647,0x1EEF,0x16C2,0x541,0x870,0x0,0x0,0x48};
+const BIG_256_13 R2modp_BN254CX= 
{0x1527,0x146B,0x12A7,0x1A60,0x1E0A,0x1382,0x2BC,0x1D3F,0xB30,0xA8,0xD19,0x11AB,0x1D40,0x1965,0xD6D,0x643,0x10FF,0x1BC7,0x1E61,0x31};
+const chunk MConst_BN254CX= 0x1E85;
+const BIG_256_13 Fra_BN254CX= 
{0xEA3,0xE40,0xCD5,0x1210,0x15BD,0x1C10,0x5CF,0x4DE,0x773,0x343,0x626,0x194E,0x18AA,0x10C5,0x12BF,0x2C,0x63A,0x17D,0x1642,0x26};
+const BIG_256_13 Frb_BN254CX= 
{0x710,0x129A,0xF01,0x1A37,0x628,0x360,0x1A55,0x18E4,0x1863,0x15DE,0x138E,0x1B78,0x1D9C,0xE29,0x403,0x515,0x236,0x1E83,0x9BD,0x21};
+
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 28
+const BIG_256_28 Modulus_BN254CX= 
{0xC1B55B3,0x6623EF5,0x93EE1BE,0xD6EE180,0x6D3243F,0x647A636,0xDB0BDDF,0x8702A0,0x4000000,0x2};
+const BIG_256_28 R2modp_BN254CX= 
{0x8A0800A,0x466A061,0x43056A3,0x2B3A225,0x9C6600,0x148515B,0x6BDF50,0xEC9EA56,0xC992E66,0x1};
+const chunk MConst_BN254CX= 0x9789E85;
+const BIG_256_28 Fra_BN254CX= 
{0x5C80EA3,0xD908335,0x3F8215B,0x7326F17,0x8986867,0x8AACA71,0x4AFE18B,0xA63A016,0x359082F,0x1};
+const BIG_256_28 Frb_BN254CX= 
{0x6534710,0x8D1BBC0,0x546C062,0x63C7269,0xE3ABBD8,0xD9CDBC4,0x900DC53,0x623628A,0xA6F7D0,0x1};
+
+#endif
+
+#if CHUNK==64
+// Base Bits= 56
+const BIG_256_56 Modulus_BN254CX= 
{0x6623EF5C1B55B3L,0xD6EE18093EE1BEL,0x647A6366D3243FL,0x8702A0DB0BDDFL,0x24000000L};
+const BIG_256_56 R2modp_BN254CX= 
{0x466A0618A0800AL,0x2B3A22543056A3L,0x148515B09C6600L,0xEC9EA5606BDF50L,0x1C992E66L};
+const chunk MConst_BN254CX= 0x4E205BF9789E85L;
+const BIG_256_56 Fra_BN254CX= 
{0xD9083355C80EA3L,0x7326F173F8215BL,0x8AACA718986867L,0xA63A0164AFE18BL,0x1359082FL};
+const BIG_256_56 Frb_BN254CX= 
{0x8D1BBC06534710L,0x63C7269546C062L,0xD9CDBC4E3ABBD8L,0x623628A900DC53L,0x10A6F7D0L};
+#endif
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_BRAINPOOL.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_BRAINPOOL.c b/version3/c/rom_field_BRAINPOOL.c
new file mode 100644
index 0000000..bc73330
--- /dev/null
+++ b/version3/c/rom_field_BRAINPOOL.c
@@ -0,0 +1,25 @@
+#include "arch.h"
+#include "fp_BRAINPOOL.h"
+
+/* Brainpool Modulus  */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 28
+const BIG_256_28 Modulus_BRAINPOOL= 
{0xF6E5377,0x13481D1,0x6202820,0xF623D52,0xD726E3B,0x909D838,0xC3E660A,0xA1EEA9B,0x9FB57DB,0xA};
+const BIG_256_28 R2modp_BRAINPOOL= 
{0xB9A3787,0x9E04F49,0x8F3CF49,0x2931721,0xF1DBC89,0x54E8C3C,0xF7559CA,0xBB411A3,0x773E15F,0x9};
+const chunk MConst_BRAINPOOL= 0xEFD89B9;
+#endif
+
+#if CHUNK==64
+// Base Bits= 56
+const BIG_256_56 Modulus_BRAINPOOL= 
{0x13481D1F6E5377L,0xF623D526202820L,0x909D838D726E3BL,0xA1EEA9BC3E660AL,0xA9FB57DBL};
+const BIG_256_56 R2modp_BRAINPOOL= 
{0x9E04F49B9A3787L,0x29317218F3CF49L,0x54E8C3CF1DBC89L,0xBB411A3F7559CAL,0x9773E15FL};
+const chunk MConst_BRAINPOOL= 0xA75590CEFD89B9L;
+#endif
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_C41417.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_C41417.c b/version3/c/rom_field_C41417.c
new file mode 100644
index 0000000..e28f42c
--- /dev/null
+++ b/version3/c/rom_field_C41417.c
@@ -0,0 +1,25 @@
+#include "arch.h"
+#include "fp_C41417.h"
+
+/* Curve C41417 */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 29
+const BIG_416_29 Modulus_C41417= 
{0x1FFFFFEF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0xFF};
+const BIG_416_29 R2modp_C41417= 
{0x0,0x242000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const chunk MConst_C41417= 0x11;
+#endif
+
+#if CHUNK==64
+// Base Bits= 60
+const BIG_416_60 Modulus_C41417= 
{0xFFFFFFFFFFFFFEFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFL};
+const BIG_416_60 R2modp_C41417= {0x121000L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const chunk MConst_C41417= 0x11L;
+#endif
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_FP256BN.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_FP256BN.c b/version3/c/rom_field_FP256BN.c
new file mode 100644
index 0000000..8174955
--- /dev/null
+++ b/version3/c/rom_field_FP256BN.c
@@ -0,0 +1,36 @@
+#include "arch.h"
+#include "fp_FP256BN.h"
+
+/* Curve FP256BN - Pairing friendly BN curve */
+
+/* ISO fast curve */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 28
+
+const BIG_256_28 Modulus_FP256BN= 
{0xED33013,0x292DDBA,0x80A82D3,0x65FB129,0x49F0CDC,0x5EEE71A,0xD46E5F2,0xFFFCF0C,0xFFFFFFF,0xF};
+const BIG_256_28 R2modp_FP256BN= 
{0x3B9F8B,0xEDE3363,0xFEC54E8,0x92FFEE9,0x3C55F79,0x13C1C06,0xC0123FA,0xA12F2EA,0xE559B2A,0x8};
+const chunk MConst_FP256BN= 0x537E5E5;
+const BIG_256_28 Fra_FP256BN= 
{0xF943106,0x760328A,0xAB28F74,0x71511E3,0x7CF39A1,0x8DDB086,0x52D1A6E,0xCA786F3,0xD617662,0x3};
+const BIG_256_28 Frb_FP256BN= 
{0xF3EFF0D,0xB32AB2F,0xD57F35E,0xF4A9F45,0xCCFD33A,0xD113693,0x819CB83,0x3584819,0x29E899D,0xC};
+
+
+#endif
+
+#if CHUNK==64
+// Base Bits= 56
+const BIG_256_56 Modulus_FP256BN= 
{0x292DDBAED33013L,0x65FB12980A82D3L,0x5EEE71A49F0CDCL,0xFFFCF0CD46E5F2L,0xFFFFFFFFL};
+const BIG_256_56 R2modp_FP256BN= 
{0xEDE336303B9F8BL,0x92FFEE9FEC54E8L,0x13C1C063C55F79L,0xA12F2EAC0123FAL,0x8E559B2AL};
+const chunk MConst_FP256BN= 0x6C964E0537E5E5L;
+const BIG_256_56 Fra_FP256BN= 
{0x760328AF943106L,0x71511E3AB28F74L,0x8DDB0867CF39A1L,0xCA786F352D1A6EL,0x3D617662L};
+const BIG_256_56 Frb_FP256BN= 
{0xB32AB2FF3EFF0DL,0xF4A9F45D57F35EL,0xD113693CCFD33AL,0x3584819819CB83L,0xC29E899DL};
+
+
+#endif
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_FP512BN.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_FP512BN.c b/version3/c/rom_field_FP512BN.c
new file mode 100644
index 0000000..e88f66a
--- /dev/null
+++ b/version3/c/rom_field_FP512BN.c
@@ -0,0 +1,38 @@
+#include "arch.h"
+#include "fp_FP512BN.h"
+
+/* Curve FP512BN - Pairing friendly BN curve */
+
+/* ISO fast curve */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 29
+
+const BIG_512_29 Modulus_FP512BN= 
{0x2ADEF33,0x7594049,0x131919ED,0x14AB9CBE,0x16FE1916,0x12EF5591,0x2E39231,0x3D597D3,0x55146CF,0x88D877A,0x102EF8F0,0x1196A60F,0x1C60BA1D,0x1CF63F80,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7FFFF};
+const BIG_512_29 R2modp_FP512BN= 
{0xFD68B47,0xFCF5D2C,0x437675A,0x1BBC3FBF,0x1411E413,0x13453559,0x10B5639,0x1C34CE79,0x6D476BF,0xFD05F2B,0x15D17C28,0x6C9F76E,0x1C2375B3,0x78CCE9B,0x15F0AB33,0x1960F32E,0x1A8D44E,0x57A38};
+const chunk MConst_FP512BN= 0x1CCC5C05;
+const BIG_512_29 Fra_FP512BN= 
{0x14B73AB2,0x4B0BD8F,0xABB47D,0x2A29EC4,0x18681E17,0x104069DE,0x12EED67D,0x1553D0A5,0x398E9F8,0x7971034,0xAC9AF23,0x52DEF23,0x14EA18A5,0x1463E345,0x6DE465A,0x17F212B4,0x1AA9CF5B,0xF7B8};
+const BIG_512_29 Frb_FP512BN= 
{0xDF6B481,0x2A882B9,0x126D6570,0x1208FDFA,0x1E95FAFF,0x2AEEBB2,0xFF4BBB4,0xE81C72D,0x1B85CD6,0xF67746,0x56549CD,0xC68B6EC,0x776A178,0x8925C3B,0x1921B9A5,0x80DED4B,0x55630A4,0x70847};
+
+
+
+#endif
+
+#if CHUNK==64
+// Base Bits= 60
+
+const BIG_512_60 Modulus_FP512BN= 
{0x4EB280922ADEF33L,0x6A55CE5F4C6467BL,0xC65DEAB236FE191L,0xCF1EACBE98B8E48L,0x3C111B0EF455146L,0xA1D8CB5307C0BBEL,0xFFFF9EC7F01C60BL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFL};
+const BIG_512_60 R2modp_FP512BN= 
{0x1FA6DCEF99812E9L,0xAB3452895A0B74EL,0xC53EA988C079E1EL,0x1E90E033BA630B9L,0xF1EA41C0714D8B0L,0xE72785387509E28L,0xD86794F834DAB00L,0x9757C2ACCD342A1L,0x44ECB079L};
+const chunk MConst_FP512BN= 0x692A189FCCC5C05L;
+const BIG_512_60 Fra_FP512BN= 
{0x49617B1F4B73AB2L,0x71514F6202AED1FL,0xF6080D3BD8681E1L,0xF8AA9E852CBBB59L,0xC8CF2E2068398E9L,0x8A5296F791AB26BL,0x196A8C7C68B4EA1L,0xCF5BBF9095A1B79L,0x1EF71AA9L};
+const BIG_512_60 Frb_FP512BN= 
{0x5510572DF6B481L,0xF9047EFD49B595CL,0xD055DD765E95FAFL,0xD6740E396BFD2EEL,0x7341ECEE8C1B85CL,0x1786345B7615952L,0xE695124B876776AL,0x30A4406F6A5E486L,0xE108E556L};
+
+
+#endif
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_GOLDILOCKS.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_GOLDILOCKS.c 
b/version3/c/rom_field_GOLDILOCKS.c
new file mode 100644
index 0000000..2a1785e
--- /dev/null
+++ b/version3/c/rom_field_GOLDILOCKS.c
@@ -0,0 +1,30 @@
+#include "arch.h"
+#include "fp_GOLDILOCKS.h"
+
+/* Curve GOLDILOCKS */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+
+// Base Bits= 29
+const BIG_448_29 Modulus_GOLDILOCKS= 
{0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FDFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFF};
+const BIG_448_29 R2modp_GOLDILOCKS= 
{0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x3000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const chunk MConst_GOLDILOCKS= 0x1;
+
+#endif
+
+#if CHUNK==64
+// Base Bits= 58
+const BIG_448_58 Modulus_GOLDILOCKS= 
{0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FBFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFFFFFL,0x3FFFFFFFFFFL};
+const BIG_448_58 R2modp_GOLDILOCKS= 
{0x200000000L,0x0L,0x0L,0x0L,0x3000000L,0x0L,0x0L,0x0L};
+const chunk MConst_GOLDILOCKS= 0x1L;
+
+
+#endif
+
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_HIFIVE.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_HIFIVE.c b/version3/c/rom_field_HIFIVE.c
new file mode 100644
index 0000000..097dcec
--- /dev/null
+++ b/version3/c/rom_field_HIFIVE.c
@@ -0,0 +1,27 @@
+#include "arch.h"
+#include "fp_HIFIVE.h"
+
+/* Curve HIFIVE */
+
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 29
+const BIG_336_29 Modulus_HIFIVE= 
{0x1FFFFFFD,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFF};
+const BIG_336_29 R2modp_HIFIVE= 
{0x9000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const chunk MConst_HIFIVE= 0x3;
+#endif
+
+#if CHUNK==64
+// Base Bits= 60
+const BIG_336_60 Modulus_HIFIVE= 
{0xFFFFFFFFFFFFFFDL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFL};
+const BIG_336_60 R2modp_HIFIVE= {0x9000000000000L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const chunk MConst_HIFIVE= 0x3L;
+#endif
+
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_NIST256.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_NIST256.c b/version3/c/rom_field_NIST256.c
new file mode 100644
index 0000000..b5a7187
--- /dev/null
+++ b/version3/c/rom_field_NIST256.c
@@ -0,0 +1,27 @@
+#include "arch.h"
+#include "fp_NIST256.h"
+
+/* Curve NIST256 */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 28
+const BIG_256_28 Modulus_NIST256= 
{0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFF,0x0,0x0,0x1000000,0x0,0xFFFFFFF,0xF};
+const BIG_256_28 R2modp_NIST256= 
{0x50000,0x300000,0x0,0x0,0xFFFFFFA,0xFFFFFBF,0xFFFFEFF,0xFFFAFFF,0x2FFFF,0x0};
+const chunk MConst_NIST256= 0x1;
+#endif
+
+#if CHUNK==64
+
+// Base Bits= 56
+const BIG_256_56 Modulus_NIST256= 
{0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFL,0x0L,0x1000000L,0xFFFFFFFFL};
+const BIG_256_56 R2modp_NIST256= 
{0x3000000050000L,0x0L,0xFFFFFBFFFFFFFAL,0xFFFAFFFFFFFEFFL,0x2FFFFL};
+const chunk MConst_NIST256= 0x1L;
+
+#endif
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_NIST384.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_NIST384.c b/version3/c/rom_field_NIST384.c
new file mode 100644
index 0000000..a739ae3
--- /dev/null
+++ b/version3/c/rom_field_NIST384.c
@@ -0,0 +1,27 @@
+#include "arch.h"
+#include "fp_NIST384.h"
+
+/* Curve NIST384 */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 29
+const BIG_384_29 Modulus_NIST384= 
{0x1FFFFFFF,0x7,0x0,0x1FFFFE00,0x1FFFEFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x1FFFFFFF,0x7F};
+const BIG_384_29 R2modp_NIST384= 
{0x0,0x8000,0x1FF80000,0x1FFFFF,0x2000000,0x0,0x0,0x1FFFFFFC,0xF,0x100,0x400,0x0,0x0,0x0};
+const chunk MConst_NIST384= 0x1;
+#endif
+
+#if CHUNK==64
+// Base Bits= 56
+const BIG_384_56 Modulus_NIST384= 
{0xFFFFFFFFL,0xFFFF0000000000L,0xFFFFFFFFFEFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFL};
+const BIG_384_56 R2modp_NIST384= 
{0xFE000000010000L,0xFFFFFFL,0x2L,0xFFFFFFFE00L,0x1000000020000L,0x0L,0x0L};
+const chunk MConst_NIST384= 0x100000001L;
+
+#endif
+
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_NIST521.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_NIST521.c b/version3/c/rom_field_NIST521.c
new file mode 100644
index 0000000..048f9ac
--- /dev/null
+++ b/version3/c/rom_field_NIST521.c
@@ -0,0 +1,25 @@
+#include "arch.h"
+#include "fp_NIST521.h"
+
+/* Curve NIST521 */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 28
+const BIG_528_28 Modulus_NIST521= 
{0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0x1FFFF};
+const BIG_528_28 R2modp_NIST521= 
{0x400000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
+const chunk MConst_NIST521= 0x1;
+#endif
+
+#if CHUNK==64
+// Base Bits= 60
+const BIG_528_60 Modulus_NIST521= 
{0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFL,0x1FFFFFFFFFFL};
+const BIG_528_60 R2modp_NIST521= 
{0x4000000000L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
+const chunk MConst_NIST521= 0x1L;
+#endif
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rom_field_SECP256K1.c
----------------------------------------------------------------------
diff --git a/version3/c/rom_field_SECP256K1.c b/version3/c/rom_field_SECP256K1.c
new file mode 100644
index 0000000..4f80178
--- /dev/null
+++ b/version3/c/rom_field_SECP256K1.c
@@ -0,0 +1,28 @@
+#include "arch.h"
+#include "fp_SECP256K1.h"
+
+/* Curve SECP256K1 */
+
+#if CHUNK==16
+
+#error Not supported
+
+#endif
+
+#if CHUNK==32
+// Base Bits= 28
+const BIG_256_28 Modulus_SECP256K1= 
{0xFFFFC2F,0xFFFFFEF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xFFFFFFF,0xF};
+const BIG_256_28 R2modp_SECP256K1= 
{0x0,0xA100000,0x2000E90,0x7A,0x1,0x0,0x0,0x0,0x0,0x0};
+const chunk MConst_SECP256K1= 0x2253531;
+
+#endif
+
+#if CHUNK==64
+
+// Base Bits= 56
+const BIG_256_56 Modulus_SECP256K1= 
{0xFFFFFEFFFFFC2FL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFL,0xFFFFFFFFL};
+const BIG_256_56 R2modp_SECP256K1= 
{0xA1000000000000L,0x7A2000E90L,0x1L,0x0L,0x0L};
+const chunk MConst_SECP256K1= 0x38091DD2253531L;
+
+#endif
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rsa.c
----------------------------------------------------------------------
diff --git a/version3/c/rsa.c b/version3/c/rsa.c
new file mode 100644
index 0000000..bbe41b2
--- /dev/null
+++ b/version3/c/rsa.c
@@ -0,0 +1,162 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+
+/* RSA Functions - see main program below */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+
+#include "rsa_WWW.h"
+#include "rsa_support.h"
+
+/* generate an RSA key pair */
+void RSA_WWW_KEY_PAIR(csprng *RNG,sign32 e,rsa_private_key_WWW 
*PRIV,rsa_public_key_WWW *PUB,octet *P, octet* Q)
+{
+    /* IEEE1363 A16.11/A16.12 more or less */
+    BIG_XXX t[HFLEN_WWW],p1[HFLEN_WWW],q1[HFLEN_WWW];
+
+    if (RNG!=NULL)
+    {
+
+        for (;;)
+        {
+
+            FF_WWW_random(PRIV->p,RNG,HFLEN_WWW);
+            while (FF_WWW_lastbits(PRIV->p,2)!=3) 
FF_WWW_inc(PRIV->p,1,HFLEN_WWW);
+            while (!FF_WWW_prime(PRIV->p,RNG,HFLEN_WWW))
+                FF_WWW_inc(PRIV->p,4,HFLEN_WWW);
+
+            FF_WWW_copy(p1,PRIV->p,HFLEN_WWW);
+            FF_WWW_dec(p1,1,HFLEN_WWW);
+
+            if (FF_WWW_cfactor(p1,e,HFLEN_WWW)) continue;
+            break;
+        }
+
+        for (;;)
+        {
+            FF_WWW_random(PRIV->q,RNG,HFLEN_WWW);
+            while (FF_WWW_lastbits(PRIV->q,2)!=3) 
FF_WWW_inc(PRIV->q,1,HFLEN_WWW);
+            while (!FF_WWW_prime(PRIV->q,RNG,HFLEN_WWW))
+                FF_WWW_inc(PRIV->q,4,HFLEN_WWW);
+
+            FF_WWW_copy(q1,PRIV->q,HFLEN_WWW);
+            FF_WWW_dec(q1,1,HFLEN_WWW);
+            if (FF_WWW_cfactor(q1,e,HFLEN_WWW)) continue;
+
+            break;
+        }
+
+    }
+    else
+    {
+        FF_WWW_fromOctet(PRIV->p,P,HFLEN_WWW);
+        FF_WWW_fromOctet(PRIV->q,Q,HFLEN_WWW);
+
+        FF_WWW_copy(p1,PRIV->p,HFLEN_WWW);
+        FF_WWW_dec(p1,1,HFLEN_WWW);
+
+        FF_WWW_copy(q1,PRIV->q,HFLEN_WWW);
+        FF_WWW_dec(q1,1,HFLEN_WWW);
+    }
+
+    FF_WWW_mul(PUB->n,PRIV->p,PRIV->q,HFLEN_WWW);
+    PUB->e=e;
+
+    FF_WWW_copy(t,p1,HFLEN_WWW);
+    FF_WWW_shr(t,HFLEN_WWW);
+    FF_WWW_init(PRIV->dp,e,HFLEN_WWW);
+    FF_WWW_invmodp(PRIV->dp,PRIV->dp,t,HFLEN_WWW);
+    if (FF_WWW_parity(PRIV->dp)==0) FF_WWW_add(PRIV->dp,PRIV->dp,t,HFLEN_WWW);
+    FF_WWW_norm(PRIV->dp,HFLEN_WWW);
+
+    FF_WWW_copy(t,q1,HFLEN_WWW);
+    FF_WWW_shr(t,HFLEN_WWW);
+    FF_WWW_init(PRIV->dq,e,HFLEN_WWW);
+    FF_WWW_invmodp(PRIV->dq,PRIV->dq,t,HFLEN_WWW);
+    if (FF_WWW_parity(PRIV->dq)==0) FF_WWW_add(PRIV->dq,PRIV->dq,t,HFLEN_WWW);
+    FF_WWW_norm(PRIV->dq,HFLEN_WWW);
+
+    FF_WWW_invmodp(PRIV->c,PRIV->p,PRIV->q,HFLEN_WWW);
+
+    return;
+}
+
+/* destroy the Private Key structure */
+void RSA_WWW_PRIVATE_KEY_KILL(rsa_private_key_WWW *PRIV)
+{
+    FF_WWW_zero(PRIV->p,HFLEN_WWW);
+    FF_WWW_zero(PRIV->q,HFLEN_WWW);
+    FF_WWW_zero(PRIV->dp,HFLEN_WWW);
+    FF_WWW_zero(PRIV->dq,HFLEN_WWW);
+    FF_WWW_zero(PRIV->c,HFLEN_WWW);
+}
+
+void RSA_WWW_fromOctet(BIG_XXX x[],octet *w)
+{
+    FF_WWW_fromOctet(x,w,FFLEN_WWW);
+}
+
+/* RSA encryption with the public key */
+void RSA_WWW_ENCRYPT(rsa_public_key_WWW *PUB,octet *F,octet *G)
+{
+    BIG_XXX f[FFLEN_WWW];
+    FF_WWW_fromOctet(f,F,FFLEN_WWW);
+
+    FF_WWW_power(f,f,PUB->e,PUB->n,FFLEN_WWW);
+
+    FF_WWW_toOctet(G,f,FFLEN_WWW);
+}
+
+/* RSA decryption with the private key */
+void RSA_WWW_DECRYPT(rsa_private_key_WWW *PRIV,octet *G,octet *F)
+{
+    BIG_XXX g[FFLEN_WWW],t[FFLEN_WWW],jp[HFLEN_WWW],jq[HFLEN_WWW];
+
+    FF_WWW_fromOctet(g,G,FFLEN_WWW);
+
+    FF_WWW_dmod(jp,g,PRIV->p,HFLEN_WWW);
+    FF_WWW_dmod(jq,g,PRIV->q,HFLEN_WWW);
+
+    FF_WWW_skpow(jp,jp,PRIV->dp,PRIV->p,HFLEN_WWW);
+    FF_WWW_skpow(jq,jq,PRIV->dq,PRIV->q,HFLEN_WWW);
+
+
+    FF_WWW_zero(g,FFLEN_WWW);
+    FF_WWW_copy(g,jp,HFLEN_WWW);
+    FF_WWW_mod(jp,PRIV->q,HFLEN_WWW);
+    if (FF_WWW_comp(jp,jq,HFLEN_WWW)>0)
+        FF_WWW_add(jq,jq,PRIV->q,HFLEN_WWW);
+    FF_WWW_sub(jq,jq,jp,HFLEN_WWW);
+    FF_WWW_norm(jq,HFLEN_WWW);
+
+    FF_WWW_mul(t,PRIV->c,jq,HFLEN_WWW);
+    FF_WWW_dmod(jq,t,PRIV->q,HFLEN_WWW);
+
+    FF_WWW_mul(t,jq,PRIV->p,HFLEN_WWW);
+    FF_WWW_add(g,t,g,FFLEN_WWW);
+    FF_WWW_norm(g,FFLEN_WWW);
+
+    FF_WWW_toOctet(F,g,FFLEN_WWW);
+
+    return;
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-milagro-crypto/blob/c25f9e5c/version3/c/rsa.h
----------------------------------------------------------------------
diff --git a/version3/c/rsa.h b/version3/c/rsa.h
new file mode 100644
index 0000000..4d4c3c1
--- /dev/null
+++ b/version3/c/rsa.h
@@ -0,0 +1,110 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+
+/**
+ * @file rsa.h
+ * @author Mike Scott
+ * @brief RSA Header file for implementation of RSA protocol
+ *
+ * declares functions
+ *
+ */
+
+#ifndef RSA_WWW_H
+#define RSA_WWW_H
+
+#include "ff_WWW.h"
+#include "rsa_support.h"
+
+/*** START OF USER CONFIGURABLE SECTION -  ***/
+
+#define HASH_TYPE_RSA_WWW SHA256 /**< Chosen Hash algorithm */
+
+/*** END OF USER CONFIGURABLE SECTION ***/
+
+#define RFS_WWW MODBYTES_XXX*FFLEN_WWW /**< RSA Public Key Size in bytes */
+
+
+/**
+       @brief Integer Factorisation Public Key
+*/
+
+typedef struct
+{
+    sign32 e;     /**< RSA exponent (typically 65537) */
+    BIG_XXX n[FFLEN_WWW]; /**< An array of BIGs to store public key */
+} rsa_public_key_WWW;
+
+/**
+       @brief Integer Factorisation Private Key
+*/
+
+typedef struct
+{
+    BIG_XXX p[FFLEN_WWW/2];  /**< secret prime p  */
+    BIG_XXX q[FFLEN_WWW/2];  /**< secret prime q  */
+    BIG_XXX dp[FFLEN_WWW/2]; /**< decrypting exponent mod (p-1)  */
+    BIG_XXX dq[FFLEN_WWW/2]; /**< decrypting exponent mod (q-1)  */
+    BIG_XXX c[FFLEN_WWW/2];  /**< 1/p mod q */
+} rsa_private_key_WWW;
+
+/* RSA Auxiliary Functions */
+
+/**    @brief RSA Key Pair Generator
+ *
+       @param R is a pointer to a cryptographically secure random number 
generator
+       @param e the encryption exponent
+       @param PRIV the output RSA private key
+       @param PUB the output RSA public key
+        @param P Input prime number. Used when R is equal to NULL for testing
+        @param Q Inpuy prime number. Used when R is equal to NULL for testing
+ */
+extern void RSA_WWW_KEY_PAIR(csprng *R,sign32 e,rsa_private_key_WWW* 
PRIV,rsa_public_key_WWW* PUB,octet *P, octet* Q);
+
+/**    @brief RSA encryption of suitably padded plaintext
+ *
+       @param PUB the input RSA public key
+       @param F is input padded message
+       @param G is the output ciphertext
+ */
+extern void RSA_WWW_ENCRYPT(rsa_public_key_WWW* PUB,octet *F,octet *G);
+/**    @brief RSA decryption of ciphertext
+ *
+       @param PRIV the input RSA private key
+       @param G is the input ciphertext
+       @param F is output plaintext (requires unpadding)
+
+ */
+extern void RSA_WWW_DECRYPT(rsa_private_key_WWW* PRIV,octet *G,octet *F);
+/**    @brief Destroy an RSA private Key
+ *
+       @param PRIV the input RSA private key. Destroyed on output.
+ */
+extern void RSA_WWW_PRIVATE_KEY_KILL(rsa_private_key_WWW *PRIV);
+/**    @brief Populates an RSA public key from an octet string
+ *
+       Creates RSA public key from big-endian base 256 form.
+       @param x FF instance to be created from an octet string
+       @param S input octet string
+ */
+extern void RSA_WWW_fromOctet(BIG_XXX *x,octet *S);
+
+
+
+#endif

Reply via email to