seader_credential.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. typedef void (*SeaderLoadingCallback)(void* context, bool state);
  9. typedef enum {
  10. SeaderCredentialTypeNone,
  11. SeaderCredentialTypePicopass,
  12. SeaderCredentialType14A,
  13. // Might need to make 14a into "javacard" and add Desfire
  14. SeaderCredentialTypeMifareClassic,
  15. } SeaderCredentialType;
  16. typedef enum {
  17. SeaderCredentialSaveFormatAgnostic,
  18. SeaderCredentialSaveFormatPicopass,
  19. SeaderCredentialSaveFormatRFID,
  20. } SeaderCredentialSaveFormat;
  21. typedef struct {
  22. Storage* storage;
  23. DialogsApp* dialogs;
  24. uint64_t credential;
  25. size_t bit_length;
  26. uint8_t sio[64];
  27. uint8_t diversifier[8];
  28. SeaderCredentialType type;
  29. SeaderCredentialSaveFormat save_format;
  30. char name[SEADER_CRED_NAME_MAX_LEN + 1];
  31. FuriString* load_path;
  32. SeaderLoadingCallback loading_cb;
  33. void* loading_cb_ctx;
  34. } SeaderCredential;
  35. SeaderCredential* seader_credential_alloc();
  36. void seader_credential_free(SeaderCredential* seader_cred);
  37. void seader_credential_set_loading_callback(
  38. SeaderCredential* cred,
  39. SeaderLoadingCallback callback,
  40. void* context);
  41. void seader_credential_set_name(SeaderCredential* cred, const char* name);
  42. bool seader_credential_save(SeaderCredential* cred, const char* name);
  43. bool seader_file_select(SeaderCredential* cred);
  44. void seader_credential_clear(SeaderCredential* cred);
  45. bool seader_credential_delete(SeaderCredential* cred, bool use_load_path);