generate_totp_code.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #pragma once
  2. #include <stdlib.h>
  3. #include <furi/core/thread.h>
  4. #include <furi/core/mutex.h>
  5. #include "../../types/token_info.h"
  6. typedef uint8_t TotpGenerateCodeWorkerEvent;
  7. typedef void (*TOTP_NEW_CODE_GENERATED_HANDLER)(bool time_left, void* context);
  8. typedef void (*TOTP_CODE_LIFETIME_CHANGED_HANDLER)(float code_lifetime_percent, void* context);
  9. typedef struct {
  10. char* code_buffer;
  11. FuriThread* thread;
  12. FuriMutex* code_buffer_sync;
  13. TokenInfo** token_info;
  14. float timezone_offset;
  15. uint8_t* iv;
  16. TOTP_NEW_CODE_GENERATED_HANDLER on_new_code_generated_handler;
  17. void* on_new_code_generated_handler_context;
  18. TOTP_CODE_LIFETIME_CHANGED_HANDLER on_code_lifetime_changed_handler;
  19. void* on_code_lifetime_changed_handler_context;
  20. } TotpGenerateCodeWorkerContext;
  21. enum TotGenerateCodeWorkerEvents {
  22. TotpGenerateCodeWorkerEventReserved = 0b00,
  23. TotpGenerateCodeWorkerEventStop = 0b01,
  24. TotpGenerateCodeWorkerEventForceUpdate = 0b10
  25. };
  26. TotpGenerateCodeWorkerContext* totp_generate_code_worker_start(
  27. char* code_buffer,
  28. TokenInfo** token_info,
  29. FuriMutex* code_buffer_sync,
  30. float timezone_offset,
  31. uint8_t* iv);
  32. void totp_generate_code_worker_stop(TotpGenerateCodeWorkerContext* context);
  33. void totp_generate_code_worker_notify(
  34. TotpGenerateCodeWorkerContext* context,
  35. TotpGenerateCodeWorkerEvent event);
  36. void totp_generate_code_worker_set_code_generated_handler(
  37. TotpGenerateCodeWorkerContext* context,
  38. TOTP_NEW_CODE_GENERATED_HANDLER on_new_code_generated_handler,
  39. void* on_new_code_generated_handler_context);
  40. void totp_generate_code_worker_set_lifetime_changed_handler(
  41. TotpGenerateCodeWorkerContext* context,
  42. TOTP_CODE_LIFETIME_CHANGED_HANDLER on_code_lifetime_changed_handler,
  43. void* on_code_lifetime_changed_handler_context);