Switched p3distrib (forums) personal signatures from ssl to pgp.

* Changed calls from AuthSSL to AuthGPG and tested. looks like it works!
 * added extra connect addresses in p3connmgr (current[local/server]addr)
 * added mConnMgr->addFriend() call to pqissllistener to add unknown ssl certs.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@3253 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
drbob 2010-07-04 22:23:45 +00:00
parent 8b2cb688a8
commit 6a40e1b2f3
7 changed files with 68 additions and 20 deletions

View File

@ -762,15 +762,13 @@ bool AuthGPGimpl::DoOwnSignature(const void *data, unsigned int datalen, void *b
return false; return false;
} }
#ifdef GPG_DEBUG gpgme_sign_result_t res = gpgme_op_sign_result(CTX);
gpgme_sign_result_t res =
#endif
gpgme_op_sign_result(CTX);
#ifdef GPG_DEBUG
if (res) if (res)
{ {
#ifdef GPG_DEBUG
fprintf(stderr, "Sign Got Result\n"); fprintf(stderr, "Sign Got Result\n");
#endif
} }
else else
{ {
@ -780,6 +778,7 @@ bool AuthGPGimpl::DoOwnSignature(const void *data, unsigned int datalen, void *b
gpgme_invalid_key_t ik = res->invalid_signers; gpgme_invalid_key_t ik = res->invalid_signers;
gpgme_new_signature_t sg = res->signatures; gpgme_new_signature_t sg = res->signatures;
#ifdef GPG_DEBUG
while(ik != NULL) while(ik != NULL)
{ {
fprintf(stderr, "AuthGPGimpl::Sign, Invalid by: %s\n", ik->fpr); fprintf(stderr, "AuthGPGimpl::Sign, Invalid by: %s\n", ik->fpr);

View File

@ -54,6 +54,8 @@
const time_t STORE_KEY_TIMEOUT = 60; //store key is call around every 60sec const time_t STORE_KEY_TIMEOUT = 60; //store key is call around every 60sec
#define MAX_GPG_SIGNATURE_SIZE 4096
/*! /*!
* gpgcert is the identifier for a person. * gpgcert is the identifier for a person.
* It is a wrapper class for a GPGme OpenPGP certificate. * It is a wrapper class for a GPGme OpenPGP certificate.
@ -152,6 +154,7 @@ virtual std::string getGPGEmail(GPG_id pgp_id) = 0;
/* PGP web of trust management */ /* PGP web of trust management */
virtual std::string getGPGOwnId() = 0; virtual std::string getGPGOwnId() = 0;
virtual std::string getGPGOwnName() = 0; virtual std::string getGPGOwnName() = 0;
//virtual std::string getGPGOwnEmail() = 0; //virtual std::string getGPGOwnEmail() = 0;
virtual bool getGPGDetails(std::string id, RsPeerDetails &d) = 0; virtual bool getGPGDetails(std::string id, RsPeerDetails &d) = 0;
virtual bool getGPGAllList(std::list<std::string> &ids) = 0; virtual bool getGPGAllList(std::list<std::string> &ids) = 0;
@ -269,6 +272,7 @@ virtual std::string getGPGEmail(GPG_id pgp_id);
/* PGP web of trust management */ /* PGP web of trust management */
virtual std::string getGPGOwnId(); virtual std::string getGPGOwnId();
virtual std::string getGPGOwnName(); virtual std::string getGPGOwnName();
//virtual std::string getGPGOwnEmail(); //virtual std::string getGPGOwnEmail();
virtual bool getGPGDetails(std::string id, RsPeerDetails &d); virtual bool getGPGDetails(std::string id, RsPeerDetails &d);
virtual bool getGPGAllList(std::list<std::string> &ids); virtual bool getGPGAllList(std::list<std::string> &ids);

View File

@ -148,6 +148,7 @@ std::string AuthGPGtest::getGPGOwnName()
return "DUMMY_OWN_NAME"; return "DUMMY_OWN_NAME";
} }
#if 0 #if 0
std::string AuthGPGtest::getGPGOwnEmail() std::string AuthGPGtest::getGPGOwnEmail()
{ {

View File

@ -87,6 +87,7 @@ virtual std::string getGPGEmail(GPG_id pgp_id);
/* PGP web of trust management */ /* PGP web of trust management */
virtual std::string getGPGOwnId(); virtual std::string getGPGOwnId();
virtual std::string getGPGOwnName(); virtual std::string getGPGOwnName();
//virtual std::string getGPGOwnEmail(); //virtual std::string getGPGOwnEmail();
virtual bool getGPGDetails(std::string id, RsPeerDetails &d); virtual bool getGPGDetails(std::string id, RsPeerDetails &d);
virtual bool getGPGAllList(std::list<std::string> &ids); virtual bool getGPGAllList(std::list<std::string> &ids);

View File

@ -72,7 +72,6 @@ const uint32_t PEER_IP_CONNECT_STATE_MAX_LIST_SIZE = 4;
* #define CONN_DEBUG_TICK 1 * #define CONN_DEBUG_TICK 1
***/ ***/
/**** /****
* #define P3CONNMGR_NO_TCP_CONNECTIONS 1 * #define P3CONNMGR_NO_TCP_CONNECTIONS 1
***/ ***/
@ -2360,6 +2359,42 @@ bool p3ConnectMgr::retryConnectTCP(std::string id)
/* UDP automatically searches -> no need to push start */ /* UDP automatically searches -> no need to push start */
// Just push all the addresses onto the stack. // Just push all the addresses onto the stack.
/* try "current addresses" first */
if (isValidNet(&(it->second.currentlocaladdr.sin_addr)))
{
#ifdef CONN_DEBUG
std::cerr << "Adding tcp connection attempt: ";
std::cerr << "Current Local Addr: " << inet_ntoa(it->second.currentlocaladdr.sin_addr);
std::cerr << ":" << ntohs(it->second.currentlocaladdr.sin_port);
std::cerr << std::endl;
#endif
peerConnectAddress pca;
pca.addr = it->second.currentlocaladdr;
pca.type = RS_NET_CONN_TCP_LOCAL;
pca.delay = P3CONNMGR_TCP_DEFAULT_DELAY;
pca.ts = time(NULL);
pca.period = P3CONNMGR_TCP_DEFAULT_PERIOD;
it->second.connAddrs.push_back(pca);
}
if (isValidNet(&(it->second.currentserveraddr.sin_addr)))
{
#ifdef CONN_DEBUG
std::cerr << "Adding tcp connection attempt: ";
std::cerr << "Current Ext Addr: " << inet_ntoa(it->second.currentserveraddr.sin_addr);
std::cerr << ":" << ntohs(it->second.currentserveraddr.sin_port);
std::cerr << std::endl;
#endif
peerConnectAddress pca;
pca.addr = it->second.currentserveraddr;
pca.type = RS_NET_CONN_TCP_EXTERNAL;
pca.delay = P3CONNMGR_TCP_DEFAULT_DELAY;
pca.ts = time(NULL);
pca.period = P3CONNMGR_TCP_DEFAULT_PERIOD;
it->second.connAddrs.push_back(pca);
}
/* now try historical addresses */
/* try local addresses first */ /* try local addresses first */
std::list<pqiIpAddress>::iterator ait; std::list<pqiIpAddress>::iterator ait;
for(ait = it->second.ipAddrs.mLocal.mAddrs.begin(); for(ait = it->second.ipAddrs.mLocal.mAddrs.begin();

View File

@ -687,8 +687,9 @@ int pqissllistener::completeConnection(int fd, SSL *ssl, struct sockaddr_in &rem
AuthSSL::getAuthSSL()->CheckCertificate(newPeerId, peercert); AuthSSL::getAuthSSL()->CheckCertificate(newPeerId, peercert);
/* now need to get GPG id too */ /* now need to get GPG id too */
//mConnMgr->addPeer(newPeerId); std::string pgpid = getX509CNString(peercert->cert_info->issuer);
mConnMgr->addFriend(newPeerId, pgpid);
X509_free(peercert); X509_free(peercert);
return -1; return -1;
} }

View File

@ -47,6 +47,8 @@
* #define DISTRIB_DEBUG 1 * #define DISTRIB_DEBUG 1
****/ ****/
//#define DISTRIB_DEBUG 1
RSA *extractPublicKey(RsTlvSecurityKey &key); RSA *extractPublicKey(RsTlvSecurityKey &key);
RSA *extractPrivateKey(RsTlvSecurityKey &key); RSA *extractPrivateKey(RsTlvSecurityKey &key);
void setRSAPublicKey(RsTlvSecurityKey &key, RSA *rsa_pub); void setRSAPublicKey(RsTlvSecurityKey &key, RSA *rsa_pub);
@ -2193,15 +2195,12 @@ std::string p3GroupDistrib::publishMsg(RsDistribMsg *msg, bool personalSign)
if (personalSign) if (personalSign)
{ {
unsigned int siglen = EVP_PKEY_size(publishKey); unsigned int siglen = MAX_GPG_SIGNATURE_SIZE;
unsigned char sigbuf[siglen]; unsigned char sigbuf[siglen];
if (AuthSSL::getAuthSSL()->SignDataBin(out_data, out_size, sigbuf, &siglen)) if (AuthGPG::getAuthGPG()->SignDataBin(out_data, out_size, sigbuf, &siglen))
{ {
signedMsg->personalSignature.signData.setBinData(sigbuf, siglen); signedMsg->personalSignature.signData.setBinData(sigbuf, siglen);
signedMsg->personalSignature.keyId = AuthSSL::getAuthSSL()->OwnId(); signedMsg->personalSignature.keyId = AuthGPG::getAuthGPG()->getGPGOwnId();
// Don't want to send our certificate everywhere.
//signedMsg->personalSignature.sslCert = AuthSSL::getAuthSSL()->SaveOwnCertificateToString();
} }
} }
@ -3015,17 +3014,25 @@ bool p3GroupDistrib::locked_validateDistribSignedMsg(
newMsg->personalSignature.signData.bin_len; newMsg->personalSignature.signData.bin_len;
unsigned char *personalsigbuf = (unsigned char *) unsigned char *personalsigbuf = (unsigned char *)
newMsg->personalSignature.signData.bin_data; newMsg->personalSignature.signData.bin_data;
bool sslSign = AuthSSL::getAuthSSL()->VerifySignBin(
RsPeerDetails signerDetails;
std::string gpg_fpr;
if (AuthGPG::getAuthGPG()->getGPGDetails(newMsg->personalSignature.keyId, signerDetails))
{
gpg_fpr = signerDetails.fpr;
}
bool gpgSign = AuthGPG::getAuthGPG()->VerifySignBin(
newMsg->packet.bin_data, newMsg->packet.bin_len, newMsg->packet.bin_data, newMsg->packet.bin_len,
personalsigbuf, personalsiglen, newMsg->personalSignature.keyId); personalsigbuf, personalsiglen, gpg_fpr);
if (sslSign) { if (gpgSign) {
#ifdef DISTRIB_DEBUG #ifdef DISTRIB_DEBUG
std::cerr << "p3GroupDistrib::locked_validateDistribSignedMsg() Success for ssl signature." << std::endl; std::cerr << "p3GroupDistrib::locked_validateDistribSignedMsg() Success for gpg signature." << std::endl;
#endif #endif
signOk = 1; signOk = 1;
} else { } else {
#ifdef DISTRIB_DEBUG #ifdef DISTRIB_DEBUG
std::cerr << "p3GroupDistrib::locked_validateDistribSignedMsg() Fail for ssl signature." << std::endl; std::cerr << "p3GroupDistrib::locked_validateDistribSignedMsg() Fail for gpg signature." << std::endl;
#endif #endif
signOk = 0; signOk = 0;
} }