More cleanup and removal of DeferredPackets, will do the latter in a more elegant way.
This commit is contained in:
parent
56febbf2ba
commit
98152d974a
13 changed files with 45 additions and 315 deletions
|
@ -114,6 +114,23 @@ public:
|
|||
*/
|
||||
inline uint64_t expiration() const { return _expiration; }
|
||||
|
||||
/**
|
||||
* Check to see if a given address is a 'to' address in the custody chain
|
||||
*
|
||||
* This does not actually do certificate checking. That must be done with verify().
|
||||
*
|
||||
* @param a Address to check
|
||||
* @return True if address is present
|
||||
*/
|
||||
inline bool wasIssuedTo(const Address &a) const
|
||||
{
|
||||
for(unsigned int i=0;i<ZT_MAX_CAPABILITY_CUSTODY_CHAIN_LENGTH;++i) {
|
||||
if (_custody[i].to == a)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sign this capability and add signature to its chain of custody
|
||||
*
|
||||
|
@ -132,10 +149,10 @@ public:
|
|||
try {
|
||||
for(unsigned int i=0;((i<_maxCustodyChainLength)&&(i<ZT_MAX_CAPABILITY_CUSTODY_CHAIN_LENGTH));++i) {
|
||||
if (!(_custody[i].to)) {
|
||||
_custody[i].to = to;
|
||||
_custody[i].from = from.address();
|
||||
Buffer<(sizeof(Capability) * 2)> tmp;
|
||||
this->serialize(tmp,true);
|
||||
_custody[i].to = to;
|
||||
_custody[i].from = from.address();
|
||||
_custody[i].signature = from.sign(tmp.data(),tmp.size());
|
||||
return true;
|
||||
}
|
||||
|
@ -255,22 +272,21 @@ public:
|
|||
b.append(_id);
|
||||
b.append(_nwid);
|
||||
b.append(_expiration);
|
||||
|
||||
serializeRules(b,_rules,_ruleCount);
|
||||
|
||||
b.append((uint8_t)_maxCustodyChainLength);
|
||||
for(unsigned int i=0;;++i) {
|
||||
if ((i < _maxCustodyChainLength)&&(i < ZT_MAX_CAPABILITY_CUSTODY_CHAIN_LENGTH)&&(_custody[i].to)) {
|
||||
_custody[i].to.appendTo(b);
|
||||
_custody[i].from.appendTo(b);
|
||||
if (!forSign) {
|
||||
|
||||
if (!forSign) {
|
||||
for(unsigned int i=0;;++i) {
|
||||
if ((i < _maxCustodyChainLength)&&(i < ZT_MAX_CAPABILITY_CUSTODY_CHAIN_LENGTH)&&(_custody[i].to)) {
|
||||
_custody[i].to.appendTo(b);
|
||||
_custody[i].from.appendTo(b);
|
||||
b.append((uint8_t)1); // 1 == Ed25519 signature
|
||||
b.append((uint16_t)ZT_C25519_SIGNATURE_LEN); // length of signature
|
||||
b.append(_custody[i].signature.data,ZT_C25519_SIGNATURE_LEN);
|
||||
} else {
|
||||
b.append((unsigned char)0,ZT_ADDRESS_LENGTH); // zero 'to' terminates chain
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
b.append((unsigned char)0,ZT_ADDRESS_LENGTH); // zero 'to' terminates chain
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -369,10 +385,9 @@ public:
|
|||
_id = b.template at<uint32_t>(p); p += 4;
|
||||
_nwid = b.template at<uint64_t>(p); p += 8;
|
||||
_expiration = b.template at<uint64_t>(p); p += 8;
|
||||
|
||||
deserializeRules(b,p,_rules,_ruleCount,ZT_MAX_CAPABILITY_RULES);
|
||||
|
||||
_maxCustodyChainLength = (unsigned int)b[p++];
|
||||
|
||||
if ((_maxCustodyChainLength < 1)||(_maxCustodyChainLength > ZT_MAX_CAPABILITY_CUSTODY_CHAIN_LENGTH))
|
||||
throw std::runtime_error("invalid max custody chain length");
|
||||
for(unsigned int i;;++i) {
|
||||
|
@ -393,25 +408,6 @@ public:
|
|||
return (p - startAt);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if a given address is a 'to' address in the custody chain
|
||||
*
|
||||
* This does not actually do certificate checking. That must be done with verify().
|
||||
*
|
||||
* @param a Address to check
|
||||
* @return True if address is present
|
||||
*/
|
||||
inline bool wasIssuedTo(const Address &a) const
|
||||
{
|
||||
for(unsigned int i=0;i<ZT_MAX_CAPABILITY_CUSTODY_CHAIN_LENGTH;++i) {
|
||||
if (!_custody[i].to)
|
||||
break;
|
||||
else if (_custody[i].to == a)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Provides natural sort order by ID
|
||||
inline bool operator<(const Capability &c) const { return (_id < c._id); }
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue