Commit d47697ef authored by seb's avatar seb
Browse files

Commit with many errors

but latest IPSec test concept started to implement
bsaed on same send/receive type + plaintext
parent ad6f48f4
Loading
Loading
Loading
Loading
+1 −54
Original line number Original line Diff line number Diff line
@@ -19,62 +19,9 @@
	import from LibIpv6_CommonRfcs_Templates all;
	import from LibIpv6_CommonRfcs_Templates all;
	import from LibIpv6_Rfc2460Root_TypesAndValues { type all; const all };
	import from LibIpv6_Rfc2460Root_TypesAndValues { type all; const all };
	//import from LibIpv6_Rfc2460Root_Templates all;
	//import from LibIpv6_Rfc2460Root_Templates all;
	import from LibIpv6_Rfc3775Mipv6_ExtHdrFunctions all;
	
	
group extHdrFns {


	/*
	 * @desc 	This goes through the extension header list and calculates length, checksum
	 *			and other specific functions of the different extension headers
	 * @param 	p_srcAddr Source Address of IPv6 packet
	 * @param 	p_dstAddr Dst Address of IPv6 packet
	 * @param 	p_extHdrList Extension Header List
	 * @return 	execution status 
	*/
	function f_setExtensionHeaders(	inout ExtensionHeaderList p_extHdrList,
									in Ipv6Address p_srcAddr,
									in Ipv6Address p_dstAddr,
									in Ipv6Packet p_ipv6Packet)
	runs on LibIpv6Node
	return FncRetCode {
		var UInt8 i;
		var Ipv6Address v_homeAddress := c_16ZeroBytes;
		var UInt8 v_nrOfTunnelHdr := 0;

		for (i:=0; i<sizeof(p_extHdrList);i:=i+1) {
			if (ischosen(p_extHdrList[i].mipHeader)) {
				if (f_isPresentHomeAddressOption(p_extHdrList, v_homeAddress) == e_success) {
					f_setMipHeader(	v_homeAddress,
									p_dstAddr,
									p_extHdrList[i].mipHeader,
									p_ipv6Packet);	
				}
				else if (f_isPresentRoutingHeaderType2(p_extHdrList, v_homeAddress) == e_success) {
					f_setMipHeader(	p_srcAddr,
									v_homeAddress,									
									p_extHdrList[i].mipHeader,
									p_ipv6Packet);	
				}
				else {
					f_setMipHeader(	p_srcAddr,
									p_dstAddr,
									p_extHdrList[i].mipHeader,
									p_ipv6Packet);
				}
			}
			else if (ischosen(p_extHdrList[i].tunneledIpv6)) {
				v_nrOfTunnelHdr := v_nrOfTunnelHdr + 1;
				p_extHdrList[i].tunneledIpv6.payloadLength := fx_tunnelledPayloadLength(p_ipv6Packet, v_nrOfTunnelHdr);
			}
		/*	else if (ischosen(p_extHdrList[i].)) {
				f_setSecurityHdr();
			}  */
		}//end for

		return e_success;
	}//end f_setExtensionHeaders


	}//end group extHdrFns


	group calcPrefixFns {
	group calcPrefixFns {
		
		
+20 −3
Original line number Original line Diff line number Diff line
@@ -402,8 +402,25 @@ module LibIpv6_CommonRfcs_TypesAndValues {


		type record EncryptResult {
		type record EncryptResult {
			octetstring		iv optional,	
			octetstring		iv optional,	
			octetstring 	espPayloadData,
			octetstring 	encryptedData optional,
			octetstring 	tfcPadding
			octetstring 	tfcPadding optional
		}

		type record IntegrityExtHdr {
			octetstring icv optional	
		}

		/*
		 * @desc PDU type to be used when building ESP payload for encryption
		*/
		//TODO as well possibe to delete this type and make Ipv6Packet.ipv6Hdr optional
		type record ModularIpv6Packet {
			Ipv6Header			ipv6Hdr optional,
			ExtensionHeaderList extHdrList optional,
			Ipv6Payload			ipv6Payload optional
	    }
		with {
			encode "TODO";
		}
		}


		} // end security
		} // end security
+34 −12
Original line number Original line Diff line number Diff line
@@ -85,11 +85,15 @@
	 * @param  p_message Octetstring message
	 * @param  p_message Octetstring message
	 * @return Message HMAC
	 * @return Message HMAC
	*/
	*/
	external function fx_encrypt( EncryptionAlgo p_encryptionAlgo, in octetstring p_key, in octetstring p_message) 
//	external function fx_encrypt( EncryptionAlgo p_encryptionAlgo, in octetstring p_key, in octetstring p_message) 
	return octetstring;
//	return octetstring;


	external function fx_encryptModularIpPacket( in IpSecProtocolMode p_ipSecProtocolMode, EncryptionAlgo p_encryptionAlgo, in octetstring p_key, in ModularIpv6Packet p_message) 
	external function fx_encryptModularIpPacket( 	in IpSecProtocolMode p_ipSecProtocolMode,
	return EncryptResult;
													in EncryptionAlgo p_encryptionAlgo,
													in octetstring p_key,
													in ModularIpv6Packet p_message,
													out EncryptResult p_encryptResult) 
	return FncRetCode;


	external function fx_decryptEspPayload( in UInt8 p_ivLength, in UInt8 p_icvLength, in IpSecProtocolMode p_ipSecProtocolMode, EncryptionAlgo p_encryptionAlgo, in octetstring p_key, in octetstring p_message) 
	external function fx_decryptEspPayload( in UInt8 p_ivLength, in UInt8 p_icvLength, in IpSecProtocolMode p_ipSecProtocolMode, EncryptionAlgo p_encryptionAlgo, in octetstring p_key, in octetstring p_message) 
	return DecryptedEspHeaderData;
	return DecryptedEspHeaderData;
@@ -103,11 +107,14 @@
	 * @param  p_message Octetstring message
	 * @param  p_message Octetstring message
	 * @return Message HMAC
	 * @return Message HMAC
	*/
	*/
	external function fx_integrity( IntegrityAlgo p_integrityAlgo, in octetstring p_key, in octetstring p_message) 
//	external function fx_integrity( IntegrityAlgo p_integrityAlgo, in octetstring p_key, in octetstring p_message) 
	return octetstring;
//	return octetstring;


	external function fx_integrityExtHdr( IntegrityAlgo p_integrityAlgo, in octetstring p_key, in ExtensionHeader p_message) 
	external function fx_integrityEspHdr( 	in IntegrityAlgo p_integrityAlgo,
	return octetstring;
											in octetstring p_key,
											in EspHeader p_espHeader,
											out IntegrityResult p_integrityResult) 
	return FncRetCode;




	/* @desc 	This external function computes the Authenticator for 
	/* @desc 	This external function computes the Authenticator for 
@@ -122,8 +129,9 @@
	external function fx_bindingAuthenticator(in Ipv6Address p_careOfAddr, 
	external function fx_bindingAuthenticator(in Ipv6Address p_careOfAddr, 
											  in Ipv6Address p_cnAddr,
											  in Ipv6Address p_cnAddr,
											  in Ipv6Packet p_ipv6Packet,
											  in Ipv6Packet p_ipv6Packet,
											  in Oct20 p_kbm)
											  in Oct20 p_kbm,
	return octetstring; 
											  out octetstring p_result)
	return FncRetCode; 
	
	
	/* @desc 	This external function computes Integrity Check Value
	/* @desc 	This external function computes Integrity Check Value
	 * @param 	p_ipv6Packet Ipv6 Packet
	 * @param 	p_ipv6Packet Ipv6 Packet
@@ -131,7 +139,21 @@
	 * @return 	Integrity Check Value
	 * @return 	Integrity Check Value
	*/
	*/
	external function fx_integrityCheckValue( in Ipv6Packet p_ipv6Packet,
	external function fx_integrityCheckValue( in Ipv6Packet p_ipv6Packet,
											  in octetstring p_sa)
											  in octetstring p_sa,
	return octetstring; 
											  out octetstring p_result)
	return FncRetCode;

	/* @desc 	This external function returns the padding octets that
	 *			are needed to align to a given Byte Boundary.
	 *			Example: Byte Boundary == 4
	 *			If lenghtof EspHeader is 3, then result = 1
	 * @param 	p_byteBoundary Align to a multiple of this value
	 * @param 	p_espHeader ESP-HDR to be aligned
	 * @return 	Padding needed to align
	*/
	external function fx_byteAlignEspHeader(	in UInt8 p_byteBoundary,
												in EspHeader p_espHeader,
												out octetstring p_result)
	return FncRetCode;


}// end module LibIpv6_ExternalFunctions
}// end module LibIpv6_ExternalFunctions
+0 −13
Original line number Original line Diff line number Diff line
@@ -88,19 +88,6 @@ module LibIpv6_Interface {
		encode "TODO";
		encode "TODO";
	}
	}
	
	
	/*
	 * @desc PDU type to be used when building ESP payload for encryption
	*/
	//TODO as well possib;e todelete this type and make Ipv6Packet.ipv6Hdr optional
	type record ModularIpv6Packet {
		Ipv6Header			ipv6Hdr optional,
		ExtensionHeaderList extHdrList optional,
		Ipv6Payload			ipv6Payload optional
    }
	with {
		encode "TODO";
	}
	
	//Alias
	//Alias
	//Imported from Rfc 2463
	//Imported from Rfc 2463
	type Ipv6Packet DestinationUnreachable;
	type Ipv6Packet DestinationUnreachable;
+56 −0
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@
	import from LibIpv6_ExternalFunctions all;
	import from LibIpv6_ExternalFunctions all;
	import from LibIpv6_CommonRfcs_Functions all;
	import from LibIpv6_CommonRfcs_Functions all;
	import from LibIpv6_CommonRfcs_TypesAndValues all;
	import from LibIpv6_CommonRfcs_TypesAndValues all;
	import from LibIpv6_Rfc3775Mipv6_ExtHdrFunctions all;


	group ipv6Packets {	
	group ipv6Packets {	


@@ -54,6 +55,61 @@
		return e_success;
		return e_success;
	}//end f_sendGeneralIpv6
	}//end f_sendGeneralIpv6


	group extHdrFns {

	/*
	 * @desc 	This goes through the extension header list and calculates length, checksum
	 *			and other specific functions of the different extension headers
	 * @param 	p_srcAddr Source Address of IPv6 packet
	 * @param 	p_dstAddr Dst Address of IPv6 packet
	 * @param 	p_extHdrList Extension Header List
	 * @return 	execution status 
	*/
	function f_setExtensionHeaders(	inout ExtensionHeaderList p_extHdrList,
									in Ipv6Address p_srcAddr,
									in Ipv6Address p_dstAddr,
									in Ipv6Packet p_ipv6Packet)
	runs on LibIpv6Node
	return FncRetCode {
		var UInt8 i;
		var Ipv6Address v_homeAddress := c_16ZeroBytes;
		var UInt8 v_nrOfTunnelHdr := 0;

		for (i:=0; i<sizeof(p_extHdrList);i:=i+1) {
			if (ischosen(p_extHdrList[i].mipHeader)) {
				if (f_isPresentHomeAddressOption(p_extHdrList, v_homeAddress) == e_success) {
					f_setMipHeader(	v_homeAddress,
									p_dstAddr,
									p_extHdrList[i].mipHeader,
									p_ipv6Packet);	
				}
				else if (f_isPresentRoutingHeaderType2(p_extHdrList, v_homeAddress) == e_success) {
					f_setMipHeader(	p_srcAddr,
									v_homeAddress,									
									p_extHdrList[i].mipHeader,
									p_ipv6Packet);	
				}
				else {
					f_setMipHeader(	p_srcAddr,
									p_dstAddr,
									p_extHdrList[i].mipHeader,
									p_ipv6Packet);
				}
			}
			else if (ischosen(p_extHdrList[i].tunneledIpv6)) {
				v_nrOfTunnelHdr := v_nrOfTunnelHdr + 1;
				p_extHdrList[i].tunneledIpv6.payloadLength := fx_tunnelledPayloadLength(p_ipv6Packet, v_nrOfTunnelHdr);
			}
		/*	else if (ischosen(p_extHdrList[i].)) {
				f_setSecurityHdr();
			}  */
		}//end for

		return e_success;
	}//end f_setExtensionHeaders
		
	}//end group extHdrFns





    } //end group ipv6Packets
    } //end group ipv6Packets
Loading