csi_test.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <fcntl.h>
  5. #include <errno.h>
  6. #include <unistd.h>
  7. #include "csi_rpmb.h"
  8. #define HALF_SECTOR_BYTES 256
  9. #define BLOCK_NUM 2
  10. #define BLOCK_START 2
  11. uint8_t key[] = {0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 0xa, 0xa, 0xb, 0xb, 0xc, 0xc, 0xd, 0xd, 0xe, 0xe, 0xf, 0xf};
  12. #define DO_IO(func, fd, buf, nbyte) \
  13. ({ \
  14. ssize_t ret = 0, r; \
  15. do { \
  16. r = func(fd, buf + ret, nbyte - ret); \
  17. if (r < 0 && errno != EINTR) { \
  18. ret = -1; \
  19. break; \
  20. } \
  21. else if (r > 0) \
  22. ret += r; \
  23. } while (r != 0 && (size_t)ret != nbyte); \
  24. \
  25. ret; \
  26. })
  27. int main()
  28. {
  29. int i, key_fd;
  30. hal_error_t ret;
  31. csi_hal_rpmb_ctx_t rpmb_ctx = { 0 };
  32. unsigned char write_data[HALF_SECTOR_BYTES * BLOCK_NUM], read_data[HALF_SECTOR_BYTES * BLOCK_NUM] = { 0 };
  33. char *devicefile = "/dev/mmcblk0rpmb";
  34. for (i = 0; i < (HALF_SECTOR_BYTES * BLOCK_NUM); i++) {
  35. if (i < 256)
  36. write_data[i] = i % 256;
  37. else
  38. write_data[i] = 256 - (i % 256);
  39. }
  40. //memcpy(rpmb_ctx.key_mac, key, sizeof(key));
  41. key_fd = open("/home/root/rpmbkey", O_RDONLY);
  42. if (key_fd < 0) {
  43. perror("can't open key file");
  44. exit(1);
  45. }
  46. ret = DO_IO(read, key_fd, rpmb_ctx.key_mac, sizeof(rpmb_ctx.key_mac));
  47. if (ret < 0) {
  48. perror("read the key");
  49. exit(1);
  50. } else if (ret != sizeof(key)) {
  51. printf("Auth key must be %lu bytes length, but we read only %d, exit\n",
  52. (unsigned long)sizeof(rpmb_ctx.key_mac),
  53. ret);
  54. exit(1);
  55. }
  56. printf("Key ascii:\n");
  57. for (i = 0; i < sizeof(rpmb_ctx.key_mac); i++)
  58. printf("%d", rpmb_ctx.key_mac[i]);
  59. printf("\n");
  60. printf("Key character:\n");
  61. for (i = 0; i < sizeof(rpmb_ctx.key_mac); i++)
  62. printf("%c", rpmb_ctx.key_mac[i]);
  63. printf("\n");
  64. rpmb_ctx.rpmb_op_type = MMC_RPMB_WRITE;
  65. ret = csi_rpmb_init(&rpmb_ctx, devicefile);
  66. if (ret) {
  67. printf("failed to init csi rpmb device\n");
  68. exit(1);
  69. }
  70. ret = csi_rpmb_write_block(&rpmb_ctx, BLOCK_START, BLOCK_NUM, write_data);
  71. if (ret) {
  72. printf("failed to write rpmb device\n");
  73. exit(1);
  74. }
  75. ret = csi_rpmb_read_block(&rpmb_ctx, BLOCK_START, BLOCK_NUM, read_data);
  76. if (ret) {
  77. printf("failed to read rpmb device\n");
  78. exit(1);
  79. }
  80. for (i = 0; i < sizeof(read_data); i++) {
  81. if (i % 16 == 0)
  82. printf("\n");
  83. if (i == 256)
  84. printf("\n");
  85. printf("%d\t", read_data[i]);
  86. }
  87. printf("\n");
  88. csi_rpmb_uninit(&rpmb_ctx);
  89. return 0;
  90. }