]>
git.saurik.com Git - apple/securityd.git/blob - src/entropy.h
   2  * Copyright (c) 2000-2004 Apple Computer, Inc. All Rights Reserved. 
   4  * @APPLE_LICENSE_HEADER_START@ 
   6  * This file contains Original Code and/or Modifications of Original Code 
   7  * as defined in and that are subject to the Apple Public Source License 
   8  * Version 2.0 (the 'License'). You may not use this file except in 
   9  * compliance with the License. Please obtain a copy of the License at 
  10  * http://www.opensource.apple.com/apsl/ and read it before using this 
  13  * The Original Code and all software distributed under the License are 
  14  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  15  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  16  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
  17  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  18  * Please see the License for the specific language governing rights and 
  19  * limitations under the License. 
  21  * @APPLE_LICENSE_HEADER_END@ 
  26 // entropy - periodical to collect and seed entropy into /dev/random 
  31 #include <security_utilities/machserver.h> 
  32 #include <security_utilities/timeflow.h> 
  33 #include <security_utilities/devrandom.h> 
  35 using namespace Security
; 
  36 using MachPlusPlus::MachServer
; 
  40 // A (one-off) timer object that manages system entropy 
  42 class EntropyManager 
: public MachServer::Timer
, private DevRandomGenerator 
{ 
  43     // all the parameters you ever (should) want to change :-) 
  44     static const int collectInterval 
= 600; // collect every 10 minutes 
  45     static const int updateInterval 
= 3600 * 6; // update file every 6 hours 
  46     static const int timingsToCollect 
= 40; // how many timings? 
  49         EntropyManager(MachPlusPlus::MachServer 
&srv
, const char *entropyFile
); 
  53         MachPlusPlus::MachServer        
&server
;                // to which we do setTimer() 
  56     string mEntropyFilePath
;                    // absolute path to entropy file 
  57     Time::Absolute mNextUpdate
;                 // next time for entropy file update 
  59     void collectEntropy();                              // collect system timings and seed RNG 
  60     void updateEntropyFile();                   // update entropy file from RNG if it's time 
  62     static const size_t entropyFileSize 
= 20;   // bytes (effectively one SHA-1 worth)