Where can I find it?
SVN: [1]
via Track (also svn, but suitable for direct browsing):[2]
Short Facts
- small implementation of cryptographic algorithms in C (quite portable)
- even smaller implementations in assembly language (ATmega, gnu-avr-as)
- allfunctions are reentrant (except functions of the PRNG "Entopium")
- license: GPLv3 (nearly everything) (for different licensing contact author)
About
Crypto-avr-lib is a set of implementations of different cryptographic primitives.
Due to the special limitations of microcontrollers (very raw space, RAM and flash are ranging from a few bytes to a few KiB) reference or "normal" optimised implementations are not useable.
Therefor we try to provide special implementations which respect the extrem limited resources of microcontroller applications.
What should be done
symmetric
block |
aes |
cast6 |
twofish |
idea |
kasumi
|
stream |
seal |
A5/1 |
Turing |
Rabbit
|
hashes |
ripemd |
whirlpool
|
What we have
symmetric
block
- XTEA
- CAST5
- Camellia
- Skipjack
- Noekeon
- RC5
- RC6
- SEED
- DES
- TDES (aka EDE-DES, 3DES)
- SHABEA
- Serpent
- Present
stream
- ARCFOUR (RC4 compatible)
- Trivium
- Grain
hashes
others
- HMAC-SHA256 (following RFC 2104)
- PRNG
Facts
Blockchiphers
Name
|
Variants
|
Language
|
Size (flash) (Bytes)
|
Size (context) (Bytes)
|
Size (stack) (Bytes)
|
Keylength (Bits)
|
Blocksize (Bits)
|
Time (initialisation)
|
Time (encryption)
|
Time (decryption)
|
Attacs
|
Paper
|
Licenses / Patents
|
Camellia |
C |
C |
|
32 |
|
128 |
128 |
|
|
|
|
|
|
Camellia |
C+Asm |
C+Asm |
5803 |
32 |
|
128 |
128 |
|
|
|
|
|
|
Cast5 |
C |
C |
14128 |
75 |
|
0 – 128 |
64 |
13742 |
12550 |
13109 |
|
|
|
RC5 |
RC5-32/r/b |
C |
1524 |
3+(8*#rounds+1) |
|
1 – 2040 |
64 |
79352 |
7827 |
7223 |
|
|
|
RC6 |
RC6-32/r/b |
C |
2656 |
19+(8*#rounds) |
|
1 – 2040 |
128 |
139940 |
26600 |
25986 |
|
|
|
Noekeon |
C |
C |
1438 |
0 (16) |
|
128 |
128 |
26037 |
25798 |
26396 |
|
|
|
Noekeon |
Asm |
Asm |
774 |
0 (16) |
|
128 |
128 |
10416 |
10191 |
10745 |
|
|
|
DES |
C |
C |
2480 |
0 |
|
56 |
64 |
– |
284952 |
284977 |
|
|
|
TDES |
C |
C |
2480 |
0 |
|
168 |
64 |
– |
852082 |
852107 |
|
|
|
Serpent |
Non-bitslice |
C |
2862 |
528 |
|
1 – 256 |
128 |
537021 |
492884 |
493004 |
|
|
|
Serpent |
Non-bitslice, small |
Asm |
1290 |
528 |
|
1 – 256 |
128 |
114844 |
105771 |
105871 |
|
|
|
Serpent |
Non-bitslice, fast |
Asm |
1400 |
528 |
|
1 – 256 |
128 |
110582 |
101648 |
101743 |
|
|
|
Serpent |
bitslice |
C |
4498 |
528 |
|
1 – 256 |
128 |
102098 |
70827 |
70462 |
|
|
|
Skipjack |
C |
C |
1244 |
0 |
|
80 |
64 |
– |
38109 |
38450 |
|
|
|
Present |
C |
C |
1514 |
256 |
|
80 |
64 |
30395 |
105796 |
151624 |
|
|
|
SEED |
C |
C |
|
16 |
|
128 |
128 |
|
|
|
|
|
|
SEED |
C+Asm |
C+Asm |
4052 |
16 |
|
128 |
128 |
129 |
50086 |
49808 |
|
|
|
XTEA |
C |
C |
754 |
0 |
|
128 |
64 |
– |
9912 |
9789 |
|
|
|
XTEA |
Asm |
Asm |
504 |
0 |
|
128 |
64 |
– |
7687 |
7688 |
|
|
|
Shabea |
C |
C |
2020 |
0 |
|
0 – infinit |
256 |
|
|
|
|
|
|
Name
|
Variants
|
Language
|
Size (flash) (Bytes)
|
Size (context) (Bytes)
|
Size (stack) (Bytes)
|
Keylength (Bits)
|
Blocksize (Bits)
|
Time (initialisation)
|
Time (encryption)
|
Time (decryption)
|
Attacs
|
Paper
|
Licenses / Patents
|
Streamciphers
Name
|
Variants
|
Language
|
Size (flash) (Bytes)
|
Size (context) (Bytes)
|
Size (stack) (Bytes)
|
Keylength (Bits)
|
Outputsize (Bits)
|
Time (initialisation)
|
Time (generation)
|
Attacs
|
Paper
|
Licenses / Patents
|
ARCFOUR |
C |
C |
230 |
258 |
|
8 – 2040 |
8 |
64086 |
56 |
|
|
|
ARCFOUR |
Asm |
Asm |
112 |
258 |
|
8 – 2040 |
8 |
6689 |
42 |
|
|
|
Trivium |
C |
C |
424 |
36 |
|
80 |
1 |
775726 |
665 |
|
|
|
Grain |
C |
C |
778 |
20 |
|
80 |
1 |
107366 |
617 |
|
|
|
Hashes
Name
|
Variants
|
Language
|
Size (flash) (Bytes)
|
Size (context) (Bytes)
|
Size (stack) (Bytes)
|
Hashsize (Bits)
|
Blocksize (Bits)
|
Time (initialisation)
|
Time (per block)
|
Time (finalisation)
|
Attacs
|
Paper
|
Licenses / Patents
|
SHA-256 |
C |
C |
3428 |
40 |
|
256 |
512 |
257 |
179184 |
183576 |
|
|
|
SHA-256 |
Asm |
Asm |
1600 |
40 |
|
256 |
512 |
314 |
53386 |
53791 |
|
|
|
SHA-1 |
C |
C |
2774 |
28 |
|
160 |
512 |
91 |
81344 |
85736 |
|
|
|
SHA-1 |
Asm |
Asm |
1070 |
28 |
|
160 |
512 |
218 |
40330 |
40735 |
|
|
|
MD5 |
C |
C |
2086 |
20 |
|
128 |
512 |
71 |
41786 |
42358 |
|
|
|
MACs
Name
|
Variants
|
Language
|
Size (flash) (Bytes)
|
Size (context) (Bytes)
|
Size (stack) (Bytes)
|
Keylength (Bits)
|
Blocksize (Bits)
|
Time (initialisation)
|
Time (per block)
|
Time (finalisation)
|
Attacs
|
Paper
|
Licenses / Patents
|
HMAC-SHA256 |
|
C |
2712 |
40 |
|
any |
512 |
|
|
|
|
|
|
HMAC-SHA1 |
|
C |
2182 |
28 |
|
any |
512 |
|
|
|
|
|
|
OMAC-Noekeon |
|
Asm |
1184 (incl. Noekeon) |
16 |
|
128 |
128 |
95 |
10533 |
21474 |
|
|
|
OMAC-Noekeon |
|
C |
1284 (incl. Noekeon) |
16 |
|
128 |
128 |
95 |
10589 |
21741 |
|
|
|
PRNGs
Name
|
Variants
|
Language
|
Size (flash) (Bytes)
|
Size (context) (Bytes)
|
Size (stack) (Bytes)
|
Blocksize (Bits)
|
Time (input processing)
|
Time (output generation)
|
Attacs
|
Paper
|
Licenses / Patents
|
Entropium |
|
C |
2174 |
64 |
|
256 |
|
|
|
|
|