/* * Raw add routine: only checks for no duplicates */ static void __alg_info_esp_add (struct alg_info_esp *alg_info , int ealg_id, unsigned ek_bits , int aalg_id, unsigned ak_bits) { struct esp_info *esp_info=alg_info->esp; unsigned cnt=alg_info->alg_info_cnt, i; /* check for overflows */ passert(cnt < elemsof(alg_info->esp)); /* dont add duplicates */ for (i=0;i<cnt;i++) if ( esp_info[i].esp_ealg_id==ealg_id && (!ek_bits || esp_info[i].esp_ealg_keylen==ek_bits) && esp_info[i].esp_aalg_id==aalg_id && (!ak_bits || esp_info[i].esp_aalg_keylen==ak_bits)) return; esp_info[cnt].esp_ealg_id=ealg_id; esp_info[cnt].esp_ealg_keylen=ek_bits; esp_info[cnt].esp_aalg_id=aalg_id; esp_info[cnt].esp_aalg_keylen=ak_bits; /* sadb values */ esp_info[cnt].encryptalg=ealg_id; esp_info[cnt].authalg=alg_info_esp_aa2sadb(aalg_id); alg_info->alg_info_cnt++; DBG(DBG_CRYPT, DBG_log("__alg_info_esp_add() " "ealg=%d aalg=%d cnt=%d", ealg_id, aalg_id, alg_info->alg_info_cnt)); }
static bool kernel_alg_db_add(struct db_context *db_ctx , struct esp_info *esp_info , lset_t policy , bool logit) { int ealg_i, aalg_i; if(policy & POLICY_ENCRYPT) { ealg_i=esp_info->esp_ealg_id; if (!ESP_EALG_PRESENT(ealg_i)) { if(logit) { openswan_loglog(RC_LOG_SERIOUS , "requested kernel enc ealg_id=%d not present" , ealg_i); } else { DBG_log("requested kernel enc ealg_id=%d not present", ealg_i); } return FALSE; } } aalg_i=alg_info_esp_aa2sadb(esp_info->esp_aalg_id); if (!ESP_AALG_PRESENT(aalg_i)) { DBG_log("kernel_alg_db_add() kernel auth " "aalg_id=%d not present", aalg_i); return FALSE; } /* do algo policy */ kernel_alg_policy_algorithms(esp_info); if(policy & POLICY_ENCRYPT) { /* open new transformation */ db_trans_add(db_ctx, ealg_i); /* add ESP auth attr */ db_attr_add_values(db_ctx, AUTH_ALGORITHM, esp_info->esp_aalg_id); /* add keylegth if specified in esp= string */ if (esp_info->esp_ealg_keylen) { db_attr_add_values(db_ctx, KEY_LENGTH, esp_info->esp_ealg_keylen); } } else if(policy & POLICY_AUTHENTICATE) { /* open new transformation */ db_trans_add(db_ctx, aalg_i); /* add ESP auth attr */ db_attr_add_values(db_ctx, AUTH_ALGORITHM, esp_info->esp_aalg_id); } return TRUE; }