seader_credential.h 1.8 KB

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