Changeset 481 for trunk/src/sh_entropy.c


Ignore:
Timestamp:
Jul 18, 2015, 5:06:52 PM (6 years ago)
Author:
katerina
Message:

Enhancements and fixes for tickets #374, #375, #376, #377, #378, and #379.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sh_entropy.c

    r473 r481  
    300300        {
    301301          m_count = sl_read_timeout_fd(fd2, nbuf, nbytes,
    302                                        timeout_val, SL_FALSE);
     302                                       timeout_val, S_FALSE);
    303303          if (m_count < 0)
    304304            m_count = 0;
     
    337337
    338338#ifdef NAME_OF_DEV_URANDOM
    339   m_count = read_mbytes (  1, NAME_OF_DEV_RANDOM, nbuf, nbytes);
     339  m_count = read_mbytes ( 10, NAME_OF_DEV_URANDOM, nbuf, nbytes);
    340340#else
    341   m_count = read_mbytes (300, NAME_OF_DEV_RANDOM, nbuf, nbytes);
     341  m_count = read_mbytes (300, NAME_OF_DEV_RANDOM,  nbuf, nbytes);
    342342#endif
    343343
     
    346346#ifdef NAME_OF_DEV_URANDOM
    347347      sh_error_handle (SH_ERR_NOTICE, FIL__, __LINE__, EIO, MSG_NODEV,
    348                        (long) sh.real.uid, NAME_OF_DEV_RANDOM);
     348                       (long) sh.real.uid, NAME_OF_DEV_URANDOM);
    349349#else
    350350      sh_error_handle ((-1), FIL__, __LINE__, EIO, MSG_NODEV,
     
    353353    }
    354354
    355 #ifdef NAME_OF_DEV_URANDOM
     355#ifdef NAME_OF_DEV_RANDOM
    356356  if (m_count < nbytes)
    357357    {
    358       i = read_mbytes(30, NAME_OF_DEV_URANDOM, &nbuf[m_count], nbytes-m_count);
     358      i = read_mbytes(300, NAME_OF_DEV_RANDOM, &nbuf[m_count], nbytes-m_count);
    359359      if (i == 0)
    360360        sh_error_handle ((-1), FIL__, __LINE__, EIO, MSG_NODEV,
    361                          (long) sh.real.uid, NAME_OF_DEV_URANDOM);
     361                         (long) sh.real.uid, NAME_OF_DEV_RANDOM);
    362362      else
    363363        m_count += i;
     
    601601      /* don't leak file descriptors
    602602       */
    603       sh_unix_closeall (3, -1, SL_TRUE); /* in child process */
     603      sh_unix_closeall (3, -1, S_TRUE); /* in child process */
    604604
    605605      /* zero priv info
     
    942942    }
    943943
     944#ifdef HAVE_GETTIMEOFDAY
     945  {
     946    unsigned short tseed[3];
     947
     948    gettimeofday(&tv, 0);
     949    tseed[0] = tv.tv_sec & 0xFFFF;
     950    tseed[1] = tv.tv_usec & 0xFFFF;
     951    tseed[2] = (tv.tv_sec ^ tv.tv_usec) >> 16;
     952    keybuf = (char *) sh_tiger_hash_uint32 ((char *) tseed,
     953                                            TIGER_DATA, sizeof(tseed),
     954                                            kbuf, KEY_BYT/sizeof(UINT32));
     955    memset(addbuf, '\0', sizeof(addbuf));
     956    for (i = 0; i < KEY_BYT; ++i)
     957      {
     958        addbuf[i]         = keybuf[i];
     959        addbuf[i+KEY_BYT] = skey->poolv[i];
     960      }
     961    SH_MUTEX_LOCK_UNSAFE(mutex_skey);
     962    for (i = 0; i < KEY_BYT; ++i)
     963      skey->poolv[i] ^= keybuf[i];
     964    SH_MUTEX_UNLOCK_UNSAFE(mutex_skey);
     965  }
     966#endif
     967
    944968  if (bufcount > 0)
    945969    {
     
    10021026  char                 bufy[9 * sizeof(UINT32) + 1];
    10031027  int                  status;
    1004 
    1005   memset(skey->poolv, '\0', KEY_BYT);
    1006 
    1007   status = sh_entropy (24, bufx);
    1008   CuAssertTrue(tc, 0 == status);
    1009 
    1010   memset(skey->poolv, '\0', KEY_BYT);
    1011 
    1012   status = sh_entropy (24, bufy);
    1013   CuAssertTrue(tc, 0 == status);
    1014 
    1015   CuAssertTrue(tc, 0 != memcmp(bufx, bufy, 24));
     1028  int                  count;
     1029
     1030  for (count = 0; count < 20; ++count)
     1031    {
     1032      memset(skey->poolv, '\0', KEY_BYT);
     1033      skey->poolc = 0;
     1034
     1035      status = sh_entropy (24, bufx);
     1036      CuAssertTrue(tc, 0 == status);
     1037     
     1038      memset(skey->poolv, '\0', KEY_BYT);
     1039      skey->poolc = 0;
     1040
     1041      status = sh_entropy (24, bufy);
     1042      CuAssertTrue(tc, 0 == status);
     1043     
     1044      CuAssertTrue(tc, 0 != memcmp(bufx, bufy, 24));
     1045    }
    10161046}
    10171047#endif
Note: See TracChangeset for help on using the changeset viewer.