RandomDevice.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <Kernel/Devices/RandomDevice.h>
  7. #include <Kernel/Random.h>
  8. #include <Kernel/Sections.h>
  9. namespace Kernel {
  10. UNMAP_AFTER_INIT NonnullRefPtr<RandomDevice> RandomDevice::must_create()
  11. {
  12. auto random_device_or_error = try_create_device<RandomDevice>();
  13. // FIXME: Find a way to propagate errors
  14. VERIFY(!random_device_or_error.is_error());
  15. return random_device_or_error.release_value();
  16. }
  17. UNMAP_AFTER_INIT RandomDevice::RandomDevice()
  18. : CharacterDevice(1, 8)
  19. {
  20. }
  21. UNMAP_AFTER_INIT RandomDevice::~RandomDevice()
  22. {
  23. }
  24. bool RandomDevice::can_read(const OpenFileDescription&, size_t) const
  25. {
  26. return true;
  27. }
  28. KResultOr<size_t> RandomDevice::read(OpenFileDescription&, u64, UserOrKernelBuffer& buffer, size_t size)
  29. {
  30. return buffer.write_buffered<256>(size, [&](Bytes bytes) {
  31. get_good_random_bytes(bytes);
  32. return bytes.size();
  33. });
  34. }
  35. KResultOr<size_t> RandomDevice::write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t size)
  36. {
  37. // FIXME: Use input for entropy? I guess that could be a neat feature?
  38. return size;
  39. }
  40. }