static int tnepres_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen) { u8 rev_key[SERPENT_MAX_KEY_SIZE]; int i; for (i = 0; i < keylen; ++i) rev_key[keylen - i - 1] = key[i]; return serpent_setkey(tfm, rev_key, keylen); }
static int tnepres_setkey(void *ctx, const u8 *key, unsigned int keylen, u32 *flags) { u8 rev_key[SERPENT_MAX_KEY_SIZE]; int i; if ((keylen < SERPENT_MIN_KEY_SIZE) || (keylen > SERPENT_MAX_KEY_SIZE)) { *flags |= CRYPTO_TFM_RES_BAD_KEY_LEN; return -EINVAL; } for (i = 0; i < keylen; ++i) rev_key[keylen - i - 1] = key[i]; return serpent_setkey(ctx, rev_key, keylen, flags); }
int main() { uint32_t expkey[SERPENT_EXPKEY_WORDS]; uint8_t check[16]; int i, j; /* test serpent with 128key key */ for (i = 0; i < table128_num; i++) { serpent_setkey(expkey, table128[i].key, 16); /* encryption test */ serpent_encrypt(check, table128[i].plain, expkey); if (memcmp(check, table128[i].enc, 16) != 0) { fprintf(stderr, "serpent-128 encrypt test %d failed\n", i+1); return 1; } /* encrypt 99 times more */ for (j = 0; j < 99; j++) serpent_encrypt(check, check, expkey); if (memcmp(check, table128[i].enc100, 16) != 0) { fprintf(stderr, "serpent-128 100x encrypt test %d failed\n", i+1); return 1; } /* encrypt 900 times more */ for (j = 0; j < 900; j++) serpent_encrypt(check, check, expkey); if (memcmp(check, table128[i].enc1000, 16) != 0) { fprintf(stderr, "serpent-128 1000x encrypt test %d failed\n", i+1); return 1; } } /* test serpent with 256bit key */ for (i = 0; i < table256_num; i++) { serpent_setkey(expkey, table256[i].key, 32); /* encrypt test */ serpent_encrypt(check, table256[i].plain, expkey); if (memcmp(check, table256[i].enc, 16) != 0) { fprintf(stderr, "serpent-256 encrypt test %d failed\n", i+1); return 1; } /* 100x encrypt test */ for (j = 0; j < 99; j++) serpent_encrypt(check, check, expkey); if (memcmp(check, table256[i].enc100, 16) != 0) { fprintf(stderr, "serpent-256 100x encrypt test %d failed\n", i+1); return 1; } /* 1000x encrypt test */ for (j = 0; j < 900; j++) serpent_encrypt(check, check, expkey); if (memcmp(check, table256[i].enc1000, 16) != 0) { fprintf(stderr, "serpent-256 1000x encrypt test %d failed\n", i+1); return 1; } } return 0; }