summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzysztof Pawlik <nelchael@gentoo.org>2010-11-08 12:18:53 +0000
committerKrzysztof Pawlik <nelchael@gentoo.org>2010-11-08 12:18:53 +0000
commit246fb4484acc544269778db5cb74428dfd003824 (patch)
treece9617f1973f07ba3306d3e4c73470bc9535a243 /sys-apps/rng-tools
parentVersion bump to beta1. Bug #341587 (diff)
downloadhistorical-246fb4484acc544269778db5cb74428dfd003824.tar.gz
historical-246fb4484acc544269778db5cb74428dfd003824.tar.bz2
historical-246fb4484acc544269778db5cb74428dfd003824.zip
Version bump, remove old versions. rng-tools-3 contains support for TPM devices.
Package-Manager: portage-2.1.9.24/cvs/Linux x86_64
Diffstat (limited to 'sys-apps/rng-tools')
-rw-r--r--sys-apps/rng-tools/ChangeLog12
-rw-r--r--sys-apps/rng-tools/Manifest26
-rw-r--r--sys-apps/rng-tools/files/rngd-confd-3 (renamed from sys-apps/rng-tools/files/2-r2/rngd-conf)0
-rw-r--r--sys-apps/rng-tools/files/rngd-initd-3 (renamed from sys-apps/rng-tools/files/2-r2/rngd)2
-rw-r--r--sys-apps/rng-tools/files/rngd_tpm_support.patch288
-rw-r--r--sys-apps/rng-tools/files/rngd_tpm_support2.patch309
-rw-r--r--sys-apps/rng-tools/rng-tools-2-r2.ebuild31
-rw-r--r--sys-apps/rng-tools/rng-tools-3.ebuild (renamed from sys-apps/rng-tools/rng-tools-2-r3.ebuild)8
8 files changed, 34 insertions, 642 deletions
diff --git a/sys-apps/rng-tools/ChangeLog b/sys-apps/rng-tools/ChangeLog
index 99b1c0eac18a..be86146bd29e 100644
--- a/sys-apps/rng-tools/ChangeLog
+++ b/sys-apps/rng-tools/ChangeLog
@@ -1,6 +1,16 @@
# ChangeLog for sys-apps/rng-tools
# Copyright 1999-2010 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/rng-tools/ChangeLog,v 1.29 2010/09/15 08:36:14 robbat2 Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/rng-tools/ChangeLog,v 1.30 2010/11/08 12:18:52 nelchael Exp $
+
+*rng-tools-3 (08 Nov 2010)
+
+ 08 Nov 2010; Krzysztof Pawlik <nelchael@gentoo.org>
+ -rng-tools-2-r2.ebuild, -rng-tools-2-r3.ebuild, +files/rngd-confd-3,
+ -files/2-r2/rngd, +files/rngd-initd-3, +rng-tools-3.ebuild,
+ -files/2-r2/rngd-conf, -files/rngd_tpm_support.patch,
+ -files/rngd_tpm_support2.patch:
+ Version bump, remove old versions. rng-tools-3 contains support for TPM
+ devices.
15 Sep 2010; Robin H. Johnson <robbat2@gentoo.org> files/2-r2/rngd,
files/2-r2/rngd-conf:
diff --git a/sys-apps/rng-tools/Manifest b/sys-apps/rng-tools/Manifest
index c846c3b87611..6de0360913df 100644
--- a/sys-apps/rng-tools/Manifest
+++ b/sys-apps/rng-tools/Manifest
@@ -1,12 +1,24 @@
-AUX 2-r2/rngd 1818 RMD160 6f36e0bc6f692eade9c472ba3542275a9cc3693d SHA1 75263283903c995c12409b0d40cb9a48730b8665 SHA256 a704ac930809561da739427e6b7f1e3019480b031b3c31866b4e772d1da0751a
-AUX 2-r2/rngd-conf 714 RMD160 68a896a6ac5af055c4d8938b4e69e9e638c43eca SHA1 e7a4b3bab3c4fa4216d08d4e543a3cab31794c78 SHA256 542ef931152a71888b8d1ebb2c1f5d43edefcd2902d616d635e1d15a0e742519
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
AUX 2/rngd 1488 RMD160 eb3628986ba3896deb8dfaf6765c052cb2d673ae SHA1 ce333b36be8144f24d55397c06dbf0eea4f3563d SHA256 00f8d05292565feb750d20af4ff6ff8ee20a14ae09c0164ec7b6b4b1ee67028d
AUX 2/rngd-conf 259 RMD160 278957b8acad462fd5c888344fb21a52dffd1c6b SHA1 a3fe13793fffe10577f94398946b20142eae0771 SHA256 4dff7a0c8406f5344f71d236e755877388e93ff6728eedfdfe6921b3de41d137
-AUX rngd_tpm_support.patch 7620 RMD160 b346d1b27edcd7cb9ad302ec870c73029e7f5276 SHA1 415115d91e823b5a74ef396d5b0bf62b8770b34b SHA256 44839db3a5dbc6d7a27d9e66ace1a68459bc532cd36e891a996b4f9dcd59f555
-AUX rngd_tpm_support2.patch 8540 RMD160 276c7805e304055fe793a6543133c8556edc64b2 SHA1 9f9bdb16aa1cd90df2c6a13dd5a431279cbd0407 SHA256 01e78c3488f30614006599728f5c8159530232edb547e6557fc72d2a1fd93cba
+AUX rngd-confd-3 714 RMD160 68a896a6ac5af055c4d8938b4e69e9e638c43eca SHA1 e7a4b3bab3c4fa4216d08d4e543a3cab31794c78 SHA256 542ef931152a71888b8d1ebb2c1f5d43edefcd2902d616d635e1d15a0e742519
+AUX rngd-initd-3 1822 RMD160 117ab8ef733d2b5442a74b04513e53319e103aa9 SHA1 a872e855ad1939707543e75182fbe71bda81f54b SHA256 39ddbbe1caaa1404799b535ef2af63ccefc9150aa0cfa7ae43716f7f890f84fd
DIST rng-tools-2.tar.gz 86429 RMD160 c40bc13068ffb48e28e1a8da274c0be40deb0a8a SHA1 45f43b0992b9978f9e0633d31d7f4b2a3643d293 SHA256 1126f0ecc8cab3af14a562cddc5d8ffeef47df7eba34a7aadcdee35a25ec2b1e
+DIST rng-tools-3.tar.gz 102366 RMD160 39d1085aef770e901b89add28cd06a66a2f15f1b SHA1 018d69523ab8d1ed5c06575d7a61499c2a952ff1 SHA256 27f8041836f74342268aed4acdc28bcc0438b8461695d277cb81096d7ecaf4cc
EBUILD rng-tools-2-r1.ebuild 780 RMD160 04c419c84306e79aab5a9220a3657a3bbe73641e SHA1 c8b1b7113993f9d3605e982d3cc2e7e369c886ac SHA256 c807a02a07216dfbe879742ae75cc33d3870d11f07cc8a9c5de43da0b8c98e21
-EBUILD rng-tools-2-r2.ebuild 793 RMD160 8d27c06eafddadbebec93880eb4f54b1599f8511 SHA1 ff9708cc0fdbe66c7462e559448c4e2adde40ecc SHA256 d0a0f72cbec85b6eb11758732080cfc436fbfe2c2fbc8b41d58ec7241787ad8d
-EBUILD rng-tools-2-r3.ebuild 794 RMD160 567a0b2fac5e1eafb9c6210a197c80d4ab81fc1b SHA1 c11a60705a07d44c407cd5fe6a4bcf7e5ec1e0e8 SHA256 36c72f22f414eda503ab4f696ee3e1c6b3d2b56b7d2fcb623bf95d927c8b1a33
-MISC ChangeLog 3862 RMD160 6ef88d90b917c7309756ebf6b40555c79c52fcb5 SHA1 9ae4bec96e81cd90e00f091be0e1322f3d3b10ae SHA256 8f428d7a07f5498252f990bb2a7b7568ae1a4ed15487027a5240ea03a2722193
+EBUILD rng-tools-3.ebuild 760 RMD160 c8c268d323acd672bb96bdd9ff7eea810b8cbf75 SHA1 27f2870b4e069d8a88d447f46632a6c58a094e16 SHA256 643394e8733c3004af0326658d6a0795f69d9fa65b39ee9e63ed0ce19a472206
+MISC ChangeLog 4254 RMD160 b43c121829af8c179f8e2ff825bba283d9fe832f SHA1 81215596a577f3143a4943783bd3149ec2ff912e SHA256 87e322e983a6be23c6b759fd9bb118ec1589850e02e84881311f58d1d704e900
MISC metadata.xml 231 RMD160 984878f0848eaa1ef84b38196bb704d218277437 SHA1 6015bdc80c95314a6250c06380f316ca4c753770 SHA256 c9a6ce79e19aa9257b980bda6f6b6332d0fcb81f50800bb12c1a1c6d2f5cd443
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.16 (GNU/Linux)
+
+iQEcBAEBAgAGBQJM1+qyAAoJEBZyv1r2qA5GXKYH/iMBf4okRbwNcPry1O9vR6Z+
+5NFJ4Z3ylXg4gVBZXAVkgCwHE0bkAIWE5nJyJnjyuxTI5akrBvGq729VG6KXepFo
+eOm886vhkETwmuYiVlmGrG/isivYNw3yaJt25TNKPPMOM6beFeEOY6z1SUPFcrJz
+yQFERWu2CBm3cK9GNBikqcNULMoiU7L4MGoRGJkVtPfzm9gcF6qrrkmTnDbAl8sm
+Y7Uyw5n0G2UQEJFrYctZMhCPm5mSEL6xwNDSgTZx1vnQpbhV0Zd54LTzhjCl/943
+jI3/wXdf/TiVJ5xI/PxZwA5NlCdgQPSqgyHdH1/6yWdL9/8AiWCOlUnbxedNzdc=
+=pF2e
+-----END PGP SIGNATURE-----
diff --git a/sys-apps/rng-tools/files/2-r2/rngd-conf b/sys-apps/rng-tools/files/rngd-confd-3
index 0702ece0ae14..0702ece0ae14 100644
--- a/sys-apps/rng-tools/files/2-r2/rngd-conf
+++ b/sys-apps/rng-tools/files/rngd-confd-3
diff --git a/sys-apps/rng-tools/files/2-r2/rngd b/sys-apps/rng-tools/files/rngd-initd-3
index 76ac703069bc..00aa5e484487 100644
--- a/sys-apps/rng-tools/files/2-r2/rngd
+++ b/sys-apps/rng-tools/files/rngd-initd-3
@@ -1,7 +1,7 @@
#!/sbin/runscript
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/rng-tools/files/2-r2/rngd,v 1.2 2010/09/15 08:36:14 robbat2 Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/rng-tools/files/rngd-initd-3,v 1.1 2010/11/08 12:18:53 nelchael Exp $
depend() {
need localmount
diff --git a/sys-apps/rng-tools/files/rngd_tpm_support.patch b/sys-apps/rng-tools/files/rngd_tpm_support.patch
deleted file mode 100644
index 0edc47109e0a..000000000000
--- a/sys-apps/rng-tools/files/rngd_tpm_support.patch
+++ /dev/null
@@ -1,288 +0,0 @@
-Patch taken from http://sourceforge.net/tracker/?func=detail&aid=2261574&group_id=3242&atid=353242
-
-diff -uNr rng-tools-2-orig/rngd.c rng-tools-2/rngd.c
---- rng-tools-2-orig/rngd.c 2004-08-24 23:30:00.000000000 +0530
-+++ rng-tools-2/rngd.c 2008-11-11 15:39:31.000000000 +0530
-@@ -91,6 +91,8 @@
-
- { "timeout", 't', "nnn", 0,
- "Interval written to random-device when the entropy pool is full, in seconds (default: 60)" },
-+ { "no-tpm", 'n', "1|0", 0,
-+ "do not use tpm as a source of random number input (default: 0)" },
-
- { 0 },
- };
-@@ -102,6 +104,7 @@
- .random_step = 64,
- .fill_watermark = 2048,
- .daemon = 1,
-+ .no_tpm =0,
- };
- struct arguments *arguments = &default_arguments;
-
-@@ -147,6 +150,15 @@
- arguments->fill_watermark = n;
- break;
- }
-+ case 'n': {
-+ int n;
-+ if ((sscanf(arg,"%i", &n) == 0) || ((n | 1)!=1))
-+ argp_usage(state);
-+ else
-+ arguments->no_tpm=0;
-+ break;
-+
-+ }
-
- default:
- return ARGP_ERR_UNKNOWN;
-@@ -162,26 +174,41 @@
- double poll_timeout)
- {
- unsigned char buf[FIPS_RNG_BUFFER_SIZE];
-- unsigned char *p;
-- int fips;
-+ int fips,retval;
-
- for (;;) {
-- xread(buf, sizeof buf);
-+ if (arguments->no_tpm == 0) {
-+ retval=xread_tpm(buf, sizeof buf);
-+ if (retval < 0)
-+ sleep(1);
-+ else
-+ update_kernel_random(random_step,
-+ poll_timeout, buf, &tpm_fipsctx);
-+ }
-+ retval=xread(buf, sizeof buf);
-+ if (retval > 0)
-+ update_kernel_random(random_step,
-+ poll_timeout, buf, &fipsctx);
-+ }
-+}
-
-- fips = fips_run_rng_test(&fipsctx, buf);
-+int update_kernel_random(int random_step, double poll_timeout,
-+ unsigned char *buf, fips_ctx_t *fipsctx) {
-
-- if (fips) {
-- message(LOG_DAEMON|LOG_ERR, "failed fips test\n");
-- sleep(1);
-- continue;
-- }
-+ int fips;
-+ unsigned char *p;
-+ fips = fips_run_rng_test(fipsctx, buf);
-+ if (fips) {
-+ message(LOG_DAEMON|LOG_ERR, "failed fips test\n");
-+ return 1;
-+ }
-
-- for (p = buf; p + random_step <= &buf[sizeof buf];
-- p += random_step) {
-- random_add_entropy(p, random_step);
-- random_sleep(poll_timeout);
-- }
-+ for (p = buf; p + random_step <= &buf[FIPS_RNG_BUFFER_SIZE];
-+ p += random_step) {
-+ random_add_entropy(p, random_step);
-+ random_sleep(poll_timeout);
- }
-+ return 0;
- }
-
-
-diff -uNr rng-tools-2-orig/rngd_entsource.c rng-tools-2/rngd_entsource.c
---- rng-tools-2-orig/rngd_entsource.c 2004-04-15 10:36:17.000000000 +0530
-+++ rng-tools-2/rngd_entsource.c 2008-11-11 15:39:31.000000000 +0530
-@@ -35,6 +35,7 @@
- #include <errno.h>
- #include <syslog.h>
- #include <string.h>
-+#include <signal.h>
-
- #include "rngd.h"
- #include "fips.h"
-@@ -42,17 +43,27 @@
- #include "rngd_entsource.h"
-
-
--/* Logic and contexts */
--static int rng_fd; /* rng data source */
--fips_ctx_t fipsctx; /* Context for the FIPS tests */
-+/* The overhead incured when tpm returns the random nos as per TCG spec
-+ * it is 14 bytes.*/
-+#define TPM_GET_RNG_OVERHEAD 14
-
-+static const char *rng_device="/dev/tpm0";
-+/* Logic and contexts */
-+static int rng_fd; /* rng data source */
-+fips_ctx_t fipsctx; /* Context for the FIPS tests */
-+fips_ctx_t tpm_fipsctx; /* Context for the tpm FIPS tests */
-
- /* Read data from the entropy source */
--void xread(void *buf, size_t size)
-+int xread(void *buf, size_t size)
- {
- size_t off = 0;
- ssize_t r;
-
-+ /* Do nothing if we have no hw rng, maybe we have tpm */
-+ if (rng_fd < 0) {
-+ message(LOG_DAEMON|LOG_ERR, "Invalid file handle\n");
-+ return -1;
-+ }
- while (size > 0) {
- do {
- r = read(rng_fd, buf + off, size);
-@@ -65,8 +76,85 @@
-
- if (size) {
- message(LOG_DAEMON|LOG_ERR, "read error\n");
-- exit(1);
-+ return -1;
-+ }
-+ return 0;
-+}
-+
-+alarm_handler(int i) {
-+ ;
-+}
-+/* tpm rng read call to kernel has 13 bytes of overhead
-+ * the logic to process this involves reading to a temporary_buf
-+ * and copying the no generated to buf*/
-+int xread_tpm(void *buf, size_t size)
-+{
-+ size_t bytes_read = 0;
-+ ssize_t r;
-+ int retval,rngtpm_fd;
-+ unsigned char *temp_buf=NULL;
-+ unsigned char rng_cmd[] = {
-+ 0, 193, /* TPM_TAG_RQU_COMMAND */
-+ 0, 0, 0, 14, /* length */
-+ 0, 0, 0, 70, /* TPM_ORD_GetRandom */
-+ 0, 0, 0, 0, /* number of bytes to return */
-+ };
-+ char *offset;
-+
-+ rngtpm_fd=open(rng_device, O_RDWR);
-+ if (rngtpm_fd < 0) {
-+ message(LOG_ERR|LOG_INFO,
-+ "Unable to open %s: %s\n",rng_device,strerror(errno));
-+ return -1;
-+ }
-+
-+ temp_buf= (unsigned char *) malloc(size + TPM_GET_RNG_OVERHEAD);
-+ memset(temp_buf,0,(size+TPM_GET_RNG_OVERHEAD));
-+ if (temp_buf == NULL) {
-+ message(LOG_ERR|LOG_INFO,"No memory");
-+ return -1;
-+ }
-+ /* 32 bits has been reserved for random byte size */
-+ rng_cmd[13]=(unsigned char)(size & 0xFF);
-+ rng_cmd[12]=(unsigned char)((size >> 8) & 0xFF);
-+ rng_cmd[11]=(unsigned char)((size >> 16) & 0xFF);
-+ rng_cmd[10]=(unsigned char)((size >> 24) & 0xFF);
-+ offset=buf;
-+ while (bytes_read < size) {
-+ r=0;
-+ while (r < sizeof(rng_cmd)) {
-+ retval=write(rngtpm_fd,rng_cmd + r,sizeof(rng_cmd)-r);
-+ if (retval < 0) {
-+ message(LOG_ERR|LOG_INFO,
-+ "Error writing %s\n",rng_device);
-+ retval=-1;
-+ goto error_out;
-+ }
-+ r+=retval;
-+ }
-+ if (r < sizeof(rng_cmd)) {
-+ message(LOG_ERR|LOG_INFO,
-+ "Error writing %s\n",rng_device);
-+ retval=-1;
-+ goto error_out;
-+ }
-+ r=read(rngtpm_fd,temp_buf,size);
-+ r=(r - TPM_GET_RNG_OVERHEAD);
-+ bytes_read=bytes_read + r;
-+ if (bytes_read > size) {
-+ memcpy(offset,temp_buf + TPM_GET_RNG_OVERHEAD,
-+ r - (bytes_read - size));
-+ break;
-+ }
-+ memcpy(offset, temp_buf + TPM_GET_RNG_OVERHEAD,
-+ r);
-+ offset=offset+r;
- }
-+ retval=0;
-+error_out:
-+ free(temp_buf);
-+ close(rngtpm_fd);
-+ return retval;
- }
-
- /* Initialize entropy source */
-@@ -93,14 +181,31 @@
- */
- void init_entropy_source(const char* sourcedev)
- {
-+ /* We cannot keep the tpm device open always.
-+ * We need to open get random data and close
-+ * to allow tpm-tools and other utilities
-+ * access to /dev/tpm */
-+ int tpm_fd;
- rng_fd = open(sourcedev, O_RDONLY);
- if (rng_fd == -1) {
- message(LOG_DAEMON|LOG_ERR, "can't open %s: %s",
- sourcedev, strerror(errno));
-- exit(EXIT_FAIL);
-+ /* Try to open tpm this is just a test, no point in proceeding further
-+ * if no source of entropy is present
-+ */
-+ tpm_fd = open(rng_device, O_RDONLY);
-+ if (tpm_fd < 0 ) {
-+ message(LOG_DAEMON|LOG_ERR,
-+ "can't open entropy source(tpm or intel/amd rng) %s",
-+ strerror(errno));
-+ message(LOG_DAEMON|LOG_ERR,"Maybe RNG device modules are not loaded\n");
-+ exit(1);
-+ }
-+ close(tpm_fd);
- }
-
- /* Bootstrap FIPS tests */
- fips_init(&fipsctx, discard_initial_data());
-+ fips_init(&tpm_fipsctx, 0);
- }
-
-diff -uNr rng-tools-2-orig/rngd_entsource.h rng-tools-2/rngd_entsource.h
---- rng-tools-2-orig/rngd_entsource.h 2004-04-15 10:34:45.000000000 +0530
-+++ rng-tools-2/rngd_entsource.h 2008-11-11 15:39:31.000000000 +0530
-@@ -28,7 +28,7 @@
-
- /* Logic and contexts */
- extern fips_ctx_t fipsctx; /* Context for the FIPS tests */
--
-+extern fips_ctx_t tpm_fipsctx; /* Context for the tpm FIPS tests */
- /*
- * Initialize entropy source and entropy conditioning
- *
-@@ -37,6 +37,6 @@
- extern void init_entropy_source(const char* sourcedev);
-
- /* Read data from the entropy source */
--void xread(void *buf, size_t size);
-+int xread(void *buf, size_t size);
-
- #endif /* RNGD_ENTSOURCE__H */
-diff -uNr rng-tools-2-orig/rngd.h rng-tools-2/rngd.h
---- rng-tools-2-orig/rngd.h 2004-08-24 23:23:04.000000000 +0530
-+++ rng-tools-2/rngd.h 2008-11-11 15:39:31.000000000 +0530
-@@ -42,6 +42,7 @@
- double poll_timeout;
-
- int daemon;
-+ int no_tpm;
- };
- extern struct arguments *arguments;
-
diff --git a/sys-apps/rng-tools/files/rngd_tpm_support2.patch b/sys-apps/rng-tools/files/rngd_tpm_support2.patch
deleted file mode 100644
index 194a2186c53e..000000000000
--- a/sys-apps/rng-tools/files/rngd_tpm_support2.patch
+++ /dev/null
@@ -1,309 +0,0 @@
-New TPM-RNG patch from http://sourceforge.net/tracker/?func=detail&aid=2882127&group_id=3242&atid=303242
-
-diff -urNp --exclude-from=/home/mdomsch/excludes --minimal rng-tools-2.orig/rngd.c rng-tools-2/rngd.c
---- rng-tools-2.orig/rngd.c 2009-10-19 22:35:03.023278725 -0500
-+++ rng-tools-2/rngd.c 2009-10-19 22:49:42.100279205 -0500
-@@ -91,6 +91,8 @@ static struct argp_option options[] = {
-
- { "timeout", 't', "nnn", 0,
- "Interval written to random-device when the entropy pool is full, in seconds (default: 60)" },
-+ { "no-tpm", 'n', "1|0", 0,
-+ "do not use tpm as a source of random number input (default: 0)" },
-
- { 0 },
- };
-@@ -102,6 +104,7 @@ static struct arguments default_argument
- .random_step = 64,
- .fill_watermark = 2048,
- .daemon = 1,
-+ .no_tpm = 0,
- };
- struct arguments *arguments = &default_arguments;
-
-@@ -147,6 +150,14 @@ static error_t parse_opt (int key, char
- arguments->fill_watermark = n;
- break;
- }
-+ case 'n': {
-+ int n;
-+ if ((sscanf(arg,"%i", &n) == 0) || ((n | 1)!=1))
-+ argp_usage(state);
-+ else
-+ arguments->no_tpm=0;
-+ break;
-+ }
-
- default:
- return ARGP_ERR_UNKNOWN;
-@@ -158,39 +169,60 @@ static error_t parse_opt (int key, char
- static struct argp argp = { options, parse_opt, NULL, doc };
-
-
-+static int update_kernel_random(int random_step, double poll_timeout,
-+ unsigned char *buf, fips_ctx_t *fipsctx) {
-+
-+ int fips;
-+ unsigned char *p;
-+ fips = fips_run_rng_test(fipsctx, buf);
-+ if (fips) {
-+ message(LOG_DAEMON|LOG_ERR, "failed fips test\n");
-+ return 1;
-+ }
-+
-+ for (p = buf; p + random_step <= &buf[FIPS_RNG_BUFFER_SIZE];
-+ p += random_step) {
-+ random_add_entropy(p, random_step);
-+ random_sleep(poll_timeout);
-+ }
-+ return 0;
-+}
-+
- static void do_loop(int random_step,
- double poll_timeout)
- {
- unsigned char buf[FIPS_RNG_BUFFER_SIZE];
-- unsigned char *p;
-- int fips;
-+ int retval;
-
- for (;;) {
-- xread(buf, sizeof buf);
--
-- fips = fips_run_rng_test(&fipsctx, buf);
--
-- if (fips) {
-- message(LOG_DAEMON|LOG_ERR, "failed fips test\n");
-- sleep(1);
-- continue;
-- }
--
-- for (p = buf; p + random_step <= &buf[sizeof buf];
-- p += random_step) {
-- random_add_entropy(p, random_step);
-- random_sleep(poll_timeout);
-+ if (arguments->no_tpm == 0) {
-+ retval=xread_tpm(buf, sizeof buf);
-+ if (retval >= 0)
-+ update_kernel_random(random_step,
-+ poll_timeout, buf, &tpm_fipsctx);
- }
-+ retval=xread(buf, sizeof buf);
-+ if (retval > 0)
-+ update_kernel_random(random_step,
-+ poll_timeout, buf, &fipsctx);
- }
- }
-
-
- int main(int argc, char **argv)
- {
-+ int rc_rng, rc_tpm;
- argp_parse(&argp, argc, argv, 0, 0, arguments);
-
- /* Init entropy source, and open TRNG device */
-- init_entropy_source(arguments->rng_name);
-+ rc_rng = init_entropy_source(arguments->rng_name);
-+ rc_tpm = init_tpm_entropy_source();
-+ if (rc_rng && rc_tpm) {
-+ message(LOG_DAEMON|LOG_ERR,
-+ "can't open entropy source(tpm or intel/amd rng)");
-+ message(LOG_DAEMON|LOG_ERR,"Maybe RNG device modules are not loaded\n");
-+ return 1;
-+ }
-
- /* Init entropy sink and open random device */
- init_kernel_rng(arguments->random_name);
-diff -urNp --exclude-from=/home/mdomsch/excludes --minimal rng-tools-2.orig/rngd_entsource.c rng-tools-2/rngd_entsource.c
---- rng-tools-2.orig/rngd_entsource.c 2004-04-15 00:06:17.000000000 -0500
-+++ rng-tools-2/rngd_entsource.c 2009-10-19 22:43:46.489263797 -0500
-@@ -42,17 +42,27 @@
- #include "rngd_entsource.h"
-
-
--/* Logic and contexts */
--static int rng_fd; /* rng data source */
--fips_ctx_t fipsctx; /* Context for the FIPS tests */
-+/* The overhead incured when tpm returns the random nos as per TCG spec
-+ * it is 14 bytes.*/
-+#define TPM_GET_RNG_OVERHEAD 14
-
-+/* Logic and contexts */
-+static int rng_fd; /* rng data source */
-+static const char *tpm_device="/dev/tpm0";
-+static int has_tpm;
-+fips_ctx_t fipsctx; /* Context for the FIPS tests */
-+fips_ctx_t tpm_fipsctx; /* Context for the tpm FIPS tests */
-
- /* Read data from the entropy source */
--void xread(void *buf, size_t size)
-+int xread(void *buf, size_t size)
- {
- size_t off = 0;
- ssize_t r;
-
-+ /* Do nothing if we have no hw rng, maybe we have tpm */
-+ if (rng_fd < 0)
-+ return -1;
-+
- while (size > 0) {
- do {
- r = read(rng_fd, buf + off, size);
-@@ -65,8 +75,84 @@ void xread(void *buf, size_t size)
-
- if (size) {
- message(LOG_DAEMON|LOG_ERR, "read error\n");
-- exit(1);
-+ return -1;
-+ }
-+ return 0;
-+}
-+
-+/* tpm rng read call to kernel has 13 bytes of overhead
-+ * the logic to process this involves reading to a temporary_buf
-+ * and copying the no generated to buf*/
-+int xread_tpm(void *buf, size_t size)
-+{
-+ size_t bytes_read = 0;
-+ ssize_t r;
-+ int retval,tpm_fd;
-+ unsigned char *temp_buf=NULL;
-+ unsigned char rng_cmd[] = {
-+ 0, 193, /* TPM_TAG_RQU_COMMAND */
-+ 0, 0, 0, 14, /* length */
-+ 0, 0, 0, 70, /* TPM_ORD_GetRandom */
-+ 0, 0, 0, 0, /* number of bytes to return */
-+ };
-+ char *offset;
-+
-+ if (!has_tpm)
-+ return -1;
-+ tpm_fd=open(tpm_device, O_RDWR);
-+ if (tpm_fd < 0) {
-+ message(LOG_ERR|LOG_INFO,
-+ "Unable to open %s: %s\n",tpm_device,strerror(errno));
-+ return -1;
-+ }
-+
-+ temp_buf= (unsigned char *) malloc(size + TPM_GET_RNG_OVERHEAD);
-+ memset(temp_buf,0,(size+TPM_GET_RNG_OVERHEAD));
-+ if (temp_buf == NULL) {
-+ message(LOG_ERR|LOG_INFO,"No memory");
-+ return -1;
-+ }
-+ /* 32 bits has been reserved for random byte size */
-+ rng_cmd[13]=(unsigned char)(size & 0xFF);
-+ rng_cmd[12]=(unsigned char)((size >> 8) & 0xFF);
-+ rng_cmd[11]=(unsigned char)((size >> 16) & 0xFF);
-+ rng_cmd[10]=(unsigned char)((size >> 24) & 0xFF);
-+ offset=buf;
-+ while (bytes_read < size) {
-+ r=0;
-+ while (r < sizeof(rng_cmd)) {
-+ retval=write(tpm_fd,rng_cmd + r,sizeof(rng_cmd)-r);
-+ if (retval < 0) {
-+ message(LOG_ERR|LOG_INFO,
-+ "Error writing %s\n",tpm_device);
-+ retval=-1;
-+ goto error_out;
-+ }
-+ r+=retval;
-+ }
-+ if (r < sizeof(rng_cmd)) {
-+ message(LOG_ERR|LOG_INFO,
-+ "Error writing %s\n",tpm_device);
-+ retval=-1;
-+ goto error_out;
-+ }
-+ r=read(tpm_fd,temp_buf,size);
-+ r=(r - TPM_GET_RNG_OVERHEAD);
-+ bytes_read=bytes_read + r;
-+ if (bytes_read > size) {
-+ memcpy(offset,temp_buf + TPM_GET_RNG_OVERHEAD,
-+ r - (bytes_read - size));
-+ break;
-+ }
-+ memcpy(offset, temp_buf + TPM_GET_RNG_OVERHEAD,
-+ r);
-+ offset=offset+r;
- }
-+ retval=0;
-+error_out:
-+ free(temp_buf);
-+ close(tpm_fd);
-+ return retval;
- }
-
- /* Initialize entropy source */
-@@ -91,16 +177,32 @@ static int discard_initial_data(void)
- /*
- * Open entropy source, and initialize it
- */
--void init_entropy_source(const char* sourcedev)
-+int init_entropy_source(const char* sourcedev)
- {
- rng_fd = open(sourcedev, O_RDONLY);
- if (rng_fd == -1) {
-- message(LOG_DAEMON|LOG_ERR, "can't open %s: %s",
-- sourcedev, strerror(errno));
-- exit(EXIT_FAIL);
-+ return 1;
- }
--
- /* Bootstrap FIPS tests */
- fips_init(&fipsctx, discard_initial_data());
-+ return 0;
-+}
-+
-+/*
-+ * Open tpm entropy source, and initialize it
-+ */
-+int init_tpm_entropy_source(void)
-+{
-+ int tpm_fd;
-+ tpm_fd = open(tpm_device, O_RDONLY);
-+ if (tpm_fd == -1) {
-+ return 1;
-+ }
-+ close(tpm_fd);
-+
-+ /* Bootstrap FIPS tests */
-+ fips_init(&tpm_fipsctx, 0);
-+ has_tpm=1;
-+ return 0;
- }
-
-diff -urNp --exclude-from=/home/mdomsch/excludes --minimal rng-tools-2.orig/rngd_entsource.h rng-tools-2/rngd_entsource.h
---- rng-tools-2.orig/rngd_entsource.h 2004-04-15 00:04:45.000000000 -0500
-+++ rng-tools-2/rngd_entsource.h 2009-10-19 22:47:49.668279183 -0500
-@@ -28,15 +28,18 @@
-
- /* Logic and contexts */
- extern fips_ctx_t fipsctx; /* Context for the FIPS tests */
-+extern fips_ctx_t tpm_fipsctx; /* Context for the tpm FIPS tests */
-
- /*
- * Initialize entropy source and entropy conditioning
- *
- * sourcedev is the path to the entropy source
- */
--extern void init_entropy_source(const char* sourcedev);
-+extern int init_entropy_source(const char* sourcedev);
-+extern int init_tpm_entropy_source(void);
-
- /* Read data from the entropy source */
--void xread(void *buf, size_t size);
-+extern int xread(void *buf, size_t size);
-+extern int xread_tpm(void *buf, size_t size);
-
- #endif /* RNGD_ENTSOURCE__H */
-diff -urNp --exclude-from=/home/mdomsch/excludes --minimal rng-tools-2.orig/rngd.h rng-tools-2/rngd.h
---- rng-tools-2.orig/rngd.h 2004-08-24 12:53:04.000000000 -0500
-+++ rng-tools-2/rngd.h 2009-10-19 22:35:32.631263134 -0500
-@@ -42,6 +42,7 @@ struct arguments {
- double poll_timeout;
-
- int daemon;
-+ int no_tpm;
- };
- extern struct arguments *arguments;
-
diff --git a/sys-apps/rng-tools/rng-tools-2-r2.ebuild b/sys-apps/rng-tools/rng-tools-2-r2.ebuild
deleted file mode 100644
index 1e7ca7c351d2..000000000000
--- a/sys-apps/rng-tools/rng-tools-2-r2.ebuild
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 1999-2009 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/rng-tools/rng-tools-2-r2.ebuild,v 1.1 2009/11/10 03:15:03 robbat2 Exp $
-
-EAPI=2
-inherit autotools
-
-DESCRIPTION="Daemon to use hardware random number generators."
-HOMEPAGE="http://gkernel.sourceforge.net/"
-SRC_URI="mirror://sourceforge/gkernel/${P}.tar.gz"
-LICENSE="GPL-2"
-SLOT="0"
-KEYWORDS="~alpha ~amd64 ~ia64 ~ppc ~x86"
-IUSE=""
-DEPEND=""
-RDEPEND=""
-
-src_prepare() {
- epatch "${FILESDIR}"/rngd_tpm_support.patch
-
- echo 'bin_PROGRAMS = randstat' >> contrib/Makefile.am
- eautoreconf
-}
-
-src_install() {
- make DESTDIR="${D}" install || die
-
- dodoc AUTHORS ChangeLog
- doinitd "${FILESDIR}/2-r2/rngd"
- newconfd "${FILESDIR}/2-r2/rngd-conf" rngd
-}
diff --git a/sys-apps/rng-tools/rng-tools-2-r3.ebuild b/sys-apps/rng-tools/rng-tools-3.ebuild
index b8a0326cd78c..31d0beea5637 100644
--- a/sys-apps/rng-tools/rng-tools-2-r3.ebuild
+++ b/sys-apps/rng-tools/rng-tools-3.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/rng-tools/rng-tools-2-r3.ebuild,v 1.1 2010/09/15 08:30:51 robbat2 Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/rng-tools/rng-tools-3.ebuild,v 1.1 2010/11/08 12:18:52 nelchael Exp $
EAPI=2
inherit autotools
@@ -16,8 +16,6 @@ DEPEND=""
RDEPEND=""
src_prepare() {
- epatch "${FILESDIR}"/rngd_tpm_support2.patch
-
echo 'bin_PROGRAMS = randstat' >> contrib/Makefile.am
eautoreconf
}
@@ -26,6 +24,6 @@ src_install() {
make DESTDIR="${D}" install || die
dodoc AUTHORS ChangeLog
- doinitd "${FILESDIR}/2-r2/rngd"
- newconfd "${FILESDIR}/2-r2/rngd-conf" rngd
+ newinitd "${FILESDIR}/rngd-initd-${PV}" rngd
+ newconfd "${FILESDIR}/rngd-confd-${PV}" rngd
}