This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

DES, MD5 and SHA1 code size

Hello,

we made a straight forward port of the DES, MD5 and SHA1 algorithms from OpenSSL library (http://www.openssl.org) without optimizing the source code.
The following code size is indicated in the .map when compiling using the default compiler settings of C166 v4.27 for a C167CS MCU (Hlarge memory model):

Module  Code     ROM     RAM
=============================
DES	25'246	 4'631   162
MD5	20'738      16	   4
SHA1	39'726      20	   4

The code size seems to be quite large. What code size can be expected from an optimized implementation of these common algorithms?

Thank you for any comment,
Christian

  • You can do MD5 for the 8051 in under 2k of code + constants. Graham Cole has some even tighter code. I imagine the 166 should be even better.

    I had much the same problem when I started looking at MD5. I grabbed some code from the net, and it was about 20k. It was "workstation C"; I'm sure the author thought a mere 20k was a perfectly adequate job. So I wound up rewriting the whole thing. A 10:1 reduction is not impossible.

    The major change needed for reducing the size was replacing all the macros (no doubt "for speed") with function calls, and making the parameters table-driven rather than inline. Also look out for assumptions that "int" is 32 bits, and that 32 bits is a good size for doing all your operations.

    In my case, I also saved a smidgen of code as I knew that my use of MD5 could not be reentrant, so I didn't need to pass a state parameter to allow multiple simultaneous calculations.

  • You can find a compact version of DES here:

    http://www.bds.dogma.net/des_page.htm

    In general, it should be possible to implement DES quite efficiently on an 8-bit processor.

    If you are interested in my version of MD5, please e-mail g r a h a m . c o l e @ b t . c o m