secure_messaging.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #pragma once
  2. #include <stdint.h>
  3. #include <stdlib.h>
  4. #include <mbedtls/des.h>
  5. #include <mbedtls/sha1.h>
  6. #include <furi.h>
  7. #include <lib/toolbox/bit_buffer.h>
  8. #include "passy_common.h"
  9. #define SECURE_MESSAGING_MAX_SIZE 128
  10. typedef struct {
  11. uint8_t passport_number[10];
  12. uint8_t date_of_birth[7];
  13. uint8_t date_of_expiry[7];
  14. uint8_t KENC[16];
  15. uint8_t KMAC[16];
  16. uint8_t rndICC[8];
  17. uint8_t rndIFD[8];
  18. uint8_t Kifd[16];
  19. uint8_t Kicc[16];
  20. uint8_t KSenc[16];
  21. uint8_t KSmac[16];
  22. uint8_t SSC[8];
  23. } SecureMessaging;
  24. SecureMessaging* secure_messaging_alloc(
  25. uint8_t* passport_number,
  26. uint8_t* date_of_birth,
  27. uint8_t* date_of_expiry);
  28. void secure_messaging_free(SecureMessaging* secure_messaging);
  29. void secure_messaging_calculate_session_keys(SecureMessaging* secure_messaging);
  30. void secure_messaging_wrap_apdu(
  31. SecureMessaging* secure_messaging,
  32. uint8_t* message,
  33. size_t message_len,
  34. BitBuffer* tx_buffer);
  35. void secure_messaging_unwrap_rapdu(SecureMessaging* secure_messaging, BitBuffer* rx_buffer);