1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
/*
* Dibbler - a portable DHCPv6
*
* author: Michal Kowalczuk <michal@kowalczuk.eu>
* changes: Tomasz Mrugalski <thomson(at)klub.com.pl>
*
* released under GNU GPL v2 only licence
*
* $Id: SrvOptKeyGeneration.cpp,v 1.3 2008-08-29 00:07:36 thomson Exp $
*
* $Log: SrvOptKeyGeneration.cpp,v $
* Revision 1.3 2008-08-29 00:07:36 thomson
* Temporary license change(GPLv2 or later -> GPLv2 only)
*
* Revision 1.2 2008-06-18 21:56:39 thomson
* Auth options cleanup.
*
* Revision 1.1 2008-02-25 20:42:46 thomson
* Missing new AUTH files added.
*
*
*/
#include "SrvOptKeyGeneration.h"
#include "OptAAAAuthentication.h"
#include "Msg.h"
#include "Logger.h"
TSrvOptKeyGeneration::TSrvOptKeyGeneration(char * buf, int n, TMsg* parent)
:TOptKeyGeneration(buf, n, parent) {
}
#define WATCHDOG_RANDOM 10000
TSrvOptKeyGeneration::TSrvOptKeyGeneration(TSrvMsg* parent)
:TOptKeyGeneration(parent) {
uint32_t spi;
int watchdog = WATCHDOG_RANDOM;
{
do {
spi = (uint32_t)rand();
if (!--watchdog) {
Log(Error) << "Auth: Unable to generate unique SPI after " << WATCHDOG_RANDOM << " tries." << LogEnd;
return;
}
} while (this->Parent->AuthKeys->Get(spi));
PrintHex("Auth:generated SPI: ", (char*)&spi, 4);
this->Parent->setSPI(spi);
}
setLifetime(parent->SrvCfgMgr->getAuthLifetime());
setAlgorithmId(parent->DigestType);
unsigned kgnlen = parent->SrvCfgMgr->getAuthKeyGenNonceLen();
char *kgn = new char[kgnlen];
for (unsigned i = 0; i < kgnlen; i++)
kgn[i] = (char)(rand() % 256);
this->Parent->setKeyGenNonce(kgn, kgnlen);
delete kgn;
parent->setAuthInfoKey();
}
bool TSrvOptKeyGeneration::doDuties()
{
return false;
}
|