Adding upstream version 1.9.14.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
ddf4b25f8f
commit
49fcf7364a
88 changed files with 62468 additions and 0 deletions
5
contrib/Fedora/90-haveged.rules
Normal file
5
contrib/Fedora/90-haveged.rules
Normal file
|
@ -0,0 +1,5 @@
|
|||
# Start the haveged service as soon as the random device is available
|
||||
# to avoid starting other services while starved of entropy
|
||||
|
||||
ACTION=="add", KERNEL=="random" , SUBSYSTEM=="mem", TAG+="systemd", ENV{SYSTEMD_WANTS}+="haveged.service"
|
||||
|
26
contrib/Fedora/haveged-dracut.module
Executable file
26
contrib/Fedora/haveged-dracut.module
Executable file
|
@ -0,0 +1,26 @@
|
|||
#!/bin/bash
|
||||
# /usr/lib/dracut/modules.d/98haveged/module-setup.sh
|
||||
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||
|
||||
# called by dracut
|
||||
depends() {
|
||||
return 0
|
||||
}
|
||||
|
||||
installkernel() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# called by dracut
|
||||
install() {
|
||||
inst_multiple -o \
|
||||
/usr/sbin/haveged \
|
||||
$systemdsystemunitdir/haveged.service \
|
||||
$systemdsystemunitdir/haveged-switch-root.service
|
||||
mkdir -p "$initdir/$systemdsystemunitdir/sysinit.target.wants"
|
||||
mkdir -p "$initdir/$systemdsystemunitdir/initrd-switch-root.target.wants"
|
||||
mkdir -p "$initdir/$systemdsystemunitdir/systemd-journald.service.wants"
|
||||
ln_r "$systemdsystemunitdir/haveged.service" "$systemdsystemunitdir/systemd-journald.service.wants/haveged.service"
|
||||
ln_r "$systemdsystemunitdir/haveged-switch-root.service" "$systemdsystemunitdir/initrd-switch-root.target.wants/haveged-switch-root.service"
|
||||
}
|
17
contrib/Fedora/haveged-switch-root.service
Normal file
17
contrib/Fedora/haveged-switch-root.service
Normal file
|
@ -0,0 +1,17 @@
|
|||
[Unit]
|
||||
Description=Tell haveged about new root
|
||||
DefaultDependencies=no
|
||||
ConditionPathExists=/etc/initrd-release
|
||||
Before=initrd-switch-root.service
|
||||
JoinsNamespaceOf=haveged.service
|
||||
|
||||
[Service]
|
||||
ExecStart=-@SBIN_DIR@/haveged -c root=/sysroot
|
||||
PrivateNetwork=yes
|
||||
Type=oneshot
|
||||
StandardInput=null
|
||||
StandardOutput=null
|
||||
StandardError=null
|
||||
|
||||
[Install]
|
||||
WantedBy=initrd-switch-root.target
|
36
contrib/Fedora/haveged.service
Normal file
36
contrib/Fedora/haveged.service
Normal file
|
@ -0,0 +1,36 @@
|
|||
[Unit]
|
||||
Description=Entropy Daemon based on the HAVEGE algorithm
|
||||
Documentation=man:haveged(8) http://www.issihosts.com/haveged/
|
||||
DefaultDependencies=no
|
||||
After=systemd-tmpfiles-setup-dev.service
|
||||
Before=sysinit.target shutdown.target systemd-journald.service
|
||||
|
||||
[Service]
|
||||
ExecStart=@SBIN_DIR@/haveged -w 1024 -v 1 --Foreground
|
||||
Restart=always
|
||||
SuccessExitStatus=137 143
|
||||
|
||||
SecureBits=noroot-locked
|
||||
CapabilityBoundingSet=CAP_SYS_ADMIN CAP_SYS_CHROOT
|
||||
# We can *not* set PrivateTmp=true as it can cause an ordering cycle.
|
||||
PrivateTmp=false
|
||||
PrivateDevices=true
|
||||
# We can *not* set PrivateNetwork=true to allow command mode (chroot when included in initramfs)
|
||||
#PrivateNetwork=true
|
||||
ProtectSystem=full
|
||||
ProtectHome=true
|
||||
ProtectHostname=true
|
||||
ProtectKernelLogs=true
|
||||
ProtectKernelModules=true
|
||||
RestrictNamespaces=true
|
||||
RestrictRealtime=true
|
||||
|
||||
LockPersonality=true
|
||||
MemoryDenyWriteExecute=true
|
||||
SystemCallArchitectures=native
|
||||
SystemCallFilter=@system-service
|
||||
SystemCallFilter=~@mount
|
||||
SystemCallErrorNumber=EPERM
|
||||
|
||||
[Install]
|
||||
WantedBy=sysinit.target
|
232
contrib/Fedora/haveged.spec
Normal file
232
contrib/Fedora/haveged.spec
Normal file
|
@ -0,0 +1,232 @@
|
|||
%define dracutlibdir lib/dracut
|
||||
Summary: A Linux entropy source using the HAVEGE algorithm
|
||||
Name: haveged
|
||||
Version: 1.9.14
|
||||
Release: 1%{?dist}
|
||||
License: GPLv3+
|
||||
URL: https://github.com/jirka-h/haveged
|
||||
Source0: https://github.com/jirka-h/%{name}/archive/v%{version}/%{name}-%{version}.tar.gz
|
||||
Requires(post): systemd
|
||||
Requires(preun): systemd
|
||||
Requires(postun): systemd
|
||||
|
||||
BuildRequires: gcc
|
||||
BuildRequires: automake coreutils glibc-common systemd-units
|
||||
Enhances: apache2 gpg2 openssl openvpn php5 smtp_daemon systemd
|
||||
|
||||
%description
|
||||
A Linux entropy source using the HAVEGE algorithm
|
||||
|
||||
Haveged is a user space entropy daemon which is not dependent upon the
|
||||
standard mechanisms for harvesting randomness for the system entropy
|
||||
pool. This is important in systems with high entropy needs or limited
|
||||
user interaction (e.g. headless servers).
|
||||
|
||||
Haveged uses HAVEGE (HArdware Volatile Entropy Gathering and Expansion)
|
||||
to maintain a 1M pool of random bytes used to fill /dev/random
|
||||
whenever the supply of random bits in /dev/random falls below the low
|
||||
water mark of the device. The principle inputs to haveged are the
|
||||
sizes of the processor instruction and data caches used to setup the
|
||||
HAVEGE collector. The haveged default is a 4kb data cache and a 16kb
|
||||
instruction cache. On machines with a cpuid instruction, haveged will
|
||||
attempt to select appropriate values from internal tables.
|
||||
|
||||
%package devel
|
||||
Summary: Headers and shared development libraries for HAVEGE algorithm
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
|
||||
%description devel
|
||||
Headers and shared object symbolic links for the HAVEGE algorithm
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%build
|
||||
#autoreconf -fiv
|
||||
%configure --disable-enttest --enable-nistest --disable-static
|
||||
#SMP build is not working
|
||||
#make %{?_smp_mflags}
|
||||
make
|
||||
|
||||
%check
|
||||
make check
|
||||
|
||||
|
||||
%install
|
||||
rm -rf %{buildroot}
|
||||
make install DESTDIR=%{buildroot} INSTALL="install -p"
|
||||
|
||||
chmod 0644 COPYING README ChangeLog AUTHORS
|
||||
|
||||
#Install systemd service file
|
||||
sed -e 's:@SBIN_DIR@:%{_sbindir}:g' -i contrib/Fedora/*service
|
||||
install -Dpm 0644 contrib/Fedora/haveged.service %{buildroot}%{_unitdir}/%{name}.service
|
||||
install -Dpm 0644 contrib/Fedora/haveged-switch-root.service %{buildroot}%{_unitdir}/%{name}-switch-root.service
|
||||
install -Dpm 0755 contrib/Fedora/haveged-dracut.module %{buildroot}/%{_prefix}/%{dracutlibdir}/modules.d/98%{name}/module-setup.sh
|
||||
install -Dpm 0644 contrib/Fedora/90-haveged.rules %{buildroot}%{_udevrulesdir}/90-%{name}.rules
|
||||
|
||||
# We don't ship .la files.
|
||||
rm -rf %{buildroot}%{_libdir}/libhavege.*a
|
||||
|
||||
mkdir -p %{buildroot}%{_defaultdocdir}/%{name}
|
||||
cp -p COPYING README ChangeLog AUTHORS contrib/build/havege_sample.c %{buildroot}%{_defaultdocdir}/%{name}
|
||||
|
||||
%post
|
||||
/sbin/ldconfig
|
||||
%systemd_post %{name}.service %{name}-switch-root.service
|
||||
|
||||
%preun
|
||||
%systemd_preun %{name}.service %{name}-switch-root.service
|
||||
|
||||
%postun
|
||||
%systemd_postun_with_restart %{name}.service %{name}-switch-root.service
|
||||
/sbin/ldconfig
|
||||
|
||||
%files
|
||||
%{_mandir}/man8/haveged.8*
|
||||
%{_sbindir}/haveged
|
||||
%{_unitdir}/*.service
|
||||
%{_libdir}/*so.*
|
||||
%{_defaultdocdir}/*
|
||||
%{_udevrulesdir}/*-%{name}.rules
|
||||
%dir %{_prefix}/%{dracutlibdir}/modules.d/98%{name}
|
||||
%{_prefix}/%{dracutlibdir}/modules.d/98%{name}/*
|
||||
|
||||
%files devel
|
||||
%{_mandir}/man3/libhavege.3*
|
||||
%dir %{_includedir}/%{name}
|
||||
%{_includedir}/%{name}/havege.h
|
||||
%doc contrib/build/havege_sample.c
|
||||
%{_libdir}/*.so
|
||||
|
||||
|
||||
%changelog
|
||||
* Sun Jun 28 2020 Jirka Hladky <hladky.jiri@gmail.com> - 1.9.14-1
|
||||
- Update to 1.9.14
|
||||
- BZ1835006 - Added dracut module
|
||||
- Start the service as soon as the random device is available with
|
||||
the help of udev, as starting services while starved of entropy
|
||||
is no good.
|
||||
|
||||
* Sun Jun 28 2020 Jirka Hladky <hladky.jiri@gmail.com> - 1.9.13-1
|
||||
- Update to 1.9.13
|
||||
|
||||
* Thu Jun 18 2020 Jirka Hladky <hladky.jiri@gmail.com> - 1.9.12-1
|
||||
- Update to 1.9.12
|
||||
|
||||
* Fri Jun 12 2020 Jirka Hladky <hladky.jiri@gmail.com> - 1.9.11-1
|
||||
- Update to 1.9.11
|
||||
|
||||
* Thu Jun 11 2020 Jirka Hladky <hladky.jiri@gmail.com> - 1.9.10-1
|
||||
- Update to 1.9.10
|
||||
|
||||
* Thu Jun 11 2020 Jirka Hladky <hladky.jiri@gmail.com> - 1.9.9-2
|
||||
- Fixed haveged.service file
|
||||
|
||||
* Tue Jun 09 2020 Jirka Hladky <hladky.jiri@gmail.com> - 1.9.9-1
|
||||
- Update to 1.9.9
|
||||
|
||||
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.8-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||
|
||||
* Mon Sep 30 2019 Jirka Hladky <hladky.jiri@gmail.com> - 1.9.8-1
|
||||
- Update to 1.9.8
|
||||
|
||||
* Mon Aug 26 2019 Jirka Hladky <hladky.jiri@gmail.com> - 1.9.6-1
|
||||
- Update to 1.9.6
|
||||
|
||||
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.1-12
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
|
||||
* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.1-11
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.1-10
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||
|
||||
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.1-9
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
|
||||
|
||||
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.1-8
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
|
||||
|
||||
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.1-7
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
|
||||
|
||||
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.1-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
|
||||
|
||||
* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.1-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
||||
|
||||
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.9.1-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
|
||||
|
||||
* Sat Aug 16 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.9.1-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
|
||||
|
||||
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.9.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
|
||||
|
||||
* Thu Feb 13 2014 Jirka Hladky <hladky.jiri@gmail.com> - 1.9.1-1
|
||||
- Update to 1.9.1
|
||||
|
||||
* Sat Jan 04 2014 Jirka Hladky <hladky.jiri@gmail.com> - 1.8-1
|
||||
- Unversioned docdir change, more info on
|
||||
https://fedoraproject.org/wiki/Changes/UnversionedDocdirs
|
||||
|
||||
* Fri Jan 03 2014 Jirka Hladky <hladky.jiri@gmail.com> - 1.8-0
|
||||
- Updated to the version 1.8
|
||||
- Improvement to systemd service file
|
||||
- Fixed exit status
|
||||
|
||||
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.7-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
||||
|
||||
* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.7-1
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
|
||||
|
||||
* Sat Jan 19 2013 Jirka Hladky <hladky.jiri@gmail.com> - 1.7-0
|
||||
- Updated to the version 1.7
|
||||
- Version 1.7 brings developement libraries
|
||||
- Added devel package
|
||||
* Sat Oct 13 2012 Jirka Hladky <hladky.jiri@gmail.com> - 1.5-2
|
||||
- BZ 850144
|
||||
- Introduce new systemd-rpm macros in haveged spec file
|
||||
- Fedora 19 changes the way how to work with services in spec files.
|
||||
- It introduces new macros - systemd_post, systemd_preun and systemd_postun;
|
||||
- which replace scriptlets from Fedora 18 and older
|
||||
- see https://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Systemd
|
||||
|
||||
* Tue Aug 14 2012 Jirka Hladky <hladky.jiri@gmail.com> - 1.5-1
|
||||
- Update to the version 1.5
|
||||
- Main new feature is a run time verification of the produced random numbers
|
||||
- PIDFILE set to /run/haveged.pid
|
||||
- converted README and man page to UTF-8. Informed the upstream to fix it.
|
||||
* Wed Feb 15 2012 Jirka Hladky <hladky.jiri@gmail.com> - 1.4-3
|
||||
- PIDFile should be stored at /run instead of the default location /var/run
|
||||
- There is long term plan that directory /var/run will not further exist in the future Fedora versions
|
||||
- Asked upstream to add -p <PID_FILE_location> switch to influence the location of the PID File
|
||||
- Set PIDFile=/var/run/haveged.pid This is needed as long -p option is not implemented
|
||||
- https://bugzilla.redhat.com/show_bug.cgi?id=770306#c10
|
||||
* Wed Feb 15 2012 Jirka Hladky <hladky.jiri@gmail.com> - 1.4-2
|
||||
- Updated systemd service file, https://bugzilla.redhat.com/show_bug.cgi?id=770306
|
||||
* Tue Feb 14 2012 Jirka Hladky <hladky.jiri@gmail.com> - 1.4-1
|
||||
- Update to the version 1.4
|
||||
- Conversion to systemd, drop init script
|
||||
* Sun Nov 06 2011 Jirka Hladky <hladky.jiri@gmail.com> - 1.3-2
|
||||
- Fixed a bug on non x86 systems
|
||||
* Sat Nov 05 2011 Jirka Hladky <hladky.jiri@gmail.com> - 1.3-1
|
||||
- update from the upstream (1.3 stable)
|
||||
* Mon Oct 03 2011 Jirka Hladky <hladky.jiri@gmail.com> - 1.3-0
|
||||
-version 1.3 beta
|
||||
* Fri Sep 30 2011 Jirka Hladky <hladky.jiri@gmail.com> - 1.2-4
|
||||
- ppc64 build
|
||||
* Mon Sep 26 2011 Jirka Hladky <hladky.jiri@gmail.com> - 1.2-3
|
||||
- Cleaned spec file according to https://bugzilla.redhat.com/show_bug.cgi?id=739347#c11
|
||||
* Sat Sep 24 2011 Jirka Hladky <hladky.jiri@gmail.com> - 1.2-2
|
||||
- Added comment to explain why we need use Fedora specific start script
|
||||
* Wed Sep 21 2011 Jirka Hladky <hladky.jiri@gmail.com> - 1.2-1
|
||||
- Cleaned spec file according to https://bugzilla.redhat.com/show_bug.cgi?id=739347#c1
|
||||
* Wed Sep 07 2011 Jirka Hladky <hladky.jiri@gmail.com> - 1.2-0
|
||||
- Initial build
|
5
contrib/SUSE/90-haveged.rules
Normal file
5
contrib/SUSE/90-haveged.rules
Normal file
|
@ -0,0 +1,5 @@
|
|||
# Start the haveged service as soon as the random device is available
|
||||
# to avoid starting other services while starved of entropy
|
||||
|
||||
ACTION=="add", KERNEL=="random" , SUBSYSTEM=="mem", TAG+="systemd", ENV{SYSTEMD_WANTS}+="haveged.service"
|
||||
|
26
contrib/SUSE/haveged-dracut.module
Executable file
26
contrib/SUSE/haveged-dracut.module
Executable file
|
@ -0,0 +1,26 @@
|
|||
#!/bin/bash
|
||||
# /usr/lib/dracut/modules.d/98haveged/module-setup.sh
|
||||
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||
|
||||
# called by dracut
|
||||
depends() {
|
||||
return 0
|
||||
}
|
||||
|
||||
installkernel() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# called by dracut
|
||||
install() {
|
||||
inst_multiple -o \
|
||||
/usr/sbin/haveged \
|
||||
$systemdsystemunitdir/haveged.service \
|
||||
$systemdsystemunitdir/haveged-switch-root.service
|
||||
mkdir -p "$initdir/$systemdsystemunitdir/sysinit.target.wants"
|
||||
mkdir -p "$initdir/$systemdsystemunitdir/initrd-switch-root.target.wants"
|
||||
mkdir -p "$initdir/$systemdsystemunitdir/systemd-journald.service.wants"
|
||||
ln_r "$systemdsystemunitdir/haveged.service" "$systemdsystemunitdir/systemd-journald.service.wants/haveged.service"
|
||||
ln_r "$systemdsystemunitdir/haveged-switch-root.service" "$systemdsystemunitdir/initrd-switch-root.target.wants/haveged-switch-root.service"
|
||||
}
|
17
contrib/SUSE/haveged-switch-root.service
Normal file
17
contrib/SUSE/haveged-switch-root.service
Normal file
|
@ -0,0 +1,17 @@
|
|||
[Unit]
|
||||
Description=Tell haveged about new root
|
||||
DefaultDependencies=no
|
||||
ConditionPathExists=/etc/initrd-release
|
||||
Before=initrd-switch-root.service
|
||||
JoinsNamespaceOf=haveged.service
|
||||
|
||||
[Service]
|
||||
ExecStart=-/usr/sbin/haveged -c root=/sysroot
|
||||
PrivateNetwork=yes
|
||||
Type=oneshot
|
||||
StandardInput=null
|
||||
StandardOutput=null
|
||||
StandardError=null
|
||||
|
||||
[Install]
|
||||
WantedBy=initrd-switch-root.target
|
38
contrib/build/build.sh
Executable file
38
contrib/build/build.sh
Executable file
|
@ -0,0 +1,38 @@
|
|||
#!/bin/sh
|
||||
##
|
||||
## Toggle between library and non-library builds. Fix messed up libtool environment
|
||||
## Build and run haveged-devel sample
|
||||
##
|
||||
case "$1" in
|
||||
nolib)
|
||||
sed -i.bak -e '/^##libtool_start##/,/^##libtool_end##/s,^,##,g' ../../configure.ac
|
||||
sed -i.bak -e '/^####nolibtool_start##/,/^####nolibtool_end##/s,^##,,g' \
|
||||
-e '/^##libtool_start##/,/^##libtool_end##/s,^,##,g' ../../src/Makefile.am
|
||||
cp nolib.spec ../../haveged.spec
|
||||
;;
|
||||
lib)
|
||||
sed -i.bak -e '/^####libtool_start##/,/^####libtool_end##/s,^##,,g' ../../configure.ac
|
||||
sed -i.bak -e '/^##nolibtool_start##/,/^##nolibtool_end##/s,^,##,g' \
|
||||
-e '/^####libtool_start##/,/^####libtool_end##/s,^##,,g' ../../src/Makefile.am
|
||||
cp lib.spec ../../haveged.spec
|
||||
;;
|
||||
new)
|
||||
cd ../..
|
||||
make distclean
|
||||
rm -rf autom4te.cache
|
||||
libtoolize --force --install
|
||||
autoreconf --force
|
||||
./configure
|
||||
;;
|
||||
sample)
|
||||
echo "gcc -o havege_sample -DUSE_SOURCE -I../../src -Wall havege_sample.c ../../src/.libs/libhavege.a"
|
||||
gcc -o havege_sample -DUSE_SOURCE -I../../src -Wall havege_sample.c ../../src/.libs/libhavege.a
|
||||
echo "./havege_sample > /dev/null"
|
||||
./havege_sample > /dev/null
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "usage: build [new|nolib|lib|sample]";
|
||||
;;
|
||||
esac
|
||||
|
97
contrib/build/havege_sample.c
Normal file
97
contrib/build/havege_sample.c
Normal file
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
Simple test of build - writes 1k of RNG runs to stdout
|
||||
|
||||
gcc -o havege_sample -DUSE_SOURCE -I../../src -Wall havege_sample.c ../../src/.libs/libhavege.a
|
||||
./havege_sample > /dev/null
|
||||
|
||||
After package is installed into test RAM disk /dev/shm/1
|
||||
gcc -Wall -o havege_sample -I/dev/shm/1/include -L/dev/shm/1/lib havege_sample.c -lhavege
|
||||
LD_LIBRARY_PATH=/dev/shm/1/lib ./havege_sample > /dev/shm/havege_random
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef USE_SOURCE
|
||||
#include "havege.h"
|
||||
#else
|
||||
#include <haveged/havege.h>
|
||||
#endif
|
||||
|
||||
int my_status_dump ( H_PTR h, char *buf, size_t buflen) {
|
||||
H_SD_TOPIC topics[4] = {H_SD_TOPIC_BUILD, H_SD_TOPIC_TUNE, H_SD_TOPIC_TEST, H_SD_TOPIC_SUM};
|
||||
int ret=0, i;
|
||||
|
||||
for(i=0;i<4 && ret<(buflen-2);i++) {
|
||||
ret += havege_status_dump(h, topics[i], buf + ret, buflen-ret);
|
||||
if (ret>(buflen-2))
|
||||
break;
|
||||
buf[ret++] = '\n';
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
/**
|
||||
* RNG output is written to stdout
|
||||
*/
|
||||
int main(void) {
|
||||
int rc;
|
||||
H_UINT* buf;
|
||||
H_PARAMS havege_parameters={0};
|
||||
H_PTR havege_state = NULL;
|
||||
const int status_buf_size = 8192;
|
||||
char status_buf[status_buf_size];
|
||||
int i, size;
|
||||
|
||||
//havege_parameters.msg_out = print_msg;
|
||||
fprintf(stderr, "library version is %s\n", havege_version(NULL));
|
||||
havege_state = havege_create(&havege_parameters);
|
||||
|
||||
rc = havege_state==NULL? H_NOHANDLE : havege_state->error;
|
||||
if (H_NOERR==rc) {
|
||||
buf = havege_state->io_buf;
|
||||
size = havege_state->i_readSz /sizeof(H_UINT);
|
||||
fprintf(stderr, "havege_create: buffer size is %d\n", havege_state->i_readSz);
|
||||
}
|
||||
else {
|
||||
if (H_NOTESTSPEC==rc)
|
||||
fprintf(stderr, "ERROR: havege_create: unrecognized test setup: %s", havege_parameters.testSpec);
|
||||
else fprintf(stderr, "ERROR: havege_create has returned %d\n",rc);
|
||||
if (H_NOHANDLE!=rc)
|
||||
havege_destroy(havage_state);
|
||||
return 1;
|
||||
}
|
||||
rc = havege_run(havege_state);
|
||||
if ( rc ) {
|
||||
fprintf(stderr, "ERROR: havege_run has returned %d\n", havege_state->error);
|
||||
havege_destroy(havege_state);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ( my_status_dump(havege_state, status_buf, status_buf_size) > 0 )
|
||||
fprintf(stderr,"%s\n", status_buf);
|
||||
for (i=0;i<1024;i++) {
|
||||
|
||||
rc = havege_rng(havege_state, buf, size);
|
||||
if ( rc != (int) size ) {
|
||||
fprintf(stderr, "ERROR: havege_rng has returned %d\n", havege_state->error);
|
||||
havege_destroy(havege_state);
|
||||
return 1;
|
||||
}
|
||||
|
||||
rc = fwrite(buf, 1, size, stdout);
|
||||
if ( rc < size ) {
|
||||
fprintf(stderr, "ERROR: fwrite\n");
|
||||
havege_destroy(havege_state);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ( my_status_dump(havege_state, status_buf, status_buf_size) > 0 )
|
||||
fprintf(stderr,"%s\n", status_buf);
|
||||
havege_destroy(havege_state);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
76
contrib/build/lib.spec
Normal file
76
contrib/build/lib.spec
Normal file
|
@ -0,0 +1,76 @@
|
|||
#
|
||||
# Sample spec file for haveged and haveged-devel
|
||||
# Copyright (c) 2013-2014
|
||||
# This file and all modifications and additions to the pristine
|
||||
# package are under the same license as the package itself.
|
||||
#
|
||||
%define have_systemd 0
|
||||
|
||||
Name: haveged
|
||||
Version: 1.9
|
||||
Release: 0
|
||||
License: GPLv3
|
||||
Group: System Environment/Daemons
|
||||
Summary: Feed entropy into random pool
|
||||
URL: http://www.issihosts.com/haveged/
|
||||
Source0: http://www.issihosts.com/haveged/haveged-%{version}.tar.gz
|
||||
BuildRoot: %{_builddir}/%{name}-root
|
||||
%if 0%{?have_systemd}
|
||||
BuildRequires: systemd
|
||||
%endif
|
||||
|
||||
%description
|
||||
The haveged daemon feeds the linux entropy pool with random
|
||||
numbers generated from hidden processor state.
|
||||
|
||||
%package devel
|
||||
Summary: haveged development files
|
||||
Group: Development/Libraries
|
||||
|
||||
%description devel
|
||||
Headers and shared object symbolic links for the haveged library
|
||||
|
||||
This package contains the haveged implementation of the HAVEGE
|
||||
algorithm and supporting features.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%build
|
||||
%configure \
|
||||
--enable-daemon\
|
||||
--enable--init=sysv.redhat
|
||||
make
|
||||
|
||||
%check
|
||||
make check
|
||||
|
||||
%install
|
||||
%makeinstall
|
||||
%{__install} -D -m0755 %{_sysconfdir}/init.d/%{name}
|
||||
%if 0%{?have_systemd}
|
||||
%{__install} -D -m0644 %{S:2} %{buildroot}%{_unitdir}/%{name}.service
|
||||
%endif
|
||||
%{__rm} -f %{buildroot}%{_libdir}/libhavege.*a
|
||||
|
||||
%clean
|
||||
%{?buildroot:%__rm -rf "%{buildroot}"}
|
||||
|
||||
%files
|
||||
%defattr(-, root, root, -)
|
||||
%doc COPYING
|
||||
%{_mandir}/man8/haveged.8*
|
||||
%{_sbindir}/haveged
|
||||
%if 0%{?have_systemd}
|
||||
%{_unitdir}/haveged.service
|
||||
%endif
|
||||
|
||||
%files devel
|
||||
%doc COPYING
|
||||
%defattr(-, root, root, -)
|
||||
%{_mandir}/man3/libhavege.3*
|
||||
%dir %{_includedir}/%{name}
|
||||
%{_includedir}/%{name}/havege*.h
|
||||
%doc contrib/build/havege_sample.c
|
||||
%{_libdir}/*.so*
|
||||
|
40
contrib/build/nolib.spec
Normal file
40
contrib/build/nolib.spec
Normal file
|
@ -0,0 +1,40 @@
|
|||
#
|
||||
# Sample spec file for haveged
|
||||
# Copyright (c) 2013-2014
|
||||
# This file and all modifications and additions to the pristine
|
||||
# package are under the same license as the package itself.
|
||||
#
|
||||
Name: haveged
|
||||
Version: 1.9
|
||||
Release: 1
|
||||
License: GPLv3
|
||||
Group: System Environment/Daemons
|
||||
Summary: Feed entropy into random pool
|
||||
URL: http://www.issihosts.com/haveged/
|
||||
Source0: http://www.issihosts.com/haveged/haveged-%{version}.tar.gz
|
||||
BuildRoot: %{_builddir}/%{name}-root
|
||||
|
||||
%description
|
||||
The haveged daemon feeds the linux entropy pool with random
|
||||
numbers generated from hidden processor state.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%build
|
||||
./configure
|
||||
make
|
||||
make check
|
||||
|
||||
%install
|
||||
[ ${RPM_BUILD_ROOT} != "/" ] && rm -rf $RPM_BUILD_ROOT
|
||||
make DESTDIR=$RPM_BUILD_ROOT install
|
||||
|
||||
%clean
|
||||
[ ${RPM_BUILD_ROOT} != "/" ] && rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
/usr/local/sbin/haveged
|
||||
/usr/local/share/man/man8/haveged.8
|
||||
/etc/init.d/haveged
|
12
contrib/diags/bins.p
Normal file
12
contrib/diags/bins.p
Normal file
|
@ -0,0 +1,12 @@
|
|||
unset key
|
||||
set ticslevel 0.1
|
||||
set xlabel "Step"
|
||||
set ylabel "Tick"
|
||||
set zlabel "Count"
|
||||
set zlabel rotate
|
||||
set xtic .2
|
||||
set ytic 1
|
||||
set grid x y z
|
||||
set title "Ticks Frequency"
|
||||
splot("run.bins")
|
||||
|
341
contrib/diags/data_prep.c
Normal file
341
contrib/diags/data_prep.c
Normal file
|
@ -0,0 +1,341 @@
|
|||
/**
|
||||
** Data preparation for diagnostic interfaces
|
||||
**
|
||||
** Copyright 2009-2011 Gary Wuertz gary@issiweb.com
|
||||
** Copyright 2011 BenEleventh Consulting manolson@beneleventh.com
|
||||
**
|
||||
** This program is free software: you can redistribute it and/or modify
|
||||
** it under the terms of the GNU General Public License as published by
|
||||
** the Free Software Foundation, either version 3 of the License, or
|
||||
** (at your option) any later version.
|
||||
**
|
||||
** This program is distributed in the hope that it will be useful,
|
||||
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
** GNU General Public License for more details.
|
||||
**
|
||||
** You should have received a copy of the GNU General Public License
|
||||
** along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
**
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <getopt.h>
|
||||
#include <math.h>
|
||||
|
||||
/**
|
||||
* Something borrowed......
|
||||
*/
|
||||
#define APP_BUFF_SIZE 1024
|
||||
#define NDSIZECOLLECT 0x1000000
|
||||
|
||||
typedef unsigned int U_INT;
|
||||
|
||||
struct pparams {
|
||||
int cmd; // command to execute
|
||||
int options; // debug options
|
||||
char *outpath; // output file;
|
||||
FILE *input; // input file
|
||||
FILE *output; // output file
|
||||
U_INT limit; // limit delta
|
||||
U_INT repeat; // repeat values
|
||||
U_INT value; // inject value
|
||||
U_INT bsize; // Buffer size
|
||||
double xs; // X scale
|
||||
};
|
||||
/**
|
||||
* For bin output
|
||||
*/
|
||||
#define X_BINS 512
|
||||
#define Y_BINS 2048
|
||||
/**
|
||||
* Divide data into bins
|
||||
*/
|
||||
#define X_FACTOR (1.0 * X_BINS)/(1.0 * p->bsize)
|
||||
#define Y_FACTOR (0.5 * Y_BINS)/(1.0 * 0x7fffffff)
|
||||
/*
|
||||
* Scale bins back to values x = 1M, y=4.0G
|
||||
*/
|
||||
#define X_SCALE (p->xs/X_BINS)
|
||||
#define Y_SCALE (4.0/Y_BINS)
|
||||
|
||||
static int inject_output(struct pparams *p);
|
||||
static void matrix_output(struct pparams *p);
|
||||
static void sequence_output(struct pparams *p);
|
||||
static void usage(int nopts, struct option *long_options, const char **cmds);
|
||||
/**
|
||||
* Data Prep
|
||||
*/
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
static const char* cmds[] = {
|
||||
"b", "buffer", "1", "buffer size (k): default 1024",
|
||||
"f", "file", "1", "output file name: default is '-' (stdout)",
|
||||
"i", "inject", "1", "inject 0=2up, 1=1up, 2=raw 1up",
|
||||
"o", "output", "1", "[bin|delta|inject|raw|xor|wrap] data",
|
||||
"r", "repeat", "1", "repeat inject sequence",
|
||||
"s", "start", "1", "start value inject sequence",
|
||||
"u", "upper", "1", "inject sequence upper bound",
|
||||
"v", "verbose", "1", "verbose reporting",
|
||||
"h", "help", "0", "This help"
|
||||
};
|
||||
char *outputs[] = {"bin","delta","inject","raw","xor","wrap",NULL};
|
||||
static int nopts = sizeof(cmds)/(4*sizeof(char *));
|
||||
struct option long_options[nopts+1];
|
||||
char short_options[1+nopts*2];
|
||||
struct pparams params;
|
||||
FILE *f;
|
||||
U_INT i, j, n;
|
||||
int c;
|
||||
char *s;
|
||||
|
||||
for(i=j=0;j<(nopts*4);j+=4) {
|
||||
long_options[i].name = cmds[j+1];
|
||||
long_options[i].has_arg = atoi(cmds[j+2]);
|
||||
long_options[i].flag = NULL;
|
||||
long_options[i].val = cmds[j][0];
|
||||
strcat(short_options,cmds[j]);
|
||||
if (long_options[i].has_arg!=0) strcat(short_options,":");
|
||||
i += 1;
|
||||
}
|
||||
memset(&long_options[i], 0, sizeof(struct option));
|
||||
memset(¶ms, 0, sizeof(struct pparams));
|
||||
params.outpath = "-";
|
||||
params.bsize = NDSIZECOLLECT;
|
||||
params.xs = 1.0;
|
||||
do {
|
||||
c = getopt_long (argc, argv, short_options, long_options, NULL);
|
||||
switch(c) {
|
||||
case 'b':
|
||||
params.bsize = atoi(optarg);
|
||||
params.xs = params.bsize;
|
||||
while(params.xs >= 10.0)
|
||||
params.xs /= 10.0;
|
||||
break;
|
||||
case 'f':
|
||||
params.outpath = optarg;
|
||||
break;
|
||||
case 'i':
|
||||
params.options = atoi(optarg);
|
||||
break;
|
||||
case 'o':
|
||||
n = strlen(optarg);
|
||||
for(i=0;outputs[i]!=NULL;i++)
|
||||
if (!strncmp(optarg, outputs[i], n)) {
|
||||
params.cmd = optarg[0];
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'r':
|
||||
params.repeat = atoi(optarg);
|
||||
break;
|
||||
case 's':
|
||||
params.value = atoi(optarg);
|
||||
break;
|
||||
case 'u':
|
||||
params.limit = atoi(optarg);
|
||||
break;
|
||||
case 'v':
|
||||
params.cmd = atoi(optarg);
|
||||
break;
|
||||
case '?':
|
||||
case 'h':
|
||||
usage(nopts, long_options, cmds);
|
||||
case -1:
|
||||
break;
|
||||
}
|
||||
} while (c!=-1);
|
||||
|
||||
if (0==params.cmd || optind != (argc-1))
|
||||
usage(nopts, long_options, cmds);
|
||||
if (!strcmp(argv[1],"-"))
|
||||
params.input = stdin;
|
||||
else {
|
||||
params.input = fopen(argv[optind], "rb");
|
||||
if (NULL == params.input) {
|
||||
fprintf(stderr, "Unable to open input %s\n", argv[optind]);
|
||||
exit(2);
|
||||
}
|
||||
}
|
||||
if (!strcmp(params.outpath, "-"))
|
||||
params.output = stdout;
|
||||
else {
|
||||
params.output = fopen(params.outpath, "wb");
|
||||
if (NULL == params.output) {
|
||||
fprintf(stderr, "Unable to open %s\n", params.outpath);
|
||||
exit(3);
|
||||
}
|
||||
fprintf(stdout, "writing to %s\n", params.outpath);
|
||||
}
|
||||
switch(params.cmd) {
|
||||
case 'i':
|
||||
while(inject_output(¶ms)>0)
|
||||
;
|
||||
break;
|
||||
case 'b':
|
||||
matrix_output(¶ms);
|
||||
break;
|
||||
case 'd': case 'r': case 'x': case 'w':
|
||||
sequence_output(¶ms);
|
||||
break;
|
||||
}
|
||||
if (params.output != stdout)
|
||||
fclose(params.output);
|
||||
return 0;
|
||||
}
|
||||
/**
|
||||
* Create injection data - input file is log10 sequence data - can be repeated
|
||||
*/
|
||||
static int inject_output(struct pparams *p)
|
||||
{
|
||||
U_INT buf[APP_BUFF_SIZE];
|
||||
char ibuf[80], *s;
|
||||
U_INT i, j;
|
||||
double n, delta;
|
||||
int rv = 1;
|
||||
|
||||
n = 0;
|
||||
for(i=0;i<APP_BUFF_SIZE && rv==1;i++) {
|
||||
buf[i] = p->value;
|
||||
s = fgets(ibuf, 80, p->input);
|
||||
if (NULL == s && p->repeat != 0) {
|
||||
p->repeat -= 1;
|
||||
rewind(p->input);
|
||||
s = fgets(ibuf, 80, p->input);
|
||||
}
|
||||
if (NULL != s) {
|
||||
if (p->options!=0)
|
||||
delta = strtod(ibuf, NULL);
|
||||
else {
|
||||
n = strtod(ibuf, &s);
|
||||
delta = strtod(s, NULL);
|
||||
}
|
||||
if (p->limit != 0 && delta > p->limit)
|
||||
delta -= p->limit;
|
||||
if (p->options == 2)
|
||||
p->value = (U_INT) delta;
|
||||
else p->value += (U_INT)pow(10.0,delta);
|
||||
}
|
||||
else rv = 0;
|
||||
}
|
||||
if (i != fwrite(buf, sizeof(U_INT), i, p->output)) {
|
||||
printf("Write error\n");
|
||||
rv = -1;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
/**
|
||||
* Create matrix data file
|
||||
*/
|
||||
static void matrix_output(struct pparams *p)
|
||||
{
|
||||
U_INT buf[APP_BUFF_SIZE];
|
||||
U_INT **matrix;
|
||||
FILE *f = p->input;
|
||||
int i, n, sz, x, y;
|
||||
|
||||
matrix = (U_INT **) malloc(sizeof(U_INT **) * X_BINS);
|
||||
if (NULL == matrix) {
|
||||
fprintf(stderr, "Unable to allocate cols\n");
|
||||
return;
|
||||
}
|
||||
sz = sizeof(U_INT *) * Y_BINS;
|
||||
for (i = 0;i< X_BINS;i++) {
|
||||
matrix[i] = (U_INT *)malloc(sz);
|
||||
if (NULL == matrix[i]) {
|
||||
fprintf(stderr, "Unable to allocate row\n");
|
||||
return;
|
||||
}
|
||||
memset(matrix[i], 0, sz);
|
||||
}
|
||||
n = 0;
|
||||
while(1) {
|
||||
sz = fread(buf, sizeof(U_INT), APP_BUFF_SIZE, f);
|
||||
if (sz < 1)
|
||||
break;
|
||||
for(i=0;i<sz;i++) {
|
||||
x = (int)(n * X_FACTOR);
|
||||
y = (int)(buf[i] * Y_FACTOR);
|
||||
matrix[x][y] += 1;
|
||||
n += 1;
|
||||
n %= p->bsize;
|
||||
}
|
||||
}
|
||||
for(x=0;x<X_BINS;x++)
|
||||
for(y=0;y<Y_BINS;y++)
|
||||
if (matrix[x][y]!=0)
|
||||
fprintf(p->output,"%g\t%g\t%u\n", x*X_SCALE, y*Y_SCALE, matrix[x][y]);
|
||||
}
|
||||
/**
|
||||
* Create sequence data file
|
||||
*/
|
||||
static void sequence_output(struct pparams *p)
|
||||
{
|
||||
U_INT buf[APP_BUFF_SIZE];
|
||||
FILE *f = p->input;
|
||||
int i, m, n, sz;
|
||||
U_INT delta, cur, prev;
|
||||
U_INT plus, minus;
|
||||
|
||||
m = p->cmd=='r'? 1 : 0;
|
||||
n = 0;
|
||||
plus = minus = 0;
|
||||
while(1) {
|
||||
sz = fread(buf, sizeof(U_INT), APP_BUFF_SIZE, f);
|
||||
if (sz < 1)
|
||||
break;
|
||||
for(i=0;i<sz;i++) {
|
||||
prev = cur;
|
||||
cur = buf[i];
|
||||
if (m==0) {
|
||||
m = 1;
|
||||
}
|
||||
else switch(p->cmd) {
|
||||
case 'd':
|
||||
if (cur < prev)
|
||||
delta = prev - cur;
|
||||
else delta = cur - prev;
|
||||
fprintf(p->output,"%g\t%g\n", n * 10.0/1024.0, log10(delta));
|
||||
break;
|
||||
case 'x':
|
||||
fprintf(p->output,"%g\t%g\n", n * 10.0/1024.0, log10(cur^prev));
|
||||
break;
|
||||
case 'r':
|
||||
fprintf(p->output,"%g\t%g\n", n * 10.0/1024.0, 1.0 * cur);
|
||||
break;
|
||||
case 'w':
|
||||
if (cur < prev) {
|
||||
if (p->options & 1)
|
||||
fprintf(p->output,"rollover %d\n", n);
|
||||
minus++;
|
||||
}
|
||||
else plus++;
|
||||
break;
|
||||
}
|
||||
n += 1;
|
||||
n %= p->bsize;
|
||||
}
|
||||
}
|
||||
if (p->cmd=='w')
|
||||
fprintf(p->output,"Rollover %u/%u = %g\n", minus, plus, minus*100/(double)(minus+plus));
|
||||
}
|
||||
/**
|
||||
* usage
|
||||
*/
|
||||
static void usage(int nopts, struct option *long_options, const char **cmds)
|
||||
{
|
||||
int i;
|
||||
|
||||
fprintf(stderr, "\nUsage: %s [options] <file>\n\n", "data_prep");
|
||||
fprintf(stderr, "Prepare diagnostic data from <file>\n\n");
|
||||
fprintf(stderr, " Options:\n");
|
||||
for(i=0;long_options[i].val != 0;i++) {
|
||||
fprintf(stderr," --%-10s, -%c %s %s\n",
|
||||
long_options[i].name, long_options[i].val,
|
||||
long_options[i].has_arg? "[]":" ",cmds[4*i+3]);
|
||||
}
|
||||
fprintf(stderr, "\n");
|
||||
exit(1);
|
||||
}
|
||||
|
8
contrib/diags/inc.p
Normal file
8
contrib/diags/inc.p
Normal file
|
@ -0,0 +1,8 @@
|
|||
unset key
|
||||
set xlabel "Step"
|
||||
set ylabel "log10(increment)"
|
||||
set ylabel rotate
|
||||
set xtic auto
|
||||
set ytic auto
|
||||
set title "Ticks Increment"
|
||||
plot("run.inc")
|
6
contrib/diags/lognorm.r
Normal file
6
contrib/diags/lognorm.r
Normal file
|
@ -0,0 +1,6 @@
|
|||
x = rnorm(16*1024*1024, mean=2.005285, sd=0.2162)
|
||||
write(x,file="i7.ln",ncolumns=1)
|
||||
x = rnorm(16*1024*1024, mean=2.744504, sd=0.93767)
|
||||
write(x,file="xeon.ln",ncolumns=1)
|
||||
x = rnorm(16*1024*1024, mean=5.9478, sd=2.4142)
|
||||
write(x,file="celeron.ln",ncolumns=1)
|
13
contrib/diags/lognorm.sh
Executable file
13
contrib/diags/lognorm.sh
Executable file
|
@ -0,0 +1,13 @@
|
|||
#!/bin/sh
|
||||
src/haveged -n 16m -f i7.dat -r 4 -s i7.ln
|
||||
ent/entest -vf i7.dat
|
||||
nist/nist i7.dat
|
||||
mv nist.out i7.out
|
||||
src/haveged -n 16m -f xeon.dat -r 4 -s xeon.ln
|
||||
ent/entest -vf xeon.dat
|
||||
nist/nist xeon.dat
|
||||
mv nist.out xeon.out
|
||||
src/haveged -n 16m -f celeron.dat -r 4 -s celeron.ln
|
||||
ent/entest -vf celeron.dat
|
||||
nist/nist celeron.dat
|
||||
mv nist.out celeron.out
|
Loading…
Add table
Add a link
Reference in a new issue