Commit ffb23776 authored by berge's avatar berge
Browse files

misc validation changes

parent bb2b1fcb
Loading
Loading
Loading
Loading
+30 −26
Original line number Diff line number Diff line
@@ -413,7 +413,7 @@ group ipSecFns {
	runs on LibIpv6Node
	return FncRetCode {
		
		var FncRetCode v_ret := e_error;
		var FncRetCode v_ret := e_success;

		//IKE

@@ -430,6 +430,21 @@ group ipSecFns {

		//smu 2007 add check for prf

		if (PX_IPSEC_CONTROL == e_manualSecParamsSetup ) {	
	
			//ESP - AH
	
			if( f_checkEncryptionKeyLen(PX_ENCRYPTION_ALGO,lengthof(PX_ESP_ENCR_KEY)) != true) {
				log("**** f_init_ipSecParams: ERROR: Incorrect key length for the selected encryption algorithm " & int2str(lengthof(PX_ESP_ENCR_KEY)) & " ****");
				return e_error;
			}
	
			if( f_checkIntegrityKeyLen(PX_INTEGRITY_ALGO, lengthof(PX_INTEGRITY_KEY)) != true) {
				log("**** f_init_ipSecParams: ERROR: Incorrect key length for the selected integrity algorithm ****");
				return e_error;
			}
		}
		else {
		vc_ikeSad[0] := {
			spiInitiator := PX_IKE_SPI,
			spiResponder := PX_IKE_SPI,
@@ -453,17 +468,6 @@ group ipSecFns {
			ikev2Header := omit,
			ikePayloadList := omit	
			}

		//ESP - AH

		if( f_checkEncryptionKeyLen(PX_ENCRYPTION_ALGO,lengthof(PX_ESP_ENCR_KEY)) != true) {
			log("**** f_init_ipSecParams: ERROR: Incorrect key length for the selected encryption algorithm ****");
			return e_error;
		}

		if( f_checkIntegrityKeyLen(PX_INTEGRITY_ALGO, lengthof(PX_INTEGRITY_KEY)) != true) {
			log("**** f_init_ipSecParams: ERROR: Incorrect key length for the selected integrity algorithm ****");
			return e_error;
		}
		
		// SAD-OUT
+4 −3
Original line number Diff line number Diff line
@@ -50,7 +50,8 @@
	*/
	external function fx_calcPayloadChecksum(in template Ipv6Address p_srcAddress,	
											 in template Ipv6Address p_dstAddress, 
											 in template Ipv6Payload p_payload) 
											 in template Ipv6Payload p_payload,
											 in UInt8 p_nextHeader) 
	return Oct2;
	
	external function fx_encodeMessage (in template Ipv6Packet p_msg)
@@ -107,10 +108,10 @@

	/* @desc 	This external function sets the test adapter with the relevant security parameters
	*			
	* @param 	p_sa Security Association
	* @param 	p_IkeSa IKE Security Association
	* @return 	FncRetCode
	*/
	external function fx_setIkeSecurityParameters(in IkeSad p_ikeSad)
	external function fx_setIkeSecurityParameters(in IkeSa p_ikeSa)
	return FncRetCode;
	
	
+26 −24
Original line number Diff line number Diff line
@@ -194,6 +194,14 @@ group rfc2460Root_Functions {
		// all extension headers have been processed
		// Is there still a payload to be processed and which has not been already processed in a recursive call?
		if (v_loop==true and ispresent(v_activeIpv6Packet.ipv6Payload)) {
			if(ischosen(v_activeIpv6Packet.ipv6Payload.ikeMsg)) {
				if(v_activeIpv6Packet.ipv6Payload.ikeMsg.msgLength == 0) {
					//calc payloadLen of UDP msg
					v_activeIpv6Packet.ipv6Payload.ikeMsg.msgLength := 	8 + f_getLenPadding(v_activeIpv6Packet.ipv6Payload.ikeMsg) +
														lengthof(fx_ikev2HeaderToOct(v_activeIpv6Packet.ipv6Payload.ikeMsg.ikev2Header))
														+ lengthof(fx_ikePayloadListToOct(v_activeIpv6Packet.ipv6Payload.ikeMsg.payloadList));
				}
			}
			v_ret := f_calcIpv6PayloadChecksum(v_pseudoSrcAddr, v_pseudoDstAddr, v_activeIpv6Packet.ipv6Payload);
		}
		v_ret := f_setAuthHeader (v_activeIpv6Packet);
@@ -312,115 +320,109 @@ group rfc2460Root_Functions {
		if(ischosen(p_ipv6Payload.echoReplyMsg)) {
			if(p_ipv6Payload.echoReplyMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.echoReplyMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.echoReplyMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.echoRequestMsg)) {
			if(p_ipv6Payload.echoRequestMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.echoRequestMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.echoRequestMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.nbrAdvMsg)) {
			if(p_ipv6Payload.nbrAdvMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.nbrAdvMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.nbrAdvMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.nbrSolMsg)) {
			if(p_ipv6Payload.nbrSolMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.nbrSolMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.nbrSolMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.routerAdvMsg)) {
			if(p_ipv6Payload.routerAdvMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.routerAdvMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.routerAdvMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.routerSolMsg)) {
			if(p_ipv6Payload.routerSolMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.routerSolMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.routerSolMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.redirectMsg)) {
			if(p_ipv6Payload.redirectMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.redirectMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.redirectMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.parameterProblemMsg)) {
			if(p_ipv6Payload.parameterProblemMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.parameterProblemMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.parameterProblemMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.timeExceededMsg)) {
			if(p_ipv6Payload.timeExceededMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.timeExceededMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.timeExceededMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.packetTooBigMsg)) {
			if(p_ipv6Payload.packetTooBigMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.packetTooBigMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.packetTooBigMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.destinationUnreachableMsg)) {
			if(p_ipv6Payload.destinationUnreachableMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.destinationUnreachableMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.destinationUnreachableMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.mobileRouterAdvMsg)) {
			if(p_ipv6Payload.mobileRouterAdvMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.mobileRouterAdvMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.mobileRouterAdvMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.homeAgentAddrDiscRequestMsg)) {
			if(p_ipv6Payload.homeAgentAddrDiscRequestMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.homeAgentAddrDiscRequestMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.homeAgentAddrDiscRequestMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.homeAgentAddrDiscReplyMsg)) {
			if(p_ipv6Payload.homeAgentAddrDiscReplyMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.homeAgentAddrDiscReplyMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.homeAgentAddrDiscReplyMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.mobilePrefixSolMsg)) {
			if(p_ipv6Payload.mobilePrefixSolMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.mobilePrefixSolMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.mobilePrefixSolMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.mobilePrefixAdvMsg)) {
			if(p_ipv6Payload.mobilePrefixAdvMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.mobilePrefixAdvMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.mobilePrefixAdvMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.otherIcmpv6Msg)) {
			if(p_ipv6Payload.otherIcmpv6Msg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.otherIcmpv6Msg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
				p_ipv6Payload.otherIcmpv6Msg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_icmpHdr);
			}
		}
		else if(ischosen(p_ipv6Payload.ikeMsg)) {
			if(p_ipv6Payload.ikeMsg.checksum == c_2ZeroBytes) {
				//calc checksum
				p_ipv6Payload.ikeMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload);
			}
			if(p_ipv6Payload.ikeMsg.msgLength == 0) {
				//calc payloadLen of UDP msg
				p_ipv6Payload.ikeMsg.msgLength := 	8 + f_getLenPadding(p_ipv6Payload.ikeMsg) +
													lengthof(fx_ikev2HeaderToOct(p_ipv6Payload.ikeMsg.ikev2Header))
													+ lengthof(fx_ikePayloadListToOct(p_ipv6Payload.ikeMsg.payloadList));
				p_ipv6Payload.ikeMsg.checksum := fx_calcPayloadChecksum (p_srcAddr, p_dstAddr, p_ipv6Payload, c_udpHdr);
			}
		}
		
+4 −4
Original line number Diff line number Diff line
@@ -81,7 +81,7 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions {
			v_ipPkt := valueof(p_rtAdv);

			//calc payloadLen
			v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);
			//v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

			//set extensionHeaders
			if(f_setExtensionHeaders(	v_ipPkt,
@@ -239,7 +239,7 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions {
			v_ipPkt := valueof(p_nbrAdv);

			//calc payloadLen
			v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);
			//v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

			//set extensionHeaders
			if(f_setExtensionHeaders(	v_ipPkt,
@@ -290,7 +290,7 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions {
			v_ipPkt := valueof(p_nbrSol);

			//calc payloadLen
			v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);
			//v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

			//set extensionHeaders
			if(f_setExtensionHeaders(	v_ipPkt,
@@ -322,7 +322,7 @@ module LibIpv6_Rfc2461NeighborDiscovery_Functions {
			v_ipPkt := valueof(p_rtrSol);

			//calc payloadLen
			v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);
			//v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

			//set extensionHeaders
			if(f_setExtensionHeaders(	v_ipPkt,
+12 −12
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ module LibIpv6_Rfc4068FastHandovers_Functions {
		v_ipPkt := valueof(p_prRtAdv);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);
		//v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//set extensionHeaders
		if(f_setExtensionHeaders(	v_ipPkt,
@@ -63,9 +63,9 @@ module LibIpv6_Rfc4068FastHandovers_Functions {
			return e_error;
		}
		//set checksum to zero
		v_ipPkt.ipv6Payload.routerAdvMsg.checksum := c_2ZeroBytes;
		//v_ipPkt.ipv6Payload.routerAdvMsg.checksum := c_2ZeroBytes;
		//calc checksum
		v_ipPkt.ipv6Payload.routerAdvMsg.checksum := fx_calcPayloadChecksum(v_ipPkt.ipv6Hdr.sourceAddress, v_ipPkt.ipv6Hdr.destinationAddress, v_ipPkt.ipv6Payload);
		//v_ipPkt.ipv6Payload.routerAdvMsg.checksum := fx_calcPayloadChecksum(v_ipPkt.ipv6Hdr.sourceAddress, v_ipPkt.ipv6Hdr.destinationAddress, v_ipPkt.ipv6Payload);
		//send
		ipPort.send(v_ipPkt);

@@ -88,7 +88,7 @@ module LibIpv6_Rfc4068FastHandovers_Functions {
		v_ipPkt := valueof(p_rtSolPr);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);
		//v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//set extensionHeaders
		if(f_setExtensionHeaders(	v_ipPkt,
@@ -98,9 +98,9 @@ module LibIpv6_Rfc4068FastHandovers_Functions {
			return e_error;
		}
		//set checksum to zero
		v_ipPkt.ipv6Payload.routerAdvMsg.checksum := c_2ZeroBytes;
		//v_ipPkt.ipv6Payload.routerAdvMsg.checksum := c_2ZeroBytes;
		//calc checksum
		v_ipPkt.ipv6Payload.routerAdvMsg.checksum := fx_calcPayloadChecksum(v_ipPkt.ipv6Hdr.sourceAddress, v_ipPkt.ipv6Hdr.destinationAddress, v_ipPkt.ipv6Payload);
		//v_ipPkt.ipv6Payload.routerAdvMsg.checksum := fx_calcPayloadChecksum(v_ipPkt.ipv6Hdr.sourceAddress, v_ipPkt.ipv6Hdr.destinationAddress, v_ipPkt.ipv6Payload);
		//send
		ipPort.send(v_ipPkt);

@@ -123,7 +123,7 @@ module LibIpv6_Rfc4068FastHandovers_Functions {
		v_ipPkt := valueof(p_hoInit);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);
		//v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//set extensionHeaders
		if(f_setExtensionHeaders(	v_ipPkt,
@@ -133,9 +133,9 @@ module LibIpv6_Rfc4068FastHandovers_Functions {
			return e_error;
		}
		//set checksum to zero
		v_ipPkt.ipv6Payload.routerAdvMsg.checksum := c_2ZeroBytes;
		//v_ipPkt.ipv6Payload.routerAdvMsg.checksum := c_2ZeroBytes;
		//calc checksum
		v_ipPkt.ipv6Payload.routerAdvMsg.checksum := fx_calcPayloadChecksum(v_ipPkt.ipv6Hdr.sourceAddress, v_ipPkt.ipv6Hdr.destinationAddress, v_ipPkt.ipv6Payload);
		//v_ipPkt.ipv6Payload.routerAdvMsg.checksum := fx_calcPayloadChecksum(v_ipPkt.ipv6Hdr.sourceAddress, v_ipPkt.ipv6Hdr.destinationAddress, v_ipPkt.ipv6Payload);
		//send
		ipPort.send(v_ipPkt);

@@ -158,7 +158,7 @@ module LibIpv6_Rfc4068FastHandovers_Functions {
		v_ipPkt := valueof(p_hoAck);

		//calc payloadLen
		v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);
		//v_ipPkt.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt);

		//set extensionHeaders
		if(f_setExtensionHeaders(	v_ipPkt,
@@ -168,9 +168,9 @@ module LibIpv6_Rfc4068FastHandovers_Functions {
			return e_error;
		}
		//set checksum to zero
		v_ipPkt.ipv6Payload.routerAdvMsg.checksum := c_2ZeroBytes;
		//v_ipPkt.ipv6Payload.routerAdvMsg.checksum := c_2ZeroBytes;
		//calc checksum
		v_ipPkt.ipv6Payload.routerAdvMsg.checksum := fx_calcPayloadChecksum(v_ipPkt.ipv6Hdr.sourceAddress, v_ipPkt.ipv6Hdr.destinationAddress, v_ipPkt.ipv6Payload);
		//v_ipPkt.ipv6Payload.routerAdvMsg.checksum := fx_calcPayloadChecksum(v_ipPkt.ipv6Hdr.sourceAddress, v_ipPkt.ipv6Hdr.destinationAddress, v_ipPkt.ipv6Payload);
		//send
		ipPort.send(v_ipPkt);

Loading