| 
									
										
										
										
											2003-03-03 01:01:00 +00:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2003-12-24 18:59:57 +00:00
										 |  |  | 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  | 
					
						
							| 
									
										
										
										
											2003-03-03 01:01:00 +00:00
										 |  |  | 4KB which is normally not a problem for any platform.   | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Cipher Name | Size of scheduled key (bytes) | | 
					
						
							|  |  |  | ------------+-------------------------------| | 
					
						
							| 
									
										
										
										
											2003-12-24 18:59:57 +00:00
										 |  |  | Twofish     | 4,256                         | | 
					
						
							| 
									
										
										
										
											2003-03-03 01:01:00 +00:00
										 |  |  | Blowfish    | 4,168                         | | 
					
						
							| 
									
										
										
										
											2003-12-24 18:59:57 +00:00
										 |  |  | 3DES        | 768                           | | 
					
						
							| 
									
										
										
										
											2003-03-03 01:01:00 +00:00
										 |  |  | SAFER+      | 532                           | | 
					
						
							|  |  |  | Serpent     | 528                           | | 
					
						
							|  |  |  | Rijndael    | 516                           | | 
					
						
							|  |  |  | XTEA        | 256                           | | 
					
						
							|  |  |  | RC2         | 256                           | | 
					
						
							|  |  |  | DES         | 256                           | | 
					
						
							| 
									
										
										
										
											2003-12-24 18:59:57 +00:00
										 |  |  | SAFER [#]   | 217                           | | 
					
						
							| 
									
										
										
										
											2004-01-25 17:40:34 +00:00
										 |  |  | RC5         | 204                           | | 
					
						
							| 
									
										
										
										
											2003-12-24 18:59:57 +00:00
										 |  |  | Twofish [*] | 193                           | | 
					
						
							|  |  |  | RC6         | 176                           | | 
					
						
							| 
									
										
										
										
											2003-03-03 01:01:00 +00:00
										 |  |  | CAST5       | 132                           | | 
					
						
							| 
									
										
										
										
											2003-03-03 01:01:40 +00:00
										 |  |  | Noekeon     | 32                            | | 
					
						
							| 
									
										
										
										
											2003-12-24 18:59:57 +00:00
										 |  |  | Skipjack    | 10                            | | 
					
						
							| 
									
										
										
										
											2003-03-03 01:01:00 +00:00
										 |  |  | ------------+-------------------------------/ | 
					
						
							|  |  |  | Memory used per cipher on a 32-bit platform. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [*] For Twofish with TWOFISH_SMALL defined | 
					
						
							|  |  |  | [#] For all 64-bit SAFER ciphers. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-03 01:01:40 +00:00
										 |  |  | 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  | 
					
						
							| 
									
										
										
										
											2003-12-24 18:59:57 +00:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2012-02-12 15:22:26 -08:00
										 |  |  | and then rebuild the library.  [or you can hand edit tomcrypt_custom.h] | 
					
						
							| 
									
										
										
										
											2003-12-24 18:59:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 |