// this file is public domain

#include <botan/botan.h>
#include <string>
using namespace Botan;

struct algorithm
   {
      algorithm(const std::string& t, const std::string& n,
                u32bit k = 0, u32bit i = 0) :
         type(t), name(n), filtername(n), keylen(k), ivlen(i) {}
      algorithm(const std::string& t, const std::string& n,
                const std::string& f, u32bit k = 0, u32bit i = 0) :
         type(t), name(n), filtername(f), keylen(k), ivlen(i) {}
      std::string type, name, filtername;
      u32bit keylen, ivlen, weight;
   };

extern const std::string END = "END";

algorithm algorithms[] = {
   algorithm("Block Cipher", "AES-128", "AES-128/ECB", 16),
   algorithm("Block Cipher", "AES-192", "AES-192/ECB", 24),
   algorithm("Block Cipher", "AES-256", "AES-256/ECB", 32),
   algorithm("Block Cipher", "Blowfish", "Blowfish/ECB", 32),
   algorithm("Block Cipher", "CAST-128", "CAST-128/ECB", 16),
   algorithm("Block Cipher", "CAST-256", "CAST-256/ECB", 32),
   algorithm("Block Cipher", "DES", "DES/ECB", 8),
   algorithm("Block Cipher", "DESX", "DESX/ECB", 24),
   algorithm("Block Cipher", "TripleDES", "TripleDES/ECB", 24),
   algorithm("Block Cipher", "GOST", "GOST/ECB", 32),
   algorithm("Block Cipher", "IDEA", "IDEA/ECB", 16),
   algorithm("Block Cipher", "Lion(MD5,ISAAC)",
             "Lion(MD5,ISAAC,65536)/ECB", 16),
   algorithm("Block Cipher", "Lion(SHA-1,SEAL)",
             "Lion(SHA-1,SEAL,65536)/ECB", 20),
   algorithm("Block Cipher", "Luby-Rackoff(SHA-1)",
             "Luby-Rackoff(SHA-1)/ECB", 16),
   algorithm("Block Cipher", "MARS", "MARS/ECB", 32),
   algorithm("Block Cipher", "MISTY1", "MISTY1/ECB", 16),
   algorithm("Block Cipher", "RC2", "RC2/ECB", 16),
   algorithm("Block Cipher", "RC5(12)", "RC5(12)/ECB", 16),
   algorithm("Block Cipher", "RC5(16)", "RC5(16)/ECB", 16),
   algorithm("Block Cipher", "RC6", "RC6/ECB", 32),
   algorithm("Block Cipher", "SAFER-SK(10)", "SAFER-SK(10)/ECB", 16),
   algorithm("Block Cipher", "Serpent", "Serpent/ECB", 32),
   algorithm("Block Cipher", "Skipjack", "Skipjack/ECB", 10),
   algorithm("Block Cipher", "Square", "Square/ECB", 16),
   algorithm("Block Cipher", "TEA", "TEA/ECB", 16),
   algorithm("Block Cipher", "Twofish", "Twofish/ECB", 32),
   algorithm("Block Cipher", "XTEA", "XTEA/ECB", 16),

   algorithm("Cipher Mode", "AES-128/CBC/PKCS7", 16, 16),
   algorithm("Cipher Mode", "AES-128/CBC/CTS", 16, 16),
   algorithm("Cipher Mode", "AES-128/CFB(128)", 16, 16),
   algorithm("Cipher Mode", "AES-128/CFB(64)", 16, 16),
   algorithm("Cipher Mode", "AES-128/CFB(32)", 16, 16),
   algorithm("Cipher Mode", "AES-128/CFB(16)", 16, 16),
   algorithm("Cipher Mode", "AES-128/CFB(8)", 16, 16),
   algorithm("Cipher Mode", "AES-128/OFB", 16, 16),
   algorithm("Cipher Mode", "AES-128/CTR", "AES-128/CTR-BE", 16, 16),
   algorithm("Cipher Mode", "AES-128/EAX", 16, 16),

   algorithm("Stream Cipher", "ARC4", 16),
   algorithm("Stream Cipher", "ISAAC", 16),
   algorithm("Stream Cipher", "SEAL", "SEAL(8192)", 20),
   algorithm("Stream Cipher", "WiderWake4+1", "WiderWake4+1-BE", 16, 8),

   algorithm("Hash", "Adler32"),
   algorithm("Hash", "CRC24"),
   algorithm("Hash", "CRC32"),
   algorithm("Hash", "HAS-160"),
   algorithm("Hash", "HAS-V"),
   algorithm("Hash", "HAVAL", "HAVAL(32)"),
   algorithm("Hash", "MD2"),
   algorithm("Hash", "MD4"),
   algorithm("Hash", "MD5"),
   algorithm("Hash", "RIPEMD-128"),
   algorithm("Hash", "RIPEMD-160"),
   algorithm("Hash", "SHA-160"),
   algorithm("Hash", "SHA-256"),
   algorithm("Hash", "SHA-384"),
   algorithm("Hash", "SHA-512"),
   algorithm("Hash", "Tiger"),
   algorithm("Hash", "Whirlpool"),

   algorithm("MAC", "HMAC(SHA-1)", 16),
   algorithm("MAC", "OMAC(AES-128)", 16),
   algorithm("MAC", "X9.19-MAC", 16),

   algorithm("RNG", "Randpool"),
   algorithm("RNG", "X9.17-RNG"),
   algorithm("RNG", "FIPS-186-RNG"),

   algorithm(END, END)
};
