RandomDevice.cpp 1017 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. return adopt_ref(*new RandomDevice);
  13. }
  14. UNMAP_AFTER_INIT RandomDevice::RandomDevice()
  15. : CharacterDevice(1, 8)
  16. {
  17. }
  18. UNMAP_AFTER_INIT RandomDevice::~RandomDevice()
  19. {
  20. }
  21. bool RandomDevice::can_read(const FileDescription&, size_t) const
  22. {
  23. return true;
  24. }
  25. KResultOr<size_t> RandomDevice::read(FileDescription&, u64, UserOrKernelBuffer& buffer, size_t size)
  26. {
  27. return buffer.write_buffered<256>(size, [&](Bytes bytes) {
  28. get_good_random_bytes(bytes);
  29. return bytes.size();
  30. });
  31. }
  32. KResultOr<size_t> RandomDevice::write(FileDescription&, u64, const UserOrKernelBuffer&, size_t size)
  33. {
  34. // FIXME: Use input for entropy? I guess that could be a neat feature?
  35. return size;
  36. }
  37. }