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;
- }
-}
-
/**
*
*/
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);
}
}
+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 )
/* 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 );