generate_totp_code.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #pragma once
  2. #include <stdlib.h>
  3. #include <furi/core/mutex.h>
  4. #include "../../types/token_info.h"
  5. typedef uint8_t TotpGenerateCodeWorkerEvent;
  6. typedef void (*TOTP_NEW_CODE_GENERATED_HANDLER)(bool time_left, void* context);
  7. typedef void (*TOTP_CODE_LIFETIME_CHANGED_HANDLER)(float code_lifetime_percent, void* context);
  8. typedef struct TotpGenerateCodeWorkerContext TotpGenerateCodeWorkerContext;
  9. /**
  10. * @brief Generate token worker events
  11. */
  12. enum TotGenerateCodeWorkerEvents {
  13. /**
  14. * @brief Reserved, should not be used anywhere
  15. */
  16. TotpGenerateCodeWorkerEventReserved = 0b00,
  17. /**
  18. * @brief Stop worker
  19. */
  20. TotpGenerateCodeWorkerEventStop = 0b01,
  21. /**
  22. * @brief Triggers OTP code generation
  23. */
  24. TotpGenerateCodeWorkerEventForceUpdate = 0b10
  25. };
  26. /**
  27. * @brief Starts generate code worker
  28. * @param code_buffer code buffer to generate code to
  29. * @param token_info token info to be used to generate code
  30. * @param code_buffer_sync code buffer synchronization primitive
  31. * @param timezone_offset timezone offset to be used to generate code
  32. * @param crypto_settings crypto settings
  33. * @return worker context
  34. */
  35. TotpGenerateCodeWorkerContext* totp_generate_code_worker_start(
  36. char* code_buffer,
  37. const TokenInfo* token_info,
  38. FuriMutex* code_buffer_sync,
  39. float timezone_offset,
  40. const CryptoSettings* crypto_settings);
  41. /**
  42. * @brief Stops generate code worker
  43. * @param context worker context
  44. */
  45. void totp_generate_code_worker_stop(TotpGenerateCodeWorkerContext* context);
  46. /**
  47. * @brief Notifies generate code worker with a given event
  48. * @param context worker context
  49. * @param event event to notify worker with
  50. */
  51. void totp_generate_code_worker_notify(
  52. TotpGenerateCodeWorkerContext* context,
  53. TotpGenerateCodeWorkerEvent event);
  54. /**
  55. * @brief Sets new handler for "on new code generated" event
  56. * @param context worker context
  57. * @param on_new_code_generated_handler handler
  58. * @param on_new_code_generated_handler_context handler context
  59. */
  60. void totp_generate_code_worker_set_code_generated_handler(
  61. TotpGenerateCodeWorkerContext* context,
  62. TOTP_NEW_CODE_GENERATED_HANDLER on_new_code_generated_handler,
  63. void* on_new_code_generated_handler_context);
  64. /**
  65. * @brief Sets new handler for "on code lifetime changed" event
  66. * @param context worker context
  67. * @param on_code_lifetime_changed_handler handler
  68. * @param on_code_lifetime_changed_handler_context handler context
  69. */
  70. void totp_generate_code_worker_set_lifetime_changed_handler(
  71. TotpGenerateCodeWorkerContext* context,
  72. TOTP_CODE_LIFETIME_CHANGED_HANDLER on_code_lifetime_changed_handler,
  73. void* on_code_lifetime_changed_handler_context);