diff libtomcrypt/notes/tech0003.txt @ 399:a707e6148060

merge of '5fdf69ca60d1683cdd9f4c2595134bed26394834' and '6b61c50f4cf888bea302ac8fcf5dbb573b443251'
author Matt Johnston <matt@ucc.asn.au>
date Sat, 03 Feb 2007 08:20:34 +0000
parents 1b9e69c058d2
children 6dba84798cd5
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtomcrypt/notes/tech0003.txt	Sat Feb 03 08:20:34 2007 +0000
@@ -0,0 +1,52 @@
+Tech Note 0003
+Minimizing Memory Usage
+Tom St Denis
+
+Introduction
+------------
+
+For the most part the library can get by with around 20KB of stack and about 32KB of heap even if you use the
+public key functions.  If all you plan on using are the hashes and ciphers than only about 1KB of stack is required
+and no heap.
+
+To save space all of the symmetric key scheduled keys are stored in a union called "symmetric_key".  This means the 
+size of a symmetric_key is the size of the largest scheduled key.  By removing the ciphers you don't use from
+the build you can minimize the size of this structure.  For instance, by removing both Twofish and Blowfish the
+size reduces to 768 bytes from the 4,256 bytes it would have been (on a 32-bit platform).  Or if you remove
+Blowfish and use Twofish with TWOFISH_SMALL defined its still 768 bytes.  Even at its largest the structure is only 
+4KB which is normally not a problem for any platform.  
+
+
+Cipher Name | Size of scheduled key (bytes) |
+------------+-------------------------------|
+Twofish     | 4,256                         |
+Blowfish    | 4,168                         |
+3DES        | 768                           |
+SAFER+      | 532                           |
+Serpent     | 528                           |
+Rijndael    | 516                           |
+XTEA        | 256                           |
+RC2         | 256                           |
+DES         | 256                           |
+SAFER [#]   | 217                           |
+RC5         | 204                           |
+Twofish [*] | 193                           |
+RC6         | 176                           |
+CAST5       | 132                           |
+Noekeon     | 32                            |
+Skipjack    | 10                            |
+------------+-------------------------------/
+Memory used per cipher on a 32-bit platform.
+
+[*] For Twofish with TWOFISH_SMALL defined
+[#] For all 64-bit SAFER ciphers.
+
+Noekeon is a fairly fast cipher and uses very little memory.  Ideally in low-ram platforms all other ciphers should be
+left undefined and Noekeon should remain.  While Noekeon is generally considered a secure block cipher (it is insecure
+as a hash) CAST5 is perhaps a "runner-up" choice.  CAST5 has been around longer (it is also known as CAST-128) and is 
+fairly fast as well.
+
+You can easily accomplish this via the "config.pl" script. Simply answer "n" to all of the ciphers except the one you want
+and then rebuild the library.  [or you can hand edit mycrypt_custom.h]
+
+