]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
cwc: use better random values (coverity)
authorJaroslav Kysela <perex@perex.cz>
Fri, 3 Oct 2014 19:12:31 +0000 (21:12 +0200)
committerJaroslav Kysela <perex@perex.cz>
Fri, 3 Oct 2014 19:12:31 +0000 (21:12 +0200)
src/descrambler/cwc.c
src/uuid.c
src/uuid.h

index bbef83a0641333d2fbdbac97cd0944735aebc998..603b7a3239c711bd3e44c74aebc407c64c169c42 100755 (executable)
@@ -327,21 +327,6 @@ des_key_spread(uint8_t *normal, uint8_t *spread)
   des_key_parity_adjust(spread, 16);
 }
 
-/**
- *
- */
-static void 
-des_random_get(uint8_t *buffer, uint8_t len)
-{
-  uint8_t idx = 0;
-  int randomNo = 0;
-  for (idx = 0; idx < len; idx++) {
-    if (!(idx % 3)) randomNo = rand();
-    buffer[idx] = (randomNo >> ((idx % 3) << 3)) & 0xff;
-  }
-}
-
 /**
  *
  */
@@ -356,11 +341,11 @@ des_encrypt(uint8_t *buffer, int len, cwc_t *cwc)
 
   noPadBytes = (8 - ((len - 1) % 8)) % 8;
   if (len + noPadBytes + 1 >= CWS_NETMSGSIZE-8) return -1;
-  des_random_get(padBytes, noPadBytes);
+  uuid_random(padBytes, noPadBytes);
   for (i = 0; i < noPadBytes; i++) buffer[len++] = padBytes[i];
   for (i = 2; i < len; i++) checksum ^= buffer[i];
   buffer[len++] = checksum;
-  des_random_get((uint8_t *)ivec, 8);
+  uuid_random((uint8_t *)ivec, 8);
   memcpy(buffer+len, ivec, 8);
   for (i = 2; i < len; i += 8) {
     DES_ncbc_encrypt(buffer+i, buffer+i, 8,  &cwc->cwc_k1, &ivec, 1);
index 3ed96de89cf7e3c78c47d3d5e110eb116544f650..b0bf01a666bf12103f46280d272ee4256e7fdf8a 100644 (file)
@@ -101,6 +101,15 @@ uuid_init ( void )
   }
 }
 
+void
+uuid_random ( uint8_t *buf, size_t bufsize )
+{
+  if (read(fd, buf, bufsize) != bufsize) {
+    tvherror("uuid", "random failed: %s", strerror(errno));
+    exit(1);
+  }
+}
+
 /* Initialise binary */
 int
 uuid_init_bin ( tvh_uuid_t *u, const char *str )
index 45269d21d73278c11aa7ce237439c211b6fcdccf..a5867b06ba7dbb613bc2aaf93c8395e8c78e49cd 100644 (file)
@@ -36,6 +36,9 @@ typedef struct uuid {
 /* Initialise subsystem */
 void uuid_init ( void );
 
+/* Random bytes */
+void uuid_random ( uint8_t *buf, size_t bufsize );
+
 /* Initialise binary */
 int uuid_init_bin ( tvh_uuid_t *u, const char *str );