/* Copyright (c) 1998 Apple Computer, Inc. All rights reserved. * * NOTICE: USE OF THE MATERIALS ACCOMPANYING THIS NOTICE IS SUBJECT * TO THE TERMS OF THE SIGNED "FAST ELLIPTIC ENCRYPTION (FEE) REFERENCE * SOURCE CODE EVALUATION AGREEMENT" BETWEEN APPLE COMPUTER, INC. AND THE * ORIGINAL LICENSEE THAT OBTAINED THESE MATERIALS FROM APPLE COMPUTER, * INC. ANY USE OF THESE MATERIALS NOT PERMITTED BY SUCH AGREEMENT WILL * EXPOSE YOU TO LIABILITY. *************************************************************************** * * NSRandomNumberGenerator.m * * Revision History * ---------------- * 28 Mar 97 Doug Mitchell at Apple * Rewrote using feeRandom module. * ?? 96 Blaine Garst at NeXT * Created. */ /* * Note: out _priv ivar is actually a feeRand pointer. */ #import #import "NSRandomNumberGenerator.h" #import "feeRandom.h" #import "falloc.h" @implementation NSRandomNumberGenerator - init { if(_priv == NULL) { _priv = feeRandAlloc(); } /* * else no need to re-init */ return self; } - initWithSeed:(unsigned)seed { if(_priv != NULL) { /* * Free & re-init to use new seed */ feeRandFree(_priv); } _priv = feeRandAllocWithSeed(seed); return self; } - (unsigned)nextNumber { if(_priv == NULL) { return 0; } return feeRandNextNum(_priv); } - (unsigned)nextNumberInRange:(NSRange)range { if(_priv == NULL) { return 0; } return range.location + ([self nextNumber] % range.length); } - (NSData *)randomDataWithLength:(unsigned)l { unsigned char *cp; if(_priv == NULL) { return nil; } cp = fmalloc(l); feeRandBytes(_priv, cp, l); return [NSData dataWithBytesNoCopy:cp length:l]; } @end