proposal: Add IKEv1 transform number on which a proposal is based

This commit is contained in:
Tobias Brunner 2020-02-06 15:39:45 +01:00
parent 479c85d569
commit e630f2d373
2 changed files with 52 additions and 9 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2008-2018 Tobias Brunner * Copyright (C) 2008-2020 Tobias Brunner
* Copyright (C) 2006-2010 Martin Willi * Copyright (C) 2006-2010 Martin Willi
* Copyright (C) 2013-2015 Andreas Steffen * Copyright (C) 2013-2015 Andreas Steffen
* HSR Hochschule fuer Technik Rapperswil * HSR Hochschule fuer Technik Rapperswil
@ -70,7 +70,12 @@ struct private_proposal_t {
/** /**
* Proposal number * Proposal number
*/ */
u_int number; uint8_t number;
/**
* Transform number (IKEv1 only)
*/
uint8_t transform_number;
}; };
/** /**
@ -455,12 +460,14 @@ METHOD(proposal_t, select_proposal, proposal_t*,
if (flags & PROPOSAL_PREFER_SUPPLIED) if (flags & PROPOSAL_PREFER_SUPPLIED)
{ {
selected = proposal_create(this->protocol, this->number); selected = proposal_create_v1(this->protocol, this->number,
this->transform_number);
selected->set_spi(selected, this->spi); selected->set_spi(selected, this->spi);
} }
else else
{ {
selected = proposal_create(this->protocol, other->get_number(other)); selected = proposal_create_v1(this->protocol, other->get_number(other),
other->get_transform_number(other));
selected->set_spi(selected, other->get_spi(other)); selected->set_spi(selected, other->get_spi(other));
} }
@ -539,12 +546,18 @@ static bool algo_list_equals(private_proposal_t *this, proposal_t *other,
return equals; return equals;
} }
METHOD(proposal_t, get_number, u_int, METHOD(proposal_t, get_number, uint8_t,
private_proposal_t *this) private_proposal_t *this)
{ {
return this->number; return this->number;
} }
METHOD(proposal_t, get_transform_number, uint8_t,
private_proposal_t *this)
{
return this->transform_number;
}
METHOD(proposal_t, equals, bool, METHOD(proposal_t, equals, bool,
private_proposal_t *this, proposal_t *other) private_proposal_t *this, proposal_t *other)
{ {
@ -598,6 +611,7 @@ METHOD(proposal_t, clone_, proposal_t*,
clone->spi = this->spi; clone->spi = this->spi;
clone->number = this->number; clone->number = this->number;
clone->transform_number = this->transform_number;
return &clone->public; return &clone->public;
} }
@ -918,7 +932,8 @@ METHOD(proposal_t, destroy, void,
/* /*
* Described in header * Described in header
*/ */
proposal_t *proposal_create(protocol_id_t protocol, u_int number) proposal_t *proposal_create_v1(protocol_id_t protocol, uint8_t number,
uint8_t transform)
{ {
private_proposal_t *this; private_proposal_t *this;
@ -935,12 +950,14 @@ proposal_t *proposal_create(protocol_id_t protocol, u_int number)
.set_spi = _set_spi, .set_spi = _set_spi,
.get_spi = _get_spi, .get_spi = _get_spi,
.get_number = _get_number, .get_number = _get_number,
.get_transform_number = _get_transform_number,
.equals = _equals, .equals = _equals,
.clone = _clone_, .clone = _clone_,
.destroy = _destroy, .destroy = _destroy,
}, },
.protocol = protocol, .protocol = protocol,
.number = number, .number = number,
.transform_number = transform,
.transforms = array_create(sizeof(entry_t), 0), .transforms = array_create(sizeof(entry_t), 0),
.types = array_create(sizeof(transform_type_t), 0), .types = array_create(sizeof(transform_type_t), 0),
); );
@ -948,6 +965,14 @@ proposal_t *proposal_create(protocol_id_t protocol, u_int number)
return &this->public; return &this->public;
} }
/*
* Described in header
*/
proposal_t *proposal_create(protocol_id_t protocol, uint8_t number)
{
return proposal_create_v1(protocol, number, 0);
}
/** /**
* Add supported IKE algorithms to proposal * Add supported IKE algorithms to proposal
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2009-2019 Tobias Brunner * Copyright (C) 2009-2020 Tobias Brunner
* Copyright (C) 2006 Martin Willi * Copyright (C) 2006 Martin Willi
* HSR Hochschule fuer Technik Rapperswil * HSR Hochschule fuer Technik Rapperswil
* *
@ -181,7 +181,14 @@ struct proposal_t {
* *
* @return proposal number * @return proposal number
*/ */
u_int (*get_number)(proposal_t *this); uint8_t (*get_number)(proposal_t *this);
/**
* Get number of the transform on which this proposal is based (IKEv1 only)
*
* @return transform number (or 0)
*/
uint8_t (*get_transform_number)(proposal_t *this);
/** /**
* Check for the equality of two proposals. * Check for the equality of two proposals.
@ -212,7 +219,18 @@ struct proposal_t {
* @param number proposal number, as encoded in SA payload * @param number proposal number, as encoded in SA payload
* @return proposal_t object * @return proposal_t object
*/ */
proposal_t *proposal_create(protocol_id_t protocol, u_int number); proposal_t *proposal_create(protocol_id_t protocol, uint8_t number);
/**
* Create a proposal for IKE, ESP or AH that includes a transform number.
*
* @param protocol protocol, such as PROTO_ESP
* @param number proposal number, as encoded in SA payload
* @param transform transform number, as encoded in payload
* @return proposal_t object
*/
proposal_t *proposal_create_v1(protocol_id_t protocol, uint8_t number,
uint8_t transform);
/** /**
* Create a default proposal. * Create a default proposal.