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