Entropy visualizer for Nitpicker

This commit is contained in:
Emery Hemingway
2018-11-10 14:56:27 +01:00
committed by Norman Feske
parent 33ebdeee1f
commit a07707f08d
10 changed files with 229 additions and 0 deletions

View File

@@ -0,0 +1,4 @@
Jitter Sponge
A terminal server that provides an entropy service.

View File

@@ -0,0 +1 @@
_/src/nit_entropy

View File

@@ -0,0 +1 @@
-

View File

@@ -0,0 +1,15 @@
<runtime ram="4M" caps="128" binary="nit_entropy">
<requires>
<nitpicker/>
<terminal/>
</requires>
<content>
<rom label="ld.lib.so"/>
<rom label="nit_entropy"/>
</content>
<config/>
</runtime>

View File

@@ -0,0 +1,2 @@
SRC_DIR = src/app/nit_entropy
include $(GENODE_DIR)/repos/base/recipes/src/content.inc

View File

@@ -0,0 +1 @@
-

View File

@@ -0,0 +1,6 @@
base
os
framebuffer_session
input_session
nitpicker_session
terminal_session

99
run/nit_entropy.run Normal file
View File

@@ -0,0 +1,99 @@
create_boot_directory
import_from_depot genodelabs/src/[base_src] \
genodelabs/pkg/[drivers_interactive_pkg] \
genodelabs/src/nitpicker \
genodelabs/src/init
append config {
<config>
<parent-provides>
<service name="ROM"/>
<service name="IRQ"/>
<service name="IO_MEM"/>
<service name="IO_PORT"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
</parent-provides>
<default-route>
<service name="Nitpicker"> <child name="nitpicker"/> </service>
<service name="Timer"> <child name="timer"/> </service>
<service name="Terminal"> <child name="terminal"/> </service>
<service name="Platform"> <child name="platform_drv"/> </service>
<any-service><parent/></any-service>
</default-route>
<default caps="100"/>
<start name="timer">
<resource name="RAM" quantum="1M"/>
<provides><service name="Timer"/></provides>
</start>
<start name="drivers" caps="1000">
<resource name="RAM" quantum="32M" constrain_phys="yes"/>
<binary name="init"/>
<route>
<service name="ROM" label="config"> <parent label="drivers.config"/> </service>
<service name="Timer"> <child name="timer"/> </service>
<any-service> <parent/> </any-service>
</route>
<provides>
<service name="Input"/> <service name="Framebuffer"/>
</provides>
</start>
<start name="nitpicker">
<resource name="RAM" quantum="8M"/>
<provides><service name="Nitpicker"/></provides>
<config>
<domain name="pointer" layer="1" content="client" label="no" origin="pointer" />
<domain name="default" layer="2" content="client" label="no" focus="click" hover="always" />
<policy label_prefix="pointer" domain="pointer"/>
<default-policy domain="default"/>
</config>
<route>
<service name="Input"> <child name="drivers"/> </service>
<service name="Framebuffer"> <child name="drivers"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="pointer">
<resource name="RAM" quantum="1M"/>
</start>
<start name="nit_entropy">
<resource name="RAM" quantum="4M"/>
<route>
<service name="Nitpicker"> <child name="nitpicker"/> </service>
<any-service> <parent/> <any-child/></any-service>
</route>
</start>
<start name="jitter_sponge">
<resource name="RAM" quantum="4M"/>
<provides><service name="Terminal"/></provides>
<route>
<any-service> <parent/> <any-child/></any-service>
</route>
</start>
</config>}
build {
app/nit_entropy
server/jitter_sponge
}
install_config $config
build_boot_image {
jitter_sponge
nit_entropy
libkeccak.lib.so
}
run_genode_until forever

View File

@@ -0,0 +1,97 @@
/*
* \brief Entropy visualizer
* \author Emery Hemingway
* \date 2018-11-09
*/
/*
* Copyright (C) 2018 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
/* Genode includes */
#include <terminal_session/connection.h>
#include <nitpicker_session/connection.h>
#include <framebuffer_session/connection.h>
#include <base/attached_dataspace.h>
#include <base/heap.h>
#include <base/log.h>
#include <base/component.h>
namespace Nit_entropy {
using namespace Genode;
typedef Surface_base::Point Point;
typedef Surface_base::Area Area;
typedef Surface_base::Rect Rect;
struct Main;
};
struct Nit_entropy::Main
{
enum { WIDTH = 256, HEIGHT = 256 };
Genode::Env &_env;
Heap _heap { _env.ram(), _env.rm() };
Nitpicker::Connection _nitpicker { _env };
Framebuffer::Session &_fb = *_nitpicker.framebuffer();
Terminal::Connection _entropy { _env, "entropy" };
Dataspace_capability _fb_ds_cap()
{
using Framebuffer::Mode;
Mode mode(WIDTH, HEIGHT, Mode::RGB565);
_nitpicker.buffer(mode, false);
return _fb.dataspace();
}
Attached_dataspace _fb_ds { _env.rm(), _fb_ds_cap() };
Nitpicker::Session::View_handle _view = _nitpicker.create_view();
void _refresh() { _fb.refresh(0, 0, WIDTH, HEIGHT); }
void _plot()
{
uint16_t *pixels = _fb_ds.local_addr<uint16_t>();
static uint8_t buf[HEIGHT];
size_t n = _entropy.read(buf, sizeof(buf));
if (n != sizeof(buf)) {
Genode::error("read ", n, " bytes of entropy");
}
for (int i = 0; i < HEIGHT; ++i) {
uint16_t *row = &pixels[i*WIDTH];
row[buf[i]] = ~row[buf[i]];
}
_refresh();
}
Signal_handler<Main> _sync_handler {
_env.ep(), *this, &Main::_plot };
Main(Env &env) : _env(env)
{
_nitpicker.enqueue<Nitpicker::Session::Command::Geometry>(
_view, Rect(Point(0, 0), Area (WIDTH, HEIGHT)));
_nitpicker.enqueue<Nitpicker::Session::Command::To_front>(
_view, Nitpicker::Session::View_handle());
_nitpicker.execute();
_fb.sync_sigh(_sync_handler);
}
};
void Component::construct(Genode::Env &env) {
static Nit_entropy::Main inst(env); }

View File

@@ -0,0 +1,3 @@
TARGET = nit_entropy
SRC_CC = main.cc
LIBS = base