Commit 9301258c authored by alex's avatar alex
Browse files

Added functions and external functions definitions for mip/sec

parent 0f2f3eeb
Loading
Loading
Loading
Loading
+40 −0
Original line number Original line Diff line number Diff line
@@ -75,5 +75,45 @@
//	external function fx_dstOptHdrLength( in  ExtensionHeader p_extHdr) 
//	external function fx_dstOptHdrLength( in  ExtensionHeader p_extHdr) 
//	return UInt8;
//	return UInt8;


	/* @desc   This external function calculates a Message Authentication Code
	 * @param  p_key Key used to compute the MAC
	 * @param  p_message Octetstring message
	 * @param  p_crypto Cryptographic function used to compute MAC
	 * @return Message HMAC
	*/
	external function fx_computeHMAC(in octetstring p_key, in octetstring p_message, CryptoFunction p_crypto ) 
	return octetstring;

	/* @desc   This external function calculates a SHA1 hash
	 * @param  p_message Octetstring message
	 * @param  p_crypto Cryptographic function used to compute MAC
	 * @return Message hash
	*/
	external function fx_computeHash(in octetstring p_message, CryptoFunction p_crypto ) 
	return octetstring;

	/* @desc 	This external function computes the Authenticator for 
	 *          return routability procedure
	 * @param 	p_careOfAddr Care-of address
	 * @param 	p_cnAddr Address of the correspondant
	 * @param 	p_ipv6Packet Ipv6 Packet
	 * @param 	p_kbm Binding management key
	 * @return 	Authenticator
	*/
	external function fx_bindingAuthenticator(in octetstring p_careOfAddr, 
											  in Ipv6Address p_careOfAddr, 
											  in Ipv6Address cnAddr,
											  in Ipv6Packet p_ipv6Packet,
											  in octetstring p_kbm)
	return octetstring; 
	
	/* @desc 	This external function computes Integrity Check Value
	 * @param 	p_ipv6Packet Ipv6 Packet
	 * @param 	p_sa Security association
	 * @return 	Integrity Check Value
	*/
	external function fx_IntegrityCheckValue( in Ipv6Packet p_ipv6Packet,
											  in octetstring p_sa)
	return octetstring; 


}// end module LibIpv6_ExternalFunctions
}// end module LibIpv6_ExternalFunctions
+88 −0
Original line number Original line Diff line number Diff line
@@ -267,6 +267,94 @@ group extHdrFns {
		return v_ret;
		return v_ret;
	}//end function f_isPresentRoutingHeaderType2
	}//end function f_isPresentRoutingHeaderType2
		
		

	/*
	 * @desc 	This generates a random Init Cookie
	 * @return 	Init Cookie
	*/
	function f_createInitCookie()
	runs on LibIpv6Node
	return Oct8 {
		var Oct8 v_cookie := int2oct(float2int(int2float(20000-5000)*rnd())+5000, 8);

		return v_cookie;
	}//end f_createInitCookie

	/*
	 * @desc 	This generates a Home Keygen Token
	 * @param 	p_kcn Correspondant node's secret key
	 * @param 	p_homeAddr Home address
	 * @param 	p_nonce Home nonce
	 * @return 	Home Keygen Token
	*/
	function f_createHomeKeygenToken(in octetstring p_kcn, in Ipv6Address p_homeAddr, in octetstring p_nonce)
	runs on LibIpv6Node
	return Oct8 {
		var octetstring v_mac := c_8ZeroBytes;
		var Oct8 v_token := c_8ZeroBytes;
		var UInt8 i;

		v_mac := fx_computeHMAC(p_kcn, p_homeAddr & p_nonce & int2oct(0,1), e_sha1 );

		for ( i := 0; i < 8; i := i + 1 ) {
			v_token[i] := v_mac[i];
		}

		return v_token;
	}//end f_createHomeKeygenToken

	/*
	 * @desc 	This generates a Care-of Keygen Token
	 * @param 	p_kcn Correspondant node's secret key
	 * @param 	p_careOfAddr Care-of address
	 * @param 	p_nonce Home nonce
	 * @return 	Care-of Keygen Token
	*/
	function f_createCareOfKeygenToken(in octetstring p_kcn, in Ipv6Address p_careOfAddr, in octetstring p_nonce)
	runs on LibIpv6Node
	return Oct8 {
		var octetstring v_mac := c_8ZeroBytes;
		var Oct8 v_token := c_8ZeroBytes;
		var UInt8 i;

		v_mac := fx_computeHMAC(p_kcn, p_careOfAddr & p_nonce & int2oct(1,1), e_sha1 );

		for ( i := 0; i < 8; i := i + 1 ) {
			v_token[i] := v_mac[i];
		}

		return v_token;
	}//end f_createCareOfKeygenToken


	/*
	 * @desc 	This generates a Binding Management Key
	 * @param 	p_homeKeygenToken Home Keygen Token
	 * @param 	p_careOfKeygenToken Care-of Keygen Token 
	 * @return 	Binding Management Key
	*/
	function f_createBindingManagementKey(in Oct8 p_homeKeygenToken, in Oct8 p_careOfKeygenToken)
	runs on LibIpv6Node
	return Oct8 {
		var octetstring v_key := c_8ZeroBytes;

		v_key := fx_computeHash(p_homeKeygenToken & p_careOfKeygenToken, e_sha1);

		return v_key;
	}//end f_createBindingManagementKey

	/*
	 * @desc 	This generates a random Security Parameters Index
	 * @return 	Security Parameters Index
	*/
	function f_createSecurityParametersIndex()
	runs on LibIpv6Node
	return Oct4 {
		var Oct4 v_spi := int2oct(float2int(int2float(20000-5000)*rnd())+5000, 4);

		return v_spi;
	}//end f_createSecurityParametersIndex

}//end group mipHdrFns
}//end group mipHdrFns




+10 −1
Original line number Original line Diff line number Diff line
@@ -824,7 +824,16 @@ module LibIpv6_MultiRfcs_TypesAndValues {


	} // end sharedExtensionHeaders
	} // end sharedExtensionHeaders
		
		
	group security {


		type enumerated CryptoFunction {
			e_null(0),
			e_sha1(1)
		}
		with {
			encode "use=com.testingtech.ttcn.tci.*;";
		}
	} // end security




}
}