/** * Reseeds this random object, using the bytes contained in the given long seed. */ void SecureRandom::setSeed(int seed) { // All forward facing gear which manipulates internal state acquires the object lock MutexLock lock(getObjectLock()); ASSERT(m_impl.get() != nullptr); m_impl->setSeedImpl((const byte*)&seed, sizeof(seed)); }
/** * Generates a user-specified number of random bytes. */ void SecureRandom::nextBytes(byte bytes[], size_t size) { // All forward facing gear which manipulates internal state acquires the object lock MutexLock lock(getObjectLock()); ASSERT(m_impl.get() != nullptr); m_impl->nextBytesImpl(bytes, size); }
/** * Returns the security level associated with the SecureRandom object. Used * by KeyGenerator to determine the appropriate key size for init. */ unsigned int SecureRandom::getSecurityLevel() const { // All forward facing gear which manipulates internal state acquires the object lock MutexLock lock(getObjectLock()); ASSERT(m_impl.get() != nullptr); return m_impl->getSecurityLevelImpl(); }
/** * Returns the name of the algorithm implemented by this SecureRandom object. */ NarrowString SecureRandom::getAlgorithm() const { // All forward facing gear which manipulates internal state acquires the object lock MutexLock lock(getObjectLock()); ASSERT(m_impl.get() != nullptr); return m_impl->getAlgorithmImpl(); }
/** * Returns the given number of seed bytes, computed using the seed generation algorithm that this class uses to seed itself. */ SecureByteArray SecureRandom::generateSeed(unsigned int numBytes) { // All forward facing gear which manipulates internal state acquires the object lock MutexLock lock(getObjectLock()); ASSERT(m_impl.get() != nullptr); return m_impl->generateSeedImpl(numBytes); }
/** * Reseeds this random object. */ void SecureRandom::setSeed(const byte seed[], size_t size) { // All forward facing gear which manipulates internal state acquires the object lock MutexLock lock(getObjectLock()); // No need to lock RandomPool - it provides its own RandomPool::GetSharedInstance().Reseed(); // Reseed the SecureRandom object ASSERT(m_impl.get() != nullptr); m_impl->setSeedImpl(seed, size); }
// Adds an LP to the schedule queue, and returns the new mapped objId for it int ThreadedTimeWarpMultiSetLTSF::addLP(int oldLockOwner) { if( scheduleQScheme == "MULTISET" ) { lowestObjectPosition.push_back(scheduleQueue->end()); } else if ( scheduleQScheme == "LADDERQ" ) { lowestLadderObjectPosition.push_back(ladderQ->end()); } else if( scheduleQScheme == "SPLAYTREE" ) { lowestLadderObjectPosition.push_back(splayTree->end()); } else { cout << "Invalid schedule queue scheme" << endl; } objectStatusLock.push_back(new LockState()); if (oldLockOwner != -1) { // -1 if not locked getObjectLock(oldLockOwner, objectCount); cout << "Obtaining object lock on " << objectCount << endl; } // Expand array sizes return ++objectCount; }
const Event* ThreadedTimeWarpMultiSetLTSF::peekIt(int threadId) { const Event* ret = NULL; this->getScheduleQueueLock(threadId); if( scheduleQScheme == "MULTISET" ) { if (scheduleQueue->size() > 0) { utils::debug<<"( "<< threadId << " T ) Peeking from Schedule Queue"<<endl; ret = *(scheduleQueue->begin()); //cout << "T" << threadId << ": Getting event with timestamp " << ret->getReceiveTime().getApproximateIntTime() << endl; unsigned int objId = LTSFObjId[ret->getReceiver().getSimulationObjectID()][0]; utils::debug <<" ( "<< threadId << ") Locking the Object " <<objId <<endl; getObjectLock(threadId, objId); //remove the object out of schedule scheduleQueue->erase(scheduleQueue->begin()); //set the indexer/pointer to NULL lowestObjectPosition[objId] = scheduleQueue->end(); /* utils::debug << "( " << mySimulationManager->getSimulationManagerID() << " ) Object - " << objId << " is removed out for schedule by the thread - " << threadId << "\n";*/ } } else if ( scheduleQScheme == "LADDERQ" ) { if( !ladderQ->empty() ) { utils::debug<<"( "<< threadId << " T ) Peeking from Schedule Queue"<<endl; ret = ladderQ->dequeue(); if(ret == NULL) { cout << "dequeue() func returned NULL" << endl; this->releaseScheduleQueueLock(threadId); return ret; } unsigned int newMinTime = ret->getReceiveTime().getApproximateIntTime(); if ( newMinTime < minReceiveTime ) cout << "Event received out of order" << endl; unsigned int objId = LTSFObjId[ret->getReceiver().getSimulationObjectID()][0]; utils::debug <<" ( "<< threadId << ") Locking the Object " <<objId <<endl; this->getObjectLock(threadId, objId); //set the indexer/pointer to NULL lowestLadderObjectPosition[objId] = ladderQ->end(); } } else if( scheduleQScheme == "SPLAYTREE" ) { if( splayTree->peekEvent() ) { utils::debug<<"( "<< threadId << " T ) Peeking from Schedule Queue"<<endl; if(NULL == (ret = splayTree->getEvent()) ) { cout << "getEvent() func returned NULL" << endl; this->releaseScheduleQueueLock(threadId); return ret; } unsigned int objId = LTSFObjId[ret->getReceiver().getSimulationObjectID()][0]; utils::debug <<" ( "<< threadId << ") Locking the Object " <<objId <<endl; this->getObjectLock(threadId, objId); //set the indexer/pointer to NULL lowestLadderObjectPosition[objId] = splayTree->end(); } } else { cout << "Invalid schedule queue scheme" << endl; } this->releaseScheduleQueueLock(threadId); return ret; }