Eric's Crypto Software

OverviewDESSKIPJACKOther PIC codeStandardsCommentaryPublic PolicyOrganizationsLegal CasesBooksRegulationsOtherNotice


I've implemented two cryptographic algorithms for the Microchip PIC and Scenix SX microcontrollers.

I've also packaged some cryptography-enabled packages for Red Hat Linux, such as Lynx with SSL. These are all based on freely-available source code.

Algorithm Summary

DES is one of the most common cryptographic algorithms in current use. SKIPJACK is a relatively recent algorithm, and has not yet been subject to nearly as much public scrutiny.

I've benchmarked the code on a 10 MHz Microchip PIC16F84 and a 50 MHz Scenix SX28AC, because these were the parts readily available to me. Some midrange PIC devices are now rated to run at 20 MHz, and high-end PICs to 33 MHz. Scenix does not currently offer parts with data EEPROM, but their parts are fully pipelined, so they run almost four times as fast as a PIC at the same clock rate.

DES for the Microchip PIC

Function Performance on 20 MHz Microchip PIC16F84A
cycle count time bits per second
Key Setup 156 31.2 uS n/a
Encryption 5694 1.14 mS 56.2 Kb/s
Decryption 5784 1.16 mS 55.3 Kb/s

The code size is 434 words, plus a 256-word table to store the S-boxes, for a total of 690 words. Some savings can be realized if it is not necessary to have both encryption and decryption functions available.

The code uses 20 bytes of RAM internally. 8 bytes are used to store the key reorganized into a different format for more efficient access; if these bytes are used for other purposes between DES calls, it will be necessary to call the key setup function again before calling the encryption or decryption functions. The remaining 12 bytes are used as scratch space during the encryption and decryption processes, and need not be preserved between calls.

In addition, the key setup, encrypt, and decrypt routines each expect the caller to provide a pointer to 8 bytes of RAM used for the key, plaintext, and/or ciphertext.

The DESPICable source code is available under the terms of the Free Software Foundation's General Public License, Version 2. If you agree to the terms of the license, you may download a copy in .tgz format:

Al Lovrich and Mark Palmer of Microchip have written a DES implementation for the PIC17 series. They have not made the code available online due to US export restrictions, but it is described in Microchip Application Note AN583:

Function Performance on 25 MHz Microchip PIC17C42
program words cycle count time bits per second
Key management and subkey generation 382 2729 436 uS n/a
Encryption 798 7714 1.234 mS 51.8 Kb/s

I haven't seen their code, but from the description in the application note it seems that they must devote a lot of RAM to subkeys. I structured my code to avoid ever having to store subkeys.

SKIPJACK for the Microchip PIC and Scenix SX

SKIPJACK was declassified by the US Department of Defense on June 23, 1998. Like DES, it is a 64-bit block cipher, but it uses an 80-bit key rather than the 56-bit key of DES. SKIPJACK uses 32 rounds, twice as many as DES, but because it is constructed of simpler operations it actually runs about twice as fast, and does not require any key setup time.

Bruce Schneier wrote about SKIPJACK in the July 15, 1998 issue of Crypto-Gram.

A 256 word table and a 1 word jump instruction are needed for either encryption or decryption. In addition to the 10 bytes of key and 8 bytes of data, only 2 temporary registers are used.

Function code (14-bit words),
not including the common 257 words
Performance on 20 MHz Microchip PIC16F84A Performance on 50 MHz Scenix SX
cycle count time bits per second cycle count time bits per second
Encryption - using subroutine for half-G() 61 2952 590 us 108.4 Kb/s 3208 64.2 us 997.5 Kb/s
Encryption - using inline half-G() 73 2696 539 us 118.7 Kb/s
Decryption - using subroutine for half-G^-1() 62 2953 591 us 108.4 Kb/s 3209 64.2 us 997.5 Kb/s
Decryption - using inline half-G() 74 2697 539 us 118.6 Kb/s

The code could easily be altered to directly access the key from EEPROM on a suitable PIC (such as a PIC16F84), saving 10 bytes of RAM.

The SKIPJACK source code is available under the terms of the Free Software Foundation's General Public License, Version 2. If you agree to the terms of the license, you may download a copy in .tgz format:

Other Cryptography Code for the PIC

Other Cryptograpy Code

Standards and Standards Development


Public Policy


Legal Cases





This site includes publicly available encryption source code which, together with object code resulting from the compiling of publicly available source code, may be exported from the United States under License Exception "TSU" pursuant to 15 C.F.R. Section 740.13(e).
home Back to my home page

Last updated August 21, 2003

Copyright 1998, 1999, 2000, 2001, 2002, 2003 Eric Smith

Best Viewed With Any Browser Valid HTML 4.01! check now