pp=BN_new();
do_hex2bn(&pp,value);
- fprintf(out, "result= %c\n",
+ fprintf(out, "result= %c" RESP_EOL,
BN_is_prime_ex(pp,20,NULL,NULL) ? 'P' : 'F');
}
}
int idx, unsigned char *seed_out,
int *counter_ret, unsigned long *h_ret, BN_GENCB *cb);
+int dsa_paramgen_check_g(DSA *dsa);
+
static void pqg(FILE *in, FILE *out)
{
char buf[1024];
fputs(buf,out);
continue;
}
- fputs(buf,out);
+ if (strcmp(keyword, "Num"))
+ fputs(buf,out);
if(!strcmp(keyword,"[mod"))
{
if (!parse_mod(value, &dsa2, &L, &N, &md))
seed, M_EVP_MD_size(md), out, 0);
if (!dsa2)
{
- fprintf(out, "c = %d\n",counter);
- fprintf(out, "H = %lx\n\n",h);
+ fprintf(out, "c = %d" RESP_EOL, counter);
+ fprintf(out, "H = %lx" RESP_EOL RESP_EOL,h);
}
else
- fputs("\n", out);
+ {
+ fprintf(out, "counter = %d" RESP_EOL RESP_EOL, counter);
+ }
}
}
else if(!strcmp(keyword,"P"))
q=hex2bn(value);
else if(!strcmp(keyword,"domain_parameter_seed"))
seedlen = hex2bin(value, seed);
+ else if(!strcmp(keyword,"firstseed"))
+ seedlen = hex2bin(value, seed);
+ else if(!strcmp(keyword,"pseed"))
+ seedlen += hex2bin(value, seed + seedlen);
+ else if(!strcmp(keyword,"qseed"))
+ seedlen += hex2bin(value, seed + seedlen);
else if(!strcmp(keyword,"index"))
{
idxlen = hex2bin(value, idtmp);
q=hex2bn(value);
else if(!strcmp(keyword,"G"))
g=hex2bn(value);
+ else if(!strcmp(keyword,"firstseed"))
+ seedlen = hex2bin(value, seed);
+ else if(!strcmp(keyword,"pseed"))
+ seedlen += hex2bin(value, seed + seedlen);
+ else if(!strcmp(keyword,"qseed"))
+ seedlen += hex2bin(value, seed + seedlen);
else if(!strcmp(keyword,"Seed")
|| !strcmp(keyword,"domain_parameter_seed"))
{
else if(!strcmp(keyword,"c"))
counter = atoi(buf+4);
partial:
- if(!strcmp(keyword,"H") || part_test)
+ if (part_test && idx < 0 && h == 0 && g)
+ {
+ dsa = FIPS_dsa_new();
+ dsa->p = BN_dup(p);
+ dsa->q = BN_dup(q);
+ dsa->g = BN_dup(g);
+ if (dsa_paramgen_check_g(dsa))
+ fprintf(out, "Result = P" RESP_EOL);
+ else
+ fprintf(out, "Result = F" RESP_EOL);
+ BN_free(p);
+ BN_free(q);
+ BN_free(g);
+ p = NULL;
+ q = NULL;
+ g = NULL;
+ FIPS_dsa_free(dsa);
+ dsa = NULL;
+ part_test = 0;
+ }
+ else if(!strcmp(keyword,"H") || part_test)
{
if (!part_test)
h = atoi(value);
if (idx >= 0)
{
if (BN_cmp(dsa->g, g))
- fprintf(out, "Result = F\n");
+ fprintf(out, "Result = F" RESP_EOL);
else
- fprintf(out, "Result = P\n");
+ fprintf(out, "Result = P" RESP_EOL);
}
else if (BN_cmp(dsa->p, p) || BN_cmp(dsa->q, q) ||
(!part_test &&
((BN_cmp(dsa->g, g) || (counter != counter2) || (h != h2)))))
- fprintf(out, "Result = F\n");
+ fprintf(out, "Result = F" RESP_EOL);
else
- fprintf(out, "Result = P\n");
+ fprintf(out, "Result = P" RESP_EOL);
BN_free(p);
BN_free(q);
BN_free(g);
paramcheck = -1;
}
if (paramcheck != 1)
- fprintf(out, "Result = F\n");
+ fprintf(out, "Result = F" RESP_EOL);
else
{
if (!BN_mod_exp(Y2, g, X, p, ctx) || BN_cmp(Y2, Y))
- fprintf(out, "Result = F\n");
+ fprintf(out, "Result = F" RESP_EOL);
else
- fprintf(out, "Result = P\n");
+ fprintf(out, "Result = P" RESP_EOL);
}
BN_free(X);
BN_free(Y);
do_bn_print_name(out, "P",dsa->p);
do_bn_print_name(out, "Q",dsa->q);
do_bn_print_name(out, "G",dsa->g);
- fputs("\n", out);
+ fputs(RESP_EOL, out);
while(n--)
{
do_bn_print_name(out, "X",dsa->priv_key);
do_bn_print_name(out, "Y",dsa->pub_key);
- fputs("\n", out);
+ fputs(RESP_EOL, out);
}
}
}
do_bn_print_name(out, "P",dsa->p);
do_bn_print_name(out, "Q",dsa->q);
do_bn_print_name(out, "G",dsa->g);
- fputs("\n", out);
+ fputs(RESP_EOL, out);
}
else if(!strcmp(keyword,"Msg"))
{
do_bn_print_name(out, "R",sig->r);
do_bn_print_name(out, "S",sig->s);
- fputs("\n", out);
+ fputs(RESP_EOL, out);
FIPS_dsa_sig_free(sig);
FIPS_md_ctx_cleanup(&mctx);
}
no_err = 0;
FIPS_md_ctx_cleanup(&mctx);
- fprintf(out, "Result = %c\n\n", r == 1 ? 'P' : 'F');
+ fprintf(out, "Result = %c" RESP_EOL RESP_EOL, r == 1 ? 'P' : 'F');
}
}
}