seader_credential.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #pragma once
  2. #include <stdint.h>
  3. #include <stdbool.h>
  4. #include <storage/storage.h>
  5. #include <dialogs/dialogs.h>
  6. #define SEADER_CRED_NAME_MAX_LEN 22
  7. #define SEADER_APP_EXTENSION ".credential"
  8. #define SEADER_APP_MFC_EXTENSION ".nfc"
  9. #define SEADER_APP_MFC_FOLDER ANY_PATH("nfc")
  10. typedef void (*SeaderLoadingCallback)(void* context, bool state);
  11. typedef enum {
  12. SeaderCredentialTypeNone,
  13. SeaderCredentialTypePicopass,
  14. SeaderCredentialType14A,
  15. // Might need to make 14a into "javacard" and add Desfire
  16. SeaderCredentialTypeMifareClassic,
  17. SeaderCredentialTypeVirtual,
  18. } SeaderCredentialType;
  19. typedef enum {
  20. SeaderCredentialSaveFormatAgnostic,
  21. SeaderCredentialSaveFormatPicopass,
  22. SeaderCredentialSaveFormatRFID,
  23. SeaderCredentialSaveFormatSR,
  24. SeaderCredentialSaveFormatMFC,
  25. } SeaderCredentialSaveFormat;
  26. typedef struct {
  27. Storage* storage;
  28. DialogsApp* dialogs;
  29. uint64_t credential;
  30. size_t bit_length;
  31. uint8_t sio[64];
  32. uint8_t diversifier[8];
  33. SeaderCredentialType type;
  34. SeaderCredentialSaveFormat save_format;
  35. char name[SEADER_CRED_NAME_MAX_LEN + 1];
  36. FuriString* load_path;
  37. SeaderLoadingCallback loading_cb;
  38. void* loading_cb_ctx;
  39. } SeaderCredential;
  40. SeaderCredential* seader_credential_alloc();
  41. void seader_credential_free(SeaderCredential* seader_cred);
  42. void seader_credential_set_loading_callback(
  43. SeaderCredential* cred,
  44. SeaderLoadingCallback callback,
  45. void* context);
  46. void seader_credential_set_name(SeaderCredential* cred, const char* name);
  47. bool seader_credential_save(SeaderCredential* cred, const char* name);
  48. bool seader_file_select(SeaderCredential* cred);
  49. void seader_credential_clear(SeaderCredential* cred);
  50. bool seader_credential_delete(SeaderCredential* cred, bool use_load_path);