#include #include #include #include #include "Padding/PadderIso7816.hpp" using namespace Chaos::Padding; TEST(PadIso7816Tests, PadTest) { { std::array fact = {}; std::array expected = { 0x80 }; PadderIso7816::Pad(fact.begin(), fact.end()); ASSERT_EQ(expected, fact); } { std::array fact = {}; std::array expected = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; PadderIso7816::Pad(fact.begin(), fact.end()); ASSERT_EQ(expected, fact); } { std::array fact = {}; std::array expected = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; PadderIso7816::Pad(fact.begin(), fact.end()); ASSERT_EQ(expected, fact); } for (int i = 0; i < 256; ++i) { std::vector fact(i, 0xff); PadderIso7816::Pad(fact.begin(), fact.end()); for (int j = 0; j < i; ++j) { ASSERT_EQ(j == 0 ? 0x80 : 0x00, fact[j]); } } } TEST(PadIso7816Tests, PadOutIteratorUsageTest) { { std::array fact; fact.fill(0xff); std::array expected = { 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff }; PadderIso7816::Pad(fact.begin() + 3, fact.end() - 3); ASSERT_EQ(expected, fact); } { std::array fact; fact.fill(0xff); std::array expected = { 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff }; PadderIso7816::Pad(fact.begin() + 3, fact.end() - 3); ASSERT_EQ(expected, fact); } { std::array fact = { 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb }; std::array expected = { 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb }; PadderIso7816::Pad(fact.begin() + 5, fact.begin() + 5); ASSERT_EQ(expected, fact); } } template void PadThroughBase(const Padder & padder, OutputIt begin, OutputIt end) { padder.Pad(begin, end); } TEST(PadIso7816Tests, PadThroughBaseTest) { { std::array fact; fact.fill(0xff); std::array expected = { 0x80, 0x00, 0x00, 0x00, 0x00 }; const PadderIso7816 padder; PadThroughBase(padder, fact.begin(), fact.end()); ASSERT_EQ(expected, fact); } }