]> git.saurik.com Git - apple/security.git/blobdiff - SecurityTests/clxutils/threadTest/cspRand.cpp
Security-57031.1.35.tar.gz
[apple/security.git] / SecurityTests / clxutils / threadTest / cspRand.cpp
diff --git a/SecurityTests/clxutils/threadTest/cspRand.cpp b/SecurityTests/clxutils/threadTest/cspRand.cpp
new file mode 100644 (file)
index 0000000..ce896ec
--- /dev/null
@@ -0,0 +1,63 @@
+/* cspRand.cpp */
+
+#include "testParams.h"
+#include <utilLib/common.h>    
+#include <stdlib.h>
+#include <stdio.h>
+#include <security_utilities/threading.h>
+
+#define INNER_LOOPS            100
+#define MAX_SIZE               256
+
+int cspRandInit(TestParams *testParams)
+{
+       return 0;
+}
+
+int cspRand(TestParams *testParams)
+{
+       unsigned                loopNum;
+       unsigned                iLoop;
+       unsigned char   randData[MAX_SIZE];
+       
+       for(loopNum=0; loopNum<testParams->numLoops; loopNum++) {
+               
+               if(!testParams->quiet) {
+                       printChar(testParams->progressChar);
+               }
+               
+               /* pick a rand size for this outer loop using the global devRand */
+               unsigned char randSize;
+               CSSM_DATA cdata;
+               cdata.Data = &randSize;
+               cdata.Length = 1;
+               threadGetRandData(testParams, &cdata, 1);
+               if(randSize == 0) {
+                       randSize = 1;
+               }
+               for(iLoop=0; iLoop<INNER_LOOPS; iLoop++) {
+                       CSSM_CC_HANDLE  rngHand;
+                       CSSM_RETURN crtn;
+                       
+                       crtn = CSSM_CSP_CreateRandomGenContext(testParams->cspHand,
+                               CSSM_ALGID_APPLE_YARROW,
+                               NULL,                           /* seed */
+                               randSize,
+                               &rngHand);
+                       if(crtn) {
+                               printError("CSSM_CSP_CreateRandomGenContext", crtn);
+                               return 1;
+                       }
+                       cdata.Data = randData;
+                       cdata.Length = randSize;
+                       crtn = CSSM_GenerateRandom(rngHand, &cdata);
+                       if(crtn) {
+                               printError("CSSM_GenerateRandom", crtn);
+                               return 1;
+                       }
+                       CSSM_DeleteContext(rngHand);
+               }
+       }
+       return 0;
+}
+