Newer
Older
/*
* @author STF 276
* @version $Id$
* @desc This module collects external functions available
* to any function implementation in the IPv6 lirbary or
* ATS. Notice that the test case execution is only possible
* if a Platform Adapter with their implementation is used
* by the test system.
*/
module LibIpv6_ExternalFunctions {
//LibCommon
import from LibCommon_BasicTypesAndValues all;
import from LibCommon_DataStrings all;
import from LibIpv6_CommonRfcs_TypesAndValues { type all };
import from LibIpv6_Interface_TypesAndValues all;
/* @desc This external function translates an IPv6 address string
* in its octetstring representation.
* @param p_address charstring representation of an IPv6 address
* @return Ipv6Address octetstring representation
*/
external function fx_translateIpv6Address( in charstring p_address )
return Ipv6Address;
/* @desc This external function calculates the payload length
* of a IPv6 packet. If ESP Hdr is used, then payload is encrypted before calculation of the length.
* @param p_msg Ipv6 packet
* @return payload length in bytes
external function fx_payloadLength( in template Ipv6Packet p_msg )
/* @desc This external function calculates the payload length
* of a IPv6 packet
* @param p_msg Ipv6 packet
* @param p_entry Nr of Tunnelled packet within the IPv6Packet
* @return payload length in bytes
*/
external function fx_tunnelledPayloadLength( template Ipv6Packet p_msg, in UInt8 p_entry )
return UInt16;
/* @desc TODO
* @param TODO
* @return checksum value
*/
external function fx_calcPayloadChecksum(in template Ipv6Address p_srcAddress,
in template Ipv6Address p_dstAddress,
in template Ipv6Payload p_payload)
external function fx_encodeMessage (in template Ipv6Packet p_msg)
/* @desc This external function calculates the checksum for MIPv6 Header.
* If HomeAddressOption present, then this external function is called with the
* HomeAddress as Source Address
* @param p_srcAddr Source Address to be used for Checksum calculation
tepelmann
committed
* @param p_dstAddr MobileHeader
* @param p_mobileHeader MobileHeader
* @return MIPv6 Header checksum
*/
external function fx_mipHeaderChecksum( in Ipv6Address p_srcAddr,
in Ipv6Address p_dstAddr,
tepelmann
committed
in MobileHeader p_mobileHeader)
return Oct2;
/* @desc This external function calculates the length of MIPv6 Header.
tepelmann
committed
* @param p_mobileHeader MobileHeader
tepelmann
committed
external function fx_mipHeaderLength( in MobileHeader p_mobileHeader)
/* @desc This external function runs the MobileHeader through Codec and returns
* the octetstring representing the MobileHeader
*
* @param p_mobileHeader Mip Header to be encoded to octetstring
* @return octetstring
*/
external function fx_mipHdrToOct(MobileHeader p_mobileHeader)
return octetstring;
/* @desc Apply indicated Integrity algorithm to the message. Message is an octetstring.
* If e_sha1_96 is chosen, then the key input shall be ignored.
*
* @param p_integrityAlgo Cryptographic function used to compute MAC
* @param p_key Key used to compute the MAC
tepelmann
committed
external function fx_mac( IntegrityAlgo p_integrityAlgo, in octetstring p_key, in octetstring p_message)
return octetstring;
/* @desc This external function sets the test adapter with the relevant security parameters
* @param p_sa Security Association
* @return FncRetCode
external function fx_setSecurityParameters(in Sad p_sa)
return FncRetCode;
/* @desc This external function sets the test adapter with the relevant security parameters
*
* @param p_sa Security Association
* @return FncRetCode
external function fx_setIkeSecurityParameters(in IkeSad p_ikeSad)
/* @desc This external function calculates the payload length
* of an IPv6 authentication header
* @param p_authHeader Authentication Header
* @return payload length in 32-bits words
*/
external function fx_authHeaderPayloadLength(in template AuthHeader p_authHeader) return UInt8;
/* @desc This external function calculates the checksum for any
* UDP packet which contains an IKE message.
* @param p_ikemessage IKE message
* @return checksum value
*/
//external function fx_udpikeChecksum( in template IkeMsg p_ikemessage)
//return Oct2;
/* @desc This external function implements the negotiated
* pseudo random function and calcutes pseudo random value
* based on the two input strings.
* @param p_prf negotiated PseudoRandomFunction
* choice is:
* e_prfHmacMd5(1),
* e_prfHmacSha1(2),
* e_prfHmacTiger(3),
* e_prfAes128Xcbc(4)
* @param p_first, p_second input values to pseudo random function
* @return pseudo random value
*/
external function fx_pseudoRandom( in PseudoRandomFunction p_prf,
in octetstring p_first,
in octetstring p_second )
return octetstring;
/* @desc This external function implements the negotiated
* pseudo random function and calcutes the seven secrets
* based on the two input strings.
* SK_d = prf (p_first, S | 0x01)
* SK_ai = prf (p_first, SK_d | p_second | 0x02)
* SK_ar = prf (p_first, SK_ai | p_second | 0x03)
* SK_ei = prf (p_first, SK_ar | p_second | 0x04)
* SK_er = prf (p_first, SK_ei | p_second | 0x05)
* SK_pi = prf (p_first, SK_er | p_second | 0x06)
* SK_pr = prf (p_first, SK_pi | p_second | 0x07)
* @param p_prf negotiated PseudoRandomFunction
* choice is:
* e_prfHmacMd5(1),
* e_prfHmacSha1(2),
* e_prfHmacTiger(3),
* e_prfAes128Xcbc(4)
* @param p_first, p_second input values to pseudo random function
* @return pseudo random value
*/
external function fx_pseudoRandomPlus( in PseudoRandomFunction p_prf,
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
in octetstring p_first,
in octetstring p_second )
return SevenSecrets;
/* @desc This external function implements the Diffie-Hellman procedure
* and calculates the key for the Key Exchange payload to be sent to the
* peer based on the private key and the number of the Diffie-Hellman group.
* Prime and generator for the Diffie-Hellman groups are found in:
* Group 1 and 2: RFC4306 Appendix B
* Group 5, 14, 15, 16, 17 and 18: RFC3526
* @param p_diffieHellmanGroup chosen Diffie-Hellman group
* @param p_diffieHellmanPrivKey private key taken from PIXIT value
*/
external function fx_dHKeyToSend( in DiffieHellmanGroup p_diffieHellmanGroup,
in octetstring p_diffieHellmanPrivKey )
return octetstring;
/* @desc This external function implements the Diffie-Hellman procedure
* and calculates the shared secret based on the private key,
* the received key from the Key Exchange payload and the number
* of the Diffie-Hellman group.
* Prime and generator for the Diffie-Hellman groups are found in:
* Group 1 and 2: RFC4306 Appendix B
* Group 5, 14, 15, 16, 17 and 18: RFC3526
* @param p_diffieHellmanGroup chosen Diffie-Hellman group
* @param p_diffieHellmanPrivKey private key taken from PIXIT value
* @return p_receivedKey received key taken from Key Exchange payload
*/
external function fx_dHSharedSecret( in DiffieHellmanGroup p_diffieHellmanGroup,
in octetstring p_diffieHellmanPrivKey,
in octetstring p_receivedKey)
return octetstring;
/* @desc This external function runs the IkePayload through Codec and returns
* the octetstring representing the IkePayload
*
* @param p_ikePayload Ike Payload to be encoded to octetstring
* @return octetstring
*/
// external function fx_ikePLToOct(IkePayload p_ikePayload)
// return octetstring;
/* @desc This external function runs the SaProposal through Codec and returns
* the octetstring representing the SaProposal
*
* @param p_saProposal SaProposal to be encoded to octetstring
* @return octetstring
*/
// external function fx_saProposalToOct(SaProposal p_saProposal)
// return octetstring;
/* @desc This external function runs the Transform through Codec and returns
* the octetstring representing the Transform
*
* @param p_transform Transform to be encoded to octetstring
* @return octetstring
*/
// external function fx_saTransformToOct(SaTransform p_saTransform)
// return octetstring;
/* @desc This external function calculates the length of an IKE message
* based on the length of the payload(s), length of message is
* length of payload(s) plus length of IKE header which is 28
* @param p_ikepayload payload portion of IKE message
* @return length of IKE message in bytes
*/
// external function fx_ikePayloadListLength( in template IkePayloadList p_ikepayload )
// return UInt32;
/* @desc This external function runs the IkePayloadList through Codec and returns
* the octetstring representing the IkePayloadList. If encrypted payload is part of the payload list,
* then the ecncrypted octet string is returned.
*
* @param p_ikev2Header Ikev2Header to be encoded to octetstring
* @return octetstring
*/
external function fx_ikePayloadListToOct(in IkePayloadList p_ikePayloadList)
return octetstring;
/* @desc This external function runs the Ikev2Header through Codec and returns
* the octetstring representing the Ikev2Header
*
* @param p_ikev2Header Ikev2Header to be encoded to octetstring
* @return octetstring
*/
external function fx_ikev2HeaderToOct(Ikev2Header p_ikev2Header)
return octetstring;
/* @desc This external function calculates the payload length
* of the IKE encrypted payload. Before calculating the lenght, the payload is encrypted in the test adapter.
* @param p_msg Ipv6 packet
* @return payload length in bytes
*/
external function fx_ikeEncPayloadLength( in template EncryptedPayload p_msg )
return UInt16;
/* @desc This external function runs the Ipv6Payload through Codec and returns
* the octetstring representing the Ipv6Payload
*
* @param p_ipv6Payload Ipv6Payload to be encoded to octetstring
* @return octetstring
*/
//SMU 2007 to be deleted
// external function fx_ipv6PayloadToOct(Ipv6Payload p_ipv6Payload)
// return octetstring;