aes_rval aes_encrypt_key192(const unsigned char *key, aes_encrypt_ctx cx[1]) { aes_32t ss[6]; cx->ks[0] = ss[0] = word_in(key, 0); cx->ks[1] = ss[1] = word_in(key, 1); cx->ks[2] = ss[2] = word_in(key, 2); cx->ks[3] = ss[3] = word_in(key, 3); cx->ks[4] = ss[4] = word_in(key, 4); cx->ks[5] = ss[5] = word_in(key, 5); #if ENC_UNROLL == NONE { aes_32t i; for(i = 0; i < (13 * N_COLS - 7) / 6; ++i) ke6(cx->ks, i); } #else ke6(cx->ks, 0); ke6(cx->ks, 1); ke6(cx->ks, 2); ke6(cx->ks, 3); ke6(cx->ks, 4); ke6(cx->ks, 5); ke6(cx->ks, 6); #endif kel6(cx->ks, 7); cx->rn = 12; #if defined( AES_ERR_CHK ) return aes_good; #endif }
aes_rval aes_encrypt_key192(const void *in_key, aes_encrypt_ctx cx[1]) { aes_32t ss[6]; cx->ks[0] = ss[0] = word_in(in_key, 0); cx->ks[1] = ss[1] = word_in(in_key, 1); cx->ks[2] = ss[2] = word_in(in_key, 2); cx->ks[3] = ss[3] = word_in(in_key, 3); cx->ks[4] = ss[4] = word_in(in_key, 4); cx->ks[5] = ss[5] = word_in(in_key, 5); #if ENC_UNROLL == NONE { aes_32t i; for(i = 0; i < (13 * N_COLS - 1) / 6; ++i) ke6(cx->ks, i); } #else ke6(cx->ks, 0); ke6(cx->ks, 1); ke6(cx->ks, 2); ke6(cx->ks, 3); ke6(cx->ks, 4); ke6(cx->ks, 5); ke6(cx->ks, 6); kel6(cx->ks, 7); #endif /* cx->ks[45] ^ cx->ks[52] ^ cx->ks[53] is zero for a 256 bit */ /* key and must be non-zero for 128 and 192 bits keys */ cx->ks[53] = cx->ks[45]; cx->ks[52] = 12; #ifdef AES_ERR_CHK return aes_good; #endif }
aes_rval ccaes_gladman_decrypt_key192(const unsigned char *key, ccaes_gladman_decrypt_ctx cx[1]) { aes_32t ss[7]; #if defined( d_vars ) d_vars; #endif cx->ks[0] = ss[0] = word_in(key, 0); cx->ks[1] = ss[1] = word_in(key, 1); cx->ks[2] = ss[2] = word_in(key, 2); cx->ks[3] = ss[3] = word_in(key, 3); #if DEC_UNROLL == NONE cx->ks[4] = ss[4] = word_in(key, 4); cx->ks[5] = ss[5] = word_in(key, 5); { aes_32t i; for(i = 0; i < (13 * N_COLS - 7) / 6; ++i) ke6(cx->ks, i); kel6(cx->ks, 7); #if !(DEC_ROUND == NO_TABLES) for(i = N_COLS; i < 12 * N_COLS; ++i) cx->ks[i] = inv_mcol(cx->ks[i]); #endif } #else cx->ks[4] = ff(ss[4] = word_in(key, 4)); cx->ks[5] = ff(ss[5] = word_in(key, 5)); kdf6(cx->ks, 0); kd6(cx->ks, 1); kd6(cx->ks, 2); kd6(cx->ks, 3); kd6(cx->ks, 4); kd6(cx->ks, 5); kd6(cx->ks, 6); kdl6(cx->ks, 7); #endif cx->rn = 12; }
aes_rval aes_decrypt_key192(const unsigned char *key, aes_decrypt_ctx cx[1]) { aes_32t ss[7]; #if defined( d_vars ) d_vars; #endif cx->ks[0] = ss[0] = word_in(key, 0); cx->ks[1] = ss[1] = word_in(key, 1); cx->ks[2] = ss[2] = word_in(key, 2); cx->ks[3] = ss[3] = word_in(key, 3); #if DEC_UNROLL == NONE cx->ks[4] = ss[4] = word_in(key, 4); cx->ks[5] = ss[5] = word_in(key, 5); { aes_32t i; for(i = 0; i < (13 * N_COLS - 7) / 6; ++i) ke6(cx->ks, i); kel6(cx->ks, 7); #if !(DEC_ROUND == NO_TABLES) for(i = N_COLS; i < 12 * N_COLS; ++i) cx->ks[i] = inv_mcol(cx->ks[i]); #endif } #else cx->ks[4] = ff(ss[4] = word_in(key, 4)); cx->ks[5] = ff(ss[5] = word_in(key, 5)); kdf6(cx->ks, 0); kd6(cx->ks, 1); kd6(cx->ks, 2); kd6(cx->ks, 3); kd6(cx->ks, 4); kd6(cx->ks, 5); kd6(cx->ks, 6); kdl6(cx->ks, 7); #endif cx->rn = 12; #if CC_AES_USE_HARDWARE bcopy(key, cx->keyBytes, 24); cx->keyLength = 24; #endif #if defined( AES_ERR_CHK ) return aes_good; #endif }
aes_rval aes_set_encrypt_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]) { aes_32t ss[8]; #if !defined(FIXED_TABLES) #ifdef GLOBALS if(!t_use(in,it)) gen_tabs(); #else if(!cx->t_ptr || !t_use(in,it)) gen_tabs(cx); #endif #endif #if !defined(BLOCK_SIZE) if(!cx->n_blk) cx->n_blk = 16; #else cx->n_blk = BLOCK_SIZE; #endif if(((klen & 7) || klen < 16 || klen > 32) && ((klen & 63) || klen < 128 || klen > 256)) { cx->n_rnd = 0; return aes_bad; } klen >>= (klen < 128 ? 2 : 5); cx->n_blk = (cx->n_blk & ~3) | 1; cx->k_sch[0] = ss[0] = word_in(in_key ); cx->k_sch[1] = ss[1] = word_in(in_key + 4); cx->k_sch[2] = ss[2] = word_in(in_key + 8); cx->k_sch[3] = ss[3] = word_in(in_key + 12); #if (BLOCK_SIZE == 16) && (ENC_UNROLL != NONE) switch(klen) { case 4: ke4(cx->k_sch, 0); ke4(cx->k_sch, 1); ke4(cx->k_sch, 2); ke4(cx->k_sch, 3); ke4(cx->k_sch, 4); ke4(cx->k_sch, 5); ke4(cx->k_sch, 6); ke4(cx->k_sch, 7); ke4(cx->k_sch, 8); kel4(cx->k_sch, 9); cx->n_rnd = 10; break; case 6: cx->k_sch[4] = ss[4] = word_in(in_key + 16); cx->k_sch[5] = ss[5] = word_in(in_key + 20); ke6(cx->k_sch, 0); ke6(cx->k_sch, 1); ke6(cx->k_sch, 2); ke6(cx->k_sch, 3); ke6(cx->k_sch, 4); ke6(cx->k_sch, 5); ke6(cx->k_sch, 6); kel6(cx->k_sch, 7); cx->n_rnd = 12; break; case 8: cx->k_sch[4] = ss[4] = word_in(in_key + 16); cx->k_sch[5] = ss[5] = word_in(in_key + 20); cx->k_sch[6] = ss[6] = word_in(in_key + 24); cx->k_sch[7] = ss[7] = word_in(in_key + 28); ke8(cx->k_sch, 0); ke8(cx->k_sch, 1); ke8(cx->k_sch, 2); ke8(cx->k_sch, 3); ke8(cx->k_sch, 4); ke8(cx->k_sch, 5); kel8(cx->k_sch, 6); cx->n_rnd = 14; break; default: ; } #else cx->n_rnd = (klen > nc ? klen : nc) + 6; { aes_32t i, l; l = (nc * cx->n_rnd + nc - 1) / klen; switch(klen) { case 4: for(i = 0; i < l; ++i) ke4(cx->k_sch, i); break; case 6: cx->k_sch[4] = ss[4] = word_in(in_key + 16); cx->k_sch[5] = ss[5] = word_in(in_key + 20); for(i = 0; i < l; ++i) ke6(cx->k_sch, i); break; case 8: cx->k_sch[4] = ss[4] = word_in(in_key + 16); cx->k_sch[5] = ss[5] = word_in(in_key + 20); cx->k_sch[6] = ss[6] = word_in(in_key + 24); cx->k_sch[7] = ss[7] = word_in(in_key + 28); for(i = 0; i < l; ++i) ke8(cx->k_sch, i); break; default: ; } } #endif return aes_good; }