AES finalist cipher by Anderson, Biham, and Knudsen with 32 rounds and 8 S-boxes. Uses substitution-permutation network with 128-bit blocks and 128/192/256-bit keys. Conservative security design.
| Property | Value |
|---|---|
| Category | Block Ciphers |
| Sub-category | Block Cipher |
| Security status | Not classified |
| Complexity | Advanced |
| Inventor | Ross Anderson, Eli Biham, Lars Knudsen |
| Year | 1998 |
| Origin | 🇬🇧 United Kingdom |
| Source | algorithms/block/serpent.js |
| Parameter | Supported values |
|---|---|
| Key sizes | 16 bytes (128 bits) to 32 bytes (256 bits) in steps of 8 bytes |
| Block sizes | 16 bytes (128 bits) |
Status: not classified — treat as unverified.
| Issue | Description | Mitigation |
|---|---|---|
| Performance vs AES | Slower than AES, which contributed to AES selection by NIST | AES preferred for performance-critical applications, Serpent acceptable for high-security needs |
6 vectors ship with this algorithm and run in the test suite. Byte values are hexadecimal.
Vector 1 — libgcrypt serpent_test - Serpent-128
| Field | Value |
|---|---|
key |
00000000000000000000000000000000 |
input |
d29d576fcea3a3a7ed9099f29273d78e |
expected |
b2288b968ae8b08648d1ce9606fd992d |
Vector 2 — libgcrypt serpent_test - Serpent-192
| Field | Value |
|---|---|
key |
000000000000000000000000000000000000000000000000 |
input |
d29d576fceaba3a7ed9899f2927bd78e |
expected |
130e353e1037c22405e8faefb2c3c3e9 |
Vector 3 — libgcrypt serpent_test - Serpent-256
| Field | Value |
|---|---|
key |
0000000000000000000000000000000000000000000000000000000000000000 |
input |
d095576fcea3e3a7ed98d9f29073d78e |
expected |
b90ee5862de69168f2bdd5125b45472b |
Vector 4 — libgcrypt serpent_test - Serpent-256, counting plaintext
| Field | Value |
|---|---|
key |
0000000000000000000000000000000000000000000000000000000000000000 |
input |
00000000010000000200000003000000 |
expected |
2061a42782bd52ec691ec383b03ba77c |
Vector 5 — Botan serpent.vec - variable key, single bit 0x80 in last byte
| Field | Value |
|---|---|
key |
00000000000000000000000000000080 |
input |
00000000000000000000000000000000 |
expected |
ddd26b98a5ffd82c05345a9dadbfaf49 |
Vector 6 — Botan serpent.vec - variable key, single bit 0x01 in last byte
| Field | Value |
|---|---|
key |
00000000000000000000000000000001 |
input |
00000000000000000000000000000000 |
expected |
f668c7091f81b2827da77dd419b708e1 |