char lbuf[1024];
char *keyword, *value;
BIGNUM *p = NULL, *q = NULL, *g = NULL;
- int counter, counter2;
- unsigned long h, h2;
+ int counter=-1, counter2;
+ unsigned long h=-1, h2;
DSA *dsa=NULL;
- int dsa2, L, N;
+ int dsa2, L, N, part_test = 0;
const EVP_MD *md = NULL;
- int seedlen;
+ int seedlen=-1;
unsigned char seed[1024];
while(fgets(buf,sizeof buf,stdin) != NULL)
{
if (!parse_line(&keyword, &value, lbuf, buf))
{
+ if (p && q)
+ {
+ part_test = 1;
+ goto partial;
+ }
fputs(buf,stdout);
continue;
}
}
else if(!strcmp(keyword,"c"))
counter =atoi(buf+4);
- else if(!strcmp(keyword,"H"))
+ partial:
+ if(!strcmp(keyword,"H") || part_test)
{
- h = atoi(value);
- if (!p || !q || !g)
+ if (!part_test)
+ h = atoi(value);
+ if (!p || !q || (!g && !part_test))
{
fprintf(stderr, "Parse Error\n");
exit (1);
fprintf(stderr, "Parameter Generation error\n");
exit(1);
}
- if (BN_cmp(dsa->p, p) || BN_cmp(dsa->q, q) || BN_cmp(dsa->g, g)
- || (counter != counter2) || (h != h2))
+ if (BN_cmp(dsa->p, p) || BN_cmp(dsa->q, q) ||
+ (!part_test &&
+ ((BN_cmp(dsa->g, g) || (counter != counter2) || (h != h2)))))
printf("Result = F\n");
else
printf("Result = P\n");
g = NULL;
FIPS_dsa_free(dsa);
dsa = NULL;
+ if (part_test)
+ {
+ fputs(buf,stdout);
+ part_test = 0;
+ }
}
}
}
int n;
EVP_MD_CTX mctx;
DSA_SIG *sig;
- EVP_MD_CTX_init(&mctx);
+ FIPS_md_ctx_init(&mctx);
n=hex2bin(value,msg);
exit(1);
pbn("Y",dsa->pub_key);
- EVP_DigestInit_ex(&mctx, md, NULL);
- EVP_DigestUpdate(&mctx, msg, n);
+ FIPS_digestinit(&mctx, md);
+ FIPS_digestupdate(&mctx, msg, n);
sig = FIPS_dsa_sign_ctx(dsa, &mctx);
pbn("R",sig->r);
pbn("S",sig->s);
putc('\n',stdout);
- DSA_SIG_free(sig);
- EVP_MD_CTX_cleanup(&mctx);
+ FIPS_dsa_sig_free(sig);
+ FIPS_md_ctx_cleanup(&mctx);
}
}
if (dsa)
{
EVP_MD_CTX mctx;
int r;
- EVP_MD_CTX_init(&mctx);
+ FIPS_md_ctx_init(&mctx);
sig->s=hex2bn(value);
- EVP_DigestInit_ex(&mctx, md, NULL);
- EVP_DigestUpdate(&mctx, msg, n);
+ FIPS_digestinit(&mctx, md);
+ FIPS_digestupdate(&mctx, msg, n);
no_err = 1;
r = FIPS_dsa_verify_ctx(dsa, &mctx, sig);
no_err = 0;
- EVP_MD_CTX_cleanup(&mctx);
+ FIPS_md_ctx_cleanup(&mctx);
printf("Result = %c\n", r == 1 ? 'P' : 'F');
putc('\n',stdout);