Commit 775c17d7 authored by schmitting's avatar schmitting
Browse files

changes in function, return value instead v_ret

parent 4973cc8b
Loading
Loading
Loading
Loading
+72 −133
Original line number Diff line number Diff line
@@ -349,77 +349,62 @@ group ipSecFns {
	}

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

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

		return e_success;

	}//end function f_getIntegrKeyLen

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

		if(p_pseudoRandomFunction == e_prfHmacMd5){
			p_keyLen := 16;
			return e_success;	
			return 16;
		}
		else if(p_pseudoRandomFunction == e_prfHmacSha1){
			p_keyLen := 20;
			return e_success;	
			return 20;
		}
		else if(p_pseudoRandomFunction == e_prfHmacTiger){
			p_keyLen := 16;
			return e_success;
			return 16;
		}
		else if(p_pseudoRandomFunction == e_prfAes128Xcbc){
			p_keyLen := 16;
			return e_success;
			return 16;
		}

		else {
			log("**** f_getPrfKeyLen: Error: Unknown pseudo random function algorithm ****");
			return e_error;
			log("**** f_getPrfKeyLen: Error: Unknown pseudo random function ****");
			return 255;
		}

		return e_success;

	}//end function f_getPrfKeyLen
			
	//in units of octets
@@ -463,14 +448,16 @@ group ipSecFns {
		else if(p_encryptionAlgo == e_encr_null) {
			return 0;	
		}
		
		return 0;
		else {
			log("**** f_getEncryptionIvLen: Error: Unknown encryption algorithm ****");
			return 255;
		}
	}

	//in units of octets
	function f_getIv(EncryptionAlgo p_encryptionAlgo, out octetstring p_iv)
	function f_getIv(EncryptionAlgo p_encryptionAlgo)
	runs on LibIpv6Node
	return FncRetCode {
	return octetstring {
		var UInt8 v_keyLen := 0;
		
		if (p_encryptionAlgo == e_encr_desIv64){
@@ -511,126 +498,95 @@ group ipSecFns {
		}
		else {
			log("**** f_getIvLen: Error: Unknown encryption algorithm ****");
			v_keyLen := 255;
			p_iv := int2oct(float2int(int2float(20000-5000)*rnd())+5000, v_keyLen);
			return e_error;
			return 'FFFFFF'O;
		}

		p_iv := int2oct(float2int(int2float(20000-5000)*rnd())+5000, v_keyLen);
		
		return e_success;
		return int2oct(float2int(int2float(20000-5000)*rnd())+5000, v_keyLen);
	}

	//in units of octets
	function f_getEncrBlockSize(EncryptionAlgo p_encryptionAlgo, out UInt8 p_blockSize)
	function f_getEncrBlockSize(EncryptionAlgo p_encryptionAlgo)
	runs on LibIpv6Node
	return FncRetCode {
	return UInt8 {
		
		if (p_encryptionAlgo == e_encr_desIv64){
			p_blockSize := 8;
			return e_success;	
			return 8;
		}
		else if(p_encryptionAlgo == e_encr_des/*e_des_cbc*/) {
			p_blockSize := 8;
			return e_success;	
			return 8;
		}
		else if(p_encryptionAlgo == e_encr_3Des/*e_tripleDes_cbc*/) {
			p_blockSize := 8;
			return e_success;	
			return 8;
		}
		else if(p_encryptionAlgo == e_encr_rc5){
			p_blockSize := 8;
			return e_success;	
			return 8;
		}
		else if(p_encryptionAlgo == e_encr_idea){
			p_blockSize := 8;
			return e_success;
			return 8;
		}		
		else if(p_encryptionAlgo == e_encr_cast){
			p_blockSize := 8;
			return e_success;
			return 8;
		}
		else if(p_encryptionAlgo == e_encr_blowfish){
			p_blockSize := 8;
			return e_success;
			return 8;
		}
		else if(p_encryptionAlgo == e_encr_3Idea){
			p_blockSize := 8;
			return e_success;
			return 8;
		}
		else if(p_encryptionAlgo == e_encr_desIv32){
			p_blockSize := 8;
			return e_success;
			return 8;
		}	
		else if (p_encryptionAlgo == e_encr_aesCbc/*e_aes_cbc*/){
			p_blockSize := 16;
			return e_success;
			return 16;
		}
		else if(p_encryptionAlgo == e_encr_aesCtr/*e_aes_ctr*/) {
			p_blockSize := 16;
			return e_success;
			return 16;
		}
		else if(p_encryptionAlgo == e_encr_null) {
			p_blockSize := 1;
			return e_success;
			return 1;
		}
		else {
			log("**** f_getIvLen: Error: Unknown encryption algorithm ****");
			p_blockSize := 255;
			return e_error;
			return 255;
		}
		
		return e_success;
	}

	//in units of octets
	function f_getIntegrBlockSize(IntegrityAlgo p_integrityAlgo, out UInt8 p_blockSize)
	function f_getIntegrBlockSize(IntegrityAlgo p_integrityAlgo)
	runs on LibIpv6Node
	return FncRetCode {
	return UInt8 {
		
		if(p_integrityAlgo == e_auth_hmacMd5_96){
			p_blockSize := 64;
			return e_success;	
			return 64;
		}
		else if(p_integrityAlgo == e_auth_hmacSha1_96){
			p_blockSize := 64;
			return e_success;	
			return 64;
		}
		else if(p_integrityAlgo == e_auth_desMac){
			p_blockSize := 64;
			return e_success;
			return 64;
		}
		else if(p_integrityAlgo == e_auth_kpdkMd5){
			p_blockSize := 64;
			return e_success;
			return 64;
		}
		else if(p_integrityAlgo == e_auth_aesXcbc_96){
			p_blockSize := 16;
			return e_success;
			return 16;
		}
		else if(p_integrityAlgo == e_auth_sha1){
			p_blockSize := 64;
			return e_success;
			return 64;
		}
		else if(p_integrityAlgo == e_auth_sha1_96){
			p_blockSize := 64;
			return e_success;
			return 64;
		}
		else if(p_integrityAlgo == e_auth_hmacSha1_64){
			p_blockSize := 64;
			return e_success;
			return 64;
		}
		else if(p_integrityAlgo == e_auth_null){
			p_blockSize := 1;
			return e_success;
			return 1;
		}
		else {
			log("**** f_getIntegrBlockSize: Error: Unknown integrity algorithm ****");
			p_blockSize := 255;
			return e_error;
			return 255;
		}
		
		return e_success;
	}

	//in units of octets
@@ -654,61 +610,47 @@ group ipSecFns {
	}

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

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

		return e_success;

	}//end function f_getEncrKeyLen

	/*
@@ -791,12 +733,9 @@ group ipSecFns {
			}
		}

		v_ret := f_getIv(vc_sad[c_saOut].espEncryptionAlgo, v_espIv);
		if (v_ret != e_success) { return v_ret;}
		v_ret := f_getEncrBlockSize(vc_sad[c_saOut].espEncryptionAlgo, v_espEncrBlockSize);
		if (v_ret != e_success) { return v_ret;}
		v_ret := f_getIntegrBlockSize(vc_sad[c_saOut].espIntegrityAlgo, v_espIntegrBlockSize);
		if (v_ret != e_success) { return v_ret;}
		v_espIv := f_getIv(PX_ENCRYPTION_ALGO);
		v_espEncrBlockSize := f_getEncrBlockSize(PX_ENCRYPTION_ALGO);
		v_espIntegrBlockSize := f_getIntegrBlockSize(PX_INTEGRITY_ALGO);

		//TODO v_ahIntegrBlockSize
		
+18 −35
Original line number Diff line number Diff line
@@ -1196,8 +1196,7 @@ group sendRequests {
			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) { return v_ret;}
			vc_ikeSad[0].ikeEncrKeyLen := f_getEncrKeyLen(vc_ikeSad[0].ikeEncryptionAlgo);
			v_saTransformEncr.saTransformAttributeList := valueof(
				m_saTransformAttributeList_1Elem(
					m_saTransformAttribute(vc_ikeSad[0].ikeEncrKeyLen)
@@ -1322,8 +1321,7 @@ group sendRequests {
				or vc_sad[c_saOut].espEncryptionAlgo == e_encr_aesCbc
				or vc_sad[c_saOut].espEncryptionAlgo == e_encr_aesCtr) {
				
				v_ret := f_getEncrKeyLen(vc_sad[c_saOut].espEncryptionAlgo, vc_sad[c_saOut].espEncrKeyLen);
				if (v_ret != e_success) { return v_ret;}
				vc_sad[c_saOut].espEncrKeyLen := f_getEncrKeyLen(vc_sad[c_saOut].espEncryptionAlgo);
				v_saTransformEncr.saTransformAttributeList := valueof(
					m_saTransformAttributeList_1Elem(
						m_saTransformAttribute(vc_sad[c_saOut].espEncrKeyLen)
@@ -1675,8 +1673,7 @@ group sendResponses {
			or vc_sad[c_saIn].espEncryptionAlgo == e_encr_aesCbc
			or vc_sad[c_saIn].espEncryptionAlgo == e_encr_aesCtr) {
				
			v_ret := f_getEncrKeyLen(vc_sad[c_saIn].espEncryptionAlgo, vc_sad[c_saIn].espEncrKeyLen);
			if (v_ret != e_success) { return v_ret;}
			vc_sad[c_saIn].espEncrKeyLen := f_getEncrKeyLen(vc_sad[c_saIn].espEncryptionAlgo);
			v_saTransformEncr.saTransformAttributeList := valueof(
				m_saTransformAttributeList_1Elem(
					m_saTransformAttribute(vc_sad[c_saIn].espEncrKeyLen)
@@ -1803,20 +1800,14 @@ group establishSAFns_active {
		if (v_ret != e_success) { return v_ret;}

		//fill keyLen
		v_ret := f_getEncrKeyLen(vc_ikeSad[0].ikeEncryptionAlgo, vc_ikeSad[0].ikeEncrKeyLen);
		if (v_ret != e_success) { return v_ret;}
		v_ret := f_getIntegrKeyLen(vc_ikeSad[0].ikeIntegrityAlgo, vc_ikeSad[0].ikeIntegrKeyLen);
		if (v_ret != e_success) { return v_ret;}
		v_ret := f_getPrfKeyLen(vc_ikeSad[0].ikePseudoRandomFunction, vc_ikeSad[0].prfKeyLen);
		if (v_ret != e_success) { return v_ret;}
		vc_ikeSad[0].ikeEncrKeyLen := f_getEncrKeyLen(vc_ikeSad[0].ikeEncryptionAlgo);
		vc_ikeSad[0].ikeIntegrKeyLen := f_getIntegrKeyLen(vc_ikeSad[0].ikeIntegrityAlgo);
		vc_ikeSad[0].prfKeyLen := f_getPrfKeyLen(vc_ikeSad[0].ikePseudoRandomFunction);

		//fill iv and block sizes
		v_ret := f_getIv(vc_ikeSad[0].ikeEncryptionAlgo, vc_ikeSad[0].ikeIv);
		if (v_ret != e_success) { return v_ret;}
		v_ret := f_getEncrBlockSize(vc_ikeSad[0].ikeEncryptionAlgo, vc_ikeSad[0].ikeEncrBlockSize);
		if (v_ret != e_success) { return v_ret;}
		v_ret := f_getIntegrBlockSize(vc_ikeSad[0].ikeIntegrityAlgo, vc_ikeSad[0].ikeIntegrBlockSize);
		if (v_ret != e_success) { return v_ret;}
		vc_ikeSad[0].ikeIv := f_getIv(vc_ikeSad[0].ikeEncryptionAlgo);
		vc_ikeSad[0].ikeEncrBlockSize := f_getEncrBlockSize(vc_ikeSad[0].ikeEncryptionAlgo);
		vc_ikeSad[0].ikeIntegrBlockSize := f_getIntegrBlockSize(vc_ikeSad[0].ikeIntegrityAlgo);

		// calculate and store the seven secrets
		vc_ikeSad[0].sevenSecrets := f_calculateSevenSecrets(vc_ikeSad[0]);
@@ -1846,20 +1837,13 @@ group establishSAFns_active {
		if (v_ret != e_success) { return v_ret;}
		
		//fill keyLen
		vc_sad[c_saOut].espEncrKeyLen := 0;
		v_ret := f_getEncrKeyLen(vc_sad[c_saOut].espEncryptionAlgo, vc_sad[c_saOut].espEncrKeyLen);
		if (v_ret != e_success) { return v_ret;}
		vc_sad[c_saOut].espIntegrKeyLen := 0;
		v_ret := f_getIntegrKeyLen(vc_sad[c_saOut].espIntegrityAlgo, vc_sad[c_saOut].espIntegrKeyLen);
		if (v_ret != e_success) { return v_ret;}
		vc_sad[c_saOut].espEncrKeyLen := f_getEncrKeyLen(vc_sad[c_saOut].espEncryptionAlgo);
		vc_sad[c_saOut].espIntegrKeyLen := f_getIntegrKeyLen(vc_sad[c_saOut].espIntegrityAlgo);

		//fill iv and block sizes
		v_ret := f_getIv(vc_sad[c_saOut].espEncryptionAlgo, vc_sad[c_saOut].espIv);
		if (v_ret != e_success) { return v_ret;}
		v_ret := f_getEncrBlockSize(vc_sad[c_saOut].espEncryptionAlgo, vc_sad[c_saOut].espEncrBlockSize);
		if (v_ret != e_success) { return v_ret;}
		v_ret := f_getIntegrBlockSize(vc_sad[c_saOut].espIntegrityAlgo, vc_sad[c_saOut].espIntegrBlockSize);
		if (v_ret != e_success) { return v_ret;}
		vc_sad[c_saOut].espIv := f_getIv(vc_sad[c_saOut].espEncryptionAlgo);
		vc_sad[c_saOut].espEncrBlockSize := f_getEncrBlockSize(vc_sad[c_saOut].espEncryptionAlgo);
		vc_sad[c_saOut].espIntegrBlockSize := f_getIntegrBlockSize(vc_sad[c_saOut].espIntegrityAlgo);

		v_ret := fx_setSecurityParameters(vc_sad);
		
@@ -1887,8 +1871,7 @@ group establishSAFns_active {
		
		//fill keyLen
		vc_sad[c_saOut].ahIntegrKeyLen := 0;
		v_ret := f_getIntegrKeyLen(vc_sad[c_saOut].ahIntegrityAlgo, vc_sad[c_saOut].ahIntegrKeyLen);
		if (v_ret != e_success) { return v_ret;}
		vc_sad[c_saOut].ahIntegrKeyLen := f_getIntegrKeyLen(vc_sad[c_saOut].ahIntegrityAlgo);

		//fill icv and pad length
		vc_sad[c_saOut].ahIcvLen := f_getIcvLen(vc_sad[c_saOut].ahIntegrityAlgo);
@@ -1927,12 +1910,12 @@ group establishSAFns_passive {
			or vc_ikeSad[0].ikeEncryptionAlgo == e_encr_aesCtr)) {

			//fill keyLen
			v_ret := f_getEncrKeyLen(vc_ikeSad[0].ikeEncryptionAlgo, vc_ikeSad[0].ikeEncrKeyLen);
			vc_ikeSad[0].ikeEncrKeyLen := f_getEncrKeyLen(vc_ikeSad[0].ikeEncryptionAlgo);
		}
		// there is no variable key length for integrity and PRF
		// now the fixed key len is saved to IkeSa
		v_ret := f_getIntegrKeyLen(vc_ikeSad[0].ikeIntegrityAlgo, vc_ikeSad[0].ikeIntegrKeyLen);
		v_ret := f_getPrfKeyLen(vc_ikeSad[0].ikePseudoRandomFunction, vc_ikeSad[0].prfKeyLen);
		vc_ikeSad[0].ikeIntegrKeyLen := f_getIntegrKeyLen(vc_ikeSad[0].ikeIntegrityAlgo);
		vc_ikeSad[0].prfKeyLen := f_getPrfKeyLen(vc_ikeSad[0].ikePseudoRandomFunction);

		// calculate and store the seven secrets
		vc_ikeSad[0].sevenSecrets := f_calculateSevenSecrets(vc_ikeSad[0]);