
Dear Kevin, I didn't know you were working on your library I thought you have coded one and decided it was enough for your needs and had stopped developing. So if we are both developing I personally think it is more than silly to code two separate libraries instead of focusing on one. If you are interested we could merge the current progress into 1 library. In regards to your comment about the amount of code, I have the following algorithms fully functioning (some need little attention): BlockCiphers: Blowfish, Cast-256, Khazad, Mars, Rijndael, RC2, RC5, RC6, Serpent, Twofish All of the above implementations are generic, for example rc6 is defined as follows: template < size_t R, // # of rounds typename W // word size {uint8_t,uint16_t,uint32_t,uint64_t}
class rc6_cipher;
// the recommended rc6, although completely generic // but the following typedef could gain performance of // 26 Clocks Per Byte (CPB) which is _almost_ as fast as it gets typedef rc6_cipher<20,32> rc6; StreamCiphers: RC4, HC-128/256, Rabbit, Salsa, Sosemanuk Hash Functions: MD4, MD5, SHA-1, SHA-244, SHA-256, SHA-384, SHA-512, Whirlpool, (ifdef BOOST_CRYPTO_EXPERIMENTAL) { MD6, Sekin } Padding: One-zero, ISO-10126, PKCS-7. Mode Of operation: ECB, CBC, OFB, CFB, CTR-E, CTR-D, LRW, XTS mode of operations is something like: template < BlockCipher BlockCipherT, PaddingAlgorithm PaddingAlgorithmT
class XTS; Also endian class which is designed to read/write correct endian values from/to memory. I haven't implemented Public key cryptography because of not having a clear answer to what library to use for large number operations, or for example implement internal library for it. With Best Regards Kasra