|
|
@ -4,6 +4,7 @@ |
|
|
|
#include <stdio.h> |
|
|
|
#include <stdlib.h> |
|
|
|
#include <assert.h> |
|
|
|
#include <ctype.h> |
|
|
|
|
|
|
|
#include "pEp_internal.h" |
|
|
|
#include "keymanagement.h" |
|
|
@ -15,6 +16,33 @@ |
|
|
|
|
|
|
|
#define KEY_EXPIRE_DELTA (60 * 60 * 24 * 365) |
|
|
|
|
|
|
|
// Space tolerant and case insensitive fingerprint string compare |
|
|
|
static int _same_fpr( |
|
|
|
const char* fpra, |
|
|
|
size_t fpras, |
|
|
|
const char* fprb, |
|
|
|
size_t fprbs |
|
|
|
) |
|
|
|
{ |
|
|
|
size_t ai = 0; |
|
|
|
size_t bi = 0; |
|
|
|
|
|
|
|
do { |
|
|
|
if(fpra[ai] == 0 || fprb[bi] == 0) { |
|
|
|
return 0; |
|
|
|
} else if(fpra[ai] == ' ') { |
|
|
|
ai++; |
|
|
|
} else if(fprb[bi] == ' ') { |
|
|
|
bi++; |
|
|
|
} else if(toupper(fpra[ai]) == toupper(fprb[bi])) { |
|
|
|
ai++; |
|
|
|
bi++; |
|
|
|
} |
|
|
|
}while(ai < fpras && bi < fprbs); |
|
|
|
|
|
|
|
return ai == fpras && bi == fprbs; |
|
|
|
} |
|
|
|
|
|
|
|
DYNAMIC_API PEP_STATUS update_identity( |
|
|
|
PEP_SESSION session, pEp_identity * identity |
|
|
|
) |
|
|
@ -73,7 +101,10 @@ DYNAMIC_API PEP_STATUS update_identity( |
|
|
|
} |
|
|
|
} |
|
|
|
else /* !EMPTYSTR(identity->fpr) */ { |
|
|
|
if (strncmp(identity->fpr, stored_identity->fpr, stored_identity->fpr_size) == 0) { |
|
|
|
if (_same_fpr(identity->fpr, |
|
|
|
identity->fpr_size, |
|
|
|
stored_identity->fpr, |
|
|
|
stored_identity->fpr_size)) { |
|
|
|
if (_comm_type_key < PEP_ct_unconfirmed_encryption) { |
|
|
|
identity->comm_type = _comm_type_key; |
|
|
|
}else{ |
|
|
|