Commit 4a4eb2c1 authored by mullers's avatar mullers
Browse files

f_sendIkeInit und Auth wrapped

tunel/transport mode format from Ike fns deleted
parent 559edf80
Loading
Loading
Loading
Loading
+244 −220
Original line number Diff line number Diff line
@@ -709,8 +709,10 @@ module LibIpv6_Rfc4306Ikev2_Functions {
 	 * @param p_src address of IUT
	 * @param p_dst address of test node
	*/
	function f_waitForIkeSaInitRsp(	in template Ipv6Address p_src,
									in template Ipv6Address p_dst)
	function f_waitForIkeSaInitRsp(	
		template Ipv6Address p_src,
		template Ipv6Address p_dst
	)
	runs on LibIpv6Node
	return FncRetCode {
		var FncRetCode v_ret := e_success;
@@ -894,8 +896,10 @@ module LibIpv6_Rfc4306Ikev2_Functions {
 	 * @param p_src address of IUT
	 * @param p_dst address of test node
	*/
	function f_waitForIkeAuthRsp(	in template Ipv6Address p_src,
									in template Ipv6Address p_dst)
	function f_waitForIkeAuthRsp(
		template Ipv6Address p_src,
		template Ipv6Address p_dst
	)
	runs on LibIpv6Node
	return FncRetCode {
		var FncRetCode v_ret;
@@ -1093,82 +1097,13 @@ module LibIpv6_Rfc4306Ikev2_Functions {

group sendRequests {

	function f_sendIkeSaInitReq(in template IkeSaInitRequest p_ikeSaInitRequest)
	runs on LibIpv6Node
	return FncRetCode {
		var IkeSaInitRequest v_ipPkt := valueof(p_ikeSaInitRequest);
		var FncRetCode v_ret := e_error;

		if(f_setExtensionHeaders(v_ipPkt) != e_success) {
			log(" **** f_sendIkeSaInitReq: Error when calculating length ****");
			return e_error;
		}
		
		//send
		ipPort.send(v_ipPkt);

		// Save IKEv2 header and payload list in ikeSad for later use in AUTH calculation
		vc_ikeSad[0].ikev2Header := v_ipPkt.ipv6Payload.ikeMsg.ikev2Header;
		vc_ikeSad[0].ikePayloadList := v_ipPkt.ipv6Payload.ikeMsg.payloadList;

		return e_success;

	} // end f_sendIkeSaInitReq

	function f_sendIkeAuthReq(in template IkeAuthRequest p_ikeAuthRequest)
	runs on LibIpv6Node
	return FncRetCode {
		var IkeAuthRequest v_ipPkt;
		v_ipPkt := valueof(p_ikeAuthRequest);
		var FncRetCode v_ret := e_error;

		if(f_setExtensionHeaders(v_ipPkt) != e_success) {
			log(" **** f_sendIkeAuthReq: Error when calculating length ****");
			return e_error;
		}

		//send
		ipPort.send(v_ipPkt);

		return e_success;

	} // end f_sendIkeAuthReq



} // end group sendRequests

group sendResponses {

	function f_sendIkeSaInitRsp(in template IkeSaInitResponse p_IkeSaInitres)
	runs on LibIpv6Node
	return FncRetCode {
		var IkeSaInitResponse v_ipPkt;
		v_ipPkt := valueof(p_IkeSaInitres);

		if(f_setExtensionHeaders(v_ipPkt) != e_success) {
			log(" **** f_sendIkeSaInitRsp: Error when calculating length ****");
			return e_error;
		}

		//send
		ipPort.send(v_ipPkt);

		return e_success;

	} // end f_sendIkeSaInitRsp

} // end group sendResponses

group establishSAFns_active {
	
	function f_sndSaInitReqAndWaitForRsp(
	function f_createAndSendSaInitReq(
		template Ipv6Address p_addrTn,
		template Ipv6Address p_addrIut,
		template Ipv6Address p_addrTunnelStart,
		template Ipv6Address p_addrTunnelEnd)
		template Ipv6Address p_addrIut
	)
	runs on LibIpv6Node
	return FncRetCode {

		var FncRetCode v_ret := e_error;
		
		var SaTransform v_saTransformEncr := valueof (
@@ -1194,8 +1129,6 @@ group establishSAFns_active {
			);
		}
													
		if (vc_sad[c_saOut].ipSecProtocolMode == e_transportMode) {
													
		v_ret := f_sendIkeSaInitReq (
			m_ikeSaInitReq (
				p_addrTn,
@@ -1254,47 +1187,39 @@ group establishSAFns_active {
			)
		);
		if (v_ret != e_success) { return v_ret;}
		}
		else {

		//TODO tunnel mode	
		return v_ret;
	}

		// wait for IKE_SA_INIT response
		v_ret := f_waitForIkeSaInitRsp(p_addrIut,p_addrTn);//todo smu 2007 add tunnel mode
		if (v_ret != e_success) { return v_ret;}

		//fill keyLen
		v_ret := f_getEncrKeyLen(vc_ikeSad[0].ikeEncryptionAlgo, vc_ikeSad[0].ikeEncrKeyLen);
		if (v_ret != e_success) { return v_ret;}
		v_ret := f_getIntegrKeyLen(vc_ikeSad[0].ikeIntegrityAlgo, vc_ikeSad[0].ikeIntegrKeyLen);
		if (v_ret != e_success) { return v_ret;}
		v_ret := f_getPrfKeyLen(vc_ikeSad[0].ikePseudoRandomFunction, vc_ikeSad[0].prfKeyLen);
		if (v_ret != e_success) { return v_ret;}
	function f_sendIkeSaInitReq(in template IkeSaInitRequest p_ikeSaInitRequest)
	runs on LibIpv6Node
	return FncRetCode {
		var IkeSaInitRequest v_ipPkt := valueof(p_ikeSaInitRequest);
		var FncRetCode v_ret := e_error;

		//fill iv and block sizes
		v_ret := f_getIv(vc_ikeSad[0].ikeEncryptionAlgo, vc_ikeSad[0].ikeIv);
		if (v_ret != e_success) { return v_ret;}
		v_ret := f_getEncrBlockSize(vc_ikeSad[0].ikeEncryptionAlgo, vc_ikeSad[0].ikeEncrBlockSize);
		if (v_ret != e_success) { return v_ret;}
		v_ret := f_getIntegrBlockSize(vc_ikeSad[0].ikeIntegrityAlgo, vc_ikeSad[0].ikeIntegrBlockSize);
		if (v_ret != e_success) { return v_ret;}
		if(f_setExtensionHeaders(v_ipPkt) != e_success) {
			log(" **** f_sendIkeSaInitReq: Error when calculating length ****");
			return e_error;
		}
		
		// calculate and store the seven secrets
		vc_ikeSad[0].sevenSecrets := f_calculateSevenSecrets(vc_ikeSad[0]);
		//send
		ipPort.send(v_ipPkt);

		v_ret := fx_setIkeSecurityParameters(vc_ikeSad[0]);
		// Save IKEv2 header and payload list in ikeSad for later use in AUTH calculation
		vc_ikeSad[0].ikev2Header := v_ipPkt.ipv6Payload.ikeMsg.ikev2Header;
		vc_ikeSad[0].ikePayloadList := v_ipPkt.ipv6Payload.ikeMsg.payloadList;

		return v_ret;
		return e_success;

	}//end f_sndSaInitReqAndWaitForRsp
	} // end f_createAndSendIkeSaInitReq

	function f_sndAuthReqAndWaitForRsp_forEsp(
	function f_createAndSendAuthReq(
		template Ipv6Address p_addrTn,
		template Ipv6Address p_addrIut,
		template Ipv6Address p_addrTunnelStart,
		template Ipv6Address p_addrTunnelEnd)
	runs on LibIpv6Node return FncRetCode {
		template Ipv6Address p_addrIut
	)
	runs on LibIpv6Node
	return FncRetCode {

		var FncRetCode v_ret := e_error;
	
		var SaTransform v_saTransformEncr := valueof (
@@ -1320,8 +1245,6 @@ group establishSAFns_active {
			);
		}

		if (vc_sad[c_saOut].ipSecProtocolMode == e_transportMode) {
														
		v_ret := f_sendIkeAuthReq (
			m_ikeAuthReq (
				p_addrTn,
@@ -1357,8 +1280,7 @@ group establishSAFns_active {
									c_protocolId_esp,
									c_spiSize4,
									c_2Transforms,
										//int2oct(vc_sad[c_saOut].spi,c_spiSize4),
										int2oct(42,c_spiSize4),
									int2oct(vc_sad[c_saOut].spi,c_spiSize4),
									m_saTransformList_2Elem (
										v_saTransformEncr,
										m_saTransform (
@@ -1372,36 +1294,36 @@ group establishSAFns_active {
							),
							m_tsInitiatorPL(
								c_tsResponderPL,
									m_trafficSelectorList_2Elem (
								m_trafficSelectorList_1Elem (
									m_icmpv6Ts(
											0,//oct2int(in2oct(c_echoRequestMsg) & int2oct(c_icmpCode)),
											65535,
										oct2int(int2oct(c_echoRequestMsg,2) & int2oct(c_icmpCode0,2)),
										oct2int(int2oct(c_echoRequestMsg,2) & int2oct(c_icmpCode0,2)),
										p_addrTn,
										p_addrTn
										),
										m_icmpv6Ts(
											32768,//oct2int(in2oct(c_echoRequestMsg) & int2oct(c_icmpCode)),
											33023,
											p_addrTn,
											p_addrTn
										)
									)//,
									//m_icmpv6Ts(
									//	32768,
									//	33023,
									//	p_addrTn,
									//	p_addrTn
									//)
								)
							),
							m_tsResponderPL(
								c_noNextPL,
									m_trafficSelectorList_2Elem (
										m_icmpv6Ts(
											0,//c_echoRequestMsg,
											65535,
											p_addrIut,
											p_addrIut
										),
								m_trafficSelectorList_1Elem (
									m_icmpv6Ts(
											32768,//c_echoRequestMsg,
											33023,
										oct2int(int2oct(c_echoRequestMsg,2) & int2oct(c_icmpCode0,2)),
										oct2int(int2oct(c_echoRequestMsg,2) & int2oct(c_icmpCode0,2)),
										p_addrIut,
										p_addrIut
										)
									)//,
									//m_icmpv6Ts(
									//	32768,//c_echoRequestMsg,
									//	33023,
									//	p_addrIut,
									//	p_addrIut
									//)
								)
							)	
						)
@@ -1410,13 +1332,116 @@ group establishSAFns_active {
			)
		);
		if (v_ret != e_success) { return v_ret;}

		return v_ret ;

	}//end f_createAndSendAuthReq

	function f_sendIkeAuthReq(in template IkeAuthRequest p_ikeAuthRequest)
	runs on LibIpv6Node
	return FncRetCode {
		var IkeAuthRequest v_ipPkt;
		v_ipPkt := valueof(p_ikeAuthRequest);
		var FncRetCode v_ret := e_error;

		if(f_setExtensionHeaders(v_ipPkt) != e_success) {
			log(" **** f_sendIkeAuthReq: Error when calculating length ****");
			return e_error;
		}
		else {
			//tunnel todo	

		//send
		ipPort.send(v_ipPkt);

		return e_success;

	} // end f_sendIkeAuthReq



} // end group sendRequests

group sendResponses {

	function f_sendIkeSaInitRsp(in template IkeSaInitResponse p_IkeSaInitres)
	runs on LibIpv6Node
	return FncRetCode {
		var IkeSaInitResponse v_ipPkt;
		v_ipPkt := valueof(p_IkeSaInitres);

		if(f_setExtensionHeaders(v_ipPkt) != e_success) {
			log(" **** f_sendIkeSaInitRsp: Error when calculating length ****");
			return e_error;
		}

		//send
		ipPort.send(v_ipPkt);

		return e_success;

	} // end f_sendIkeSaInitRsp

} // end group sendResponses

group establishSAFns_active {
	
	function f_sndSaInitReqAndWaitForRsp(
		template Ipv6Address p_addrTn,
		template Ipv6Address p_addrIut
	)
	runs on LibIpv6Node
	return FncRetCode {
		var FncRetCode v_ret := e_error;

		v_ret := f_createAndSendSaInitReq(
			p_addrTn,
			p_addrIut
		);
		if (v_ret != e_success) { return v_ret;}
		
		// wait for IKE_SA_INIT response
		v_ret := f_waitForIkeSaInitRsp(p_addrIut,p_addrTn);
		if (v_ret != e_success) { return v_ret;}

		//fill keyLen
		v_ret := f_getEncrKeyLen(vc_ikeSad[0].ikeEncryptionAlgo, vc_ikeSad[0].ikeEncrKeyLen);
		if (v_ret != e_success) { return v_ret;}
		v_ret := f_getIntegrKeyLen(vc_ikeSad[0].ikeIntegrityAlgo, vc_ikeSad[0].ikeIntegrKeyLen);
		if (v_ret != e_success) { return v_ret;}
		v_ret := f_getPrfKeyLen(vc_ikeSad[0].ikePseudoRandomFunction, vc_ikeSad[0].prfKeyLen);
		if (v_ret != e_success) { return v_ret;}

		//fill iv and block sizes
		v_ret := f_getIv(vc_ikeSad[0].ikeEncryptionAlgo, vc_ikeSad[0].ikeIv);
		if (v_ret != e_success) { return v_ret;}
		v_ret := f_getEncrBlockSize(vc_ikeSad[0].ikeEncryptionAlgo, vc_ikeSad[0].ikeEncrBlockSize);
		if (v_ret != e_success) { return v_ret;}
		v_ret := f_getIntegrBlockSize(vc_ikeSad[0].ikeIntegrityAlgo, vc_ikeSad[0].ikeIntegrBlockSize);
		if (v_ret != e_success) { return v_ret;}

		// calculate and store the seven secrets
		vc_ikeSad[0].sevenSecrets := f_calculateSevenSecrets(vc_ikeSad[0]);

		v_ret := fx_setIkeSecurityParameters(vc_ikeSad[0]);
		
		return v_ret;
														
	}//end f_sndSaInitReqAndWaitForRsp

	function f_sndAuthReqAndWaitForRsp_forEsp(
		template Ipv6Address p_addrTn,
		template Ipv6Address p_addrIut
	)
	runs on LibIpv6Node return FncRetCode {
		var FncRetCode v_ret := e_error;

		v_ret := f_createAndSendAuthReq(
			p_addrTn,
			p_addrIut
		);
		if (v_ret != e_success) { return v_ret;}
		
		// wait for IKE_AUTH response
		v_ret := f_waitForIkeAuthRsp(p_addrIut, p_addrTn);//todo make it for tunnel mode as well
		v_ret := f_waitForIkeAuthRsp(p_addrIut, p_addrTn);
		if (v_ret != e_success) { return v_ret;}
		
		//fill keyLen
@@ -1447,9 +1472,8 @@ group establishSAFns_passive {

	function f_rcvSaInitReqAndRsp(
		template Ipv6Address p_addrTn,
		template Ipv6Address p_addrIut,
		template Ipv6Address p_addrTunnelStart,
		template Ipv6Address p_addrTunnelEnd)
		template Ipv6Address p_addrIut
	)
	runs on LibIpv6Node
	return FncRetCode {
		var FncRetCode v_ret := e_error;