314 lines
13 KiB
C
314 lines
13 KiB
C
|
|
// CkPrng.h: interface for the CkPrng class.
|
||
|
|
//
|
||
|
|
//////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
// This header is generated for Chilkat 11.3.0
|
||
|
|
|
||
|
|
#define _CkVersion 11.3.0
|
||
|
|
|
||
|
|
#ifndef _CkPrng_H
|
||
|
|
#define _CkPrng_H
|
||
|
|
|
||
|
|
#include "chilkatDefs.h"
|
||
|
|
#include "CkString.h"
|
||
|
|
#include "CkMultiByteBase.h"
|
||
|
|
|
||
|
|
class CkByteData;
|
||
|
|
class CkBinData;
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
#if !defined(__sun__) && !defined(__sun)
|
||
|
|
#pragma pack (push, 8)
|
||
|
|
#endif
|
||
|
|
|
||
|
|
|
||
|
|
#undef Copy
|
||
|
|
|
||
|
|
// CLASS: CkPrng
|
||
|
|
class CK_VISIBLE_PUBLIC CkPrng : public CkMultiByteBase
|
||
|
|
{
|
||
|
|
private:
|
||
|
|
|
||
|
|
// Don't allow assignment or copying these objects.
|
||
|
|
CkPrng(const CkPrng &);
|
||
|
|
CkPrng &operator=(const CkPrng &);
|
||
|
|
|
||
|
|
public:
|
||
|
|
CkPrng(void);
|
||
|
|
virtual ~CkPrng(void);
|
||
|
|
|
||
|
|
static CkPrng *createNew(void);
|
||
|
|
static CkPrng *createNew2(int progLang);
|
||
|
|
void CK_VISIBLE_PRIVATE inject(void *impl);
|
||
|
|
|
||
|
|
// May be called when finished with the object to free/dispose of any
|
||
|
|
// internal resources held by the object.
|
||
|
|
void dispose(void);
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
// BEGIN PUBLIC INTERFACE
|
||
|
|
|
||
|
|
// ----------------------
|
||
|
|
// Properties
|
||
|
|
// ----------------------
|
||
|
|
// The name of the PRNG selected. Currently, the default and only possible value is
|
||
|
|
// fortuna . See the links below for information about the Fortuna PRNG.
|
||
|
|
//
|
||
|
|
// Note: Because fortuna is the only valid choice, assigning this property to a
|
||
|
|
// different value will always be ignored (until alternative PRNG algorithms are
|
||
|
|
// added in the future).
|
||
|
|
//
|
||
|
|
void get_PrngName(CkString &str);
|
||
|
|
// The name of the PRNG selected. Currently, the default and only possible value is
|
||
|
|
// fortuna . See the links below for information about the Fortuna PRNG.
|
||
|
|
//
|
||
|
|
// Note: Because fortuna is the only valid choice, assigning this property to a
|
||
|
|
// different value will always be ignored (until alternative PRNG algorithms are
|
||
|
|
// added in the future).
|
||
|
|
//
|
||
|
|
const char *prngName(void);
|
||
|
|
// The name of the PRNG selected. Currently, the default and only possible value is
|
||
|
|
// fortuna . See the links below for information about the Fortuna PRNG.
|
||
|
|
//
|
||
|
|
// Note: Because fortuna is the only valid choice, assigning this property to a
|
||
|
|
// different value will always be ignored (until alternative PRNG algorithms are
|
||
|
|
// added in the future).
|
||
|
|
//
|
||
|
|
void put_PrngName(const char *newVal);
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
// ----------------------
|
||
|
|
// Methods
|
||
|
|
// ----------------------
|
||
|
|
// Adds entropy to the PRNG (i.e. adds more seed material to the PRNG). Entropy can
|
||
|
|
// be obtained by calling GetEntropy, or the application might have its own sources
|
||
|
|
// for obtaining entropy. An application may continue to add entropy at desired
|
||
|
|
// intervals. How the entropy is used depends on the PRNG algorithm. For Fortuna,
|
||
|
|
// the entropy is added to the internal entropy pools and used when internal
|
||
|
|
// automatic reseeding occurs.
|
||
|
|
//
|
||
|
|
// An application may add non-random entropy for testing purposes. This allows for
|
||
|
|
// the reproduction of the same pseudo-random number sequence for testing and
|
||
|
|
// debugging purposes.
|
||
|
|
//
|
||
|
|
// The entropy bytes are passed in entropy using the binary encoding specified in
|
||
|
|
// encoding. Binary encodings can be hex , base64 , etc. See the link below for
|
||
|
|
// supported binary encodings.
|
||
|
|
//
|
||
|
|
bool AddEntropy(const char *entropy, const char *encoding);
|
||
|
|
|
||
|
|
|
||
|
|
// Adds entropy to the PRNG (i.e. adds more seed material to the PRNG). Entropy can
|
||
|
|
// be obtained by calling GetEntropy, or the application might have its own sources
|
||
|
|
// for obtaining entropy. An application may continue to add entropy at desired
|
||
|
|
// intervals. How the entropy is used depends on the PRNG algorithm. For Fortuna,
|
||
|
|
// the entropy is added to the internal entropy pools and used when internal
|
||
|
|
// automatic reseeding occurs.
|
||
|
|
//
|
||
|
|
// An application may add non-random entropy for testing purposes. This allows for
|
||
|
|
// the reproduction of the same pseudo-random number sequence for testing and
|
||
|
|
// debugging purposes.
|
||
|
|
//
|
||
|
|
bool AddEntropyBytes(CkByteData &entropy);
|
||
|
|
|
||
|
|
|
||
|
|
// Exports all accumulated entropy and returns it in a base64 encoded string.
|
||
|
|
// (Internally the entropy pools are re-hashed so that a hacker cannot determine
|
||
|
|
// the state of the PRNG even if the exported entropy was obtained.) When a system
|
||
|
|
// restarts it can import what was previously exported by calling ImportEntropy.
|
||
|
|
// This ensures an adequate amount of entropy is immediately available when first
|
||
|
|
// generating random bytes.
|
||
|
|
//
|
||
|
|
// For example, an application could persist the exported entropy to a database or
|
||
|
|
// file. When the application starts again, it could import the persisted entropy,
|
||
|
|
// add some entropy from a system source (via the GetEntropy/AddEntropy methods),
|
||
|
|
// and then begin generating random data.
|
||
|
|
//
|
||
|
|
bool ExportEntropy(CkString &outStr);
|
||
|
|
|
||
|
|
// Exports all accumulated entropy and returns it in a base64 encoded string.
|
||
|
|
// (Internally the entropy pools are re-hashed so that a hacker cannot determine
|
||
|
|
// the state of the PRNG even if the exported entropy was obtained.) When a system
|
||
|
|
// restarts it can import what was previously exported by calling ImportEntropy.
|
||
|
|
// This ensures an adequate amount of entropy is immediately available when first
|
||
|
|
// generating random bytes.
|
||
|
|
//
|
||
|
|
// For example, an application could persist the exported entropy to a database or
|
||
|
|
// file. When the application starts again, it could import the persisted entropy,
|
||
|
|
// add some entropy from a system source (via the GetEntropy/AddEntropy methods),
|
||
|
|
// and then begin generating random data.
|
||
|
|
//
|
||
|
|
const char *exportEntropy(void);
|
||
|
|
|
||
|
|
// Generates a random Firebase Push ID. See Firebase Unique Identifiers.
|
||
|
|
//
|
||
|
|
// References:
|
||
|
|
// 1: https://www.firebase.com/blog/2015-02-11-firebase-unique-identifiers.html
|
||
|
|
bool FirebasePushId(CkString &outStr);
|
||
|
|
|
||
|
|
// Generates a random Firebase Push ID. See Firebase Unique Identifiers.
|
||
|
|
//
|
||
|
|
// References:
|
||
|
|
// 1: https://www.firebase.com/blog/2015-02-11-firebase-unique-identifiers.html
|
||
|
|
const char *firebasePushId(void);
|
||
|
|
|
||
|
|
// Generates and returns numBytes random bytes in encoded string form. The binary
|
||
|
|
// encoding is specified by encoding, and can be hex , base64 , etc. (See the link
|
||
|
|
// below for supported binary encodings.)
|
||
|
|
//
|
||
|
|
// Important: If no entropy was explicitly added prior to first call to generate
|
||
|
|
// random bytes, then 32 bytes of entropy (from the system source, such as
|
||
|
|
// /dev/random) are automatically added to seed the PRNG.
|
||
|
|
//
|
||
|
|
bool GenRandom(int numBytes, const char *encoding, CkString &outStr);
|
||
|
|
|
||
|
|
// Generates and returns numBytes random bytes in encoded string form. The binary
|
||
|
|
// encoding is specified by encoding, and can be hex , base64 , etc. (See the link
|
||
|
|
// below for supported binary encodings.)
|
||
|
|
//
|
||
|
|
// Important: If no entropy was explicitly added prior to first call to generate
|
||
|
|
// random bytes, then 32 bytes of entropy (from the system source, such as
|
||
|
|
// /dev/random) are automatically added to seed the PRNG.
|
||
|
|
//
|
||
|
|
const char *genRandom(int numBytes, const char *encoding);
|
||
|
|
|
||
|
|
// Appends numBytes random bytes to bd.
|
||
|
|
//
|
||
|
|
// Important: If no entropy was explicitly added prior to first call to generate
|
||
|
|
// random bytes, then 32 bytes of entropy (from the system source, such as
|
||
|
|
// /dev/random) are automatically added to seed the PRNG.
|
||
|
|
//
|
||
|
|
bool GenRandomBd(int numBytes, CkBinData &bd);
|
||
|
|
|
||
|
|
|
||
|
|
// Generates and returns numBytes random bytes.
|
||
|
|
//
|
||
|
|
// Important: If no entropy was explicitly added prior to first call to generate
|
||
|
|
// random bytes, then 32 bytes of entropy (from the system source, such as
|
||
|
|
// /dev/random) are automatically added to seed the PRNG.
|
||
|
|
//
|
||
|
|
bool GenRandomBytes(int numBytes, CkByteData &outBytes);
|
||
|
|
|
||
|
|
|
||
|
|
// Reads real entropy bytes from a system entropy source and returns as an encoded
|
||
|
|
// string. On Linux/Unix based systems, including MAC OS X, this is accomplished by
|
||
|
|
// reading /dev/random. On Windows systems, it uses the Microsoft Cryptographic
|
||
|
|
// Service Provider's CryptGenRandom method.
|
||
|
|
//
|
||
|
|
// It is recommended that no more than 32 bytes of entropy should be retrieved to
|
||
|
|
// initially seed a PRNG. Larger amounts of entropy are fairly useless. However, an
|
||
|
|
// app is free to periodically add bits of entropy to a long-running PRNG as it
|
||
|
|
// sees fit.
|
||
|
|
//
|
||
|
|
// The encoding specifies the encoding to be used. It can be hex , base64 , or many
|
||
|
|
// other possibilities. See the link below.
|
||
|
|
//
|
||
|
|
bool GetEntropy(int numBytes, const char *encoding, CkString &outStr);
|
||
|
|
|
||
|
|
// Reads real entropy bytes from a system entropy source and returns as an encoded
|
||
|
|
// string. On Linux/Unix based systems, including MAC OS X, this is accomplished by
|
||
|
|
// reading /dev/random. On Windows systems, it uses the Microsoft Cryptographic
|
||
|
|
// Service Provider's CryptGenRandom method.
|
||
|
|
//
|
||
|
|
// It is recommended that no more than 32 bytes of entropy should be retrieved to
|
||
|
|
// initially seed a PRNG. Larger amounts of entropy are fairly useless. However, an
|
||
|
|
// app is free to periodically add bits of entropy to a long-running PRNG as it
|
||
|
|
// sees fit.
|
||
|
|
//
|
||
|
|
// The encoding specifies the encoding to be used. It can be hex , base64 , or many
|
||
|
|
// other possibilities. See the link below.
|
||
|
|
//
|
||
|
|
const char *getEntropy(int numBytes, const char *encoding);
|
||
|
|
// Reads real entropy bytes from a system entropy source and returns as an encoded
|
||
|
|
// string. On Linux/Unix based systems, including MAC OS X, this is accomplished by
|
||
|
|
// reading /dev/random. On Windows systems, it uses the Microsoft Cryptographic
|
||
|
|
// Service Provider's CryptGenRandom method.
|
||
|
|
//
|
||
|
|
// It is recommended that no more than 32 bytes of entropy should be retrieved to
|
||
|
|
// initially seed a PRNG. Larger amounts of entropy are fairly useless. However, an
|
||
|
|
// app is free to periodically add bits of entropy to a long-running PRNG as it
|
||
|
|
// sees fit.
|
||
|
|
//
|
||
|
|
// The encoding specifies the encoding to be used. It can be hex , base64 , or many
|
||
|
|
// other possibilities. See the link below.
|
||
|
|
//
|
||
|
|
const char *entropy(int numBytes, const char *encoding);
|
||
|
|
|
||
|
|
|
||
|
|
// Reads and returns real entropy bytes from a system entropy source. On Linux/Unix
|
||
|
|
// based systems, including MAC OS X, this is accomplished by reading /dev/random.
|
||
|
|
// On Windows systems, it uses the Microsoft Cryptographic Service Provider's
|
||
|
|
// CryptGenRandom method.
|
||
|
|
//
|
||
|
|
// It is recommended that no more than 32 bytes of entropy should be retrieved to
|
||
|
|
// initially seed a PRNG. Larger amounts of entropy are fairly useless. However, an
|
||
|
|
// app is free to periodically add bits of entropy to a long-running PRNG as it
|
||
|
|
// sees fit.
|
||
|
|
//
|
||
|
|
bool GetEntropyBytes(int numBytes, CkByteData &outBytes);
|
||
|
|
|
||
|
|
|
||
|
|
// Imports entropy from previously exported entropy. See the ExportEntropy method
|
||
|
|
// for more information.
|
||
|
|
bool ImportEntropy(const char *entropy);
|
||
|
|
|
||
|
|
|
||
|
|
// Generates and returns a random integer between low and high (inclusive). For
|
||
|
|
// example, if low is 4 and high is 8, then random integers in the range 4, 5, 6,
|
||
|
|
// 7, 8 are returned.
|
||
|
|
int RandomInt(int low, int high);
|
||
|
|
|
||
|
|
|
||
|
|
// Generates and returns a random password of a specified length. If mustIncludeDigit is
|
||
|
|
// true, the generated password will contain at least one digit (0-9). If upperAndLowercase is
|
||
|
|
// true, then generated password will contain both lowercase and uppercase
|
||
|
|
// USASCII chars (a-z and A-Z). If mustHaveOneOf is a non-empty string, it contains the set
|
||
|
|
// of non-alphanumeric characters, one of which must be included in the password.
|
||
|
|
// For example, mustHaveOneOf might be the string !@#$% . If excludeChars is a non-empty string, it
|
||
|
|
// contains chars that should be excluded from the password. A typical need would
|
||
|
|
// be to exclude chars that appear similar to others, such as i, l, 1, L, o, 0, O.
|
||
|
|
bool RandomPassword(int length, bool mustIncludeDigit, bool upperAndLowercase, const char *mustHaveOneOf, const char *excludeChars, CkString &outStr);
|
||
|
|
|
||
|
|
// Generates and returns a random password of a specified length. If mustIncludeDigit is
|
||
|
|
// true, the generated password will contain at least one digit (0-9). If upperAndLowercase is
|
||
|
|
// true, then generated password will contain both lowercase and uppercase
|
||
|
|
// USASCII chars (a-z and A-Z). If mustHaveOneOf is a non-empty string, it contains the set
|
||
|
|
// of non-alphanumeric characters, one of which must be included in the password.
|
||
|
|
// For example, mustHaveOneOf might be the string !@#$% . If excludeChars is a non-empty string, it
|
||
|
|
// contains chars that should be excluded from the password. A typical need would
|
||
|
|
// be to exclude chars that appear similar to others, such as i, l, 1, L, o, 0, O.
|
||
|
|
const char *randomPassword(int length, bool mustIncludeDigit, bool upperAndLowercase, const char *mustHaveOneOf, const char *excludeChars);
|
||
|
|
|
||
|
|
// Generates and returns a random string that may contain digits (0-9), lowercase
|
||
|
|
// ASCII (a-z) , and uppercase ASCII (A-Z). To include numeric digits, set bDigits
|
||
|
|
// equal to true. To include lowercase ASCII, set bLower equal to true. To
|
||
|
|
// include uppercase ASCII, set bUpper equal to true. The length of the string to
|
||
|
|
// be generated is specified by length.
|
||
|
|
bool RandomString(int length, bool bDigits, bool bLower, bool bUpper, CkString &outStr);
|
||
|
|
|
||
|
|
// Generates and returns a random string that may contain digits (0-9), lowercase
|
||
|
|
// ASCII (a-z) , and uppercase ASCII (A-Z). To include numeric digits, set bDigits
|
||
|
|
// equal to true. To include lowercase ASCII, set bLower equal to true. To
|
||
|
|
// include uppercase ASCII, set bUpper equal to true. The length of the string to
|
||
|
|
// be generated is specified by length.
|
||
|
|
const char *randomString(int length, bool bDigits, bool bLower, bool bUpper);
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
// END PUBLIC INTERFACE
|
||
|
|
|
||
|
|
|
||
|
|
};
|
||
|
|
#if !defined(__sun__) && !defined(__sun)
|
||
|
|
#pragma pack (pop)
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#endif
|