data: add shortcuts to access SignatureType and KeyLocator
Also, modernize the API of SignatureInfo and deprecate
unsetKeyLocator() and unsetValidityPeriod()
Change-Id: I8b775a4deb185784a3dcc8bd96c8f5f0c2915854
diff --git a/tests/unit/signature-info.t.cpp b/tests/unit/signature-info.t.cpp
index 2702282..1b0fe58 100644
--- a/tests/unit/signature-info.t.cpp
+++ b/tests/unit/signature-info.t.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
- * Copyright (c) 2013-2018 Regents of the University of California.
+ * Copyright (c) 2013-2020 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -22,6 +22,7 @@
#include "ndn-cxx/signature-info.hpp"
#include "tests/boost-test.hpp"
+
#include <boost/lexical_cast.hpp>
namespace ndn {
@@ -30,17 +31,17 @@
BOOST_AUTO_TEST_SUITE(TestSignatureInfo)
const uint8_t sigInfoRsa[] = {
-0x16, 0x1b, // SignatureInfo
- 0x1b, 0x01, // SignatureType
- 0x01, // Sha256WithRsa
- 0x1c, 0x16, // KeyLocator
- 0x07, 0x14, // Name
- 0x08, 0x04,
- 0x74, 0x65, 0x73, 0x74,
- 0x08, 0x03,
- 0x6b, 0x65, 0x79,
- 0x08, 0x07,
- 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72
+ 0x16, 0x1b, // SignatureInfo
+ 0x1b, 0x01, // SignatureType
+ 0x01, // Sha256WithRsa
+ 0x1c, 0x16, // KeyLocator
+ 0x07, 0x14, // Name
+ 0x08, 0x04,
+ 0x74, 0x65, 0x73, 0x74,
+ 0x08, 0x03,
+ 0x6b, 0x65, 0x79,
+ 0x08, 0x07,
+ 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72
};
BOOST_AUTO_TEST_CASE(Constructor)
@@ -49,6 +50,8 @@
BOOST_CHECK_EQUAL(info.getSignatureType(), -1);
BOOST_CHECK_EQUAL(info.hasKeyLocator(), false);
BOOST_CHECK_THROW(info.getKeyLocator(), SignatureInfo::Error);
+ BOOST_CHECK_EQUAL(info.hasValidityPeriod(), false);
+ BOOST_CHECK_THROW(info.getValidityPeriod(), SignatureInfo::Error);
BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(info), "Invalid SignatureInfo");
@@ -63,23 +66,21 @@
SignatureInfo sha256RsaInfo(tlv::SignatureSha256WithRsa, keyLocator);
BOOST_CHECK_EQUAL(sha256RsaInfo.getSignatureType(), tlv::SignatureSha256WithRsa);
BOOST_CHECK_EQUAL(sha256RsaInfo.hasKeyLocator(), true);
- BOOST_CHECK_NO_THROW(sha256RsaInfo.getKeyLocator());
BOOST_CHECK_EQUAL(sha256RsaInfo.getKeyLocator().getName(), Name("/test/key/locator"));
+ BOOST_CHECK_EQUAL(sha256RsaInfo.hasValidityPeriod(), false);
+ BOOST_CHECK_THROW(sha256RsaInfo.getValidityPeriod(), SignatureInfo::Error);
- BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(sha256RsaInfo), "SignatureSha256WithRsa Name=/test/key/locator");
+ BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(sha256RsaInfo),
+ "SignatureSha256WithRsa Name=/test/key/locator");
- const Block& encoded = sha256RsaInfo.wireEncode();
+ auto encoded = sha256RsaInfo.wireEncode();
Block sigInfoBlock(sigInfoRsa, sizeof(sigInfoRsa));
-
- BOOST_CHECK_EQUAL_COLLECTIONS(sigInfoBlock.wire(),
- sigInfoBlock.wire() + sigInfoBlock.size(),
- encoded.wire(),
- encoded.wire() + encoded.size());
+ BOOST_CHECK_EQUAL_COLLECTIONS(sigInfoBlock.wire(), sigInfoBlock.wire() + sigInfoBlock.size(),
+ encoded.wire(), encoded.wire() + encoded.size());
sha256RsaInfo = SignatureInfo(sigInfoBlock);
BOOST_CHECK_EQUAL(sha256RsaInfo.getSignatureType(), tlv::SignatureSha256WithRsa);
BOOST_CHECK_EQUAL(sha256RsaInfo.hasKeyLocator(), true);
- BOOST_CHECK_NO_THROW(sha256RsaInfo.getKeyLocator());
BOOST_CHECK_EQUAL(sha256RsaInfo.getKeyLocator().getName(), Name("/test/key/locator"));
}
@@ -132,37 +133,53 @@
}
-BOOST_AUTO_TEST_CASE(SetterGetter)
+BOOST_AUTO_TEST_CASE(GetSetSignatureType)
{
SignatureInfo info;
BOOST_CHECK_EQUAL(info.getSignatureType(), -1);
- BOOST_CHECK_EQUAL(info.hasKeyLocator(), false);
- BOOST_CHECK_THROW(info.getKeyLocator(), SignatureInfo::Error);
+ BOOST_CHECK_THROW(info.wireEncode(), SignatureInfo::Error);
- info.setSignatureType(tlv::SignatureSha256WithRsa);
- BOOST_CHECK_EQUAL(info.getSignatureType(), tlv::SignatureSha256WithRsa);
- BOOST_CHECK_EQUAL(info.hasKeyLocator(), false);
+ info.setSignatureType(tlv::SignatureSha256WithEcdsa);
+ BOOST_CHECK_EQUAL(info.getSignatureType(), tlv::SignatureSha256WithEcdsa);
+ BOOST_CHECK_EQUAL(info.hasWire(), false);
- KeyLocator keyLocator("/test/key/locator");
- info.setKeyLocator(keyLocator);
- BOOST_CHECK_EQUAL(info.hasKeyLocator(), true);
- BOOST_CHECK_NO_THROW(info.getKeyLocator());
- BOOST_CHECK_EQUAL(info.getKeyLocator().getName(), Name("/test/key/locator"));
+ info.wireEncode();
+ BOOST_CHECK_EQUAL(info.hasWire(), true);
+ info.setSignatureType(tlv::SignatureSha256WithEcdsa);
+ BOOST_CHECK_EQUAL(info.hasWire(), true);
- const Block& encoded = info.wireEncode();
- Block sigInfoBlock(sigInfoRsa, sizeof(sigInfoRsa));
-
- BOOST_CHECK_EQUAL_COLLECTIONS(sigInfoBlock.wire(),
- sigInfoBlock.wire() + sigInfoBlock.size(),
- encoded.wire(),
- encoded.wire() + encoded.size());
-
- info.unsetKeyLocator();
- BOOST_CHECK_EQUAL(info.hasKeyLocator(), false);
- BOOST_CHECK_THROW(info.getKeyLocator(), SignatureInfo::Error);
+ info.setSignatureType(static_cast<tlv::SignatureTypeValue>(1234));
+ BOOST_CHECK_EQUAL(info.getSignatureType(), 1234);
+ BOOST_CHECK_EQUAL(info.hasWire(), false);
}
-BOOST_AUTO_TEST_CASE(ValidityPeriodExtension)
+BOOST_AUTO_TEST_CASE(GetSetKeyLocator)
+{
+ SignatureInfo info(tlv::SignatureSha256WithEcdsa);
+ BOOST_CHECK_EQUAL(info.hasKeyLocator(), false);
+ BOOST_CHECK_THROW(info.getKeyLocator(), SignatureInfo::Error);
+
+ info.setKeyLocator(Name("/test/key/locator"));
+ BOOST_CHECK_EQUAL(info.hasKeyLocator(), true);
+ BOOST_CHECK_EQUAL(info.getKeyLocator().getName(), "/test/key/locator");
+ BOOST_CHECK_EQUAL(info.hasWire(), false);
+
+ info.wireEncode();
+ BOOST_CHECK_EQUAL(info.hasWire(), true);
+ info.setKeyLocator(Name("/test/key/locator"));
+ BOOST_CHECK_EQUAL(info.hasWire(), true);
+ info.setKeyLocator(Name("/another/key/locator"));
+ BOOST_CHECK_EQUAL(info.hasWire(), false);
+
+ info.wireEncode();
+ BOOST_CHECK_EQUAL(info.hasWire(), true);
+ info.setKeyLocator(nullopt);
+ BOOST_CHECK_EQUAL(info.hasKeyLocator(), false);
+ BOOST_CHECK_THROW(info.getKeyLocator(), SignatureInfo::Error);
+ BOOST_CHECK_EQUAL(info.hasWire(), false);
+}
+
+BOOST_AUTO_TEST_CASE(ValidityPeriod)
{
const uint8_t sigInfo[] = {
0x16, 0x45, // SignatureInfo
@@ -185,50 +202,61 @@
0x54, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
};
- time::system_clock::TimePoint notBefore = time::getUnixEpoch();
- time::system_clock::TimePoint notAfter = notBefore + 1_day;
+ const auto notBefore = time::getUnixEpoch();
+ const auto notAfter = notBefore + 1_day;
security::ValidityPeriod vp1(notBefore, notAfter);
- // encode
- SignatureInfo info;
- info.setSignatureType(tlv::SignatureSha256WithRsa);
- info.setKeyLocator(KeyLocator("/test/key/locator"));
+ SignatureInfo info(tlv::SignatureSha256WithRsa, KeyLocator("/test/key/locator"));
+ BOOST_CHECK_EQUAL(info.hasValidityPeriod(), false);
+ BOOST_CHECK_THROW(info.getValidityPeriod(), SignatureInfo::Error);
+
+ info.wireEncode();
info.setValidityPeriod(vp1);
-
+ BOOST_CHECK_EQUAL(info.hasValidityPeriod(), true);
BOOST_CHECK_EQUAL(info.getValidityPeriod(), vp1);
+ BOOST_CHECK_EQUAL(info.hasWire(), false);
- const Block& encoded = info.wireEncode();
-
+ // encode
+ auto encoded = info.wireEncode();
+ BOOST_CHECK_EQUAL(info.hasWire(), true);
BOOST_CHECK_EQUAL_COLLECTIONS(sigInfo, sigInfo + sizeof(sigInfo),
encoded.wire(), encoded.wire() + encoded.size());
+ info.setValidityPeriod(vp1);
+ BOOST_CHECK_EQUAL(info.hasWire(), true);
+
// decode
Block block(sigInfo, sizeof(sigInfo));
- SignatureInfo info2;
- info2.wireDecode(block);
+ SignatureInfo info2(block);
+ BOOST_CHECK_EQUAL(info2.hasValidityPeriod(), true);
BOOST_CHECK_EQUAL(info2.getValidityPeriod(), vp1);
+ BOOST_CHECK_EQUAL(info2.hasWire(), true);
- const security::ValidityPeriod& validityPeriod = info2.getValidityPeriod();
- BOOST_CHECK(validityPeriod.getPeriod() == std::make_pair(notBefore, notAfter));
+ info2.setValidityPeriod(security::ValidityPeriod(notBefore, notBefore + 42_days));
+ BOOST_CHECK_EQUAL(info2.hasValidityPeriod(), true);
+ BOOST_CHECK_NE(info2.getValidityPeriod(), vp1);
+ BOOST_CHECK(info2.getValidityPeriod().getPeriod() == std::make_pair(notBefore, notBefore + 42_days));
+ BOOST_CHECK_EQUAL(info2.hasWire(), false);
+
+ info2.wireEncode();
+ BOOST_CHECK_EQUAL(info2.hasWire(), true);
+ info2.setValidityPeriod(nullopt);
+ BOOST_CHECK_EQUAL(info2.hasValidityPeriod(), false);
+ BOOST_CHECK_THROW(info2.getValidityPeriod(), SignatureInfo::Error);
+ BOOST_CHECK_EQUAL(info2.hasWire(), false);
}
BOOST_AUTO_TEST_CASE(OtherTlvs)
{
- SignatureInfo info;
- BOOST_CHECK_EQUAL(info.getSignatureType(), -1);
- BOOST_CHECK_EQUAL(info.hasKeyLocator(), false);
- BOOST_CHECK_THROW(info.getKeyLocator(), SignatureInfo::Error);
-
- const uint8_t tlv1[] = {
- 0x81, // T
- 0x01, // L
- 0x01, // V
- };
- Block block1(tlv1, sizeof(tlv1));
-
- info.appendTypeSpecificTlv(block1);
+ SignatureInfo info(tlv::SignatureSha256WithEcdsa);
+ info.appendTypeSpecificTlv("810101"_block);
BOOST_CHECK_THROW(info.getTypeSpecificTlv(0x82), SignatureInfo::Error);
- BOOST_REQUIRE_NO_THROW(info.getTypeSpecificTlv(0x81));
+ BOOST_CHECK_EQUAL(info.getTypeSpecificTlv(0x81).type(), 0x81);
+
+ info.wireEncode();
+ BOOST_CHECK_EQUAL(info.hasWire(), true);
+ info.appendTypeSpecificTlv("82020202"_block);
+ BOOST_CHECK_EQUAL(info.hasWire(), false);
}
BOOST_AUTO_TEST_CASE(OtherTlvsEncoding) // Bug #3914