mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-02 06:06:10 -04:00
renamed old flags into indices in rsgenexchange.cc. Fixed up duplicate constants between GxsGroupDialog and rsgxsflags.h
This commit is contained in:
parent
738dadadc9
commit
a6851b63dc
7 changed files with 129 additions and 121 deletions
|
@ -49,9 +49,15 @@
|
|||
#define PRIV_GRP_OFFSET 16
|
||||
#define GRP_OPTIONS_OFFSET 24
|
||||
|
||||
/** authentication key indices. Used to store them in a map **/
|
||||
|
||||
static const uint32_t INDEX_AUTHEN_IDENTITY = 0x00000010; // identity
|
||||
static const uint32_t INDEX_AUTHEN_PUBLISH = 0x00000020; // publish key
|
||||
static const uint32_t INDEX_AUTHEN_ADMIN = 0x00000040; // admin key
|
||||
|
||||
#define GXS_MASK "GXS_MASK_HACK"
|
||||
|
||||
//#define GEN_EXCH_DEBUG 1
|
||||
#define GEN_EXCH_DEBUG 1
|
||||
|
||||
#define MSG_CLEANUP_PERIOD 60*5 // 5 minutes
|
||||
#define INTEGRITY_CHECK_PERIOD 60*30 // 30 minutes
|
||||
|
@ -416,7 +422,7 @@ uint8_t RsGenExchange::createGroup(RsNxsGrp *grp, RsTlvSecurityKeySet& privateKe
|
|||
bool ok = GxsSecurity::getSignature(allGrpData, allGrpDataLen, privAdminKey, adminSign);
|
||||
|
||||
// add admin sign to grpMeta
|
||||
meta->signSet.keySignSet[GXS_SERV::FLAG_AUTHEN_ADMIN] = adminSign;
|
||||
meta->signSet.keySignSet[INDEX_AUTHEN_ADMIN] = adminSign;
|
||||
|
||||
RsTlvBinaryData grpData(mServType);
|
||||
grpData.setBinData(allGrpData, allGrpDataLen);
|
||||
|
@ -494,7 +500,7 @@ int RsGenExchange::createGroupSignatures(RsTlvKeySignatureSet& signSet, RsTlvBin
|
|||
id_ret = SIGN_FAIL;
|
||||
}
|
||||
|
||||
signSet.keySignSet[GXS_SERV::FLAG_AUTHEN_IDENTITY] = sign;
|
||||
signSet.keySignSet[INDEX_AUTHEN_IDENTITY] = sign;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -609,12 +615,12 @@ int RsGenExchange::createMsgSignatures(RsTlvKeySignatureSet& signSet, RsTlvBinar
|
|||
// private publish key
|
||||
publishKey = &(mit->second);
|
||||
|
||||
RsTlvKeySignature publishSign = signSet.keySignSet[GXS_SERV::FLAG_AUTHEN_PUBLISH];
|
||||
RsTlvKeySignature publishSign = signSet.keySignSet[INDEX_AUTHEN_PUBLISH];
|
||||
|
||||
publishSignSuccess = GxsSecurity::getSignature((char*)msgData.bin_data, msgData.bin_len, *publishKey, publishSign);
|
||||
|
||||
//place signature in msg meta
|
||||
signSet.keySignSet[GXS_SERV::FLAG_AUTHEN_PUBLISH] = publishSign;
|
||||
signSet.keySignSet[INDEX_AUTHEN_PUBLISH] = publishSign;
|
||||
}else
|
||||
{
|
||||
std::cerr << "RsGenExchange::createMsgSignatures()";
|
||||
|
@ -653,7 +659,7 @@ int RsGenExchange::createMsgSignatures(RsTlvKeySignatureSet& signSet, RsTlvBinar
|
|||
id_ret = SIGN_FAIL;
|
||||
}
|
||||
|
||||
signSet.keySignSet[GXS_SERV::FLAG_AUTHEN_IDENTITY] = sign;
|
||||
signSet.keySignSet[INDEX_AUTHEN_IDENTITY] = sign;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -763,7 +769,7 @@ int RsGenExchange::createMessage(RsNxsMsg* msg)
|
|||
}
|
||||
}
|
||||
|
||||
int RsGenExchange::validateMsg(RsNxsMsg *msg, const uint32_t& grpFlag, RsTlvSecurityKeySet& grpKeySet)
|
||||
int RsGenExchange::validateMsg(RsNxsMsg *msg, const uint32_t& grpFlag, const uint32_t& signFlag, RsTlvSecurityKeySet& grpKeySet)
|
||||
{
|
||||
bool needIdentitySign = false;
|
||||
bool needPublishSign = false;
|
||||
|
@ -796,12 +802,16 @@ int RsGenExchange::validateMsg(RsNxsMsg *msg, const uint32_t& grpFlag, RsTlvSecu
|
|||
if ((checkAuthenFlag(pos, author_flag)) || (!msg->metaData->mAuthorId.isNull()))
|
||||
needIdentitySign = true;
|
||||
|
||||
#ifdef GEN_EXCH_DEBUG
|
||||
std::cerr << "Validate message: msgId=" << msg->msgId << ", grpId=" << msg->grpId << " grpFlags=" << std::hex << grpFlag << std::dec
|
||||
<< ". Need publish=" << needPublishSign << ", needIdentitySign=" << needIdentitySign ;
|
||||
#endif
|
||||
|
||||
RsGxsMsgMetaData& metaData = *(msg->metaData);
|
||||
|
||||
if(needPublishSign)
|
||||
{
|
||||
RsTlvKeySignature sign = metaData.signSet.keySignSet[GXS_SERV::FLAG_AUTHEN_PUBLISH];
|
||||
RsTlvKeySignature sign = metaData.signSet.keySignSet[INDEX_AUTHEN_PUBLISH];
|
||||
|
||||
std::map<RsGxsId, RsTlvSecurityKey>& keys = grpKeySet.keys;
|
||||
std::map<RsGxsId, RsTlvSecurityKey>::iterator mit = keys.begin();
|
||||
|
@ -849,31 +859,36 @@ int RsGenExchange::validateMsg(RsNxsMsg *msg, const uint32_t& grpFlag, RsTlvSecu
|
|||
bool haveKey = mGixs->haveKey(metaData.mAuthorId);
|
||||
|
||||
if(haveKey)
|
||||
{
|
||||
{
|
||||
|
||||
RsTlvSecurityKey authorKey;
|
||||
bool auth_key_fetched = mGixs->getKey(metaData.mAuthorId, authorKey) ;
|
||||
RsTlvSecurityKey authorKey;
|
||||
bool auth_key_fetched = mGixs->getKey(metaData.mAuthorId, authorKey) ;
|
||||
|
||||
if (auth_key_fetched)
|
||||
{
|
||||
if (auth_key_fetched)
|
||||
{
|
||||
RsTlvKeySignature sign = metaData.signSet.keySignSet[INDEX_AUTHEN_IDENTITY];
|
||||
idValidate &= GxsSecurity::validateNxsMsg(*msg, sign, authorKey);
|
||||
mGixs->timeStampKey(metaData.mAuthorId) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "RsGenExchange::validateMsg()";
|
||||
std::cerr << " ERROR Cannot Retrieve AUTHOR KEY for Message Validation";
|
||||
std::cerr << std::endl;
|
||||
idValidate = false;
|
||||
}
|
||||
|
||||
RsTlvKeySignature sign = metaData.signSet.keySignSet[GXS_SERV::FLAG_AUTHEN_IDENTITY];
|
||||
idValidate &= GxsSecurity::validateNxsMsg(*msg, sign, authorKey);
|
||||
mGixs->timeStampKey(metaData.mAuthorId) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "RsGenExchange::validateMsg()";
|
||||
std::cerr << " ERROR Cannot Retrieve AUTHOR KEY for Message Validation";
|
||||
std::cerr << std::endl;
|
||||
idValidate = false;
|
||||
}
|
||||
|
||||
}else
|
||||
// if(signFlag & GXS_SERV::
|
||||
}
|
||||
else
|
||||
{
|
||||
std::list<RsPeerId> peers;
|
||||
peers.push_back(msg->PeerId());
|
||||
mGixs->requestKey(metaData.mAuthorId, peers);
|
||||
|
||||
#ifdef GEN_EXCH_DEBUG
|
||||
std::cerr << ", Key missing. Retry later." << std::endl;
|
||||
#endif
|
||||
return VALIDATE_FAIL_TRY_LATER;
|
||||
}
|
||||
}
|
||||
|
@ -890,6 +905,10 @@ int RsGenExchange::validateMsg(RsNxsMsg *msg, const uint32_t& grpFlag, RsTlvSecu
|
|||
idValidate = true;
|
||||
}
|
||||
|
||||
#ifdef GEN_EXCH_DEBUG
|
||||
std::cerr << ", publish val=" << publishValidate << ", idValidate=" << idValidate << ". Result=" << (publishValidate && idValidate) << std::endl;
|
||||
#endif
|
||||
|
||||
if(publishValidate && idValidate)
|
||||
return VALIDATE_SUCCESS;
|
||||
else
|
||||
|
@ -930,7 +949,7 @@ int RsGenExchange::validateGrp(RsNxsGrp* grp)
|
|||
if (auth_key_fetched)
|
||||
{
|
||||
|
||||
RsTlvKeySignature sign = metaData.signSet.keySignSet[GXS_SERV::FLAG_AUTHEN_IDENTITY];
|
||||
RsTlvKeySignature sign = metaData.signSet.keySignSet[INDEX_AUTHEN_IDENTITY];
|
||||
idValidate = GxsSecurity::validateNxsGrp(*grp, sign, authorKey);
|
||||
|
||||
mGixs->timeStampKey(metaData.mAuthorId) ;
|
||||
|
@ -2530,9 +2549,12 @@ void RsGenExchange::processRecvdMessages()
|
|||
if(mit != grpMetas.end())
|
||||
{
|
||||
RsGxsGrpMetaData* grpMeta = mit->second;
|
||||
validateReturn = validateMsg(msg, grpMeta->mGroupFlags, grpMeta->keys);
|
||||
validateReturn = validateMsg(msg, grpMeta->mGroupFlags, grpMeta->mSignFlags, grpMeta->keys);
|
||||
|
||||
#ifdef GEN_EXCH_DEBUG
|
||||
std::cerr << " message validation result: " << validateReturn << std::endl;
|
||||
std::cerr << " grpMeta.mSignFlags: " << std::hex << grpMeta->mSignFlags << std::dec << std::endl;
|
||||
std::cerr << " grpMeta.mAuthFlags: " << std::hex << grpMeta->mAuthenFlags << std::dec << std::endl;
|
||||
std::cerr << " message validation result: " << (int)validateReturn << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -2821,7 +2843,7 @@ void RsGenExchange::performUpdateValidation()
|
|||
bool RsGenExchange::updateValid(RsGxsGrpMetaData& oldGrpMeta, RsNxsGrp& newGrp) const
|
||||
{
|
||||
std::map<SignType, RsTlvKeySignature>& signSet = newGrp.metaData->signSet.keySignSet;
|
||||
std::map<SignType, RsTlvKeySignature>::iterator mit = signSet.find(GXS_SERV::FLAG_AUTHEN_ADMIN);
|
||||
std::map<SignType, RsTlvKeySignature>::iterator mit = signSet.find(INDEX_AUTHEN_ADMIN);
|
||||
|
||||
if(mit == signSet.end())
|
||||
{
|
||||
|
|
|
@ -739,12 +739,13 @@ private:
|
|||
/*!
|
||||
* Attempts to validate msg signatures
|
||||
* @param msg message to be validated
|
||||
* @param grpFlag the flag for the group the message belongs to
|
||||
* @param grpFlag the distribution flag for the group the message belongs to
|
||||
* @param grpFlag the signature flag for the group the message belongs to
|
||||
* @param grpKeySet the key set user has for the message's group
|
||||
* @return VALIDATE_SUCCESS for success, VALIDATE_FAIL for fail,
|
||||
* VALIDATE_ID_SIGN_NOT_AVAIL for Id sign key not avail (but requested)
|
||||
*/
|
||||
int validateMsg(RsNxsMsg* msg, const uint32_t& grpFlag, RsTlvSecurityKeySet& grpKeySet);
|
||||
int validateMsg(RsNxsMsg* msg, const uint32_t& grpFlag, const uint32_t &signFlag, RsTlvSecurityKeySet& grpKeySet);
|
||||
|
||||
/*!
|
||||
* Attempts to validate group signatures
|
||||
|
|
|
@ -52,7 +52,7 @@ public:
|
|||
RsGxsGroupId mGroupId;
|
||||
RsGxsGroupId mOrigGrpId;
|
||||
std::string mGroupName;
|
||||
uint32_t mGroupFlags;
|
||||
uint32_t mGroupFlags; // GXS_SERV::FLAG_PRIVACY_RESTRICTED | GXS_SERV::FLAG_PRIVACY_PRIVATE | GXS_SERV::FLAG_PRIVACY_PUBLIC
|
||||
uint32_t mPublishTs;
|
||||
uint32_t mSignFlags;
|
||||
RsGxsId mAuthorId;
|
||||
|
|
|
@ -18,48 +18,35 @@ namespace GXS_SERV {
|
|||
|
||||
/** START privacy **/
|
||||
|
||||
static const uint32_t FLAG_PRIVACY_MASK = 0x0000000f;
|
||||
|
||||
// pub key encrypted
|
||||
static const uint32_t FLAG_PRIVACY_PRIVATE = 0x00000001;
|
||||
|
||||
// publish private key needed to publish
|
||||
static const uint32_t FLAG_PRIVACY_RESTRICTED = 0x00000002;
|
||||
|
||||
// anyone can publish, publish key pair not needed
|
||||
static const uint32_t FLAG_PRIVACY_PUBLIC = 0x00000004;
|
||||
static const uint32_t FLAG_PRIVACY_MASK = 0x0000000f;
|
||||
static const uint32_t FLAG_PRIVACY_PRIVATE = 0x00000001; // pub key encrypted
|
||||
static const uint32_t FLAG_PRIVACY_RESTRICTED = 0x00000002; // publish private key needed to publish
|
||||
static const uint32_t FLAG_PRIVACY_PUBLIC = 0x00000004; // anyone can publish, publish key pair not needed
|
||||
|
||||
/** END privacy **/
|
||||
|
||||
/** START authentication **/
|
||||
|
||||
static const uint32_t FLAG_AUTHEN_MASK = 0x000000f0;
|
||||
|
||||
// identity
|
||||
static const uint32_t FLAG_AUTHEN_IDENTITY = 0x000000010;
|
||||
|
||||
// publish key
|
||||
static const uint32_t FLAG_AUTHEN_PUBLISH = 0x000000020;
|
||||
|
||||
// admin key
|
||||
static const uint32_t FLAG_AUTHEN_ADMIN = 0x00000040;
|
||||
|
||||
// pgp sign identity
|
||||
static const uint32_t FLAG_AUTHEN_PGP_IDENTITY = 0x00000080;
|
||||
|
||||
/** END authentication **/
|
||||
|
||||
/** START author authentication flags **/
|
||||
static const uint32_t FLAG_AUTHOR_AUTHENTICATION_MASK = 0x0000ff00;
|
||||
static const uint32_t FLAG_AUTHOR_AUTHENTICATION_NONE = 0x00000000;
|
||||
static const uint32_t FLAG_AUTHOR_AUTHENTICATION_GPG = 0x00000100;
|
||||
static const uint32_t FLAG_AUTHOR_AUTHENTICATION_REQUIRED = 0x00000200;
|
||||
static const uint32_t FLAG_AUTHOR_AUTHENTICATION_IFNOPUBSIGN = 0x00000400;
|
||||
|
||||
static const uint32_t FLAG_GROUP_SIGN_PUBLISH_MASK = 0x000000ff;
|
||||
static const uint32_t FLAG_GROUP_SIGN_PUBLISH_ENCRYPTED = 0x00000001;
|
||||
static const uint32_t FLAG_GROUP_SIGN_PUBLISH_ALLSIGNED = 0x00000002;
|
||||
static const uint32_t FLAG_GROUP_SIGN_PUBLISH_THREADHEAD = 0x00000004;
|
||||
static const uint32_t FLAG_GROUP_SIGN_PUBLISH_NONEREQ = 0x00000008;
|
||||
|
||||
/** START msg authentication flags **/
|
||||
|
||||
static const uint8_t MSG_AUTHEN_MASK = 0x0f;
|
||||
|
||||
static const uint8_t MSG_AUTHEN_ROOT_PUBLISH_SIGN = 0x01;
|
||||
|
||||
static const uint8_t MSG_AUTHEN_MASK = 0x0f;
|
||||
static const uint8_t MSG_AUTHEN_ROOT_PUBLISH_SIGN = 0x01;
|
||||
static const uint8_t MSG_AUTHEN_CHILD_PUBLISH_SIGN = 0x02;
|
||||
|
||||
static const uint8_t MSG_AUTHEN_ROOT_AUTHOR_SIGN = 0x04;
|
||||
|
||||
static const uint8_t MSG_AUTHEN_CHILD_AUTHOR_SIGN = 0x08;
|
||||
static const uint8_t MSG_AUTHEN_ROOT_AUTHOR_SIGN = 0x04;
|
||||
static const uint8_t MSG_AUTHEN_CHILD_AUTHOR_SIGN = 0x08;
|
||||
|
||||
/** END msg authentication flags **/
|
||||
|
||||
|
@ -71,12 +58,9 @@ namespace GXS_SERV {
|
|||
|
||||
/** START Subscription Flags. (LOCAL) **/
|
||||
|
||||
static const uint32_t GROUP_SUBSCRIBE_ADMIN = 0x01;
|
||||
|
||||
static const uint32_t GROUP_SUBSCRIBE_PUBLISH = 0x02;
|
||||
|
||||
static const uint32_t GROUP_SUBSCRIBE_SUBSCRIBED = 0x04;
|
||||
|
||||
static const uint32_t GROUP_SUBSCRIBE_ADMIN = 0x01;
|
||||
static const uint32_t GROUP_SUBSCRIBE_PUBLISH = 0x02;
|
||||
static const uint32_t GROUP_SUBSCRIBE_SUBSCRIBED = 0x04;
|
||||
static const uint32_t GROUP_SUBSCRIBE_NOT_SUBSCRIBED = 0x08;
|
||||
|
||||
/*!
|
||||
|
@ -95,17 +79,12 @@ namespace GXS_SERV {
|
|||
*
|
||||
* NOTE: RsGxsCommentService uses 0x000f0000.
|
||||
*/
|
||||
static const uint32_t GXS_MSG_STATUS_GEN_MASK = 0x0000ffff;
|
||||
|
||||
static const uint32_t GXS_MSG_STATUS_GEN_MASK = 0x0000ffff;
|
||||
static const uint32_t GXS_MSG_STATUS_UNPROCESSED = 0x00000001;
|
||||
|
||||
static const uint32_t GXS_MSG_STATUS_GUI_UNREAD = 0x00000002;
|
||||
|
||||
static const uint32_t GXS_MSG_STATUS_GUI_NEW = 0x00000004;
|
||||
|
||||
static const uint32_t GXS_MSG_STATUS_KEEP = 0x00000008;
|
||||
|
||||
static const uint32_t GXS_MSG_STATUS_DELETE = 0x000000020;
|
||||
static const uint32_t GXS_MSG_STATUS_GUI_UNREAD = 0x00000002;
|
||||
static const uint32_t GXS_MSG_STATUS_GUI_NEW = 0x00000004;
|
||||
static const uint32_t GXS_MSG_STATUS_KEEP = 0x00000008;
|
||||
static const uint32_t GXS_MSG_STATUS_DELETE = 0x00000020;
|
||||
|
||||
/** END GXS Msg status flags **/
|
||||
|
||||
|
@ -124,9 +103,9 @@ namespace GXS_SERV {
|
|||
#define IS_MSG_UNREAD(status) (status & GXS_SERV::GXS_MSG_STATUS_GUI_UNREAD)
|
||||
|
||||
#define IS_GROUP_ADMIN(subscribeFlags) (subscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN)
|
||||
#define IS_GROUP_PUBLISHER(subscribeFlags) (subscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_PUBLISH)
|
||||
#define IS_GROUP_PUBLISHER(subscribeFlags) (subscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_PUBLISH)
|
||||
#define IS_GROUP_SUBSCRIBED(subscribeFlags) (subscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED)
|
||||
#define IS_GROUP_NOT_SUBSCRIBED(subscribeFlags) (subscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_NOT_SUBSCRIBED)
|
||||
#define IS_GROUP_NOT_SUBSCRIBED(subscribeFlags) (subscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_NOT_SUBSCRIBED)
|
||||
|
||||
#define IS_MSG_UNPROCESSED(status) (status & GXS_SERV::GXS_MSG_STATUS_UNPROCESSED)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue