Sample code for 30+ languages & platforms
DataFlex

Generating Repeatable Random Data for Testing/Debugging

See more PRNG Examples

Demonstrates how to use the Fortuna PRNG to generate random-looking but repeatable non-random data for the purpose of testing and debugging.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoFortuna
    String sStrRandHex
    String sStrRandBase64
    String sStrRandBase58
    Handle hoFortuna2

    Move False To iSuccess

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    Move False To iSuccess

    Get Create (RefClass(cComChilkatPrng)) To hoFortuna
    If (Not(IsComObjectCreated(hoFortuna))) Begin
        Send CreateComObject of hoFortuna
    End

    // Normally an application would seed the PRNG with entropy from
    // some real random source.  However, sometimes we want the same
    // random sequence of bytes for testing and debugging purposes.
    // This a reason why GetEntropy and AddEntropy are two different methods.
    // An application could omit the call to GetEntropy, and instead pass
    // non-random data to AddEntropy. For example:

    // Seed the PRNG with non-entropy, so we get a repeatable sequence.
    // Note: AddEntropy can be called any number of times.
    Get ComAddEntropy Of hoFortuna "01020304" "hex" To iSuccess
    Get ComAddEntropy Of hoFortuna "hello world" "ascii" To iSuccess

    // Generate some random data:
    Get ComGenRandom Of hoFortuna 16 "hex" To sStrRandHex
    Get ComGenRandom Of hoFortuna 22 "base64" To sStrRandBase64
    Get ComGenRandom Of hoFortuna 32 "base58" To sStrRandBase58

    Showln "hex random bytes: " sStrRandHex
    Showln "base64 random bytes: " sStrRandBase64
    Showln "base58 random bytes: " sStrRandBase58

    // Try it again with a different object to verify that the same results are obtained:
    Get Create (RefClass(cComChilkatPrng)) To hoFortuna2
    If (Not(IsComObjectCreated(hoFortuna2))) Begin
        Send CreateComObject of hoFortuna2
    End

    Get ComAddEntropy Of hoFortuna2 "01020304" "hex" To iSuccess
    Get ComAddEntropy Of hoFortuna2 "hello world" "ascii" To iSuccess

    Get ComGenRandom Of hoFortuna2 16 "hex" To sStrRandHex
    Get ComGenRandom Of hoFortuna2 22 "base64" To sStrRandBase64
    Get ComGenRandom Of hoFortuna2 32 "base58" To sStrRandBase58

    Showln "hex random bytes: " sStrRandHex
    Showln "base64 random bytes: " sStrRandBase64
    Showln "base58 random bytes: " sStrRandBase58


End_Procedure