r3080 - in trunk/libmikey: include/libmikey keyagreement

mikma at minisip.org mikma at minisip.org
Wed Jan 3 18:10:07 CET 2007


Author: mikma
Date: 2007-01-03 18:10:06 +0100 (Wed, 03 Jan 2007)
New Revision: 3080

Modified:
   trunk/libmikey/include/libmikey/KeyAgreementDHHMAC.h
   trunk/libmikey/include/libmikey/KeyAgreementPKE.h
   trunk/libmikey/include/libmikey/keyagreement.h
   trunk/libmikey/include/libmikey/keyagreement_dh.h
   trunk/libmikey/include/libmikey/keyagreement_psk.h
   trunk/libmikey/keyagreement/KeyAgreementDHHMAC.cxx
   trunk/libmikey/keyagreement/KeyAgreementPKE.cxx
   trunk/libmikey/keyagreement/keyagreement.cxx
   trunk/libmikey/keyagreement/keyagreement_dh.cxx
   trunk/libmikey/keyagreement/keyagreement_psk.cxx
Log:
Make all fields in KeyAgreement private, and use access methods
in sub-classes. And add pure virtual type() method


Modified: trunk/libmikey/include/libmikey/KeyAgreementDHHMAC.h
===================================================================
--- trunk/libmikey/include/libmikey/KeyAgreementDHHMAC.h	2007-01-02 22:30:47 UTC (rev 3079)
+++ trunk/libmikey/include/libmikey/KeyAgreementDHHMAC.h	2007-01-03 17:10:06 UTC (rev 3080)
@@ -44,6 +44,8 @@
 				    int groupValue = -1 );
 		~KeyAgreementDHHMAC();
 
+		int32_t type();
+
 		int setGroup( int group );
 		int group();
 

Modified: trunk/libmikey/include/libmikey/KeyAgreementPKE.h
===================================================================
--- trunk/libmikey/include/libmikey/KeyAgreementPKE.h	2007-01-02 22:30:47 UTC (rev 3079)
+++ trunk/libmikey/include/libmikey/KeyAgreementPKE.h	2007-01-03 17:10:06 UTC (rev 3080)
@@ -24,6 +24,8 @@
 	     */
 	    ~KeyAgreementPKE();
 	
+		int32_t type();
+
 	    /**
 	     * Returns the Public-Key of the responder
 	     */

Modified: trunk/libmikey/include/libmikey/keyagreement.h
===================================================================
--- trunk/libmikey/include/libmikey/keyagreement.h	2007-01-02 22:30:47 UTC (rev 3079)
+++ trunk/libmikey/include/libmikey/keyagreement.h	2007-01-03 17:10:06 UTC (rev 3080)
@@ -73,7 +73,7 @@
 		~KeyAgreement();
 
 		/* Type of key agreement (DH, PSK, PKE) */
-		int32_t type(){ return typeValue; };
+		virtual int32_t type()=0;
 
 		/* RAND value exchanged during the key agreement */
 		unsigned int randLength();
@@ -106,6 +106,9 @@
 		void setnCs(uint8_t value);
 
 		/* TGK */
+		/**
+		 * If tgk == NULL, generate random TGK of specified size
+		 */
 		void setTgk( byte_t * tgk, unsigned int tgkLength );
 		unsigned int tgkLength();
 		byte_t * tgk();
@@ -124,9 +127,6 @@
 		void setResponderData( void * );
 
 
-		/* Security Policy 
-		 */	
-		std::list <Policy_type *> policy; //Contains the security policy
 		//Set the first Parameter Type in a new security policy. Returns the new Policy number.
 		uint8_t setPolicyParamType(uint8_t prot_type, uint8_t policy_type, uint8_t length, byte_t * value);
 		//Add or modify a parameter in an existing policy
@@ -175,13 +175,18 @@
 		        	byte_t * inkey, unsigned int inkey_length,
 		        	byte_t * key, unsigned int key_length,
 			   	int type );
+
+	private:
+		/* Security Policy 
+		 */	
+		std::list <Policy_type *> policy; //Contains the security policy
+
 		byte_t * tgkPtr;
 		unsigned int tgkLengthValue;
 		byte_t * randPtr;
 		unsigned int randLengthValue;
 
 		unsigned int csbIdValue;
-		int32_t typeValue;
 
 		MRef<KeyValidity *> kvPtr;
 		MRef<MikeyCsIdMap *> csIdMapPtr;

Modified: trunk/libmikey/include/libmikey/keyagreement_dh.h
===================================================================
--- trunk/libmikey/include/libmikey/keyagreement_dh.h	2007-01-02 22:30:47 UTC (rev 3079)
+++ trunk/libmikey/include/libmikey/keyagreement_dh.h	2007-01-03 17:10:06 UTC (rev 3080)
@@ -52,6 +52,8 @@
 		KeyAgreementDH( MRef<SipSim *> sim, int group );
 		~KeyAgreementDH();
 
+		int32_t type();
+
 		int computeTgk();
 		int setGroup( int group );
 		int group();

Modified: trunk/libmikey/include/libmikey/keyagreement_psk.h
===================================================================
--- trunk/libmikey/include/libmikey/keyagreement_psk.h	2007-01-02 22:30:47 UTC (rev 3079)
+++ trunk/libmikey/include/libmikey/keyagreement_psk.h	2007-01-03 17:10:06 UTC (rev 3080)
@@ -36,6 +36,8 @@
 		KeyAgreementPSK( byte_t * psk, int pskLength );
 		virtual ~KeyAgreementPSK();
 
+		int32_t type();
+
 		/**
 		 * Generates a TGK of de given length with the random function from the
 		 * OpenSSL library and stores it in this instance

Modified: trunk/libmikey/keyagreement/KeyAgreementDHHMAC.cxx
===================================================================
--- trunk/libmikey/keyagreement/KeyAgreementDHHMAC.cxx	2007-01-02 22:30:47 UTC (rev 3079)
+++ trunk/libmikey/keyagreement/KeyAgreementDHHMAC.cxx	2007-01-03 17:10:06 UTC (rev 3080)
@@ -41,7 +41,6 @@
 		 dh( NULL ), peerKeyPtr( NULL ), peerKeyLengthValue( 0 ){
 // 		 m_authKey( NULL ),
 // 		 m_authKeyLength( 0 ), m_macAlg( 0 ){
-	typeValue = KEY_AGREEMENT_TYPE_DHHMAC;
 	dh = new OakleyDH();
 	if( dh == NULL )
 	{
@@ -58,19 +57,20 @@
 KeyAgreementDHHMAC::~KeyAgreementDHHMAC(){
 }
 
+int32_t KeyAgreementDHHMAC::type(){
+	return KEY_AGREEMENT_TYPE_DHHMAC;
+}
+
 int KeyAgreementDHHMAC::setGroup( int groupValue ){
 	if( !dh->setGroup( groupValue ) )
 		return 1;
 
 	uint32_t len = dh->secretLength();
 
-	if( len != tgkLengthValue || !tgkPtr ){
-		if( tgkPtr )
-			delete[] tgkPtr;
-		tgkPtr = new unsigned char[ len ];
+	if( len != tgkLength() || !tgk() ){
+		setTgk( NULL, len );
 	}
 
-	tgkLengthValue = len;
 	return 0;
 }
 
@@ -126,7 +126,7 @@
 	assert( peerKeyPtr );
 
 	int res = dh->computeSecret( peerKeyPtr, peerKeyLengthValue,
-				     tgkPtr, tgkLengthValue );
+				     tgk(), tgkLength() );
 	return res;
 }
 

Modified: trunk/libmikey/keyagreement/KeyAgreementPKE.cxx
===================================================================
--- trunk/libmikey/keyagreement/KeyAgreementPKE.cxx	2007-01-02 22:30:47 UTC (rev 3079)
+++ trunk/libmikey/keyagreement/KeyAgreementPKE.cxx	2007-01-03 17:10:06 UTC (rev 3080)
@@ -9,8 +9,6 @@
 KeyAgreementPKE::KeyAgreementPKE( MRef<certificate*> pubKeyResponderT, int envKeyLength )
 		:KeyAgreementPSK(){
 										
-	typeValue = KEY_AGREEMENT_TYPE_PK;
-	
 	//envelope key to encrypt KEMAC payload
 	byte_t envKey[ envKeyLength ];
 	Rand::randomize( envKey, envKeyLength );
@@ -26,6 +24,10 @@
 KeyAgreementPKE::~KeyAgreementPKE(){
 }
 
+int32_t KeyAgreementPKE::type(){
+	return KEY_AGREEMENT_TYPE_PK;
+}
+
 MRef<certificate*> KeyAgreementPKE::getPublicKey(void){
 	return pubKeyResponder;
 }

Modified: trunk/libmikey/keyagreement/keyagreement.cxx
===================================================================
--- trunk/libmikey/keyagreement/keyagreement.cxx	2007-01-02 22:30:47 UTC (rev 3079)
+++ trunk/libmikey/keyagreement/keyagreement.cxx	2007-01-03 17:10:06 UTC (rev 3080)
@@ -28,6 +28,7 @@
 #include<libmikey/MikeyPayloadSP.h>
 #include<string.h>
 #include<libmcrypto/hmac.h>
+#include<libmcrypto/rand.h>
 
 using namespace std;
 
@@ -280,7 +281,12 @@
 		delete [] this->tgkPtr;
 	this->tgkLengthValue = tgkLengthValue;
 	this->tgkPtr = new unsigned char[ tgkLengthValue ];
-	memcpy( this->tgkPtr, tgk, tgkLengthValue );
+	if( tgk ){
+		memcpy( this->tgkPtr, tgk, tgkLengthValue );
+	}
+	else{
+		Rand::randomize( this->tgkPtr, tgkLengthValue );
+	}
 }
 
 void * KeyAgreement::initiatorData(){

Modified: trunk/libmikey/keyagreement/keyagreement_dh.cxx
===================================================================
--- trunk/libmikey/keyagreement/keyagreement_dh.cxx	2007-01-02 22:30:47 UTC (rev 3079)
+++ trunk/libmikey/keyagreement/keyagreement_dh.cxx	2007-01-03 17:10:06 UTC (rev 3080)
@@ -42,7 +42,6 @@
 	certDbPtr( certDbPtr )
 {
 	//policy = list<Policy_type *>::list();
-	typeValue = KEY_AGREEMENT_TYPE_DH;
 	dh = new OakleyDH();
 	peerCertChainPtr = certificate_chain::create();
 
@@ -58,7 +57,6 @@
 	sim(s)
 {
 	//policy = list<Policy_type *>::list();
-	typeValue = KEY_AGREEMENT_TYPE_DH;
 	dh = new OakleyDH();
 	peerCertChainPtr = certificate_chain::create();
 
@@ -81,7 +79,6 @@
 	peerCertChainPtr( NULL ),
 	certDbPtr( certDbPtr ){
 	//policy = list<Policy_type *>::list();
-	typeValue = KEY_AGREEMENT_TYPE_DH;
 	dh = new OakleyDH();
 	if( dh == NULL )
 	{
@@ -107,7 +104,6 @@
 	sim(s)
 {
 	//policy = list<Policy_type *>::list();
-	typeValue = KEY_AGREEMENT_TYPE_DH;
 	dh = new OakleyDH();
 	if( dh == NULL )
 	{
@@ -122,19 +118,20 @@
 	peerCertChainPtr = certificate_chain::create();
 }
 
+int32_t KeyAgreementDH::type(){
+	return KEY_AGREEMENT_TYPE_DH;
+}
+
 int KeyAgreementDH::setGroup( int groupValue ){
 	if( !dh->setGroup( groupValue ) )
 		return 1;
 
 	uint32_t len = dh->secretLength();
 
-	if( len != tgkLengthValue || !tgkPtr ){
-		if( tgkPtr )
-			delete[] tgkPtr;
-		tgkPtr = new unsigned char[ len ];
+	if( len != tgkLength() || !tgk() ){
+		setTgk( NULL, len );
 	}
 
-	tgkLengthValue = len;
 	return 0;
 }
 	
@@ -165,7 +162,7 @@
 int KeyAgreementDH::computeTgk(){
 	assert( peerKeyPtr );
 
-	int res = dh->computeSecret( peerKeyPtr, peerKeyLengthValue, tgkPtr, tgkLengthValue );
+	int res = dh->computeSecret( peerKeyPtr, peerKeyLengthValue, tgk(), tgkLength() );
 	return res;
 }
 

Modified: trunk/libmikey/keyagreement/keyagreement_psk.cxx
===================================================================
--- trunk/libmikey/keyagreement/keyagreement_psk.cxx	2007-01-02 22:30:47 UTC (rev 3079)
+++ trunk/libmikey/keyagreement/keyagreement_psk.cxx	2007-01-03 17:10:06 UTC (rev 3080)
@@ -23,7 +23,6 @@
 
 
 #include<config.h>
-#include<libmcrypto/rand.h>
 #include<libmikey/MikeyMessage.h>
 #include<libmikey/keyagreement_psk.h>
 
@@ -35,7 +34,6 @@
 KeyAgreementPSK::KeyAgreementPSK( unsigned char * pskPtr, int pskLengthValue )
 	:KeyAgreement(), tSentValue( 0 ){
 	//policy = list<Policy_type *>::list();
-	typeValue = KEY_AGREEMENT_TYPE_PSK;
 	this->pskLengthValue = pskLengthValue;
 	this->pskPtr = new unsigned char[ pskLengthValue ];
 	memcpy( this->pskPtr, pskPtr, pskLengthValue );
@@ -49,32 +47,30 @@
 
 }
 
+int32_t KeyAgreementPSK::type(){
+	return KEY_AGREEMENT_TYPE_PSK;
+}
+
 void KeyAgreementPSK::generateTgk( uint32_t tgkLength ){
-// 	typeValue = KEY_AGREEMENT_TYPE_PSK;
-	this->tgkLengthValue = tgkLength;
-	if( tgkPtr ){
-		delete [] tgkPtr;
-	}
-	
-	tgkPtr = new unsigned char[ tgkLength ];
-	Rand::randomize( tgkPtr, tgkLength );
+	// Generate random TGK
+	setTgk( NULL, tgkLength );
 }
 
 void KeyAgreementPSK::genTranspEncrKey( 
 		unsigned char * encrKey, int encrKeyLength ){
-	keyDeriv( 0xFF, csbIdValue, pskPtr, pskLengthValue, 
+	keyDeriv( 0xFF, csbId(), pskPtr, pskLengthValue, 
 			encrKey, encrKeyLength, KEY_DERIV_TRANS_ENCR );
 }
 	
 void KeyAgreementPSK::genTranspSaltKey( 
 		unsigned char * encrKey, int encrKeyLength ){
-	keyDeriv( 0xFF, csbIdValue, pskPtr, pskLengthValue, 
+	keyDeriv( 0xFF, csbId(), pskPtr, pskLengthValue, 
 			encrKey, encrKeyLength, KEY_DERIV_TRANS_SALT );
 }
 
 void KeyAgreementPSK::genTranspAuthKey( 
 		unsigned char * encrKey, int encrKeyLength ){
-	keyDeriv( 0xFF, csbIdValue, pskPtr, pskLengthValue, 
+	keyDeriv( 0xFF, csbId(), pskPtr, pskLengthValue, 
 			encrKey, encrKeyLength, KEY_DERIV_TRANS_AUTH );
 }
 



More information about the Minisip-devel mailing list