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

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