/* Triple DES Iv Set, sometimes added later */ int CRYPT_TDES_IvSet(CRYPT_TDES_CTX* tdes, const unsigned char* iv) { if (tdes == NULL || iv == NULL) return BAD_FUNC_ARG; return Des3_SetIV((Des3*)tdes, iv); }
static void Des3_CaviumSetKey(Des3* des3, const byte* key, const byte* iv) { if (des3 == NULL) return; /* key[0] holds key, iv in reg */ XMEMCPY(des3->key[0], key, DES_BLOCK_SIZE*3); Des3_SetIV(des3, iv); }
void Des3_SetKey(Des3* des, const byte* key, const byte* iv, int dir) { #ifdef HAVE_CAVIUM if (des->magic == CYASSL_3DES_CAVIUM_MAGIC) return Des3_CaviumSetKey(des, key, iv); #endif DesSetKey(key + (dir == DES_ENCRYPTION ? 0 : 16), dir, des->key[0]); DesSetKey(key + 8, Reverse(dir), des->key[1]); DesSetKey(key + (dir == DES_DECRYPTION ? 0 : 16), dir, des->key[2]); Des3_SetIV(des, iv); }
void Des3_SetKey(Des3* des, const byte* key, const byte* iv, int dir) { word32 *dkey1 = des->key[0]; word32 *dkey2 = des->key[1]; word32 *dkey3 = des->key[2]; XMEMCPY(dkey1, key, 8); /* set key 1 */ XMEMCPY(dkey2, key + 8, 8); /* set key 2 */ XMEMCPY(dkey3, key + 16, 8); /* set key 3 */ ByteReverseWords(dkey1, dkey1, 8); ByteReverseWords(dkey2, dkey2, 8); ByteReverseWords(dkey3, dkey3, 8); Des3_SetIV(des, iv); }