seader_credential.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. #include <optimized_ikeys.h>
  8. #include <optimized_cipher.h>
  9. #define SEADER_CRED_NAME_MAX_LEN 22
  10. #define SEADER_APP_EXTENSION ".credential"
  11. #define SEADER_APP_MFC_EXTENSION ".nfc"
  12. #define SEADER_APP_MFC_FOLDER EXT_PATH("nfc")
  13. typedef void (*SeaderLoadingCallback)(void* context, bool state);
  14. typedef enum {
  15. SeaderCredentialTypeNone,
  16. SeaderCredentialTypePicopass,
  17. SeaderCredentialType14A,
  18. // Might need to make 14a into "javacard" and add Desfire
  19. SeaderCredentialTypeMifareClassic,
  20. SeaderCredentialTypeVirtual,
  21. } SeaderCredentialType;
  22. typedef enum {
  23. SeaderCredentialSaveFormatAgnostic,
  24. SeaderCredentialSaveFormatPicopass,
  25. SeaderCredentialSaveFormatRFID,
  26. SeaderCredentialSaveFormatSR,
  27. SeaderCredentialSaveFormatMFC,
  28. } SeaderCredentialSaveFormat;
  29. typedef struct {
  30. Storage* storage;
  31. DialogsApp* dialogs;
  32. uint64_t credential;
  33. size_t bit_length;
  34. uint8_t sio[128];
  35. uint8_t sio_len;
  36. uint8_t diversifier[8];
  37. uint8_t diversifier_len;
  38. uint8_t sio_start_block; // for iClass SE vs iClass SR
  39. bool isDesfire;
  40. SeaderCredentialType type;
  41. SeaderCredentialSaveFormat save_format;
  42. char name[SEADER_CRED_NAME_MAX_LEN + 1];
  43. FuriString* load_path;
  44. SeaderLoadingCallback loading_cb;
  45. void* loading_cb_ctx;
  46. } SeaderCredential;
  47. SeaderCredential* seader_credential_alloc();
  48. void seader_credential_free(SeaderCredential* seader_cred);
  49. void seader_credential_set_loading_callback(
  50. SeaderCredential* cred,
  51. SeaderLoadingCallback callback,
  52. void* context);
  53. void seader_credential_set_name(SeaderCredential* cred, const char* name);
  54. bool seader_credential_save(SeaderCredential* cred, const char* name);
  55. bool seader_file_select(SeaderCredential* cred);
  56. void seader_credential_clear(SeaderCredential* cred);
  57. bool seader_credential_delete(SeaderCredential* cred, bool use_load_path);