Commit 5682a216 authored by mullers's avatar mullers
Browse files

in f_sendIkeInit keyLen to attributes added where necessary

parent c2ea1a2b
Loading
Loading
Loading
Loading
+139 −6
Original line number Diff line number Diff line
@@ -346,6 +346,80 @@ group ipSecFns {
		return true;
	}

	//in units of octets
	function f_getIntegrKeyLen( in IntegrityAlgo p_integrityAlgo, out UInt8 p_keyLen)
	return FncRetCode {

		if(p_integrityAlgo == e_auth_hmacMd5_96){
			p_keyLen := 16;
			return e_success;	
		}
		else if(p_integrityAlgo == e_auth_hmacSha1_96){
			p_keyLen := 20;
			return e_success;	
		}
		else if(p_integrityAlgo == e_auth_desMac){
			p_keyLen := 16;
			return e_success;
		}
		else if(p_integrityAlgo == e_auth_kpdkMd5){
			p_keyLen := 16;
			return e_success;
		}
		else if(p_integrityAlgo == e_auth_aesXcbc_96){
			p_keyLen := 16;
			return e_success;
		}
		else if(p_integrityAlgo == e_auth_sha1){
			p_keyLen := 0;
			return e_success;
		}
		else if(p_integrityAlgo == e_auth_sha1_96){
			p_keyLen := 0;
			return e_success;
		}
		else if(p_integrityAlgo == e_auth_hmacSha1_64){
			p_keyLen := 20;
			return e_success;
		}
		else {
			log("**** f_getIntegrKeyLen: Error: Unknown integrity algorithm ****");
			return e_error;
		}
		
		return e_success;

	}//end function f_getIntegrKeyLen

	//in units of octets
	function f_getPrfKeyLen( in PseudoRandomFunction p_pseudoRandomFunction, out UInt8 p_keyLen)
	return FncRetCode {

		if(p_pseudoRandomFunction == e_prfHmacMd5){
			p_keyLen := 16;
			return e_success;	
		}
		else if(p_pseudoRandomFunction == e_prfHmacSha1){
			p_keyLen := 20;
			return e_success;	
		}
		else if(p_pseudoRandomFunction == e_prfHmacTiger){
			p_keyLen := 16;
			return e_success;
		}
		else if(p_pseudoRandomFunction == e_prfAes128Xcbc){
			p_keyLen := 16;
			return e_success;
		}
		else {
			log("**** f_getPrfKeyLen: Error: Unknown pseudo random function algorithm ****");
			return e_error;
		}
		
		return e_success;

	}//end function f_getPrfKeyLen
			
	//in units of octets
	function f_getEncryptionIvLen(EncryptionAlgo p_encryptionAlgo)
	runs on LibIpv6Node
@@ -385,6 +459,63 @@ group ipSecFns {
		return true;
	}

	//in units of octets
	function f_getEncrKeyLen( in EncryptionAlgo p_encryptionAlgo, out UInt8 p_keyLen)
	return FncRetCode {

		if(p_encryptionAlgo == e_encr_desIv64){
			p_keyLen := 8;
			return e_success;	
		}
		else if(p_encryptionAlgo == e_encr_des){
			p_keyLen := 8;
			return e_success;	
		}
		else if(p_encryptionAlgo == e_encr_3Des){
			p_keyLen := 24;
			return e_success;
		}
		else if(p_encryptionAlgo == e_encr_rc5){
			p_keyLen := 16;
			return e_success;
		}
		else if(p_encryptionAlgo == e_encr_idea){
			p_keyLen := 16;
			return e_success;
		}
		else if(p_encryptionAlgo == e_encr_cast){
			p_keyLen := 16;
			return e_success;
		}
		else if(p_encryptionAlgo == e_encr_blowfish){
			p_keyLen := 16;
			return e_success;
		}
		else if(p_encryptionAlgo == e_encr_3Idea){
			p_keyLen := 48;
			return e_success;
		}
		else if(p_encryptionAlgo == e_encr_desIv32){
			p_keyLen := 8;
			return e_success;
		}
		else if (p_encryptionAlgo == e_encr_aesCbc){
			p_keyLen := 16;
			return e_success;
		}
		else if(p_encryptionAlgo == e_encr_aesCtr){
			p_keyLen := 20;
			return e_success;	
		}
		else {
			log("**** f_getEncrKeyLen: Error: Unknown encryption algorithm ****");
			return e_error;
		}
		
		return e_success;

	}//end function f_getEncrKeyLen

	/*
	 * @desc 	This generates Security Parameters Index
	 * @return 	Security Parameters Index
@@ -456,11 +587,6 @@ group ipSecFns {
				ikev2Header := omit,
				ikePayloadList := omit	
			}
			//smu 2007 todo
			//if(active) {
			//	prfKeyLen := f_getKeyLen	
			//	
			//}
		}
		
		// SAD-OUT
@@ -686,6 +812,13 @@ group ipSecFns {
		
	}

//	function f_setTransformAttributeKeyLen(inout Ipv6Packet p_ipv6Packet) {
//		
//		//if (ischosen(p_ipv6Packet.IkeSaInitRequest))
//		v_activeIpv6Packet.ipv6Payload.ikeMsg
//		
//	}
	
}//end ipSecFns

} // end module LibIpv6_CommonRfcs_Functions
+4 −0
Original line number Diff line number Diff line
@@ -219,6 +219,10 @@ group rfc2460Root_Functions {
			
			// IKE message specific processing
			if(ischosen(v_activeIpv6Packet.ipv6Payload.ikeMsg)) {
				if (vc_ikeSad[0].udpTnPort == c_udpPort4500) {
					v_activeIpv6Packet.ipv6Payload.ikeMsg.padding := c_4ZeroBytes;
				}

				if(v_activeIpv6Packet.ipv6Payload.ikeMsg.msgLength == 0) {
					//calc payloadLen of UDP msg
					v_activeIpv6Packet.ipv6Payload.ikeMsg.msgLength := 	8 + f_getLenPadding(v_activeIpv6Packet.ipv6Payload.ikeMsg) +
+33 −11
Original line number Diff line number Diff line
@@ -1061,7 +1061,10 @@ group sendResponses {
		var IkeSaInitResponse v_ipPkt;
		v_ipPkt := valueof(p_IkeSaInitres);

		//smu 2007 read out keyLen + padding
		if(f_setExtensionHeaders(v_ipPkt) != e_success) {
			log(" **** f_sendIkeSaInitRsp: Error when calculating length ****");
			return e_error;
		}

		//send
		ipPort.send(v_ipPkt);
@@ -1083,6 +1086,30 @@ group establishSAFns_active {
	return FncRetCode {
		var FncRetCode v_ret := e_error;

		var SaTransform v_saTransformEncr := valueof (
			m_saTransform (
				c_moreTransform,
				c_transformTypeEncr,
				m_transformId_encr(vc_ikeSad[0].ikeEncryptionAlgo),
				omit
			)
		);

		if(	vc_ikeSad[0].ikeEncryptionAlgo == e_encr_cast
			or vc_ikeSad[0].ikeEncryptionAlgo == e_encr_blowfish
			or vc_ikeSad[0].ikeEncryptionAlgo == e_encr_aesCbc
			or vc_ikeSad[0].ikeEncryptionAlgo == e_encr_aesCtr) {
				
				v_ret := f_getEncrKeyLen(vc_ikeSad[0].ikeEncryptionAlgo, vc_ikeSad[0].ikeEncrKeyLen);
				if(v_ret != e_success) {f_selfOrClientSyncAndVerdict(c_prDone, v_ret);}
				
				v_saTransformEncr.saTransformAttributeList := valueof(
					m_saTransformAttributeList_1Elem(
						m_saTransformAttribute(vc_ikeSad[0].ikeEncrKeyLen)
					)
				);
		}

		if (vc_sad[c_saOut].ipSecProtocolMode == e_transportMode) {
														
			v_ret := f_sendIkeSaInitReq (
@@ -1105,12 +1132,7 @@ group establishSAFns_active {
								c_4Transforms,
								omit,//spiInitiator
								m_saTransformList_4Elem (
									m_saTransform (
										c_moreTransform,
										c_transformTypeEncr,
										m_transformId_encr(vc_ikeSad[0].ikeEncryptionAlgo),
										omit//Attribute SMU check needed to add key
									),
									v_saTransformEncr,
									m_saTransform (
										c_moreTransform,
										c_transformTypeInteg,
+26 −1
Original line number Diff line number Diff line
@@ -734,4 +734,29 @@ group encrPLTmplts {
}//end payloadTemplates


group attributeTmplts {

	/*
	 *	@param  p_ikePayload1 First element in SaTransformList
	 *	@param  p_ikePayload2 Second element in SaTransformList
	*/
	template SaTransformAttributeList m_saTransformAttributeList_1Elem(
		template SaTransformAttribute p_saTransformAttribute1
	) := {
			p_saTransformAttribute1
	}

	template SaTransformAttribute m_saTransformAttribute(UInt16	p_attributeValue) := {
		keyLength:= {
			attributeFormat := c_attributeFormatTv,
			attributeType := c_saTransformAttributeKeyLength,
			attributeValue := p_attributeValue
		}
	}

	
	
}//end group attributeTmplts


} // end module LibIpv6_Rfc4306Ikev2_Templates
+1 −1

File changed.

Contains only whitespace changes.