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,
in UInt8 p_nextHeader)
/* @desc This external function runs the Ipv6Packet through Codec and returns
* the octetstring representing the Ipv6Packet
*/
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
*
external function fx_setIkeSecurityParameters(in IkeSa p_ikeSa)
/* @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 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)
* The key lenghts of Encryption Key, Integrity Key and PRF Key must be set in IkeSa before fx_pseudoRandomPlus is called.
schmitting
committed
* @param p_ikeSa containing 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 IkeSa p_ikeSa,
in octetstring p_first,
in octetstring p_second )
return SevenSecrets;
schmitting
committed
/* @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
* @param p_EncIntKeys input/output value carries a record of
* encryption and integrity key lengths and key values
* Input value contains only the key lengths,
* length values set to 0 indicate that no correspondent keys need to be calculated.
* Output value contains key values taken from KEYMAT
* according to the rules of RFC4306, clause 2.17.
*/
external function fx_calculateKEYMATandDistribute ( in PseudoRandomFunction p_prf,
in octetstring p_first,
in octetstring p_second,
inout EncIntKeys p_encIntKeys)
return FncRetCode;
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
/* @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 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 length, 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;