static int ikev2_process_sa_auth(struct ikev2_initiator_data *data, const struct ikev2_hdr *hdr, struct ikev2_payloads *pl) { u8 *decrypted; size_t decrypted_len; int ret; decrypted = ikev2_decrypt_payload(data->proposal.encr, data->proposal.integ, &data->keys, 0, hdr, pl->encrypted, pl->encrypted_len, &decrypted_len); if (decrypted == NULL) return -1; ret = ikev2_process_sa_auth_decrypted(data, pl->encr_next_payload, decrypted, decrypted_len); os_free(decrypted); if (ret == 0 && !data->unknown_user) { asd_printf(ASD_DEFAULT,MSG_DEBUG, "IKEV2: Authentication completed"); data->state = IKEV2_DONE; } return ret; }
static int ikev2_process_sa_auth(struct ikev2_responder_data *data, const struct ikev2_hdr *hdr, struct ikev2_payloads *pl) { u8 *decrypted; size_t decrypted_len; int ret; decrypted = ikev2_decrypt_payload(data->proposal.encr, data->proposal.integ, &data->keys, 1, hdr, pl->encrypted, pl->encrypted_len, &decrypted_len); if (decrypted == NULL) { return -1; } ret = ikev2_process_sa_auth_decrypted(data, pl->encr_next_payload, decrypted, decrypted_len); os_free(decrypted); return ret; }