
The files AKEnGNt.CPP implement variations of the ake protocol described in 
http://eprint.iacr.org/2002/164/, where n is the embedding degree, GN
is the curve generation method (SS for supersingular, CP for Cocks-Pinch,
MNT for MNT curves, BW for Brezing and Weng, FST for Freeman-Scott-Teske, KM
for Koblitz-Menezes), and t is the pairing type (t=A for Ate, T for tate, 
E for eta and R for r-ate pairings).

This authenticated key exchange algorithm is used as a test-bed for testing 
fast implementations of pairings.

AKE2CPT.CPP contains an implementation that uses a non-supersingular curve with 
a 160-bit group order whose security depends on the difficulty of a 1024-bit 
discrete logarithm problem. The prime modulus is 512 bits. The "security 
multiplier" is 2. The curve parameters are in the file k2.ecs

AKE2SST.CPP implements the same protocol, but this time using a supersingular
curve.

AKE6MNTT.CPP contains an implementation that uses a non-supersingular curve 
with a 160-bit group order whose security depends on the difficulty of a 960-bit 
discrete logarithm problem. The prime modulus is 160 bits. The "security 
multiplier" is 6. The curve parameters are in the file mnt.ecs

AKE4CPT.CPP contains an implementation that uses a non-supersingular curve with 
a 192-bit group order whose security depends on the difficulty of a 2048-bit 
discrete logarithm problem. The prime modulus is 512 bits. The "security 
multiplier" is 4. The curve parameters are in the file k4.ecs

AKE8CPT.CPP contains an implementation that uses a non-supersingular curve with 
a 224-bit group order whose security depends on the difficulty of a 4096-bit 
discrete logarithm problem. The prime modulus is 512 bits. The "security 
multiplier" is 8. The curve parameters are in the file k8.ecs
                     
The implementations AKE2CPT.CPP, AKE4CPT.CPP and AKE8CPT.CPP use a "twisted" 
curve, and compress the output of the pairing. See 
http://eprint.iacr.org/2004/032/

AKE4CPT.CPP and AKE8CPT.CPP uses a "tower extension field" as a simple way of 
moving from k=2 to k=4 and k=8. See ZZn4.CPP/ZZn8.CPP

By using a series of such extensions, higher and higher security levels can 
be reached. This is thought to be a nice way of scaling security for pairing-
based protocols. These implementations all depend on the same fast 512-bit 
modular multiplier.

AKE4FSTA contains an implementation that uses a non-supersingular curve with a 
165-bit group order whose security depends on the difficulty of a 1024-bit 
discrete logarithm problem. The prime modulus is 255 bits. The "security 
multiplier" is 4. The curve parameters are in the file kw4.ecs. Note that the 
group order is of a low hamming weight.

AKE8BWT.CPP contains an implementation that uses a non-supersingular curve with a 
192-bit group order whose security depends on the difficulty of a 2048-bit 
discrete logarithm problem. The prime modulus is 256 bits. The "security 
multiplier" is 8. The curve parameters are in the file weng.ecs. This curve 
was constructed using a method due to Brezing & Weng. See 
http://eprint.iacr.org/2003/143/

The files k2.ecs, k4.ecs and k8.ecs are created by the utility folklore.cpp
The file mnt.ecs is created by the mnt.cpp utility.

See pairings.txt for more details.

