Loading IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_CommonRfcs_Functions.ttcn +1 −1 Original line number Diff line number Diff line Loading @@ -12,8 +12,8 @@ import from LibCommon_DataStrings all; import from LibCommon_VerdictControl { type FncRetCode }; //LibIpv6 import from LibIpv6_ExternalFunctions all; import from LibIpv6_Interface_TypesAndValues all ; import from LibIpv6_ExternalFunctions all; import from LibIpv6_ModuleParameters all ; import from LibIpv6_CommonRfcs_TypesAndValues all; import from LibIpv6_CommonRfcs_Templates all; Loading IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_CommonRfcs_TypesAndValues.ttcn +0 −1 Original line number Diff line number Diff line Loading @@ -15,7 +15,6 @@ module LibIpv6_CommonRfcs_TypesAndValues { import from LibCommon_TextStrings all; import from LibCommon_Time all ; group DefaultConstants { const UInt16 c_defId := 10; // for ICMP echo proc const UInt16 c_defSeqNo := 20; // for ICMP echo proc Loading IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_ExternalFunctions.ttcn +1 −5 Original line number Diff line number Diff line Loading @@ -16,11 +16,7 @@ //LibIpv6 import from LibIpv6_CommonRfcs_TypesAndValues { type all }; import from LibIpv6_Interface_TypesAndValues all; import from LibIpv6_Rfc3775Mipv6_ExtHdrTypesAndValues all; import from LibIpv6_Interface_TypesAndValues all; /* @desc This external function calculates the payload length * of a IPv6 packet Loading IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Functions.ttcn +248 −8 Original line number Diff line number Diff line Loading @@ -12,17 +12,12 @@ import from LibCommon_DataStrings all; import from LibCommon_VerdictControl { type FncRetCode }; //LibIpv6 import from LibIpv6_Interface_TypesAndValues all; import from LibIpv6_Interface_Templates all; import from LibIpv6_ModuleParameters all; import from LibIpv6_ExternalFunctions all; import from LibIpv6_CommonRfcs_Functions all; import from LibIpv6_CommonRfcs_TypesAndValues all; import from LibIpv6_Rfc3775Mipv6_ExtHdrFunctions all; import from LibIpv6_ModuleParameters all; import from LibIpv6_ExternalFunctions all; import from LibIpv6_Interface_Templates all; group rfc2460Root_Functions { Loading Loading @@ -121,6 +116,251 @@ group rfc2460Root_Functions { }//end group rfc2460Root_Functions group rfc3775Mipv6_ExtHdrFunctions { //TODO check if better in CommonRfcFunctions function f_initMipSecParams() runs on LibIpv6Node { vc_mipSec.cnSimuParams := { homeNonceIndex := f_createHomeNonceIndex(), homeNonce := f_createHomeNonce(), kcn := f_createKcn(), homeKeygenToken := c_64ZeroBits, careOfKeygenToken := c_64ZeroBits, receivedHomeInitCookie := c_64ZeroBits, kbm := c_20ZeroBytes } vc_mipSec.mnSimuParams := { receivedHomeNonceIndex := c_uInt16Zero, //homeNonce := f_createHomeNonce(), //kcn := f_createKcn(), receivedHomeKeygenToken := c_64ZeroBits, receivedCareOfKeygenToken := c_64ZeroBits, homeInitCookie := f_createInitCookie(), kbm := c_20ZeroBytes } vc_mipSec.haSimuParams := vc_mipSec.cnSimuParams; }//end function f_initMipSecParams /* * @desc This goes through the Mip header and calculates length, checksum * and other specific functions of the different messages. * This function is used when sending messages. * @param p_msg ExtensionHeaderList to be treated * @return execution status */ function f_setMipHeader(in Ipv6Address p_srcAddr, in Ipv6Address p_dstAddr, inout MipHeader p_mipHeader, in Ipv6Packet p_ipv6Packet) runs on LibIpv6Node return FncRetCode { var MipHeader v_mipHeader := valueof(p_mipHeader); var Ipv6Address v_homeAddress := c_16ZeroBytes ; //if (ischosen(p_mipHeader.mipMessage.homeTestInit)) { //calc homeInitCookie //p_mipHeader.mipMessage.homeTestInit.homeInitCookie := f_createInitCookie(); //} //else if (ischosen(p_mipHeader.mipMessage.homeTest)) {//CNSimu sends this message //} //else if (ischosen(p_mipHeader.mipMessage.careOfTestInit) and (PX_TEST_IPSEC == true)) { //TODO //} //else if (ischosen(p_mipHeader.mipMessage.careOfTest) and (PX_TEST_IPSEC == true)) { //TODO //} if (ischosen(p_mipHeader.mipMessage.bindingUpdate)) { var UInt8 v_position := 0; if (f_isPresentBindingAuthorizationDataOption(p_mipHeader.mipMessage.bindingUpdate, v_position) == e_success) { var Oct20 v_bindingAuthenticator := fx_bindingAuthenticator( p_srcAddr,//careOfaddr p_dstAddr,//cnAddr p_ipv6Packet, vc_mipSec.mnSimuParams.kbm) ; p_mipHeader.mipMessage.bindingUpdate.mipOptions[v_position].mipBindingAuthorizationData := { mipOptType := 5, mipOptLen := lengthof(v_bindingAuthenticator), authenticator := v_bindingAuthenticator } } } // else if (ischosen(p_mipHeader.mipMessage.bindingAck) and (PX_TEST_IPSEC == true)) { //TODO //} //calc mipHeaderLen p_mipHeader.headerLen := fx_mipHeaderLength(p_mipHeader); //set mipChecksum to zero p_mipHeader.checksum := c_2ZeroBytes; //calc mipChecksum p_mipHeader.checksum := fx_mipHeaderChecksum( p_srcAddr, p_dstAddr, p_mipHeader); return e_success; } //TODO find appropriate location /* * @desc This generates a random Init Cookie * @return Init Cookie */ function f_createInitCookie() runs on LibIpv6Node return Bit64 { var Bit64 v_cookie := int2bit(float2int(int2float(20000-5000)*rnd())+5000, 64); return v_cookie; }//end f_createInitCookie /* * @desc This generates a random Home Nonce * @return Init Cookie */ function f_createHomeNonce() runs on LibIpv6Node return octetstring { var octetstring v_homeNonce := int2oct(float2int(int2float(20000-5000)*rnd())+5000, 10); return v_homeNonce; }//end f_createHomeNonce /* * @desc This generates a random Home Nonce Index * @return Init Cookie */ function f_createHomeNonceIndex() runs on LibIpv6Node return UInt16 { var Oct2 v_homeNonceIndex := int2oct(float2int(int2float(20000-5000)*rnd())+5000, 2); return oct2int(v_homeNonceIndex); }//end f_createHomeNonceIndex /* * @desc This generates CN's secret key * @return Init Cookie */ function f_createKcn() runs on LibIpv6Node return Oct20 { var Oct20 v_kcn := int2oct(float2int(int2float(20000-5000)*rnd())+5000, 20); return v_kcn; }//end f_createHomeNonce /* * @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 Oct20 p_kcn, in Ipv6Address p_homeAddr, in octetstring p_nonce) runs on LibIpv6Node return Bit64 { var octetstring v_mac := c_8ZeroBytes; var Oct8 v_token := c_8ZeroBytes; var UInt8 i; v_mac := fx_integrity(e_hmac_sha1_64, p_kcn, p_homeAddr & p_nonce & int2oct(0,1)); for ( i := 0; i < 8; i := i + 1 ) { v_token[i] := v_mac[i]; } return oct2bit(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 Oct20 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_integrity(e_sha1_96, p_kcn, p_careOfAddr & p_nonce & int2oct(1,1)); 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_integrity(e_sha1_96, p_homeKeygenToken & p_careOfKeygenToken, c_cryptoDummyByte); 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 /* * @desc This goes through the BindingUpdate and * checks if a AuthorizationDataOption is present. * @param p_bindingUpdate Binding Update to be treated * @param v_position Position of the AuthorizationDataOption in the MipOptionList * @return execution status */ function f_isPresentBindingAuthorizationDataOption( in BindingUpdate p_bindingUpdate, inout UInt8 v_position) runs on LibIpv6Node return FncRetCode { var FncRetCode v_ret := e_error; var UInt8 i; //select ext hdrs that need special calculation for (i:=0; i<sizeof(p_bindingUpdate.mipOptions) and (v_ret != e_success); i:=i+1) { if (ischosen(p_bindingUpdate.mipOptions[i].mipBindingAuthorizationData)) { v_position := i; v_ret := e_success; } } return v_ret; }//end function f_isPresentBindingAuthorizationDataOption }//end group rfc3775Mipv6_ExtHdrFunctions group rfc4303Esp_ExtHdrFunctions { Loading IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Templates.ttcn +206 −7 Original line number Diff line number Diff line Loading @@ -10,16 +10,11 @@ import from LibCommon_BasicTypesAndValues all; import from LibCommon_DataStrings all; //LibIpv6 import from LibIpv6_Interface_TypesAndValues all; import from LibIpv6_ExternalFunctions all; import from LibIpv6_ModuleParameters all ; import from LibIpv6_CommonRfcs_Templates all; import from LibIpv6_CommonRfcs_TypesAndValues all; //import from LibIpv6_Rfc2462StatelessAddressAutoconf_TypesAndValues all; import from LibIpv6_Interface_TypesAndValues all; import from LibIpv6_Rfc3775Mipv6_ExtHdrTypesAndValues all; import from LibIpv6_Rfc3775Mipv6_TypesAndValues all; group rfc2460Root_Templates { Loading Loading @@ -576,6 +571,210 @@ group generalIpv6MessageTemplates{ }//end group rfc2460Root_Templates group rfc3775Mipv6_ExtHdrTemplates { group mobilityHdrMessageTemplates { template MipMessage m_bindingUpdate( UInt16 p_seqNr, UInt1 p_aFlag, UInt1 p_hFlag, UInt1 p_lFlag, UInt1 p_kFlag, UInt16 p_lifeTime, template MipOptionList p_mipOptions) := { bindingUpdate := { sequenceNumber := p_seqNr, aFlag := p_aFlag, hFlag := p_hFlag, lFlag := p_lFlag, kFlag := p_kFlag, reserved := c_uInt12Zero, lifeTime := p_lifeTime, mipOptions := p_mipOptions } } template MipMessage mw_bindingUpdate( UInt1 p_aFlag, UInt1 p_hFlag, UInt1 p_lFlag, UInt1 p_kFlag, template MipOptionList p_mipOptions) := { bindingUpdate := { sequenceNumber := ?, aFlag := p_aFlag, hFlag := p_hFlag, lFlag := p_lFlag, kFlag := p_kFlag, reserved := c_uInt12Zero, lifeTime := ?, mipOptions := p_mipOptions } } template MipMessage mw_bindingUpdate_lifeTime( UInt1 p_aFlag, UInt1 p_hFlag, UInt1 p_lFlag, UInt1 p_kFlag, UInt16 p_lifetime, template MipOptionList p_mipOptions) := { bindingUpdate := { sequenceNumber := ?, aFlag := p_aFlag, hFlag := p_hFlag, lFlag := p_lFlag, kFlag := p_kFlag, reserved := c_uInt12Zero, lifeTime := p_lifetime, mipOptions := p_mipOptions } } template MipMessage m_bindingAck(UInt16 p_seqNr, UInt16 p_lifetime, template MipOptionList p_mipOptions) := { bindingAck := { status := c_mipCodeBindingUpdateAccepted, kFlag := c_kFlag0, reserved := c_uInt7Zero, sequenceNumber := p_seqNr, lifeTime := p_lifetime, mipOptions := p_mipOptions } } template MipMessage mw_bindingAck(UInt16 p_seqNr) := { bindingAck := { status := c_mipCodeBindingUpdateAccepted, kFlag := ?, reserved := ?, sequenceNumber := p_seqNr, lifeTime := ?, mipOptions := ? } } template MipMessage mw_bindingError := { bindingError := { status := ?, reserved := ?, homeAddress := ?, mipOptions := * } } template MipMessage m_hot( UInt16 p_homeNonceIndex, Bit64 p_homeInitCookie, Bit64 p_homeKeygenToken) := { homeTest := { homeNonceIndex := p_homeNonceIndex,//c_uInt16Zero, homeInitCookie := p_homeInitCookie,//c_64ZeroBits, homeKeygenToken := p_homeKeygenToken, mipOptions := omit } } template MipMessage mw_hot := { homeTest := { homeNonceIndex := ?, homeInitCookie := ?, homeKeygenToken := ?, mipOptions := * } } template MipMessage m_hoti(Bit64 p_homeInitCookie) := { homeTestInit := { reserved := c_uInt16Zero, homeInitCookie := p_homeInitCookie, mipOptions := omit } } template MipMessage mw_hoti := { homeTestInit := { reserved := ?, homeInitCookie := ?, mipOptions := * } } }//end group mobilityHdrMessageTemplates group mobilityOptTemplates { /* * @param p_dstOpt First element in the Destination option list */ template MipOptionList m_mipOptList_1Elem ( template MipOption p_mipOpt ) := { p_mipOpt } /* * @param p_dstOpt First element in the Destination option list */ template MipOptionList m_mipOptList_2Elem ( template MipOption p_mipOpt1, template MipOption p_mipOpt2 ) := { p_mipOpt1, p_mipOpt2 } template MipOption m_mipOpt_altCoa(template MipOptAltCoA p_mipOptAltCoA) := { mipOptAltCoA := p_mipOptAltCoA } template MipOption m_mipOpt_padN(template OptPadN p_optPadN) := { optPadN := p_optPadN } template MipOptAltCoA m_mipOptAltCoA(in template Ipv6Address p_addr) := { mipOptType :=3, mipOptLen := 16, alternateCoA := p_addr } template MipOptAltCoA mw_mipOptAltCoA := { mipOptType :=3, mipOptLen := 16, alternateCoA := ? } }//end group mobilityOptTemplates group mipHeaderTemplates { template ExtensionHeader m_extHdr_mipHeader ( UInt8 p_payloadProtocol, UInt8 p_mobilityHeaderType, template MipMessage p_mipMessage) := { mipHeader := { payloadProtocol := p_payloadProtocol, headerLen := c_uInt8Zero, mobilityHeaderType := p_mobilityHeaderType, reserved := c_uInt8Zero, checksum := c_2ZeroBytes, mipMessage := p_mipMessage } } template ExtensionHeader mw_extHdr_mipHeader ( UInt8 p_payloadProtocol, UInt8 p_mobilityHeaderType, template MipMessage p_mipMessage) := { mipHeader := { payloadProtocol := p_payloadProtocol, headerLen := ?, mobilityHeaderType := p_mobilityHeaderType, reserved := ?, checksum := ?, mipMessage := p_mipMessage } } }//end group mipHeaderTemplates }//end group rfc3775Mipv6_ExtHdrTemplates group rfc4302Ah_ExtHdrTemplates { Loading Loading
IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_CommonRfcs_Functions.ttcn +1 −1 Original line number Diff line number Diff line Loading @@ -12,8 +12,8 @@ import from LibCommon_DataStrings all; import from LibCommon_VerdictControl { type FncRetCode }; //LibIpv6 import from LibIpv6_ExternalFunctions all; import from LibIpv6_Interface_TypesAndValues all ; import from LibIpv6_ExternalFunctions all; import from LibIpv6_ModuleParameters all ; import from LibIpv6_CommonRfcs_TypesAndValues all; import from LibIpv6_CommonRfcs_Templates all; Loading
IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_CommonRfcs_TypesAndValues.ttcn +0 −1 Original line number Diff line number Diff line Loading @@ -15,7 +15,6 @@ module LibIpv6_CommonRfcs_TypesAndValues { import from LibCommon_TextStrings all; import from LibCommon_Time all ; group DefaultConstants { const UInt16 c_defId := 10; // for ICMP echo proc const UInt16 c_defSeqNo := 20; // for ICMP echo proc Loading
IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_ExternalFunctions.ttcn +1 −5 Original line number Diff line number Diff line Loading @@ -16,11 +16,7 @@ //LibIpv6 import from LibIpv6_CommonRfcs_TypesAndValues { type all }; import from LibIpv6_Interface_TypesAndValues all; import from LibIpv6_Rfc3775Mipv6_ExtHdrTypesAndValues all; import from LibIpv6_Interface_TypesAndValues all; /* @desc This external function calculates the payload length * of a IPv6 packet Loading
IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Functions.ttcn +248 −8 Original line number Diff line number Diff line Loading @@ -12,17 +12,12 @@ import from LibCommon_DataStrings all; import from LibCommon_VerdictControl { type FncRetCode }; //LibIpv6 import from LibIpv6_Interface_TypesAndValues all; import from LibIpv6_Interface_Templates all; import from LibIpv6_ModuleParameters all; import from LibIpv6_ExternalFunctions all; import from LibIpv6_CommonRfcs_Functions all; import from LibIpv6_CommonRfcs_TypesAndValues all; import from LibIpv6_Rfc3775Mipv6_ExtHdrFunctions all; import from LibIpv6_ModuleParameters all; import from LibIpv6_ExternalFunctions all; import from LibIpv6_Interface_Templates all; group rfc2460Root_Functions { Loading Loading @@ -121,6 +116,251 @@ group rfc2460Root_Functions { }//end group rfc2460Root_Functions group rfc3775Mipv6_ExtHdrFunctions { //TODO check if better in CommonRfcFunctions function f_initMipSecParams() runs on LibIpv6Node { vc_mipSec.cnSimuParams := { homeNonceIndex := f_createHomeNonceIndex(), homeNonce := f_createHomeNonce(), kcn := f_createKcn(), homeKeygenToken := c_64ZeroBits, careOfKeygenToken := c_64ZeroBits, receivedHomeInitCookie := c_64ZeroBits, kbm := c_20ZeroBytes } vc_mipSec.mnSimuParams := { receivedHomeNonceIndex := c_uInt16Zero, //homeNonce := f_createHomeNonce(), //kcn := f_createKcn(), receivedHomeKeygenToken := c_64ZeroBits, receivedCareOfKeygenToken := c_64ZeroBits, homeInitCookie := f_createInitCookie(), kbm := c_20ZeroBytes } vc_mipSec.haSimuParams := vc_mipSec.cnSimuParams; }//end function f_initMipSecParams /* * @desc This goes through the Mip header and calculates length, checksum * and other specific functions of the different messages. * This function is used when sending messages. * @param p_msg ExtensionHeaderList to be treated * @return execution status */ function f_setMipHeader(in Ipv6Address p_srcAddr, in Ipv6Address p_dstAddr, inout MipHeader p_mipHeader, in Ipv6Packet p_ipv6Packet) runs on LibIpv6Node return FncRetCode { var MipHeader v_mipHeader := valueof(p_mipHeader); var Ipv6Address v_homeAddress := c_16ZeroBytes ; //if (ischosen(p_mipHeader.mipMessage.homeTestInit)) { //calc homeInitCookie //p_mipHeader.mipMessage.homeTestInit.homeInitCookie := f_createInitCookie(); //} //else if (ischosen(p_mipHeader.mipMessage.homeTest)) {//CNSimu sends this message //} //else if (ischosen(p_mipHeader.mipMessage.careOfTestInit) and (PX_TEST_IPSEC == true)) { //TODO //} //else if (ischosen(p_mipHeader.mipMessage.careOfTest) and (PX_TEST_IPSEC == true)) { //TODO //} if (ischosen(p_mipHeader.mipMessage.bindingUpdate)) { var UInt8 v_position := 0; if (f_isPresentBindingAuthorizationDataOption(p_mipHeader.mipMessage.bindingUpdate, v_position) == e_success) { var Oct20 v_bindingAuthenticator := fx_bindingAuthenticator( p_srcAddr,//careOfaddr p_dstAddr,//cnAddr p_ipv6Packet, vc_mipSec.mnSimuParams.kbm) ; p_mipHeader.mipMessage.bindingUpdate.mipOptions[v_position].mipBindingAuthorizationData := { mipOptType := 5, mipOptLen := lengthof(v_bindingAuthenticator), authenticator := v_bindingAuthenticator } } } // else if (ischosen(p_mipHeader.mipMessage.bindingAck) and (PX_TEST_IPSEC == true)) { //TODO //} //calc mipHeaderLen p_mipHeader.headerLen := fx_mipHeaderLength(p_mipHeader); //set mipChecksum to zero p_mipHeader.checksum := c_2ZeroBytes; //calc mipChecksum p_mipHeader.checksum := fx_mipHeaderChecksum( p_srcAddr, p_dstAddr, p_mipHeader); return e_success; } //TODO find appropriate location /* * @desc This generates a random Init Cookie * @return Init Cookie */ function f_createInitCookie() runs on LibIpv6Node return Bit64 { var Bit64 v_cookie := int2bit(float2int(int2float(20000-5000)*rnd())+5000, 64); return v_cookie; }//end f_createInitCookie /* * @desc This generates a random Home Nonce * @return Init Cookie */ function f_createHomeNonce() runs on LibIpv6Node return octetstring { var octetstring v_homeNonce := int2oct(float2int(int2float(20000-5000)*rnd())+5000, 10); return v_homeNonce; }//end f_createHomeNonce /* * @desc This generates a random Home Nonce Index * @return Init Cookie */ function f_createHomeNonceIndex() runs on LibIpv6Node return UInt16 { var Oct2 v_homeNonceIndex := int2oct(float2int(int2float(20000-5000)*rnd())+5000, 2); return oct2int(v_homeNonceIndex); }//end f_createHomeNonceIndex /* * @desc This generates CN's secret key * @return Init Cookie */ function f_createKcn() runs on LibIpv6Node return Oct20 { var Oct20 v_kcn := int2oct(float2int(int2float(20000-5000)*rnd())+5000, 20); return v_kcn; }//end f_createHomeNonce /* * @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 Oct20 p_kcn, in Ipv6Address p_homeAddr, in octetstring p_nonce) runs on LibIpv6Node return Bit64 { var octetstring v_mac := c_8ZeroBytes; var Oct8 v_token := c_8ZeroBytes; var UInt8 i; v_mac := fx_integrity(e_hmac_sha1_64, p_kcn, p_homeAddr & p_nonce & int2oct(0,1)); for ( i := 0; i < 8; i := i + 1 ) { v_token[i] := v_mac[i]; } return oct2bit(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 Oct20 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_integrity(e_sha1_96, p_kcn, p_careOfAddr & p_nonce & int2oct(1,1)); 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_integrity(e_sha1_96, p_homeKeygenToken & p_careOfKeygenToken, c_cryptoDummyByte); 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 /* * @desc This goes through the BindingUpdate and * checks if a AuthorizationDataOption is present. * @param p_bindingUpdate Binding Update to be treated * @param v_position Position of the AuthorizationDataOption in the MipOptionList * @return execution status */ function f_isPresentBindingAuthorizationDataOption( in BindingUpdate p_bindingUpdate, inout UInt8 v_position) runs on LibIpv6Node return FncRetCode { var FncRetCode v_ret := e_error; var UInt8 i; //select ext hdrs that need special calculation for (i:=0; i<sizeof(p_bindingUpdate.mipOptions) and (v_ret != e_success); i:=i+1) { if (ischosen(p_bindingUpdate.mipOptions[i].mipBindingAuthorizationData)) { v_position := i; v_ret := e_success; } } return v_ret; }//end function f_isPresentBindingAuthorizationDataOption }//end group rfc3775Mipv6_ExtHdrFunctions group rfc4303Esp_ExtHdrFunctions { Loading
IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Templates.ttcn +206 −7 Original line number Diff line number Diff line Loading @@ -10,16 +10,11 @@ import from LibCommon_BasicTypesAndValues all; import from LibCommon_DataStrings all; //LibIpv6 import from LibIpv6_Interface_TypesAndValues all; import from LibIpv6_ExternalFunctions all; import from LibIpv6_ModuleParameters all ; import from LibIpv6_CommonRfcs_Templates all; import from LibIpv6_CommonRfcs_TypesAndValues all; //import from LibIpv6_Rfc2462StatelessAddressAutoconf_TypesAndValues all; import from LibIpv6_Interface_TypesAndValues all; import from LibIpv6_Rfc3775Mipv6_ExtHdrTypesAndValues all; import from LibIpv6_Rfc3775Mipv6_TypesAndValues all; group rfc2460Root_Templates { Loading Loading @@ -576,6 +571,210 @@ group generalIpv6MessageTemplates{ }//end group rfc2460Root_Templates group rfc3775Mipv6_ExtHdrTemplates { group mobilityHdrMessageTemplates { template MipMessage m_bindingUpdate( UInt16 p_seqNr, UInt1 p_aFlag, UInt1 p_hFlag, UInt1 p_lFlag, UInt1 p_kFlag, UInt16 p_lifeTime, template MipOptionList p_mipOptions) := { bindingUpdate := { sequenceNumber := p_seqNr, aFlag := p_aFlag, hFlag := p_hFlag, lFlag := p_lFlag, kFlag := p_kFlag, reserved := c_uInt12Zero, lifeTime := p_lifeTime, mipOptions := p_mipOptions } } template MipMessage mw_bindingUpdate( UInt1 p_aFlag, UInt1 p_hFlag, UInt1 p_lFlag, UInt1 p_kFlag, template MipOptionList p_mipOptions) := { bindingUpdate := { sequenceNumber := ?, aFlag := p_aFlag, hFlag := p_hFlag, lFlag := p_lFlag, kFlag := p_kFlag, reserved := c_uInt12Zero, lifeTime := ?, mipOptions := p_mipOptions } } template MipMessage mw_bindingUpdate_lifeTime( UInt1 p_aFlag, UInt1 p_hFlag, UInt1 p_lFlag, UInt1 p_kFlag, UInt16 p_lifetime, template MipOptionList p_mipOptions) := { bindingUpdate := { sequenceNumber := ?, aFlag := p_aFlag, hFlag := p_hFlag, lFlag := p_lFlag, kFlag := p_kFlag, reserved := c_uInt12Zero, lifeTime := p_lifetime, mipOptions := p_mipOptions } } template MipMessage m_bindingAck(UInt16 p_seqNr, UInt16 p_lifetime, template MipOptionList p_mipOptions) := { bindingAck := { status := c_mipCodeBindingUpdateAccepted, kFlag := c_kFlag0, reserved := c_uInt7Zero, sequenceNumber := p_seqNr, lifeTime := p_lifetime, mipOptions := p_mipOptions } } template MipMessage mw_bindingAck(UInt16 p_seqNr) := { bindingAck := { status := c_mipCodeBindingUpdateAccepted, kFlag := ?, reserved := ?, sequenceNumber := p_seqNr, lifeTime := ?, mipOptions := ? } } template MipMessage mw_bindingError := { bindingError := { status := ?, reserved := ?, homeAddress := ?, mipOptions := * } } template MipMessage m_hot( UInt16 p_homeNonceIndex, Bit64 p_homeInitCookie, Bit64 p_homeKeygenToken) := { homeTest := { homeNonceIndex := p_homeNonceIndex,//c_uInt16Zero, homeInitCookie := p_homeInitCookie,//c_64ZeroBits, homeKeygenToken := p_homeKeygenToken, mipOptions := omit } } template MipMessage mw_hot := { homeTest := { homeNonceIndex := ?, homeInitCookie := ?, homeKeygenToken := ?, mipOptions := * } } template MipMessage m_hoti(Bit64 p_homeInitCookie) := { homeTestInit := { reserved := c_uInt16Zero, homeInitCookie := p_homeInitCookie, mipOptions := omit } } template MipMessage mw_hoti := { homeTestInit := { reserved := ?, homeInitCookie := ?, mipOptions := * } } }//end group mobilityHdrMessageTemplates group mobilityOptTemplates { /* * @param p_dstOpt First element in the Destination option list */ template MipOptionList m_mipOptList_1Elem ( template MipOption p_mipOpt ) := { p_mipOpt } /* * @param p_dstOpt First element in the Destination option list */ template MipOptionList m_mipOptList_2Elem ( template MipOption p_mipOpt1, template MipOption p_mipOpt2 ) := { p_mipOpt1, p_mipOpt2 } template MipOption m_mipOpt_altCoa(template MipOptAltCoA p_mipOptAltCoA) := { mipOptAltCoA := p_mipOptAltCoA } template MipOption m_mipOpt_padN(template OptPadN p_optPadN) := { optPadN := p_optPadN } template MipOptAltCoA m_mipOptAltCoA(in template Ipv6Address p_addr) := { mipOptType :=3, mipOptLen := 16, alternateCoA := p_addr } template MipOptAltCoA mw_mipOptAltCoA := { mipOptType :=3, mipOptLen := 16, alternateCoA := ? } }//end group mobilityOptTemplates group mipHeaderTemplates { template ExtensionHeader m_extHdr_mipHeader ( UInt8 p_payloadProtocol, UInt8 p_mobilityHeaderType, template MipMessage p_mipMessage) := { mipHeader := { payloadProtocol := p_payloadProtocol, headerLen := c_uInt8Zero, mobilityHeaderType := p_mobilityHeaderType, reserved := c_uInt8Zero, checksum := c_2ZeroBytes, mipMessage := p_mipMessage } } template ExtensionHeader mw_extHdr_mipHeader ( UInt8 p_payloadProtocol, UInt8 p_mobilityHeaderType, template MipMessage p_mipMessage) := { mipHeader := { payloadProtocol := p_payloadProtocol, headerLen := ?, mobilityHeaderType := p_mobilityHeaderType, reserved := ?, checksum := ?, mipMessage := p_mipMessage } } }//end group mipHeaderTemplates }//end group rfc3775Mipv6_ExtHdrTemplates group rfc4302Ah_ExtHdrTemplates { Loading