virtual_u2f_device.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // Copyright 2018 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef DEVICE_FIDO_VIRTUAL_U2F_DEVICE_H_
  5. #define DEVICE_FIDO_VIRTUAL_U2F_DEVICE_H_
  6. #include <stdint.h>
  7. #include <vector>
  8. #include "base/component_export.h"
  9. #include "base/containers/span.h"
  10. #include "base/memory/scoped_refptr.h"
  11. #include "device/fido/virtual_fido_device.h"
  12. namespace device {
  13. class COMPONENT_EXPORT(DEVICE_FIDO) VirtualU2fDevice
  14. : public VirtualFidoDevice {
  15. public:
  16. // Returns true if the |transport| is supported by virtual U2F devices, false
  17. // otherwise.
  18. static bool IsTransportSupported(FidoTransportProtocol transport);
  19. VirtualU2fDevice();
  20. explicit VirtualU2fDevice(scoped_refptr<State> state);
  21. VirtualU2fDevice(const VirtualU2fDevice&) = delete;
  22. VirtualU2fDevice& operator=(const VirtualU2fDevice&) = delete;
  23. ~VirtualU2fDevice() override;
  24. // FidoDevice:
  25. void Cancel(CancelToken) override;
  26. CancelToken DeviceTransact(std::vector<uint8_t> command,
  27. DeviceCallback cb) override;
  28. base::WeakPtr<FidoDevice> GetWeakPtr() override;
  29. private:
  30. absl::optional<std::vector<uint8_t>> DoRegister(
  31. uint8_t ins,
  32. uint8_t p1,
  33. uint8_t p2,
  34. base::span<const uint8_t> data);
  35. absl::optional<std::vector<uint8_t>> DoSign(uint8_t ins,
  36. uint8_t p1,
  37. uint8_t p2,
  38. base::span<const uint8_t> data);
  39. base::WeakPtrFactory<FidoDevice> weak_factory_{this};
  40. };
  41. } // namespace device
  42. #endif // DEVICE_FIDO_VIRTUAL_U2F_DEVICE_H_