You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

test-main.cpp 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510
  1. #include <iostream>
  2. #include <string.h>
  3. #include <gtest/gtest.h>
  4. #include <DataAccess/LibNfc.h>
  5. #include <DBO/StringUtils.h>
  6. #include <DBO/ArrayUtils.h>
  7. #include <DBO/AccessBitsDbo.h>
  8. TEST(StringUtils, rawToHumanChar)
  9. {
  10. ASSERT_EQ(StringUtils::rawToHuman((char)255), "ff");
  11. ASSERT_EQ(StringUtils::rawToHuman((char)127), "7f");
  12. ASSERT_EQ(StringUtils::rawToHuman((char)10), "0a");
  13. ASSERT_EQ(StringUtils::rawToHuman((char)0), "00");
  14. }
  15. TEST(StringUtils, rawToHumanShort)
  16. {
  17. ASSERT_EQ(StringUtils::rawToHuman((short)65535), "ffff");
  18. ASSERT_EQ(StringUtils::rawToHuman((short)65534), "fffe");
  19. ASSERT_EQ(StringUtils::rawToHuman((short)256), "0100");
  20. ASSERT_EQ(StringUtils::rawToHuman((short)255), "00ff");
  21. ASSERT_EQ(StringUtils::rawToHuman((short)127), "007f");
  22. ASSERT_EQ(StringUtils::rawToHuman((short)10), "000a");
  23. ASSERT_EQ(StringUtils::rawToHuman((short)0), "0000");
  24. }
  25. TEST(StringUtils, rawToHumanInt)
  26. {
  27. ASSERT_EQ(StringUtils::rawToHuman((int)4294967295), "ffffffff");
  28. ASSERT_EQ(StringUtils::rawToHuman((int)4294967294), "fffffffe");
  29. ASSERT_EQ(StringUtils::rawToHuman((int)65536), "00010000");
  30. ASSERT_EQ(StringUtils::rawToHuman((int)65535), "0000ffff");
  31. ASSERT_EQ(StringUtils::rawToHuman((int)65534), "0000fffe");
  32. ASSERT_EQ(StringUtils::rawToHuman((int)256), "00000100");
  33. ASSERT_EQ(StringUtils::rawToHuman((int)255), "000000ff");
  34. ASSERT_EQ(StringUtils::rawToHuman((int)127), "0000007f");
  35. ASSERT_EQ(StringUtils::rawToHuman((int)10), "0000000a");
  36. ASSERT_EQ(StringUtils::rawToHuman((int)0), "00000000");
  37. }
  38. TEST(StringUtils, rawToHumanLong)
  39. {
  40. ASSERT_EQ(StringUtils::rawToHuman((long)std::numeric_limits<unsigned long>::max()), "ffffffffffffffff");
  41. ASSERT_EQ(StringUtils::rawToHuman((long)std::numeric_limits<unsigned long>::max() - 1), "fffffffffffffffe");
  42. ASSERT_EQ(StringUtils::rawToHuman((long)4294967296), "0000000100000000");
  43. ASSERT_EQ(StringUtils::rawToHuman((long)4294967295), "00000000ffffffff");
  44. ASSERT_EQ(StringUtils::rawToHuman((long)4294967294), "00000000fffffffe");
  45. ASSERT_EQ(StringUtils::rawToHuman((long)65536), "0000000000010000");
  46. ASSERT_EQ(StringUtils::rawToHuman((long)65535), "000000000000ffff");
  47. ASSERT_EQ(StringUtils::rawToHuman((long)65534), "000000000000fffe");
  48. ASSERT_EQ(StringUtils::rawToHuman((long)256), "0000000000000100");
  49. ASSERT_EQ(StringUtils::rawToHuman((long)255), "00000000000000ff");
  50. ASSERT_EQ(StringUtils::rawToHuman((long)127), "000000000000007f");
  51. ASSERT_EQ(StringUtils::rawToHuman((long)10), "000000000000000a");
  52. ASSERT_EQ(StringUtils::rawToHuman((long)0), "0000000000000000");
  53. }
  54. TEST(StringUtils, rawToHumanString)
  55. {
  56. ASSERT_EQ(StringUtils::rawToHuman(std::string({0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
  57. 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f})),
  58. "000102030405060708090a0b0c0d0e0f");
  59. }
  60. TEST(StringUtils, toLower)
  61. {
  62. ASSERT_EQ(StringUtils::toLower('a'), 'a');
  63. ASSERT_EQ(StringUtils::toLower('z'), 'z');
  64. ASSERT_EQ(StringUtils::toLower('A'), 'a');
  65. ASSERT_EQ(StringUtils::toLower('Z'), 'z');
  66. ASSERT_EQ(StringUtils::toLower('1'), '1');
  67. ASSERT_EQ(StringUtils::toLower('@'), '@');
  68. }
  69. TEST(StringUtils, toUpper)
  70. {
  71. ASSERT_EQ(StringUtils::toUpper('a'), 'A');
  72. ASSERT_EQ(StringUtils::toUpper('z'), 'Z');
  73. ASSERT_EQ(StringUtils::toUpper('A'), 'A');
  74. ASSERT_EQ(StringUtils::toUpper('Z'), 'Z');
  75. ASSERT_EQ(StringUtils::toUpper('1'), '1');
  76. ASSERT_EQ(StringUtils::toUpper('@'), '@');
  77. }
  78. TEST(StringUtils, humanToRaw)
  79. {
  80. ASSERT_EQ(StringUtils::humanToRaw("0f00").getData(), std::string({0x0f, 0x00}));
  81. ASSERT_EQ(StringUtils::humanToRaw("000f").getData(), std::string({0x00, 0x0f}));
  82. ASSERT_EQ(StringUtils::humanToRaw("0a0a").getData(), std::string({0x0a, 0x0a}));
  83. ASSERT_EQ(StringUtils::humanToRaw("1a0f").getData(), std::string({0x1a, 0x0f}));
  84. ASSERT_EQ(StringUtils::humanToRaw("1a00f").getError(), "Malformed hex data: invalid length");
  85. ASSERT_EQ(StringUtils::humanToRaw("1a\n00f").getError(), "Malformed hex data at char 2");
  86. }
  87. TEST(StringUtils, ensureSize)
  88. {
  89. ASSERT_EQ(StringUtils::ensureSize("test", 3), "tes");
  90. ASSERT_EQ(StringUtils::ensureSize("test", 4), "test");
  91. ASSERT_EQ(StringUtils::ensureSize("test", 5), std::string({'t', 'e', 's', 't', '\0'}));
  92. }
  93. TEST(ArrayUtils, getArrayBitimple)
  94. {
  95. const unsigned char buf[] = {0x04};
  96. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 0));
  97. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 1));
  98. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 2));
  99. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 3));
  100. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 4));
  101. ASSERT_TRUE(ArrayUtils::getArrayBit(buf, 5));
  102. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 6));
  103. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 7));
  104. }
  105. TEST(ArrayUtils, getArrayBitMultiple)
  106. {
  107. const unsigned char buf[] = {0x80, 0x14, 0x01};
  108. ASSERT_TRUE(ArrayUtils::getArrayBit(buf, 0));
  109. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 1));
  110. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 2));
  111. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 3));
  112. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 4));
  113. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 5));
  114. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 6));
  115. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 7));
  116. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 8));
  117. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 9));
  118. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 10));
  119. ASSERT_TRUE(ArrayUtils::getArrayBit(buf, 11));
  120. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 12));
  121. ASSERT_TRUE(ArrayUtils::getArrayBit(buf, 13));
  122. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 14));
  123. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 15));
  124. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 16));
  125. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 17));
  126. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 18));
  127. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 19));
  128. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 20));
  129. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 21));
  130. ASSERT_FALSE(ArrayUtils::getArrayBit(buf, 22));
  131. ASSERT_TRUE(ArrayUtils::getArrayBit(buf, 23));
  132. }
  133. TEST(AccessBitsDbo, getBit)
  134. {
  135. const unsigned char buf[4] = {0x05, 0xa3, 0xcf, 0x00};
  136. AccessBitsDbo dbo((const char*)buf);
  137. ASSERT_FALSE(dbo.getBit(1, 0));
  138. ASSERT_TRUE(dbo.getBit(2, 0));
  139. ASSERT_FALSE(dbo.getBit(3, 0));
  140. ASSERT_TRUE(dbo.getBit(1, 1));
  141. ASSERT_TRUE(dbo.getBit(2, 1));
  142. ASSERT_FALSE(dbo.getBit(3, 1));
  143. ASSERT_FALSE(dbo.getBit(1, 2));
  144. ASSERT_TRUE(dbo.getBit(2, 2));
  145. ASSERT_TRUE(dbo.getBit(3, 2));
  146. ASSERT_TRUE(dbo.getBit(1, 3));
  147. ASSERT_TRUE(dbo.getBit(2, 3));
  148. ASSERT_TRUE(dbo.getBit(3, 3));
  149. }
  150. TEST(AccessBitsDbo, canKeyDoThisOnThisBlock1)
  151. {
  152. const unsigned char buf[4] = {0xff, 0x0f, 0x00, 0x00};
  153. AccessBitsDbo dbo((const char*)buf);
  154. ASSERT_TRUE(dbo.canKeyAReadBlock(0));
  155. ASSERT_TRUE(dbo.canKeyBReadBlock(0));
  156. ASSERT_TRUE(dbo.canKeyAWriteBlock(0));
  157. ASSERT_TRUE(dbo.canKeyBWriteBlock(0));
  158. ASSERT_TRUE(dbo.canKeyAIncrementBlock(0));
  159. ASSERT_TRUE(dbo.canKeyBIncrementBlock(0));
  160. ASSERT_TRUE(dbo.canKeyADecrementBlock(0));
  161. ASSERT_TRUE(dbo.canKeyBDecrementBlock(0));
  162. }
  163. TEST(AccessBitsDbo, canKeyDoThisOnThisBlock2)
  164. {
  165. const unsigned char buf[4] = {0xef, 0x0f, 0x01, 0x00};
  166. AccessBitsDbo dbo((const char*)buf);
  167. ASSERT_TRUE(dbo.canKeyAReadBlock(0));
  168. ASSERT_TRUE(dbo.canKeyBReadBlock(0));
  169. ASSERT_FALSE(dbo.canKeyAWriteBlock(0));
  170. ASSERT_FALSE(dbo.canKeyBWriteBlock(0));
  171. ASSERT_FALSE(dbo.canKeyAIncrementBlock(0));
  172. ASSERT_FALSE(dbo.canKeyBIncrementBlock(0));
  173. ASSERT_FALSE(dbo.canKeyADecrementBlock(0));
  174. ASSERT_FALSE(dbo.canKeyBDecrementBlock(0));
  175. }
  176. TEST(AccessBitsDbo, canKeyDoThisOnThisBlock3)
  177. {
  178. const unsigned char buf[4] = {0xfe, 0x1f, 0x00, 0x00};
  179. AccessBitsDbo dbo((const char*)buf);
  180. ASSERT_TRUE(dbo.canKeyAReadBlock(0));
  181. ASSERT_TRUE(dbo.canKeyBReadBlock(0));
  182. ASSERT_FALSE(dbo.canKeyAWriteBlock(0));
  183. ASSERT_TRUE(dbo.canKeyBWriteBlock(0));
  184. ASSERT_FALSE(dbo.canKeyAIncrementBlock(0));
  185. ASSERT_FALSE(dbo.canKeyBIncrementBlock(0));
  186. ASSERT_FALSE(dbo.canKeyADecrementBlock(0));
  187. ASSERT_FALSE(dbo.canKeyBDecrementBlock(0));
  188. }
  189. TEST(AccessBitsDbo, canKeyDoThisOnThisBlock4)
  190. {
  191. const unsigned char buf[4] = {0xee, 0x1f, 0x01, 0x00};
  192. AccessBitsDbo dbo((const char*)buf);
  193. ASSERT_TRUE(dbo.canKeyAReadBlock(0));
  194. ASSERT_TRUE(dbo.canKeyBReadBlock(0));
  195. ASSERT_FALSE(dbo.canKeyAWriteBlock(0));
  196. ASSERT_TRUE(dbo.canKeyBWriteBlock(0));
  197. ASSERT_FALSE(dbo.canKeyAIncrementBlock(0));
  198. ASSERT_TRUE(dbo.canKeyBIncrementBlock(0));
  199. ASSERT_TRUE(dbo.canKeyADecrementBlock(0));
  200. ASSERT_TRUE(dbo.canKeyBDecrementBlock(0));
  201. }
  202. TEST(AccessBitsDbo, canKeyDoThisOnThisBlock5)
  203. {
  204. const unsigned char buf[4] = {0xff, 0x0e, 0x10, 0x00};
  205. AccessBitsDbo dbo((const char*)buf);
  206. ASSERT_TRUE(dbo.canKeyAReadBlock(0));
  207. ASSERT_TRUE(dbo.canKeyBReadBlock(0));
  208. ASSERT_FALSE(dbo.canKeyAWriteBlock(0));
  209. ASSERT_FALSE(dbo.canKeyBWriteBlock(0));
  210. ASSERT_FALSE(dbo.canKeyAIncrementBlock(0));
  211. ASSERT_FALSE(dbo.canKeyBIncrementBlock(0));
  212. ASSERT_TRUE(dbo.canKeyADecrementBlock(0));
  213. ASSERT_TRUE(dbo.canKeyBDecrementBlock(0));
  214. }
  215. TEST(AccessBitsDbo, canKeyDoThisOnThisBlock6)
  216. {
  217. const unsigned char buf[4] = {0xef, 0x0e, 0x11, 0x00};
  218. AccessBitsDbo dbo((const char*)buf);
  219. ASSERT_FALSE(dbo.canKeyAReadBlock(0));
  220. ASSERT_TRUE(dbo.canKeyBReadBlock(0));
  221. ASSERT_FALSE(dbo.canKeyAWriteBlock(0));
  222. ASSERT_TRUE(dbo.canKeyBWriteBlock(0));
  223. ASSERT_FALSE(dbo.canKeyAIncrementBlock(0));
  224. ASSERT_FALSE(dbo.canKeyBIncrementBlock(0));
  225. ASSERT_FALSE(dbo.canKeyADecrementBlock(0));
  226. ASSERT_FALSE(dbo.canKeyBDecrementBlock(0));
  227. }
  228. TEST(AccessBitsDbo, canKeyDoThisOnThisBlock7)
  229. {
  230. const unsigned char buf[4] = {0xfe, 0x1e, 0x10, 0x00};
  231. AccessBitsDbo dbo((const char*)buf);
  232. ASSERT_FALSE(dbo.canKeyAReadBlock(0));
  233. ASSERT_TRUE(dbo.canKeyBReadBlock(0));
  234. ASSERT_FALSE(dbo.canKeyAWriteBlock(0));
  235. ASSERT_FALSE(dbo.canKeyBWriteBlock(0));
  236. ASSERT_FALSE(dbo.canKeyAIncrementBlock(0));
  237. ASSERT_FALSE(dbo.canKeyBIncrementBlock(0));
  238. ASSERT_FALSE(dbo.canKeyADecrementBlock(0));
  239. ASSERT_FALSE(dbo.canKeyBDecrementBlock(0));
  240. }
  241. TEST(AccessBitsDbo, canKeyDoThisOnThisBlock8)
  242. {
  243. const unsigned char buf[4] = {0xee, 0x1e, 0x11, 0x00};
  244. AccessBitsDbo dbo((const char*)buf);
  245. ASSERT_FALSE(dbo.canKeyAReadBlock(0));
  246. ASSERT_FALSE(dbo.canKeyBReadBlock(0));
  247. ASSERT_FALSE(dbo.canKeyAWriteBlock(0));
  248. ASSERT_FALSE(dbo.canKeyBWriteBlock(0));
  249. ASSERT_FALSE(dbo.canKeyAIncrementBlock(0));
  250. ASSERT_FALSE(dbo.canKeyBIncrementBlock(0));
  251. ASSERT_FALSE(dbo.canKeyADecrementBlock(0));
  252. ASSERT_FALSE(dbo.canKeyBDecrementBlock(0));
  253. }
  254. TEST(AccessBitsDbo, canKeyDoThisOnThisTrailer1)
  255. {
  256. const unsigned char buf[4] = {0xff, 0x0f, 0x00, 0x00};
  257. AccessBitsDbo dbo((const char*)buf);
  258. ASSERT_FALSE(dbo.canKeyAReadKeyATrailer());
  259. ASSERT_FALSE(dbo.canKeyBReadKeyATrailer());
  260. ASSERT_TRUE(dbo.canKeyAWriteKeyATrailer());
  261. ASSERT_FALSE(dbo.canKeyBWriteKeyATrailer());
  262. ASSERT_TRUE(dbo.canKeyAReadAccessBitsTrailer());
  263. ASSERT_FALSE(dbo.canKeyBReadAccessBitsTrailer());
  264. ASSERT_FALSE(dbo.canKeyAWriteAccessBitsTrailer());
  265. ASSERT_FALSE(dbo.canKeyBWriteAccessBitsTrailer());
  266. ASSERT_TRUE(dbo.canKeyAReadKeyBTrailer());
  267. ASSERT_FALSE(dbo.canKeyBReadKeyBTrailer());
  268. ASSERT_TRUE(dbo.canKeyAWriteKeyBTrailer());
  269. ASSERT_FALSE(dbo.canKeyBWriteKeyBTrailer());
  270. }
  271. TEST(AccessBitsDbo, canKeyDoThisOnThisTrailer2)
  272. {
  273. const unsigned char buf[4] = {0x7f, 0x0f, 0x08, 0x00};
  274. AccessBitsDbo dbo((const char*)buf);
  275. ASSERT_FALSE(dbo.canKeyAReadKeyATrailer());
  276. ASSERT_FALSE(dbo.canKeyBReadKeyATrailer());
  277. ASSERT_FALSE(dbo.canKeyAWriteKeyATrailer());
  278. ASSERT_FALSE(dbo.canKeyBWriteKeyATrailer());
  279. ASSERT_TRUE(dbo.canKeyAReadAccessBitsTrailer());
  280. ASSERT_FALSE(dbo.canKeyBReadAccessBitsTrailer());
  281. ASSERT_FALSE(dbo.canKeyAWriteAccessBitsTrailer());
  282. ASSERT_FALSE(dbo.canKeyBWriteAccessBitsTrailer());
  283. ASSERT_TRUE(dbo.canKeyAReadKeyBTrailer());
  284. ASSERT_FALSE(dbo.canKeyBReadKeyBTrailer());
  285. ASSERT_FALSE(dbo.canKeyAWriteKeyBTrailer());
  286. ASSERT_FALSE(dbo.canKeyBWriteKeyBTrailer());
  287. }
  288. TEST(AccessBitsDbo, canKeyDoThisOnThisTrailer3)
  289. {
  290. const unsigned char buf[4] = {0xf7, 0x8f, 0x00, 0x00};
  291. AccessBitsDbo dbo((const char*)buf);
  292. ASSERT_FALSE(dbo.canKeyAReadKeyATrailer());
  293. ASSERT_FALSE(dbo.canKeyBReadKeyATrailer());
  294. ASSERT_FALSE(dbo.canKeyAWriteKeyATrailer());
  295. ASSERT_TRUE(dbo.canKeyBWriteKeyATrailer());
  296. ASSERT_TRUE(dbo.canKeyAReadAccessBitsTrailer());
  297. ASSERT_TRUE(dbo.canKeyBReadAccessBitsTrailer());
  298. ASSERT_FALSE(dbo.canKeyAWriteAccessBitsTrailer());
  299. ASSERT_FALSE(dbo.canKeyBWriteAccessBitsTrailer());
  300. ASSERT_FALSE(dbo.canKeyAReadKeyBTrailer());
  301. ASSERT_FALSE(dbo.canKeyBReadKeyBTrailer());
  302. ASSERT_FALSE(dbo.canKeyAWriteKeyBTrailer());
  303. ASSERT_TRUE(dbo.canKeyBWriteKeyBTrailer());
  304. }
  305. TEST(AccessBitsDbo, canKeyDoThisOnThisTrailer4)
  306. {
  307. const unsigned char buf[4] = {0x77, 0x8f, 0x08, 0x00};
  308. AccessBitsDbo dbo((const char*)buf);
  309. ASSERT_FALSE(dbo.canKeyAReadKeyATrailer());
  310. ASSERT_FALSE(dbo.canKeyBReadKeyATrailer());
  311. ASSERT_FALSE(dbo.canKeyAWriteKeyATrailer());
  312. ASSERT_FALSE(dbo.canKeyBWriteKeyATrailer());
  313. ASSERT_TRUE(dbo.canKeyAReadAccessBitsTrailer());
  314. ASSERT_TRUE(dbo.canKeyBReadAccessBitsTrailer());
  315. ASSERT_FALSE(dbo.canKeyAWriteAccessBitsTrailer());
  316. ASSERT_FALSE(dbo.canKeyBWriteAccessBitsTrailer());
  317. ASSERT_FALSE(dbo.canKeyAReadKeyBTrailer());
  318. ASSERT_FALSE(dbo.canKeyBReadKeyBTrailer());
  319. ASSERT_FALSE(dbo.canKeyAWriteKeyBTrailer());
  320. ASSERT_FALSE(dbo.canKeyBWriteKeyBTrailer());
  321. }
  322. TEST(AccessBitsDbo, canKeyDoThisOnThisTrailer5)
  323. {
  324. const unsigned char buf[4] = {0xff, 0x07, 0x80, 0x00};
  325. AccessBitsDbo dbo((const char*)buf);
  326. ASSERT_FALSE(dbo.canKeyAReadKeyATrailer());
  327. ASSERT_FALSE(dbo.canKeyBReadKeyATrailer());
  328. ASSERT_TRUE(dbo.canKeyAWriteKeyATrailer());
  329. ASSERT_FALSE(dbo.canKeyBWriteKeyATrailer());
  330. ASSERT_TRUE(dbo.canKeyAReadAccessBitsTrailer());
  331. ASSERT_FALSE(dbo.canKeyBReadAccessBitsTrailer());
  332. ASSERT_TRUE(dbo.canKeyAWriteAccessBitsTrailer());
  333. ASSERT_FALSE(dbo.canKeyBWriteAccessBitsTrailer());
  334. ASSERT_TRUE(dbo.canKeyAReadKeyBTrailer());
  335. ASSERT_FALSE(dbo.canKeyBReadKeyBTrailer());
  336. ASSERT_TRUE(dbo.canKeyAWriteKeyBTrailer());
  337. ASSERT_FALSE(dbo.canKeyBWriteKeyBTrailer());
  338. }
  339. TEST(AccessBitsDbo, canKeyDoThisOnThisTrailer6)
  340. {
  341. const unsigned char buf[4] = {0x7f, 0x07, 0x88, 0x00};
  342. AccessBitsDbo dbo((const char*)buf);
  343. ASSERT_FALSE(dbo.canKeyAReadKeyATrailer());
  344. ASSERT_FALSE(dbo.canKeyBReadKeyATrailer());
  345. ASSERT_FALSE(dbo.canKeyAWriteKeyATrailer());
  346. ASSERT_TRUE(dbo.canKeyBWriteKeyATrailer());
  347. ASSERT_TRUE(dbo.canKeyAReadAccessBitsTrailer());
  348. ASSERT_TRUE(dbo.canKeyBReadAccessBitsTrailer());
  349. ASSERT_FALSE(dbo.canKeyAWriteAccessBitsTrailer());
  350. ASSERT_TRUE(dbo.canKeyBWriteAccessBitsTrailer());
  351. ASSERT_FALSE(dbo.canKeyAReadKeyBTrailer());
  352. ASSERT_FALSE(dbo.canKeyBReadKeyBTrailer());
  353. ASSERT_FALSE(dbo.canKeyAWriteKeyBTrailer());
  354. ASSERT_TRUE(dbo.canKeyBWriteKeyBTrailer());
  355. }
  356. TEST(AccessBitsDbo, canKeyDoThisOnThisTrailer7)
  357. {
  358. const unsigned char buf[4] = {0xf7, 0x87, 0x80, 0x00};
  359. AccessBitsDbo dbo((const char*)buf);
  360. ASSERT_FALSE(dbo.canKeyAReadKeyATrailer());
  361. ASSERT_FALSE(dbo.canKeyBReadKeyATrailer());
  362. ASSERT_FALSE(dbo.canKeyAWriteKeyATrailer());
  363. ASSERT_FALSE(dbo.canKeyBWriteKeyATrailer());
  364. ASSERT_TRUE(dbo.canKeyAReadAccessBitsTrailer());
  365. ASSERT_TRUE(dbo.canKeyBReadAccessBitsTrailer());
  366. ASSERT_FALSE(dbo.canKeyAWriteAccessBitsTrailer());
  367. ASSERT_TRUE(dbo.canKeyBWriteAccessBitsTrailer());
  368. ASSERT_FALSE(dbo.canKeyAReadKeyBTrailer());
  369. ASSERT_FALSE(dbo.canKeyBReadKeyBTrailer());
  370. ASSERT_FALSE(dbo.canKeyAWriteKeyBTrailer());
  371. ASSERT_FALSE(dbo.canKeyBWriteKeyBTrailer());
  372. }
  373. TEST(AccessBitsDbo, canKeyDoThisOnThisTrailer8)
  374. {
  375. const unsigned char buf[4] = {0x77, 0x87, 0x88, 0x00};
  376. AccessBitsDbo dbo((const char*)buf);
  377. ASSERT_FALSE(dbo.canKeyAReadKeyATrailer());
  378. ASSERT_FALSE(dbo.canKeyBReadKeyATrailer());
  379. ASSERT_FALSE(dbo.canKeyAWriteKeyATrailer());
  380. ASSERT_FALSE(dbo.canKeyBWriteKeyATrailer());
  381. ASSERT_TRUE(dbo.canKeyAReadAccessBitsTrailer());
  382. ASSERT_TRUE(dbo.canKeyBReadAccessBitsTrailer());
  383. ASSERT_FALSE(dbo.canKeyAWriteAccessBitsTrailer());
  384. ASSERT_FALSE(dbo.canKeyBWriteAccessBitsTrailer());
  385. ASSERT_FALSE(dbo.canKeyAReadKeyBTrailer());
  386. ASSERT_FALSE(dbo.canKeyBReadKeyBTrailer());
  387. ASSERT_FALSE(dbo.canKeyAWriteKeyBTrailer());
  388. ASSERT_FALSE(dbo.canKeyBWriteKeyBTrailer());
  389. }
  390. int main(int argc, char* argv[])
  391. {
  392. std::cout << "LibNfc version: " << LibNfc::getVersion() << std::endl;
  393. ::testing::InitGoogleTest(&argc, argv);
  394. return RUN_ALL_TESTS();
  395. }