示例#1
0
void
CommandInterestGenerator::generate
  (Interest& interest, KeyChain& keyChain, const Name& certificateName,
   WireFormat& wireFormat)
{
  MillisecondsSince1970 timestamp = ::round(ndn_getNowMilliseconds());
  while (timestamp <= lastTimestamp_)
    timestamp += 1.0;

  // The timestamp is encoded as a TLV nonNegativeInteger.
  TlvEncoder encoder(8);
  encoder.writeNonNegativeInteger((uint64_t)timestamp);
  interest.getName().append(Blob(encoder.finish()));

  // The random value is a TLV nonNegativeInteger too, but we know it is 8 bytes,
  //   so we don't need to call the nonNegativeInteger encoder.
  uint8_t randomBuffer[8];
  ndn_Error error;
  if ((error = CryptoLite::generateRandomBytes(randomBuffer, sizeof(randomBuffer))))
    throw runtime_error(ndn_getErrorString(error));
  interest.getName().append(randomBuffer, sizeof(randomBuffer));

  keyChain.sign(interest, certificateName, wireFormat);

  if (interest.getInterestLifetimeMilliseconds() < 0)
    // The caller has not set the interest lifetime, so set it here.
    interest.setInterestLifetimeMilliseconds(1000.0);

  // We successfully signed the interest, so update the timestamp.
  lastTimestamp_ = timestamp;
}
示例#2
0
void
CommandInterestGenerator::generate
  (Interest& interest, KeyChain& keyChain, const Name& certificateName,
   WireFormat& wireFormat)
{
  prepareCommandInterestName(interest, wireFormat);
  keyChain.sign(interest, certificateName, wireFormat);

  if (interest.getInterestLifetimeMilliseconds() < 0)
    // The caller has not set the interest lifetime, so set it here.
    interest.setInterestLifetimeMilliseconds(1000.0);
}
示例#3
0
TEST_F(TestLink, EncodeDecodeInterestWithLink)
{
  Link link1;
  link1.setName(Name("test"));
  link1.addDelegation(10,  Name("/test1"));
  link1.addDelegation(20,  Name("/test2"));
  link1.addDelegation(100, Name("/test3"));

  keyChain_->sign(link1, certificateName_);

  Interest interestA;
  interestA.setName(Name("/Test/Encode/Decode/With/Link"));
  interestA.setChildSelector(1);
  interestA.setInterestLifetimeMilliseconds(10000);
  interestA.setLinkWireEncoding(link1.wireEncode());

  Blob interestEncoding = interestA.wireEncode();
  Interest interestB;
  interestB.wireDecode(interestEncoding);

  ASSERT_EQ(interestA.getName(), interestB.getName());

  Link* link2 = interestB.getLink();
  ASSERT_TRUE(link2) << "Interest link object not specified";
  const DelegationSet& delegations = link2->getDelegations();
  for (size_t i = 0; i < delegations.size(); ++i) {
    if (i == 0) {
      ASSERT_EQ(10, delegations.get(i).getPreference());
      ASSERT_EQ(Name("/test1"), delegations.get(i).getName());
    }
    if (i == 1) {
      ASSERT_EQ(20, delegations.get(i).getPreference());
      ASSERT_EQ(Name("/test2"), delegations.get(i).getName());
    }
    if (i == 2) {
      ASSERT_EQ(100, delegations.get(i).getPreference());
      ASSERT_EQ(Name("/test3"), delegations.get(i).getName());
    }
  }
}