~siretart/cryptsetup/debian

« back to all changes in this revision

Viewing changes to luks/random.c

  • Committer: Reinhard Tartler
  • Date: 2008-05-25 17:39:22 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: siretart@tauware.de-20080525173922-popbnh1gtbt3rxis
merge new upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
11
11
#include <stdio.h>
12
12
#include <unistd.h>
13
13
 
 
14
static int randomfd = -1; 
 
15
 
 
16
int openRandom() {
 
17
    if(randomfd == -1) 
 
18
        randomfd = open("/dev/urandom", O_RDONLY);
 
19
    return randomfd;
 
20
}
 
21
 
 
22
/* This method leaks a file descriptor that can be obtained by calling
 
23
   closeRandom */
14
24
int getRandom(char *buf, size_t len)
15
25
{
16
 
        int randomfd, r = 0, index = 0;
17
 
 
18
 
        //FIXME Run a FIPS test for the random device or include
19
 
        // PRNG if urandom not avail.
20
 
        
21
 
        randomfd = open("/dev/urandom", O_RDONLY);
22
 
        if(-1 == randomfd) {
23
 
                perror("getRandom:");
24
 
                return -EINVAL;
25
 
        }
26
 
        while(len) {
27
 
                int r;
28
 
                r = read(randomfd,buf,len);
29
 
                if (-1 == r && errno != -EINTR) {       
30
 
                        perror("read: "); return -EINVAL;
31
 
                }
32
 
                len-= r; buf += r;
33
 
        }
 
26
    int r = 0;
 
27
 
 
28
    if(openRandom() == -1) {
 
29
        perror("getRandom:");
 
30
        return -EINVAL;
 
31
    }
 
32
    while(len) {
 
33
        int r;
 
34
        r = read(randomfd,buf,len);
 
35
        if (-1 == r && errno != -EINTR) {       
 
36
            perror("read: "); return -EINVAL;
 
37
        }
 
38
        len-= r; buf += r;
 
39
    }
 
40
    return r;
 
41
}
 
42
 
 
43
void closeRandom() {
 
44
    if(randomfd != -1) {
34
45
        close(randomfd);
35
 
 
36
 
        return r;
 
46
        randomfd = -1;
 
47
    }
37
48
}