generate_totp_code.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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 Trigger token input automation
  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 iv initialization vector (IV) to be used to decrypt token secret
  33. * @param crypto_key_slot crypto key slot to be used
  34. * @return worker context
  35. */
  36. TotpGenerateCodeWorkerContext* totp_generate_code_worker_start(
  37. char* code_buffer,
  38. const TokenInfo* token_info,
  39. FuriMutex* code_buffer_sync,
  40. float timezone_offset,
  41. uint8_t* iv,
  42. uint8_t crypto_version,
  43. uint8_t crypto_key_slot);
  44. /**
  45. * @brief Stops generate code worker
  46. * @param context worker context
  47. */
  48. void totp_generate_code_worker_stop(TotpGenerateCodeWorkerContext* context);
  49. /**
  50. * @brief Notifies generate code worker with a given event
  51. * @param context worker context
  52. * @param event event to notify worker with
  53. */
  54. void totp_generate_code_worker_notify(
  55. TotpGenerateCodeWorkerContext* context,
  56. TotpGenerateCodeWorkerEvent event);
  57. /**
  58. * @brief Sets new handler for "on new code generated" event
  59. * @param context worker context
  60. * @param on_new_code_generated_handler handler
  61. * @param on_new_code_generated_handler_context handler context
  62. */
  63. void totp_generate_code_worker_set_code_generated_handler(
  64. TotpGenerateCodeWorkerContext* context,
  65. TOTP_NEW_CODE_GENERATED_HANDLER on_new_code_generated_handler,
  66. void* on_new_code_generated_handler_context);
  67. /**
  68. * @brief Sets new handler for "on code lifetime changed" event
  69. * @param context worker context
  70. * @param on_code_lifetime_changed_handler handler
  71. * @param on_code_lifetime_changed_handler_context handler context
  72. */
  73. void totp_generate_code_worker_set_lifetime_changed_handler(
  74. TotpGenerateCodeWorkerContext* context,
  75. TOTP_CODE_LIFETIME_CHANGED_HANDLER on_code_lifetime_changed_handler,
  76. void* on_code_lifetime_changed_handler_context);