#include "fips_utl.h"
-static const EVP_MD *parse_md(char *line)
+static const EVP_MD *eparse_md(char *line)
{
char *p;
if (line[0] != '[' || line[1] != 'E')
unsigned char chash[EVP_MAX_MD_SIZE];
int Zlen;
ec = EC_KEY_new();
+ EC_KEY_set_flags(ec, EC_FLAG_COFACTOR_ECDH);
EC_KEY_set_group(ec, group);
peerkey = make_peer(group, cx, cy);
if (rhash == NULL)
EC_POINT_free(peerkey);
}
-int main(int argc,char **argv)
+#ifdef FIPS_ALGVS
+int fips_ecdhvs_main(int argc, char **argv)
+#else
+int main(int argc, char **argv)
+#endif
{
char **args = argv + 1;
int argn = argc - 1;
EC_GROUP *group = NULL;
char *keyword = NULL, *value = NULL;
int do_verify = -1, exout = 0;
+ int rv = 1;
int curve_nids[5] = {0,0,0,0,0};
int param_set = -1;
if (group)
EC_GROUP_free(group);
group = EC_GROUP_new_by_curve_name(nid);
+ if (!group)
+ {
+ fprintf(stderr, "ERROR: unsupported curve %s\n", buf + 1);
+ return 1;
+ }
}
if (strlen(buf) > 6 && !strncmp(buf, "[E", 2))
{
- md = parse_md(buf);
+ md = eparse_md(buf);
if (md == NULL)
goto parse_error;
continue;
md, rhash, rhashlen);
}
}
- return 0;
+ rv = 0;
parse_error:
- fprintf(stderr, "Error Parsing request file\n");
- exit(1);
+ if (id)
+ BN_free(id);
+ if (ix)
+ BN_free(ix);
+ if (iy)
+ BN_free(iy);
+ if (cx)
+ BN_free(cx);
+ if (cy)
+ BN_free(cy);
+ if (group)
+ EC_GROUP_free(group);
+ if (in && in != stdin)
+ fclose(in);
+ if (out && out != stdout)
+ fclose(out);
+ if (rv)
+ fprintf(stderr, "Error Parsing request file\n");
+ return rv;
}
#endif