AVR-Crypto-Lib/en: Unterschied zwischen den Versionen
Aus LaborWiki
Bg (Diskussion | Beiträge) (removed banners) |
(→Short Facts: typo fix) |
||
Zeile 25: | Zeile 25: | ||
*small implementation of cryptographic algorithms in C (quite portable) | *small implementation of cryptographic algorithms in C (quite portable) | ||
*even smaller implementations in assembly language (ATmega, gnu-avr-as) | *even smaller implementations in assembly language (ATmega, gnu-avr-as) | ||
* | *all functions are '''reentrant''' (except functions of the PRNG "Entopium") | ||
*license: GPLv3 (nearly everything) (for different licensing contact the [[Benutzer:Bg|author]]) | *license: GPLv3 (nearly everything) (for different licensing contact the [[Benutzer:Bg|author]]) | ||
Version vom 11. März 2011, 21:19 Uhr
Eine deutsche Version dieses Artikels ist unter AVR-Crypto-Lib verfügbar.
Where can I find it?
new repository
BZR: [1] Use
bzr co http://avrcryptolib.das-labor.org/bzr .
to get a copy in your current directory
There is also a nightly build tar ball available at [2]
Some Docu will be collected at a new wiki dedicated to this project: [3]
old repository
SVN: [4]
via Trac (also svn, but suitable for direct browsing):[5]
Short Facts
- small implementation of cryptographic algorithms in C (quite portable)
- even smaller implementations in assembly language (ATmega, gnu-avr-as)
- all functions are reentrant (except functions of the PRNG "Entopium")
- license: GPLv3 (nearly everything) (for different licensing contact the author)
About
Crypto-avr-lib is a set of implementations of different cryptographic primitives. Due to the special limitations of microcontrollers (very little space, RAM and flash are ranging from a few bytes to a few KiB) reference or "normal" optimised implementations are not usable. Therefore we try to provide special implementations which respect the extreme limited resources of microcontroller applications.
What should be done
symmetric
block | blowfish | cast6 | twofish | idea | kasumi |
stream | seal | A5/1 | Turing | Rabbit | |
hashes | ripemd | whirlpool |
What we have
blockciphers
- AES
- XTEA
- CAST5
- Camellia
- Skipjack
- Noekeon
- RC5
- RC6
- SEED
- DES
- TDES (aka EDE-DES, 3DES)
- SHABEA
- Serpent
- Present
streamciphers
- ARCFOUR (RC4 compatible)
- Trivium
- Grain
- MUGI
hashes
- Blake
- BlueMidnightWish
- Grøstl
- MD5
- SHA-256
- SHA-1
- SHABAL
- Skein
- Twister
others
- HMAC-SHA256 (following RFC 2104)
- PRNG
Facts
Blockchiphers
Name | Variant | Language | Size (Flash) (Bytes) | Size (Context) (Bytes) | Size (Stack) (Bytes) | Keysize (Bits) | Blockize (Bits) | Cycles (Initialisation) | Cycles (Encryption) | Cycles (Decryption) | Nessie test | Attacs | Paper | License / Patents | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
AES | 128 | C | 2668 | 176 | 128 | 128 | 4632 | 21279 | 39340 | ok | |||||
AES | 192 | C | 2668 | 208 | 192 | 128 | 5082 | 25724 | 47799 | ok | |||||
AES | 256 | C | 2668 | 240 | 256 | 128 | 6161 | 30174 | 56253 | ok | |||||
AES | 128 | Asm | 2070 | 176 | 128 | 128 | 2039 | 2555 | 6764 | unconfirmed | |||||
AES | 192 | Asm | 2070 | 208 | 128 | 128 | 2267 | 3039 | 8164 | unconfirmed | |||||
AES | 256 | Asm | 2070 | 240 | 128 | 128 | 2852 | 3521 | 9562 | unconfirmed | |||||
AES | 128-fastdec | Asm | 2580 | 176 | 128 | 128 | 2039 | 2555 | 3193 | unconfirmed | |||||
AES | 192-fastdec | Asm | 2580 | 208 | 128 | 128 | 2267 | 3039 | 3819 | unconfirmed | |||||
AES | 256-fastdec | Asm | 2580 | 240 | 128 | 128 | 2852 | 3521 | 4443 | unconfirmed | |||||
Camellia | C | C | 8694 | 32 | 128 | 128 | 10190 | 43200 | 44066 | unconfirmed | |||||
Camellia | C+Asm | C+Asm | 4088 | 32 | 128 | 128 | 11115 | 10185 | 10217 | unconfirmed | |||||
Cast5 | C | C | 14312 | 75 | 0 – 128 | 64 | 13742 | 12550 | 13109 | unconfirmed | |||||
RC5 | RC5-32/r/b | C | 1650 | 3+(8*#rounds+1) | 1 – 2040 | 79352 | 7827 | 7223 | unconfirmed | US-Patent 5,724,428 expires: 03/03/2015 | |||||
RC6 | RC6-32/r/b | C | 2780 | 19+(8*#rounds) | 1 – 2040 | 128 | 139940 | 26600 | 25986 | unconfirmed | |||||
Noekeon | C | C | 1616 | 0 (16) | 128 | 128 | 26037 | 25798 | 26396 | unconfirmed | |||||
Noekeon | Asm | Asm | 774 | 0 (16) | 128 | 128 | 10416 | 10191 | 10745 | unconfirmed | |||||
DES | C | C | 2642 | 0 | 56 | 64 | – | 284952 | 284977 | unconfirmed | |||||
TDES | C | C | 2642 | 0 | 168 | 64 | – | 852082 | 852107 | unconfirmed | |||||
Serpent | Non-bitslice | C | 3064 | 528 | 1 – 256 | 128 | 537021 | 492884 | 493004 | unconfirmed | |||||
Serpent | Non-bitslice, small | Asm | 1290 | 528 | 1 – 256 | 128 | 114844 | 105771 | 105871 | unconfirmed | |||||
Serpent | Non-bitslice, fast | Asm | 1400 | 528 | 1 – 256 | 128 | 110582 | 101648 | 101743 | unconfirmed | |||||
Serpent | bitslice | C | 4482 | 528 | 1 – 256 | 128 | 102098 | 70827 | 70462 | unconfirmed | |||||
Skipjack | C | C | 1144 | 0 | 80 | 64 | – | 38109 | 38450 | unconfirmed | |||||
Present | C | C | 1514 | 256 | 80 | 64 | 30395 | 105796 | 151624 | unconfirmed | |||||
SEED | C | C | 3726 | 16 | 128 | 128 | 181 | 56906 | 56427 | unconfirmed | |||||
SEED | Asm | Asm | 1656 | 16 | 128 | 128 | 181 | 11401 | 11394 | unconfirmed | |||||
XTEA | C | C | 820 | 0 | 128 | 64 | – | 9912 | 9789 | unconfirmed | |||||
XTEA | Asm | Asm | 504 | 0 | 128 | 64 | – | 7687 | 7688 | unconfirmed | |||||
Shabea | C | C | 1988 | 0 | 0 – infinit | 256 | unconfirmed | ||||||||
Threefish-256 | Asm | Asm | 5068 | 64 | 256 | 256 | 375 | 40936 | 40912 | unconfirmed | |||||
Threefish-512 | Asm | Asm | 5068 | 96 | 512 | 512 | 547 | 93020 | 93240 | unconfirmed | |||||
Threefish-1024 | Asm | Asm | 5068 | 160 | 1024 | 1024 | 892 | 220606 | 218694 | unconfirmed | |||||
Threefish-256 | C | C | 19752 | 64 | 256 | 256 | 806 | 229592 | 223251 | unconfirmed | |||||
Threefish-512 | C | C | 19752 | 96 | 512 | 512 | 1299 | 453625 | 440279 | unconfirmed | |||||
Threefish-1024 | C | C | 19752 | 160 | 1024 | 1024 | 2267 | 1033056 | 1010445 | unconfirmed | |||||
Name | Variant | Language | Size (Flash) (Bytes) | Size (Context) (Bytes) | Size (Stack) (Bytes) | Keysize (Bits) | Blockize (Bits) | Cycles (Initialisation) | Cycles (Encryption) | Cycles (Decryption) | Nessie test | Attacs | Paper | License / Patents |
Streamciphers
Name | Variant | Language | Size (Flash) (Bytes) | Size (Context) (Bytes) | Size (Stack) (Bytes) | Keysize (Bits) | Output size (Bits) | Cycles (Initialisation) | Cycles (Generation) | Attacs | Paper | License / 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 | ||||
MUGI | C | C | 3500 | 152 | 128 | 64 | 113886 | 4105 |
Hashes
Name | Variant | Language | Size (Flash) (Bytes) | Size (Context) (Bytes) | Size (Stack) (Bytes) | Hashsize (Bits) | Blockize (Bits) | Cycles (Initialisation) | Cycles (per block) | Cycles (per byte) | Cycles (Finalisation) | Attacs | Paper | License / Patents |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Blake-28 | C | C | 3508 | 53 | 192 | 224 | 512 | 343 | 71340 | 1114.69 | 71907 | |||
Blake-32 | C | C | 6684 | 53 | 192 | 256 | 512 | 344 | 71340 | 1114.69 | 71975 | |||
Blake-48 | C | C | 3508 | 101 | 376 | 384 | 1024 | 884 | 510637 | 3989.35 | 518644 | |||
Blake-64 | C | C | 6684 | 101 | 376 | 512 | 1024 | 885 | 510637 | 3989.35 | 521119 | |||
BlueMidnightWish-224 | size | C | 4478 | 68 | 288 | 224 | 512 | 404 | 109548 | 1711.69 | 220709 | |||
BlueMidnightWish-224 | C | C | 6721 | 68 | 470 | 224 | 512 | 404 | 88759 | 1386.86 | 179107 | |||
BlueMidnightWish-224 | seperate | asm | 1536 | 68 | 246 | 224 | 512 | 509 | 52979 | 827.80 | 106634 | |||
BlueMidnightWish-224 | tiny | asm | 1590 | 68 | 246 | 224 | 512 | 509 | 52979 | 827.80 | 106640 | |||
BlueMidnightWish-224 | asm | asm | 3274 | 68 | 250 | 224 | 512 | 229 | 31421 | 490.95 | 63422 | |||
BlueMidnightWish-256 | size | C | 4478 | 68 | 288 | 256 | 512 | 404 | 109548 | 1711.69 | 220737 | |||
BlueMidnightWish-256 | C | C | 6721 | 68 | 470 | 256 | 512 | 404 | 88759 | 1386.86 | 179131 | |||
BlueMidnightWish-256 | seperate | asm | 1536 | 68 | 246 | 256 | 512 | 513 | 52979 | 827.80 | 106659 | |||
BlueMidnightWish-256 | tiny | asm | 1590 | 68 | 246 | 256 | 512 | 515 | 52979 | 827.80 | 106659 | |||
BlueMidnightWish-256 | asm | asm | 3274 | 68 | 250 | 256 | 512 | 231 | 31421 | 490.95 | 63455 | |||
BlueMidnightWish-384 | size | C | 17729 | 132 | 914 | 384 | 1024 | 2004 | 382079 | 2984.99 | 767017 | |||
BlueMidnightWish-384 | C | C | 17729 | 132 | 914 | 384 | 1024 | 2004 | 382079 | 2984.99 | 767017 | |||
BlueMidnightWish-512 | size | C | 17729 | 132 | 914 | 512 | 1024 | 2005 | 382079 | 2984.99 | 767125 | |||
BlueMidnightWish-512 | C | C | 17729 | 132 | 914 | 512 | 1024 | 2005 | 382079 | 2984.99 | 767125 | |||
CubeHash-224 | C | C | 1502 | 130 | 76 | 224 | 256 | 635986 | 64027 | 2000.84 | 700639 | |||
CubeHash-256 | C | C | 1502 | 130 | 76 | 256 | 256 | 635986 | 64027 | 2000.84 | 700664 | |||
CubeHash-384 | C | C | 1502 | 130 | 76 | 384 | 256 | 635986 | 64027 | 2000.84 | 700802 | |||
CubeHash-512 | C | C | 1502 | 130 | 76 | 512 | 256 | 635986 | 64027 | 2000.84 | 700934 | |||
ECHO-224 | C | C | 4324 | 90 | 585 | 224 | 1536 | 450 | 222446 | 1158.57 | 223610 | |||
ECHO-256 | C | C | 4324 | 90 | 585 | 256 | 1536 | 454 | 222446 | 1158.57 | 223635 | |||
ECHO-384 | C | C | 4324 | 154 | 521 | 384 | 1024 | 841 | 275324 | 2150.97 | 276329 | |||
ECHO-512 | C | C | 4324 | 154 | 521 | 512 | 1024 | 828 | 275324 | 2150.97 | 276441 | |||
Groestl-224 | C | C | 2234 | 68 | 250 | 224 | 512 | 323 | 522120 | 8158.12 | 783256 | |||
Groestl-256 | C | C | 2234 | 68 | 250 | 256 | 512 | 323 | 522120 | 8158.12 | 783289 | |||
Groestl-384 | C | C | 2330 | 132 | 450 | 384 | 1024 | 662 | 1459656 | 11403.56 | 2189646 | |||
Groestl-512 | C | C | 2330 | 132 | 450 | 512 | 1024 | 661 | 1459656 | 11403.56 | 2189774 | |||
Keccak-224 | C | C | 2889 | 206 | 412 | 224 | 1152 | 1049 | 642795 | 4463.85 | 643979 | |||
Keccak-256 | C | C | 2889 | 206 | 404 | 256 | 1088 | 1049 | 642707 | 4725.79 | 643875 | |||
Keccak-384 | C | C | 2889 | 206 | 372 | 384 | 832 | 1049 | 642355 | 6176.49 | 643456 | |||
Keccak-512 | C | C | 2889 | 206 | 340 | 512 | 576 | 1049 | 642003 | 8916.71 | 643043 | |||
MD5 | C | C | 2506 | 20 | 172 | 128 | 512 | 32 | 42642 | 666.28 | 43057 | |||
MD5 | asm | asm | 1686 | 20 | 117 | 128 | 512 | 32 | 18258 | 285.28 | 18556 | |||
SHA-1 | C | C | 2526 | 28 | 225 | 160 | 512 | 52 | 75766 | 1183.84 | 76762 | |||
SHA-1 | asm | asm | 1022 | 28 | 170 | 160 | 512 | 181 | 37030 | 578.59 | 37275 | |||
SHA-256 | C | C | 3240 | 40 | 405 | 256 | 512 | 225 | 177455 | 2772.73 | 181789 | |||
SHA-256 | asm | asm | 1598 | 40 | 376 | 256 | 512 | 298 | 50125 | 783.20 | 50479 | |||
Shabal-192 | C | C | 2312 | 188 | 106 | 192 | 512 | 1549 | 59423 | 928.48 | 231621 | |||
Shabal-192 | asm | asm | 1580 | 188 | 90 | 192 | 512 | 1047 | 13689 | 213.89 | 50762 | |||
Shabal-224 | C | C | 2312 | 188 | 106 | 224 | 512 | 1549 | 59423 | 928.48 | 231650 | |||
Shabal-224 | asm | asm | 1580 | 188 | 90 | 224 | 512 | 1047 | 13689 | 213.89 | 50793 | |||
Shabal-256 | C | C | 2312 | 188 | 106 | 256 | 512 | 1549 | 59423 | 928.48 | 231699 | |||
Shabal-256 | asm | asm | 1580 | 188 | 90 | 256 | 512 | 1047 | 13689 | 213.89 | 50825 | |||
Shabal-384 | C | C | 2312 | 188 | 106 | 384 | 512 | 1549 | 59423 | 928.48 | 231824 | |||
Shabal-384 | asm | asm | 1580 | 188 | 90 | 384 | 512 | 1047 | 13689 | 213.89 | 50930 | |||
Shabal-512 | C | C | 2312 | 188 | 106 | 512 | 512 | 1549 | 59423 | 928.48 | 231952 | |||
Shabal-512 | asm | asm | 1578 | 188 | 90 | 512 | 512 | 1047 | 13689 | 213.89 | 51050 | |||
Skein-1024-1024 | C | C | 7130 | 146 | 643 | 1024 | 1024 | 1124414 | 1122133 | 8766.66 | 2245416 | |||
Skein-1024-1024 | asm | asm | 2486 | 146 | 487 | 1024 | 1024 | 222141 | 220067 | 1719.27 | 441455 | |||
Skein-1024-128 | C | C | 7130 | 146 | 643 | 128 | 1024 | 1124414 | 1122133 | 8766.66 | 2244520 | |||
Skein-1024-128 | asm | asm | 2486 | 146 | 487 | 128 | 1024 | 222141 | 220067 | 1719.27 | 440669 | |||
Skein-1024-160 | C | C | 7130 | 146 | 643 | 160 | 1024 | 1124414 | 1122133 | 8766.66 | 2244552 | |||
Skein-1024-160 | asm | asm | 2486 | 146 | 487 | 160 | 1024 | 222141 | 220067 | 1719.27 | 440697 | |||
Skein-1024-224 | C | C | 7130 | 146 | 643 | 224 | 1024 | 1124414 | 1122133 | 8766.66 | 2244616 | |||
Skein-1024-224 | asm | asm | 2486 | 146 | 487 | 224 | 1024 | 222141 | 220067 | 1719.27 | 440753 | |||
Skein-1024-256 | C | C | 7130 | 146 | 643 | 256 | 1024 | 1124414 | 1122133 | 8766.66 | 2244648 | |||
Skein-1024-256 | asm | asm | 2486 | 146 | 487 | 256 | 1024 | 222141 | 220067 | 1719.27 | 440781 | |||
Skein-1024-384 | C | C | 7130 | 146 | 643 | 384 | 1024 | 1124414 | 1122133 | 8766.66 | 2244776 | |||
Skein-1024-384 | asm | asm | 2486 | 146 | 487 | 384 | 1024 | 222141 | 220067 | 1719.27 | 440893 | |||
Skein-1024-512 | C | C | 7130 | 146 | 643 | 512 | 1024 | 1124414 | 1122133 | 8766.66 | 2244904 | |||
Skein-1024-512 | asm | asm | 2486 | 146 | 487 | 512 | 1024 | 222141 | 220067 | 1719.27 | 441005 | |||
Skein-256-128 | C | C | 4986 | 50 | 281 | 128 | 256 | 233990 | 232285 | 7258.91 | 465291 | |||
Skein-256-128 | asm | asm | 2052 | 50 | 194 | 128 | 256 | 39911 | 38606 | 1206.44 | 77830 | |||
Skein-256-160 | C | C | 4986 | 50 | 281 | 160 | 256 | 233990 | 232285 | 7258.91 | 465323 | |||
Skein-256-160 | asm | asm | 2052 | 50 | 194 | 160 | 256 | 39911 | 38606 | 1206.44 | 77858 | |||
Skein-256-224 | C | C | 4986 | 50 | 281 | 224 | 256 | 233990 | 232285 | 7258.91 | 465387 | |||
Skein-256-224 | asm | asm | 2052 | 50 | 194 | 224 | 256 | 39911 | 38606 | 1206.44 | 77914 | |||
Skein-256-256 | C | C | 4986 | 50 | 281 | 256 | 256 | 233990 | 232285 | 7258.91 | 465419 | |||
Skein-256-256 | asm | asm | 2052 | 50 | 194 | 256 | 256 | 39911 | 38606 | 1206.44 | 77944 | |||
Skein-256-384 | C | C | 4986 | 50 | 281 | 384 | 256 | 233990 | 232285 | 7258.91 | 698164 | |||
Skein-256-384 | asm | asm | 2052 | 50 | 194 | 384 | 256 | 39911 | 38606 | 1206.44 | 116992 | |||
Skein-256-512 | C | C | 4986 | 50 | 281 | 512 | 256 | 233990 | 232285 | 7258.91 | 698292 | |||
Skein-256-512 | asm | asm | 2052 | 50 | 194 | 512 | 256 | 39911 | 38606 | 1206.44 | 117103 | |||
Skein-512-1024 | C | C | 5466 | 82 | 399 | 1024 | 512 | 487951 | 486054 | 7594.59 | 1460518 | |||
Skein-512-1024 | asm | asm | 2154 | 82 | 291 | 1024 | 512 | 93984 | 92429 | 1444.20 | 279124 | |||
Skein-512-128 | C | C | 5466 | 82 | 399 | 128 | 512 | 487951 | 486054 | 7594.59 | 972682 | |||
Skein-512-128 | asm | asm | 2154 | 82 | 291 | 128 | 512 | 93984 | 92429 | 1444.20 | 185447 | |||
Skein-512-160 | C | C | 5466 | 82 | 399 | 160 | 512 | 487951 | 486054 | 7594.59 | 972714 | |||
Skein-512-160 | asm | asm | 2154 | 82 | 291 | 160 | 512 | 93984 | 92429 | 1444.20 | 185475 | |||
Skein-512-224 | C | C | 5466 | 82 | 399 | 224 | 512 | 487951 | 486054 | 7594.59 | 972778 | |||
Skein-512-224 | asm | asm | 2154 | 82 | 291 | 224 | 512 | 93984 | 92429 | 1444.20 | 185531 | |||
Skein-512-256 | C | C | 5466 | 82 | 399 | 256 | 512 | 487951 | 486054 | 7594.59 | 972810 | |||
Skein-512-256 | asm | asm | 2154 | 82 | 291 | 256 | 512 | 93984 | 92429 | 1444.20 | 185559 | |||
Skein-512-384 | C | C | 5466 | 82 | 399 | 384 | 512 | 487951 | 486054 | 7594.59 | 972938 | |||
Skein-512-384 | asm | asm | 2154 | 82 | 291 | 384 | 512 | 93984 | 92429 | 1444.20 | 185671 | |||
Skein-512-512 | C | C | 5466 | 82 | 399 | 512 | 512 | 487951 | 486054 | 7594.59 | 973066 | |||
Skein-512-512 | asm | asm | 2154 | 82 | 291 | 512 | 512 | 93984 | 92429 | 1444.20 | 185785 | |||
Twister-224 | C | C | 3248 | 80 | 250 | 224 | 512 | 398 | 240983 | 3765.36 | 509259 | |||
Twister-224 | asm | asm | 1614 | 80 | 2566 | 224 | 512 | 517 | 164208 | 2565.75 | 347203 | |||
Twister-256 | C | C | 3248 | 80 | 250 | 256 | 512 | 398 | 240983 | 3765.36 | 509395 | |||
Twister-256 | asm | asm | 1614 | 80 | 228 | 256 | 512 | 395 | 164208 | 2565.75 | 347264 | |||
Twister-384 | C | C | 3822 | 144 | 252 | 384 | 512 | 715 | 269537 | 4211.52 | 860078 | |||
Twister-384 | asm | asm | 2156 | 144 | 228 | 384 | 512 | 722 | 183008 | 2859.50 | 585820 | |||
Twister-512 | C | C | 3822 | 144 | 252 | 512 | 512 | 715 | 269537 | 4211.52 | 967704 | |||
Twister-512 | asm | asm | 2156 | 144 | 228 | 512 | 512 | 723 | 183008 | 2859.50 | 659311 |
MACs
Name | Variant | Language | Size (Flash) (Bytes) | Size (Context) (Bytes) | Size (Stack) (Bytes) | Keysize (Bits) | Blockize (Bits) | Cycles (Initialisation) | Cycles (per block) | Cycles (Finalisation) | Attacs | Paper | License / Patents |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
HMAC-SHA256 | C | 2712 (incl. SHA256) | 40 | beliebig | 512 | ||||||||
HMAC-SHA1 | C | 2182 (incl. SHA1) | 28 | beliebig | 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 | Variant | Language | Size (Flash) (Bytes) | Size (Context) (Bytes) | Size (Stack) (Bytes) | Blockize (Bits) | Cycles (Input) | Cycles (Output) | Attacs | Paper | License / Patents |
---|---|---|---|---|---|---|---|---|---|---|---|
Entropium | C | 2174 | 64 | 256 |