tizen id: use rand() instead of /dev/random 47/77147/1 accepted/tizen/common/20160703.125952 accepted/tizen/ivi/20160629.070549 accepted/tizen/mobile/20160629.070544 accepted/tizen/tv/20160629.070542 accepted/tizen/wearable/20160629.070524 submit/tizen/20160629.012346
authortaeyoung <ty317.kim@samsung.com>
Wed, 29 Jun 2016 00:43:05 +0000 (09:43 +0900)
committertaeyoung <ty317.kim@samsung.com>
Wed, 29 Jun 2016 00:43:05 +0000 (09:43 +0900)
- /dev/random is powered from actual entropy
  gathered by the environment. If the internal
  entropy pool is exhausted, it is need to wait
  for a while to get random value from /dev/random.

- Not to wait to read random value, rand() is used.

Change-Id: Iee6d3e44501a09ac00e6f229fe1f8ad133373868
Signed-off-by: taeyoung <ty317.kim@samsung.com>
src/tizenid/tizenid.c

index 46046fb..56fccd2 100755 (executable)
 
 #define KEY_MAX 20
 
-#define RANDOM_PATH                    "/dev/random"
+#define CHAR_POOL "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.-#'?!"
 
 static int get_pw_key(char *pw, unsigned int len)
 {
-       char key[KEY_MAX];/* 128 bit */
-       int fd, ret, i, key_len;
+       int i, val, poolsize;
+       char *charpool = CHAR_POOL;
 
        if (!pw)
                return -EINVAL;
 
-       fd = open(RANDOM_PATH, O_RDONLY);
-       if (fd == -1) {
-               _E("Failed to open (%s, errno:%d)", RANDOM_PATH, errno);
-               return -errno;
-       }
+       poolsize = strlen(charpool);
+       srand(time(NULL));
 
-       key_len = sizeof(key);
-       ret = read(fd, key, key_len);
-       close(fd);
-       if (ret == -1) {
-               _E("Failed to read (%s, errno:%d)", RANDOM_PATH, errno);
-               return -errno;
-       }
-
-       for (i = 0 ; i < len - 1 ; i++) {
-               if (i >= key_len)
-                       break;
-               pw[i] = key[i];
+       for (i = 0 ; i < len ; i++) {
+               val = rand() % poolsize;
+               pw[i] = *(charpool + val);
        }
-       pw[i] = '\0';
 
        return 0;
 }