]> git.saurik.com Git - apple/security.git/blob - SecurityTests/clxutils/threadTest/signVerify.cpp
Security-57336.1.9.tar.gz
[apple/security.git] / SecurityTests / clxutils / threadTest / signVerify.cpp
1 /*
2 * Simple sign/verify test
3 */
4 #include "testParams.h"
5 #include <Security/cssm.h>
6 #include <stdlib.h>
7 #include <stdio.h>
8 #include <time.h>
9 #include <utilLib/common.h>
10 #include <utilLib/cspwrap.h>
11 #include <strings.h>
12
13 /* for memory leak debug only, with only one thread running */
14 #define DO_PAUSE 0
15
16 #define SIG_ALG CSSM_ALGID_SHA1WithRSA
17 #define KEY_GEN_ALG CSSM_ALGID_RSA
18 #define KEY_SIZE CSP_RSA_KEY_SIZE_DEFAULT
19 #define PTEXT_SIZE 1024
20 #define USAGE_DEF "noUsage"
21
22 /* per-thread info */
23 typedef struct {
24 CSSM_KEY privKey;
25 CSSM_KEY pubKey;
26 CSSM_DATA ptext;
27 } TT_SignVfyParams;
28
29 int signVerifyInit(TestParams *testParams)
30 {
31 CSSM_BOOL pubIsRef;
32 CSSM_BOOL privIsRef;
33 CSSM_RETURN crtn;
34 TT_SignVfyParams *svParams;
35
36 /* flip coin for ref/blob key forms */
37 if(testParams->threadNum & 1) {
38 pubIsRef = CSSM_TRUE;
39 privIsRef = CSSM_FALSE;
40 }
41 else {
42 pubIsRef = CSSM_FALSE;
43 privIsRef = CSSM_TRUE;
44 }
45 svParams = (TT_SignVfyParams *)CSSM_MALLOC(sizeof(TT_SignVfyParams));
46 crtn = cspGenKeyPair(testParams->cspHand,
47 KEY_GEN_ALG,
48 USAGE_DEF,
49 strlen(USAGE_DEF),
50 KEY_SIZE,
51 &svParams->pubKey,
52 pubIsRef,
53 CSSM_KEYUSE_VERIFY,
54 CSSM_KEYBLOB_RAW_FORMAT_NONE,
55 &svParams->privKey,
56 privIsRef,
57 CSSM_KEYUSE_SIGN,
58 CSSM_KEYBLOB_RAW_FORMAT_NONE,
59 CSSM_FALSE);
60 if(crtn) {
61 printf("***Error generating key pair; aborting\n");
62 return 1;
63 }
64 svParams->ptext.Data = (uint8 *)CSSM_MALLOC(PTEXT_SIZE);
65 svParams->ptext.Length = PTEXT_SIZE;
66
67 testParams->perThread = svParams;
68 return 0;
69 }
70
71 int signVerify(TestParams *testParams)
72 {
73 TT_SignVfyParams *svParams = (TT_SignVfyParams *)testParams->perThread;
74 unsigned loop;
75 CSSM_RETURN crtn;
76 CSSM_DATA sig;
77
78 for(loop=0; loop<testParams->numLoops; loop++) {
79 if(testParams->verbose) {
80 printf("signVerify thread %d: loop %d\n",
81 testParams->threadNum, loop);
82 }
83 else if(!testParams->quiet) {
84 printChar(testParams->progressChar);
85 }
86 crtn = threadGetRandData(testParams, &svParams->ptext, PTEXT_SIZE);
87 if(crtn) {
88 return 1;
89 }
90 sig.Data = NULL;
91 sig.Length = 0;
92 crtn = cspSign(testParams->cspHand,
93 SIG_ALG,
94 &svParams->privKey,
95 &svParams->ptext,
96 &sig);
97 if(crtn) {
98 return 1;
99 }
100 crtn = cspSigVerify(testParams->cspHand,
101 SIG_ALG,
102 &svParams->pubKey,
103 &svParams->ptext,
104 &sig,
105 CSSM_OK);
106 if(crtn) {
107 return 1;
108 }
109 appFree(sig.Data, NULL);
110 #if DO_PAUSE
111 fpurge(stdin);
112 printf("Hit CR to proceed: ");
113 getchar();
114 #endif
115 }
116 return 0;
117 }
118