615eff12e0e3565c52758292e10080a25d872941William King/*
bd911976d51f102751848568ccf56592fd5f6d77Tinderbox User * Copyright (C) 1999-2001, 2004, 2005, 2007-2009, 2011-2014, 2016, 2017 Internet Systems Consortium, Inc. ("ISC")
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence *
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * This Source Code Form is subject to the terms of the Mozilla Public
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * License, v. 2.0. If a copy of the MPL was not distributed with this
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * file, You can obtain one at http://mozilla.org/MPL/2.0/.
615eff12e0e3565c52758292e10080a25d872941William King */
615eff12e0e3565c52758292e10080a25d872941William King
207cee019eb5cbbe7c905f7c52f7b5d11f8c0305Automatic Updater/* $Id: t_dst.c,v 1.60 2011/03/17 23:47:29 tbox Exp $ */
9c3531d72aeaad6c5f01efe6a1c82023e1379e4dDavid Lawrence
615eff12e0e3565c52758292e10080a25d872941William King#include <config.h>
615eff12e0e3565c52758292e10080a25d872941William King
615eff12e0e3565c52758292e10080a25d872941William King#include <errno.h>
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King#include <fcntl.h>
615eff12e0e3565c52758292e10080a25d872941William King#include <limits.h>
615eff12e0e3565c52758292e10080a25d872941William King#include <stdlib.h>
615eff12e0e3565c52758292e10080a25d872941William King
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#ifndef WIN32
615eff12e0e3565c52758292e10080a25d872941William King#include <unistd.h> /* XXX */
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#else
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#include <direct.h>
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#endif
615eff12e0e3565c52758292e10080a25d872941William King
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence#include <isc/buffer.h>
ab123a8e1b6573e622189a1d39d0af33150a56f8David Lawrence#include <isc/dir.h>
79d91e915023ffa5fac1bb2f91f19210bb18407cBrian Wellington#include <isc/entropy.h>
ab123a8e1b6573e622189a1d39d0af33150a56f8David Lawrence#include <isc/file.h>
615eff12e0e3565c52758292e10080a25d872941William King#include <isc/mem.h>
a13e9f894ce1fa80b4076a40ade53982d8e9d1d9Mukund Sivaraman#include <isc/print.h>
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence#include <isc/region.h>
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#include <isc/stdio.h>
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence#include <isc/string.h>
fd9f6afdff9faf55411dfd5f828529601cab0511Andreas Gustafsson#include <isc/util.h>
615eff12e0e3565c52758292e10080a25d872941William King
a9bc95f22ef2dd4a12e79be99412c9f18b814a5dBrian Wellington#include <dns/fixedname.h>
a9bc95f22ef2dd4a12e79be99412c9f18b814a5dBrian Wellington#include <dns/name.h>
a9bc95f22ef2dd4a12e79be99412c9f18b814a5dBrian Wellington
615eff12e0e3565c52758292e10080a25d872941William King#include <dst/dst.h>
615eff12e0e3565c52758292e10080a25d872941William King#include <dst/result.h>
615eff12e0e3565c52758292e10080a25d872941William King
615eff12e0e3565c52758292e10080a25d872941William King#include <tests/t_api.h>
615eff12e0e3565c52758292e10080a25d872941William King
a781910430028650d388fd932dd94ce6eb6e9d8dBrian Wellington#ifndef PATH_MAX
a781910430028650d388fd932dd94ce6eb6e9d8dBrian Wellington#define PATH_MAX 256
a781910430028650d388fd932dd94ce6eb6e9d8dBrian Wellington#endif
a781910430028650d388fd932dd94ce6eb6e9d8dBrian Wellington
615eff12e0e3565c52758292e10080a25d872941William King/*
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence * Adapted from the original dst_test.c program.
615eff12e0e3565c52758292e10080a25d872941William King */
615eff12e0e3565c52758292e10080a25d872941William King
615eff12e0e3565c52758292e10080a25d872941William Kingstatic void
615eff12e0e3565c52758292e10080a25d872941William Kingcleandir(char *path) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_dir_t dir;
615eff12e0e3565c52758292e10080a25d872941William King char fullname[PATH_MAX + 1];
bbf31e6b623af575138669bdd7031232867b9166Mark Andrews size_t l;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_result_t ret;
615eff12e0e3565c52758292e10080a25d872941William King
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_dir_init(&dir);
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews ret = isc_dir_open(&dir, path);
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if (ret != ISC_R_SUCCESS) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews t_info("isc_dir_open(%s) failed %s\n",
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews path, isc_result_totext(ret));
615eff12e0e3565c52758292e10080a25d872941William King return;
615eff12e0e3565c52758292e10080a25d872941William King }
615eff12e0e3565c52758292e10080a25d872941William King
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews while (isc_dir_read(&dir) == ISC_R_SUCCESS) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if (!strcmp(dir.entry.name, "."))
615eff12e0e3565c52758292e10080a25d872941William King continue;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if (!strcmp(dir.entry.name, ".."))
615eff12e0e3565c52758292e10080a25d872941William King continue;
bbf31e6b623af575138669bdd7031232867b9166Mark Andrews (void)strlcpy(fullname, path, sizeof(fullname));
bbf31e6b623af575138669bdd7031232867b9166Mark Andrews (void)strlcat(fullname, "/", sizeof(fullname));
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews l = strlcat(fullname, dir.entry.name, sizeof(fullname));
bbf31e6b623af575138669bdd7031232867b9166Mark Andrews if (l < sizeof(fullname)) {
bbf31e6b623af575138669bdd7031232867b9166Mark Andrews if (remove(fullname))
bbf31e6b623af575138669bdd7031232867b9166Mark Andrews t_info("remove(%s) failed %d\n", fullname,
bbf31e6b623af575138669bdd7031232867b9166Mark Andrews errno);
fcd7c22fdff859e47d290981bb08cd3fc07369a1Tinderbox User } else
bbf31e6b623af575138669bdd7031232867b9166Mark Andrews t_info("unable to remove '%s/%s': path too long\n",
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews path, dir.entry.name);
ab123a8e1b6573e622189a1d39d0af33150a56f8David Lawrence
615eff12e0e3565c52758292e10080a25d872941William King }
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_dir_close(&dir);
ab123a8e1b6573e622189a1d39d0af33150a56f8David Lawrence if (rmdir(path))
615eff12e0e3565c52758292e10080a25d872941William King t_info("rmdir(%s) failed %d\n", path, errno);
ab123a8e1b6573e622189a1d39d0af33150a56f8David Lawrence
615eff12e0e3565c52758292e10080a25d872941William King return;
615eff12e0e3565c52758292e10080a25d872941William King}
615eff12e0e3565c52758292e10080a25d872941William King
615eff12e0e3565c52758292e10080a25d872941William Kingstatic void
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellingtonuse(dst_key_t *key, isc_mem_t *mctx, isc_result_t exp_result, int *nfails) {
615eff12e0e3565c52758292e10080a25d872941William King
4124057bf54f0fc75b06b35487130bbd9249ee7fBrian Wellington isc_result_t ret;
1b6d529cb5ee0ad44f8518e1b8c2cbca54bbdf18David Lawrence const char *data = "This is some data";
615eff12e0e3565c52758292e10080a25d872941William King unsigned char sig[512];
615eff12e0e3565c52758292e10080a25d872941William King isc_buffer_t databuf, sigbuf;
615eff12e0e3565c52758292e10080a25d872941William King isc_region_t datareg, sigreg;
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington dst_context_t *ctx = NULL;
615eff12e0e3565c52758292e10080a25d872941William King
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_init(&sigbuf, sig, sizeof(sig));
6f7abb89ec22aef5eda40ed60fcf605a42b78d4dMark Andrews isc_buffer_constinit(&databuf, data, strlen(data));
615eff12e0e3565c52758292e10080a25d872941William King isc_buffer_add(&databuf, strlen(data));
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_usedregion(&databuf, &datareg);
615eff12e0e3565c52758292e10080a25d872941William King
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt ret = dst_context_create3(key, mctx,
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt DNS_LOGCATEGORY_GENERAL, ISC_TRUE, &ctx);
b869f35f43100c71c6d06bd23934b4a2c5ed4cb7Brian Wellington if (ret != exp_result) {
b869f35f43100c71c6d06bd23934b4a2c5ed4cb7Brian Wellington t_info("dst_context_create(%d) returned (%s) expected (%s)\n",
b869f35f43100c71c6d06bd23934b4a2c5ed4cb7Brian Wellington dst_key_alg(key), dst_result_totext(ret),
b869f35f43100c71c6d06bd23934b4a2c5ed4cb7Brian Wellington dst_result_totext(exp_result));
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington ++*nfails;
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington return;
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington }
b869f35f43100c71c6d06bd23934b4a2c5ed4cb7Brian Wellington if (exp_result != ISC_R_SUCCESS)
b869f35f43100c71c6d06bd23934b4a2c5ed4cb7Brian Wellington return;
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington ret = dst_context_adddata(ctx, &datareg);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington if (ret != ISC_R_SUCCESS) {
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington t_info("dst_context_adddata(%d) returned (%s)\n",
446aa1ec8cb8f231d8649cfd705c90c6d0976143David Lawrence dst_key_alg(key), dst_result_totext(ret));
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington ++*nfails;
b3ef06344abad0105be99b622e615dcbd87911e1Brian Wellington dst_context_destroy(&ctx);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington return;
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington }
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington ret = dst_context_sign(ctx, &sigbuf);
b869f35f43100c71c6d06bd23934b4a2c5ed4cb7Brian Wellington if (ret != ISC_R_SUCCESS) {
b869f35f43100c71c6d06bd23934b4a2c5ed4cb7Brian Wellington t_info("dst_context_sign(%d) returned (%s)\n",
b869f35f43100c71c6d06bd23934b4a2c5ed4cb7Brian Wellington dst_key_alg(key), dst_result_totext(ret));
615eff12e0e3565c52758292e10080a25d872941William King ++*nfails;
b3ef06344abad0105be99b622e615dcbd87911e1Brian Wellington dst_context_destroy(&ctx);
615eff12e0e3565c52758292e10080a25d872941William King return;
615eff12e0e3565c52758292e10080a25d872941William King }
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington dst_context_destroy(&ctx);
615eff12e0e3565c52758292e10080a25d872941William King
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_remainingregion(&sigbuf, &sigreg);
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt ret = dst_context_create3(key, mctx,
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt DNS_LOGCATEGORY_GENERAL, ISC_FALSE, &ctx);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington if (ret != ISC_R_SUCCESS) {
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington t_info("dst_context_create(%d) returned (%s)\n",
446aa1ec8cb8f231d8649cfd705c90c6d0976143David Lawrence dst_key_alg(key), dst_result_totext(ret));
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington ++*nfails;
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington return;
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington }
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington ret = dst_context_adddata(ctx, &datareg);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington if (ret != ISC_R_SUCCESS) {
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington t_info("dst_context_adddata(%d) returned (%s)\n",
446aa1ec8cb8f231d8649cfd705c90c6d0976143David Lawrence dst_key_alg(key), dst_result_totext(ret));
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington ++*nfails;
b3ef06344abad0105be99b622e615dcbd87911e1Brian Wellington dst_context_destroy(&ctx);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington return;
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington }
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington ret = dst_context_verify(ctx, &sigreg);
615eff12e0e3565c52758292e10080a25d872941William King if (ret != exp_result) {
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington t_info("dst_context_verify(%d) returned (%s) expected (%s)\n",
446aa1ec8cb8f231d8649cfd705c90c6d0976143David Lawrence dst_key_alg(key), dst_result_totext(ret),
446aa1ec8cb8f231d8649cfd705c90c6d0976143David Lawrence dst_result_totext(exp_result));
615eff12e0e3565c52758292e10080a25d872941William King ++*nfails;
b3ef06344abad0105be99b622e615dcbd87911e1Brian Wellington dst_context_destroy(&ctx);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington return;
615eff12e0e3565c52758292e10080a25d872941William King }
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington dst_context_destroy(&ctx);
615eff12e0e3565c52758292e10080a25d872941William King}
615eff12e0e3565c52758292e10080a25d872941William King
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellingtonstatic void
a9bc95f22ef2dd4a12e79be99412c9f18b814a5dBrian Wellingtondh(dns_name_t *name1, int id1, dns_name_t *name2, int id2, isc_mem_t *mctx,
4124057bf54f0fc75b06b35487130bbd9249ee7fBrian Wellington isc_result_t exp_result, int *nfails, int *nprobs)
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington{
c50936eb40263b65ebf6afe4e6556e2dc67c10e4Brian Wellington dst_key_t *key1 = NULL, *key2 = NULL;
4124057bf54f0fc75b06b35487130bbd9249ee7fBrian Wellington isc_result_t ret;
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington char current[PATH_MAX + 1];
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington char tmp[PATH_MAX + 1];
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington char *p;
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington int alg = DST_ALG_DH;
23fdb6a5a3d3d0e427682b68eea9553d2d326ad4Mark Andrews int type = DST_TYPE_PUBLIC|DST_TYPE_PRIVATE|DST_TYPE_KEY;
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington unsigned char array1[1024], array2[1024];
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington isc_buffer_t b1, b2;
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington isc_region_t r1, r2;
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington
fd9f6afdff9faf55411dfd5f828529601cab0511Andreas Gustafsson UNUSED(exp_result);
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington p = getcwd(current, PATH_MAX);;
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington if (p == NULL) {
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington t_info("getcwd failed %d\n", errno);
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington ++*nprobs;
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews goto cleanup;
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington }
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington
b3ef06344abad0105be99b622e615dcbd87911e1Brian Wellington ret = dst_key_fromfile(name1, id1, alg, type, current, mctx, &key1);
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington if (ret != ISC_R_SUCCESS) {
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington t_info("dst_key_fromfile(%d) returned: %s\n",
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington alg, dst_result_totext(ret));
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington ++*nfails;
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews goto cleanup;
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington }
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington
b3ef06344abad0105be99b622e615dcbd87911e1Brian Wellington ret = dst_key_fromfile(name2, id2, alg, type, current, mctx, &key2);
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington if (ret != ISC_R_SUCCESS) {
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington t_info("dst_key_fromfile(%d) returned: %s\n",
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington alg, dst_result_totext(ret));
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington ++*nfails;
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews goto cleanup;
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington }
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#ifndef WIN32
ab123a8e1b6573e622189a1d39d0af33150a56f8David Lawrence ret = isc_file_mktemplate("/tmp/", tmp, sizeof(tmp));
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#else
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews ret = isc_file_mktemplate(getenv("TEMP"), tmp, sizeof(tmp));
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#endif
ab123a8e1b6573e622189a1d39d0af33150a56f8David Lawrence if (ret != ISC_R_SUCCESS) {
19ce0d25d31e716a737674c4e04a88c33b222fe4David Lawrence t_info("isc_file_mktemplate failed %s\n",
19ce0d25d31e716a737674c4e04a88c33b222fe4David Lawrence isc_result_totext(ret));
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington ++*nprobs;
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews goto cleanup;
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington }
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington
ab123a8e1b6573e622189a1d39d0af33150a56f8David Lawrence ret = isc_dir_createunique(tmp);
ab123a8e1b6573e622189a1d39d0af33150a56f8David Lawrence if (ret != ISC_R_SUCCESS) {
19ce0d25d31e716a737674c4e04a88c33b222fe4David Lawrence t_info("isc_dir_createunique failed %s\n",
19ce0d25d31e716a737674c4e04a88c33b222fe4David Lawrence isc_result_totext(ret));
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington ++*nprobs;
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews goto cleanup;
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington }
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington
b3ef06344abad0105be99b622e615dcbd87911e1Brian Wellington ret = dst_key_tofile(key1, type, tmp);
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington if (ret != 0) {
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington t_info("dst_key_tofile(%d) returned: %s\n",
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington alg, dst_result_totext(ret));
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington ++*nfails;
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews goto cleanup;
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington }
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington
b3ef06344abad0105be99b622e615dcbd87911e1Brian Wellington ret = dst_key_tofile(key2, type, tmp);
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington if (ret != 0) {
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington t_info("dst_key_tofile(%d) returned: %s\n",
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington alg, dst_result_totext(ret));
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington ++*nfails;
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews goto cleanup;
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington }
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington cleandir(tmp);
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_init(&b1, array1, sizeof(array1));
81ab85fd39c3f6c781ecac725d830364a311479dBrian Wellington ret = dst_key_computesecret(key1, key2, &b1);
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington if (ret != 0) {
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington t_info("dst_computesecret() returned: %s\n",
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington dst_result_totext(ret));
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington ++*nfails;
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews goto cleanup;
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington }
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_init(&b2, array2, sizeof(array2));
81ab85fd39c3f6c781ecac725d830364a311479dBrian Wellington ret = dst_key_computesecret(key2, key1, &b2);
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington if (ret != 0) {
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington t_info("dst_computesecret() returned: %s\n",
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington dst_result_totext(ret));
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington ++*nfails;
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews goto cleanup;
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington }
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_usedregion(&b1, &r1);
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_usedregion(&b2, &r2);
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington if (r1.length != r2.length || memcmp(r1.base, r2.base, r1.length) != 0)
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington {
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington t_info("computed secrets don't match\n");
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington ++*nfails;
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews goto cleanup;
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington }
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews cleanup:
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews if (key1 != NULL)
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews dst_key_free(&key1);
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews if (key2 != NULL)
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews dst_key_free(&key2);
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington}
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington
615eff12e0e3565c52758292e10080a25d872941William Kingstatic void
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Huntio(dns_name_t *name, isc_uint16_t id, isc_uint16_t alg, int type,
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt isc_mem_t *mctx, isc_result_t exp_result, int *nfails, int *nprobs)
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence{
c50936eb40263b65ebf6afe4e6556e2dc67c10e4Brian Wellington dst_key_t *key = NULL;
4124057bf54f0fc75b06b35487130bbd9249ee7fBrian Wellington isc_result_t ret;
615eff12e0e3565c52758292e10080a25d872941William King char current[PATH_MAX + 1];
615eff12e0e3565c52758292e10080a25d872941William King char tmp[PATH_MAX + 1];
615eff12e0e3565c52758292e10080a25d872941William King char *p;
615eff12e0e3565c52758292e10080a25d872941William King
615eff12e0e3565c52758292e10080a25d872941William King p = getcwd(current, PATH_MAX);;
615eff12e0e3565c52758292e10080a25d872941William King if (p == NULL) {
615eff12e0e3565c52758292e10080a25d872941William King t_info("getcwd failed %d\n", errno);
615eff12e0e3565c52758292e10080a25d872941William King ++*nprobs;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt goto failure;
615eff12e0e3565c52758292e10080a25d872941William King }
615eff12e0e3565c52758292e10080a25d872941William King
b3ef06344abad0105be99b622e615dcbd87911e1Brian Wellington ret = dst_key_fromfile(name, id, alg, type, current, mctx, &key);
a7d792804f564aa0889a94f64913b11bffd9738cBrian Wellington if (ret != ISC_R_SUCCESS) {
ed019cabc1cc75d4412010c331876e4ae5080a4dDavid Lawrence t_info("dst_key_fromfile(%d) returned: %s\n",
ed019cabc1cc75d4412010c331876e4ae5080a4dDavid Lawrence alg, dst_result_totext(ret));
615eff12e0e3565c52758292e10080a25d872941William King ++*nfails;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt goto failure;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt }
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt if (dst_key_id(key) != id) {
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt t_info("key ID incorrect\n");
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt ++*nfails;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt goto failure;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt }
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt if (dst_key_alg(key) != alg) {
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt t_info("key algorithm incorrect\n");
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt ++*nfails;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt goto failure;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt }
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt if (dst_key_getttl(key) != 0) {
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt t_info("initial key TTL incorrect\n");
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt ++*nfails;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt goto failure;
615eff12e0e3565c52758292e10080a25d872941William King }
615eff12e0e3565c52758292e10080a25d872941William King
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#ifndef WIN32
19ce0d25d31e716a737674c4e04a88c33b222fe4David Lawrence ret = isc_file_mktemplate("/tmp/", tmp, sizeof(tmp));
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#else
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews ret = isc_file_mktemplate(getenv("TEMP"), tmp, sizeof(tmp));
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#endif
19ce0d25d31e716a737674c4e04a88c33b222fe4David Lawrence if (ret != ISC_R_SUCCESS) {
19ce0d25d31e716a737674c4e04a88c33b222fe4David Lawrence t_info("isc_file_mktemplate failed %s\n",
19ce0d25d31e716a737674c4e04a88c33b222fe4David Lawrence isc_result_totext(ret));
615eff12e0e3565c52758292e10080a25d872941William King ++*nprobs;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt goto failure;
615eff12e0e3565c52758292e10080a25d872941William King }
615eff12e0e3565c52758292e10080a25d872941William King
19ce0d25d31e716a737674c4e04a88c33b222fe4David Lawrence ret = isc_dir_createunique(tmp);
19ce0d25d31e716a737674c4e04a88c33b222fe4David Lawrence if (ret != ISC_R_SUCCESS) {
615eff12e0e3565c52758292e10080a25d872941William King t_info("mkdir failed %d\n", errno);
615eff12e0e3565c52758292e10080a25d872941William King ++*nprobs;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt goto failure;
615eff12e0e3565c52758292e10080a25d872941William King }
615eff12e0e3565c52758292e10080a25d872941William King
b3ef06344abad0105be99b622e615dcbd87911e1Brian Wellington ret = dst_key_tofile(key, type, tmp);
615eff12e0e3565c52758292e10080a25d872941William King if (ret != 0) {
ed019cabc1cc75d4412010c331876e4ae5080a4dDavid Lawrence t_info("dst_key_tofile(%d) returned: %s\n",
ed019cabc1cc75d4412010c331876e4ae5080a4dDavid Lawrence alg, dst_result_totext(ret));
615eff12e0e3565c52758292e10080a25d872941William King ++*nfails;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt goto failure;
615eff12e0e3565c52758292e10080a25d872941William King }
615eff12e0e3565c52758292e10080a25d872941William King
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington if (dst_key_alg(key) != DST_ALG_DH)
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington use(key, mctx, exp_result, nfails);
615eff12e0e3565c52758292e10080a25d872941William King
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt /*
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt * Skip the rest of this test if we weren't expecting
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt * the read to be successful.
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt */
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt if (exp_result != ISC_R_SUCCESS)
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt goto cleanup;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt dst_key_setttl(key, 3600);
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt ret = dst_key_tofile(key, type, tmp);
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt if (ret != 0) {
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt t_info("dst_key_tofile(%d) returned: %s\n",
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt alg, dst_result_totext(ret));
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt ++*nfails;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt goto failure;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt }
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt /* Reread key to confirm TTL was changed */
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt dst_key_free(&key);
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt ret = dst_key_fromfile(name, id, alg, type, tmp, mctx, &key);
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt if (ret != ISC_R_SUCCESS) {
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt t_info("dst_key_fromfile(%d) returned: %s\n",
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt alg, dst_result_totext(ret));
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt ++*nfails;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt goto failure;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt }
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt if (dst_key_getttl(key) != 3600) {
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt t_info("modified key TTL incorrect\n");
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt ++*nfails;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt goto failure;
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt }
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt cleanup:
615eff12e0e3565c52758292e10080a25d872941William King cleandir(tmp);
615eff12e0e3565c52758292e10080a25d872941William King
61bcc232038f0a2cb77ed6269675fdc288f5ec98Evan Hunt failure:
d1862fe530987de5a6ee02b539e3b240894838a1Mark Andrews if (key != NULL)
d1862fe530987de5a6ee02b539e3b240894838a1Mark Andrews dst_key_free(&key);
615eff12e0e3565c52758292e10080a25d872941William King}
615eff12e0e3565c52758292e10080a25d872941William King
615eff12e0e3565c52758292e10080a25d872941William Kingstatic void
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellingtongenerate(int alg, isc_mem_t *mctx, int size, int *nfails) {
4124057bf54f0fc75b06b35487130bbd9249ee7fBrian Wellington isc_result_t ret;
c50936eb40263b65ebf6afe4e6556e2dc67c10e4Brian Wellington dst_key_t *key = NULL;
615eff12e0e3565c52758292e10080a25d872941William King
5c29047792191d6141f69b2684314d0b762fedebBrian Wellington ret = dst_key_generate(dns_rootname, alg, size, 0, 0, 0,
5c29047792191d6141f69b2684314d0b762fedebBrian Wellington dns_rdataclass_in, mctx, &key);
a7d792804f564aa0889a94f64913b11bffd9738cBrian Wellington if (ret != ISC_R_SUCCESS) {
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence t_info("dst_key_generate(%d) returned: %s\n", alg,
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence dst_result_totext(ret));
615eff12e0e3565c52758292e10080a25d872941William King ++*nfails;
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews goto cleanup;
615eff12e0e3565c52758292e10080a25d872941William King }
615eff12e0e3565c52758292e10080a25d872941William King
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington if (alg != DST_ALG_DH)
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington use(key, mctx, ISC_R_SUCCESS, nfails);
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews cleanup:
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews if (key != NULL)
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews dst_key_free(&key);
615eff12e0e3565c52758292e10080a25d872941William King}
615eff12e0e3565c52758292e10080a25d872941William King
615eff12e0e3565c52758292e10080a25d872941William King#define DBUFSIZ 25
615eff12e0e3565c52758292e10080a25d872941William King
1b6d529cb5ee0ad44f8518e1b8c2cbca54bbdf18David Lawrencestatic const char *a1 =
615eff12e0e3565c52758292e10080a25d872941William King "the dst module provides the capability to "
615eff12e0e3565c52758292e10080a25d872941William King "generate, store and retrieve public and private keys, "
615eff12e0e3565c52758292e10080a25d872941William King "sign and verify data using the RSA, DSA and MD5 algorithms, "
b869f35f43100c71c6d06bd23934b4a2c5ed4cb7Brian Wellington "and compute Diffie-Hellman shared secrets.";
615eff12e0e3565c52758292e10080a25d872941William Kingstatic void
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrencet1(void) {
615eff12e0e3565c52758292e10080a25d872941William King isc_mem_t *mctx;
79d91e915023ffa5fac1bb2f91f19210bb18407cBrian Wellington isc_entropy_t *ectx;
615eff12e0e3565c52758292e10080a25d872941William King int nfails;
615eff12e0e3565c52758292e10080a25d872941William King int nprobs;
615eff12e0e3565c52758292e10080a25d872941William King int result;
615eff12e0e3565c52758292e10080a25d872941William King isc_result_t isc_result;
a9bc95f22ef2dd4a12e79be99412c9f18b814a5dBrian Wellington dns_fixedname_t fname;
a9bc95f22ef2dd4a12e79be99412c9f18b814a5dBrian Wellington dns_name_t *name;
a9bc95f22ef2dd4a12e79be99412c9f18b814a5dBrian Wellington isc_buffer_t b;
615eff12e0e3565c52758292e10080a25d872941William King
f148f53794956f491f6527430a93c2c8d884a212Mark Andrews t_assert("dst", 1, T_REQUIRED, "%s", a1);
615eff12e0e3565c52758292e10080a25d872941William King
615eff12e0e3565c52758292e10080a25d872941William King nfails = 0;
615eff12e0e3565c52758292e10080a25d872941William King nprobs = 0;
615eff12e0e3565c52758292e10080a25d872941William King mctx = NULL;
615eff12e0e3565c52758292e10080a25d872941William King isc_result = isc_mem_create(0, 0, &mctx);
615eff12e0e3565c52758292e10080a25d872941William King if (isc_result != ISC_R_SUCCESS) {
76c8294c81fb48b1da6e1fc5b83322a4cedb8e58Andreas Gustafsson t_info("isc_mem_create failed %s\n",
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence isc_result_totext(isc_result));
615eff12e0e3565c52758292e10080a25d872941William King t_result(T_UNRESOLVED);
615eff12e0e3565c52758292e10080a25d872941William King return;
615eff12e0e3565c52758292e10080a25d872941William King }
79d91e915023ffa5fac1bb2f91f19210bb18407cBrian Wellington ectx = NULL;
79d91e915023ffa5fac1bb2f91f19210bb18407cBrian Wellington isc_result = isc_entropy_create(mctx, &ectx);
79d91e915023ffa5fac1bb2f91f19210bb18407cBrian Wellington if (isc_result != ISC_R_SUCCESS) {
76c8294c81fb48b1da6e1fc5b83322a4cedb8e58Andreas Gustafsson t_info("isc_entropy_create failed %s\n",
79d91e915023ffa5fac1bb2f91f19210bb18407cBrian Wellington isc_result_totext(isc_result));
79d91e915023ffa5fac1bb2f91f19210bb18407cBrian Wellington t_result(T_UNRESOLVED);
79d91e915023ffa5fac1bb2f91f19210bb18407cBrian Wellington return;
79d91e915023ffa5fac1bb2f91f19210bb18407cBrian Wellington }
400a1b6604ede895cc8d67a7aa66796a5dbc75e4Mark Andrews isc_result = isc_entropy_createfilesource(ectx, "randomfile");
b869f35f43100c71c6d06bd23934b4a2c5ed4cb7Brian Wellington if (isc_result != ISC_R_SUCCESS) {
76c8294c81fb48b1da6e1fc5b83322a4cedb8e58Andreas Gustafsson t_info("isc_entropy_create failed %s\n",
b869f35f43100c71c6d06bd23934b4a2c5ed4cb7Brian Wellington isc_result_totext(isc_result));
b869f35f43100c71c6d06bd23934b4a2c5ed4cb7Brian Wellington t_result(T_UNRESOLVED);
b869f35f43100c71c6d06bd23934b4a2c5ed4cb7Brian Wellington return;
b869f35f43100c71c6d06bd23934b4a2c5ed4cb7Brian Wellington }
b869f35f43100c71c6d06bd23934b4a2c5ed4cb7Brian Wellington isc_result = dst_lib_init(mctx, ectx, ISC_ENTROPY_BLOCKING);
79d91e915023ffa5fac1bb2f91f19210bb18407cBrian Wellington if (isc_result != ISC_R_SUCCESS) {
76c8294c81fb48b1da6e1fc5b83322a4cedb8e58Andreas Gustafsson t_info("dst_lib_init failed %s\n",
79d91e915023ffa5fac1bb2f91f19210bb18407cBrian Wellington isc_result_totext(isc_result));
79d91e915023ffa5fac1bb2f91f19210bb18407cBrian Wellington t_result(T_UNRESOLVED);
79d91e915023ffa5fac1bb2f91f19210bb18407cBrian Wellington return;
79d91e915023ffa5fac1bb2f91f19210bb18407cBrian Wellington }
615eff12e0e3565c52758292e10080a25d872941William King
17f04ff2e7533bc20aa7028c953615968f9a8bb0Brian Wellington if (!dst_algorithm_supported(DST_ALG_RSAMD5)) {
17f04ff2e7533bc20aa7028c953615968f9a8bb0Brian Wellington dst_lib_destroy();
17f04ff2e7533bc20aa7028c953615968f9a8bb0Brian Wellington t_info("library built without crypto support\n");
dd19c1a3529e4324ac977bc9e0bc64cc28ce7506Evan Hunt t_result(T_SKIPPED);
17f04ff2e7533bc20aa7028c953615968f9a8bb0Brian Wellington return;
17f04ff2e7533bc20aa7028c953615968f9a8bb0Brian Wellington }
17f04ff2e7533bc20aa7028c953615968f9a8bb0Brian Wellington
0942b8e0d660895ae96ffbd447fd0290fe60539cMichael Graff t_info("testing use of stored keys [1]\n");
a9bc95f22ef2dd4a12e79be99412c9f18b814a5dBrian Wellington
a9bc95f22ef2dd4a12e79be99412c9f18b814a5dBrian Wellington dns_fixedname_init(&fname);
a9bc95f22ef2dd4a12e79be99412c9f18b814a5dBrian Wellington name = dns_fixedname_name(&fname);
6f7abb89ec22aef5eda40ed60fcf605a42b78d4dMark Andrews isc_buffer_constinit(&b, "test.", 5);
11836b7a55fa62ee6628e4e41845a0ef7084e383David Lawrence isc_buffer_add(&b, 5);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 isc_result = dns_name_fromtext(name, &b, NULL, 0, NULL);
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews if (isc_result != ISC_R_SUCCESS) {
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews t_info("dns_name_fromtext failed %s\n",
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews isc_result_totext(isc_result));
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews t_result(T_UNRESOLVED);
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews return;
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews }
daad43e5a4e83bd3c055632799ab67e269467db0Brian Wellington io(name, 23616, DST_ALG_DSA, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC,
a7d792804f564aa0889a94f64913b11bffd9738cBrian Wellington mctx, ISC_R_SUCCESS, &nfails, &nprobs);
0942b8e0d660895ae96ffbd447fd0290fe60539cMichael Graff t_info("testing use of stored keys [2]\n");
d3735e0e2588a8d07215e0b76d029c1ac3d40a17Brian Wellington io(name, 54622, DST_ALG_RSAMD5, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC,
a7d792804f564aa0889a94f64913b11bffd9738cBrian Wellington mctx, ISC_R_SUCCESS, &nfails, &nprobs);
615eff12e0e3565c52758292e10080a25d872941William King
0942b8e0d660895ae96ffbd447fd0290fe60539cMichael Graff t_info("testing use of stored keys [3]\n");
daad43e5a4e83bd3c055632799ab67e269467db0Brian Wellington io(name, 49667, DST_ALG_DSA, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC,
8d0470dbdb0953796a4ccad60db635bcb6bc9086Bob Halley mctx, DST_R_NULLKEY, &nfails, &nprobs);
0942b8e0d660895ae96ffbd447fd0290fe60539cMichael Graff t_info("testing use of stored keys [4]\n");
daad43e5a4e83bd3c055632799ab67e269467db0Brian Wellington io(name, 2, DST_ALG_RSAMD5, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC,
8d0470dbdb0953796a4ccad60db635bcb6bc9086Bob Halley mctx, DST_R_NULLKEY, &nfails, &nprobs);
615eff12e0e3565c52758292e10080a25d872941William King
6f7abb89ec22aef5eda40ed60fcf605a42b78d4dMark Andrews isc_buffer_constinit(&b, "dh.", 3);
11836b7a55fa62ee6628e4e41845a0ef7084e383David Lawrence isc_buffer_add(&b, 3);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 isc_result = dns_name_fromtext(name, &b, NULL, 0, NULL);
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews if (isc_result != ISC_R_SUCCESS) {
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews t_info("dns_name_fromtext failed %s\n",
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews isc_result_totext(isc_result));
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews t_result(T_UNRESOLVED);
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews return;
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews }
a9bc95f22ef2dd4a12e79be99412c9f18b814a5dBrian Wellington
daad43e5a4e83bd3c055632799ab67e269467db0Brian Wellington dh(name, 18602, name, 48957, mctx, ISC_R_SUCCESS, &nfails, &nprobs);
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington
615eff12e0e3565c52758292e10080a25d872941William King t_info("testing use of generated keys\n");
d3735e0e2588a8d07215e0b76d029c1ac3d40a17Brian Wellington generate(DST_ALG_RSAMD5, mctx, 512, &nfails);
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington generate(DST_ALG_DSA, mctx, 512, &nfails);
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington generate(DST_ALG_DH, mctx, 512, &nfails);
ed019cabc1cc75d4412010c331876e4ae5080a4dDavid Lawrence /*
ed019cabc1cc75d4412010c331876e4ae5080a4dDavid Lawrence * This one uses a constant.
ed019cabc1cc75d4412010c331876e4ae5080a4dDavid Lawrence */
ed019cabc1cc75d4412010c331876e4ae5080a4dDavid Lawrence generate(DST_ALG_DH, mctx, 768, &nfails);
7c37bc1a67a80209e05f6b1c01fa7fde7d0dd200Brian Wellington generate(DST_ALG_HMACMD5, mctx, 512, &nfails);
615eff12e0e3565c52758292e10080a25d872941William King
b3ef06344abad0105be99b622e615dcbd87911e1Brian Wellington dst_lib_destroy();
b3ef06344abad0105be99b622e615dcbd87911e1Brian Wellington
79d91e915023ffa5fac1bb2f91f19210bb18407cBrian Wellington isc_entropy_detach(&ectx);
79d91e915023ffa5fac1bb2f91f19210bb18407cBrian Wellington
615eff12e0e3565c52758292e10080a25d872941William King isc_mem_destroy(&mctx);
615eff12e0e3565c52758292e10080a25d872941William King
615eff12e0e3565c52758292e10080a25d872941William King result = T_UNRESOLVED;
615eff12e0e3565c52758292e10080a25d872941William King if ((nfails == 0) && (nprobs == 0))
615eff12e0e3565c52758292e10080a25d872941William King result = T_PASS;
615eff12e0e3565c52758292e10080a25d872941William King else if (nfails)
615eff12e0e3565c52758292e10080a25d872941William King result = T_FAIL;
615eff12e0e3565c52758292e10080a25d872941William King t_result(result);
615eff12e0e3565c52758292e10080a25d872941William King
615eff12e0e3565c52758292e10080a25d872941William King}
615eff12e0e3565c52758292e10080a25d872941William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King#define T_SIGMAX 512
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
ed019cabc1cc75d4412010c331876e4ae5080a4dDavid Lawrence#undef NEWSIG /* Define NEWSIG to generate the original signature file. */
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King#ifdef NEWSIG
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence/*
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence * Write a sig in buf to file at path.
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence */
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William Kingstatic int
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William Kingsig_tofile(char *path, isc_buffer_t *buf) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King int rval;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King int fd;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King int len;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King int nprobs;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King int cnt;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King unsigned char c;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King unsigned char val;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King cnt = 0;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King nprobs = 0;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King len = buf->used - buf->current;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence t_info("buf: current %d used %d len %d\n",
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence buf->current, buf->used, len);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King fd = open(path, O_CREAT|O_TRUNC|O_WRONLY, S_IRWXU|S_IRWXO|S_IRWXG);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King if (fd < 0) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King t_info("open %s failed %d\n", path, errno);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King return(1);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King while (len) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King c = (unsigned char) isc_buffer_getuint8(buf);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King val = ((c >> 4 ) & 0x0f);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King if ((0 <= val) && (val <= 9))
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King val = '0' + val;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King else
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King val = 'A' + val - 10;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King rval = write(fd, &val, 1);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King if (rval != 1) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King ++nprobs;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King t_info("write failed %d %d\n", rval, errno);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King break;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King val = (c & 0x0f);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King if ((0 <= val) && (val <= 9))
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King val = '0' + val;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King else
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King val = 'A' + val - 10;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King rval = write(fd, &val, 1);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King if (rval != 1) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King ++nprobs;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King t_info("write failed %d %d\n", rval, errno);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King break;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King --len;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King ++cnt;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King if ((cnt % 16) == 0) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King val = '\n';
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King rval = write(fd, &val, 1);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King if (rval != 1) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King ++nprobs;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King t_info("write failed %d %d\n", rval, errno);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King break;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King val = '\n';
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King rval = write(fd, &val, 1);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King if (rval != 1) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King ++nprobs;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King t_info("write failed %d %d\n", rval, errno);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King (void) close(fd);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King return(nprobs);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King}
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King#endif /* NEWSIG */
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence/*
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence * Read sig in file at path to buf.
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence */
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William Kingstatic int
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William Kingsig_fromfile(char *path, isc_buffer_t *iscbuf) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews size_t rval;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews size_t len;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews FILE *fp;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King unsigned char val;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King char *p;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King char *buf;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_result_t isc_result;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews off_t size;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_result = isc_stdio_open(path, "rb", &fp);
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if (isc_result != ISC_R_SUCCESS) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews t_info("open failed, result: %s\n",
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_result_totext(isc_result));
47c5b8af920a93763c97d9a93ea1fd766961a5b3Evan Hunt return(1);
47c5b8af920a93763c97d9a93ea1fd766961a5b3Evan Hunt }
47c5b8af920a93763c97d9a93ea1fd766961a5b3Evan Hunt
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_result = isc_file_getsizefd(fileno(fp), &size);
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if (isc_result != ISC_R_SUCCESS) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews t_info("stat %s failed, result: %s\n",
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews path, isc_result_totext(isc_result));
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_stdio_close(fp);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King return(1);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews buf = (char *) malloc((size + 1) * sizeof(char));
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King if (buf == NULL) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King t_info("malloc failed, errno == %d\n", errno);
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_stdio_close(fp);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King return(1);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews len = (size_t)size;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King p = buf;
db3f8d175d42f6ad20bab3a7a567f5115461efc4Mark Andrews while (len != 0U) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_result = isc_stdio_read(p, 1, len, fp, &rval);
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if (isc_result == ISC_R_SUCCESS) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King len -= rval;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King p += rval;
db3f8d175d42f6ad20bab3a7a567f5115461efc4Mark Andrews } else {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews t_info("read failed %d, result: %s\n",
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews (int)rval, isc_result_totext(isc_result));
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King (void) free(buf);
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews (void) isc_stdio_close(fp);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King return(1);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_stdio_close(fp);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King p = buf;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews len = size;
db3f8d175d42f6ad20bab3a7a567f5115461efc4Mark Andrews while (len > 0U) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if ((*p == '\r') || (*p == '\n')) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King ++p;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King --len;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King continue;
db3f8d175d42f6ad20bab3a7a567f5115461efc4Mark Andrews } else if (len < 2U)
215f02a137818f7c67edb0ba655640bcd3f187c5Mark Andrews goto err;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King if (('0' <= *p) && (*p <= '9'))
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King val = *p - '0';
52c5b74c27305999a45ab86051ef32913443fa0aMark Andrews else if (('A' <= *p) && (*p <= 'F'))
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King val = *p - 'A' + 10;
52c5b74c27305999a45ab86051ef32913443fa0aMark Andrews else
215f02a137818f7c67edb0ba655640bcd3f187c5Mark Andrews goto err;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King ++p;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King val <<= 4;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King --len;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King if (('0' <= *p) && (*p <= '9'))
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King val |= (*p - '0');
52c5b74c27305999a45ab86051ef32913443fa0aMark Andrews else if (('A' <= *p) && (*p <= 'F'))
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King val |= (*p - 'A' + 10);
52c5b74c27305999a45ab86051ef32913443fa0aMark Andrews else
215f02a137818f7c67edb0ba655640bcd3f187c5Mark Andrews goto err;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King ++p;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King --len;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King isc_buffer_putuint8(iscbuf, val);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King (void) free(buf);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King return(0);
215f02a137818f7c67edb0ba655640bcd3f187c5Mark Andrews
215f02a137818f7c67edb0ba655640bcd3f187c5Mark Andrews err:
215f02a137818f7c67edb0ba655640bcd3f187c5Mark Andrews (void) free(buf);
215f02a137818f7c67edb0ba655640bcd3f187c5Mark Andrews return (1);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King}
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William Kingstatic void
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William Kingt2_sigchk(char *datapath, char *sigpath, char *keyname,
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King int id, int alg, int type,
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King isc_mem_t *mctx, char *expected_result,
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence int *nfails, int *nprobs)
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence{
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews size_t rval;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews size_t len;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews FILE *fp;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King int exp_res;
c50936eb40263b65ebf6afe4e6556e2dc67c10e4Brian Wellington dst_key_t *key = NULL;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King unsigned char sig[T_SIGMAX];
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King unsigned char *p;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King unsigned char *data;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews off_t size;
fa6c5e38f4b904aa85f3375f1ca830d4bf8f5877Andreas Gustafsson isc_result_t isc_result;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King isc_buffer_t databuf;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King isc_buffer_t sigbuf;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King isc_region_t datareg;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King isc_region_t sigreg;
a9bc95f22ef2dd4a12e79be99412c9f18b814a5dBrian Wellington dns_fixedname_t fname;
a9bc95f22ef2dd4a12e79be99412c9f18b814a5dBrian Wellington dns_name_t *name;
a9bc95f22ef2dd4a12e79be99412c9f18b814a5dBrian Wellington isc_buffer_t b;
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington dst_context_t *ctx = NULL;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence /*
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence * Read data from file in a form usable by dst_verify.
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence */
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_result = isc_stdio_open(datapath, "rb", &fp);
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if (isc_result != ISC_R_SUCCESS) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews t_info("t2_sigchk: open failed %s\n",
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_result_totext(isc_result));
47c5b8af920a93763c97d9a93ea1fd766961a5b3Evan Hunt ++*nprobs;
47c5b8af920a93763c97d9a93ea1fd766961a5b3Evan Hunt return;
47c5b8af920a93763c97d9a93ea1fd766961a5b3Evan Hunt }
47c5b8af920a93763c97d9a93ea1fd766961a5b3Evan Hunt
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_result = isc_file_getsizefd(fileno(fp), &size);
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if (isc_result != ISC_R_SUCCESS) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews t_info("t2_sigchk: stat (%s) failed %s\n",
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews datapath, isc_result_totext(isc_result));
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King ++*nprobs;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_stdio_close(fp);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King return;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews data = (unsigned char *) malloc(size * sizeof(unsigned char));
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King if (data == NULL) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King t_info("t2_sigchk: malloc failed %d\n", errno);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King ++*nprobs;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_stdio_close(fp);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King return;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King p = data;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews len = (size_t)size;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King do {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_result = isc_stdio_read(p, 1, len, fp, &rval);
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if (isc_result == ISC_R_SUCCESS) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King len -= rval;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King p += rval;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King } while (len);
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews (void) isc_stdio_close(fp);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence /*
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence * Read key from file in a form usable by dst_verify.
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence */
a9bc95f22ef2dd4a12e79be99412c9f18b814a5dBrian Wellington dns_fixedname_init(&fname);
a9bc95f22ef2dd4a12e79be99412c9f18b814a5dBrian Wellington name = dns_fixedname_name(&fname);
6f7abb89ec22aef5eda40ed60fcf605a42b78d4dMark Andrews isc_buffer_constinit(&b, keyname, strlen(keyname));
11836b7a55fa62ee6628e4e41845a0ef7084e383David Lawrence isc_buffer_add(&b, strlen(keyname));
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 isc_result = dns_name_fromtext(name, &b, dns_rootname, 0, NULL);
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews if (isc_result != ISC_R_SUCCESS) {
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews t_info("dns_name_fromtext failed %s\n",
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews isc_result_totext(isc_result));
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews (void) free(data);
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews ++*nprobs;
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews return;
2674e1a455d4f71de09b2b60e7a8304b9a305588Mark Andrews }
b3ef06344abad0105be99b622e615dcbd87911e1Brian Wellington isc_result = dst_key_fromfile(name, id, alg, type, NULL, mctx, &key);
fa6c5e38f4b904aa85f3375f1ca830d4bf8f5877Andreas Gustafsson if (isc_result != ISC_R_SUCCESS) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King t_info("dst_key_fromfile failed %s\n",
fa6c5e38f4b904aa85f3375f1ca830d4bf8f5877Andreas Gustafsson isc_result_totext(isc_result));
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King (void) free(data);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King ++*nprobs;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King return;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_buffer_init(&databuf, data, (unsigned int)size);
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews isc_buffer_add(&databuf, (unsigned int)size);
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_usedregion(&databuf, &datareg);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King#ifdef NEWSIG
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King /*
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence * If we're generating a signature for the first time,
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King * sign the data and save the signature to a file
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King */
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King memset(sig, 0, sizeof(sig));
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_init(&sigbuf, sig, sizeof(sig));
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt isc_result = dst_context_create3(key, mctx,
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt DNS_LOGCATEGORY_GENERAL,
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt ISC_TRUE, &ctx);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington if (isc_result != ISC_R_SUCCESS) {
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington t_info("dst_context_create(%d) failed %s\n",
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington dst_result_totext(isc_result));
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington (void) free(data);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington dst_key_free(&key);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington ++*nprobs;
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington return;
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington }
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington isc_result = dst_context_adddata(ctx, &datareg);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington if (isc_result != ISC_R_SUCCESS) {
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington t_info("dst_context_adddata(%d) failed %s\n",
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington dst_result_totext(isc_result));
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington (void) free(data);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington dst_key_free(&key);
b3ef06344abad0105be99b622e615dcbd87911e1Brian Wellington dst_context_destroy(&ctx);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington ++*nprobs;
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington return;
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington }
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington isc_result = dst_context_sign(ctx, &sigbuf);
fa6c5e38f4b904aa85f3375f1ca830d4bf8f5877Andreas Gustafsson if (isc_result != ISC_R_SUCCESS) {
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence t_info("dst_sign(%d) failed %s\n",
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence dst_result_totext(isc_result));
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King (void) free(data);
c50936eb40263b65ebf6afe4e6556e2dc67c10e4Brian Wellington dst_key_free(&key);
b3ef06344abad0105be99b622e615dcbd87911e1Brian Wellington dst_context_destroy(&ctx);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King ++*nprobs;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King return;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington dst_context_destroy(&ctx);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King rval = sig_tofile(sigpath, &sigbuf);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King if (rval != 0) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King t_info("sig_tofile failed\n");
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King ++*nprobs;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King (void) free(data);
c50936eb40263b65ebf6afe4e6556e2dc67c10e4Brian Wellington dst_key_free(&key);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King return;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King#endif /* NEWSIG */
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King memset(sig, 0, sizeof(sig));
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_init(&sigbuf, sig, sizeof(sig));
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence /*
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence * Read precomputed signature from file in a form usable by dst_verify.
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence */
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King rval = sig_fromfile(sigpath, &sigbuf);
53f70575bd76aab18905efa48e4023144a97a191Mark Andrews if (rval != 0U) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King t_info("sig_fromfile failed\n");
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King (void) free(data);
c50936eb40263b65ebf6afe4e6556e2dc67c10e4Brian Wellington dst_key_free(&key);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King ++*nprobs;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King return;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence /*
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence * Verify that the key signed the data.
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence */
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence isc_buffer_remainingregion(&sigbuf, &sigreg);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King exp_res = 0;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King if (strstr(expected_result, "!"))
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King exp_res = 1;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt isc_result = dst_context_create3(key, mctx,
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt DNS_LOGCATEGORY_GENERAL,
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt ISC_FALSE, &ctx);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington if (isc_result != ISC_R_SUCCESS) {
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington t_info("dst_context_create returned %s\n",
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington isc_result_totext(isc_result));
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews (void) free(data);
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews dst_key_free(&key);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington ++*nfails;
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews return;
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington }
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington isc_result = dst_context_adddata(ctx, &datareg);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington if (isc_result != ISC_R_SUCCESS) {
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington t_info("dst_context_adddata returned %s\n",
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington isc_result_totext(isc_result));
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews (void) free(data);
b3ef06344abad0105be99b622e615dcbd87911e1Brian Wellington dst_context_destroy(&ctx);
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews dst_key_free(&key);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington ++*nfails;
6eb6af6732194157224e2b8d81a02a9e80c4530aMark Andrews return;
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington }
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington isc_result = dst_context_verify(ctx, &sigreg);
fa6c5e38f4b904aa85f3375f1ca830d4bf8f5877Andreas Gustafsson if ( ((exp_res == 0) && (isc_result != ISC_R_SUCCESS)) ||
fa6c5e38f4b904aa85f3375f1ca830d4bf8f5877Andreas Gustafsson ((exp_res != 0) && (isc_result == ISC_R_SUCCESS))) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington t_info("dst_context_verify returned %s, expected %s\n",
fa6c5e38f4b904aa85f3375f1ca830d4bf8f5877Andreas Gustafsson isc_result_totext(isc_result),
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King expected_result);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King ++*nfails;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King (void) free(data);
4fe8755480c108a1232b7189fd5434ab35a6b623Brian Wellington dst_context_destroy(&ctx);
c50936eb40263b65ebf6afe4e6556e2dc67c10e4Brian Wellington dst_key_free(&key);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King return;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King}
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King/*
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence * The astute observer will note that t1() signs then verifies data
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King * during the test but that t2() verifies data that has been
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King * signed at some earlier time, possibly with an entire different
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King * version or implementation of the DSA and RSA algorithms
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King */
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrewsisc_mem_t *t2_mctx = NULL;
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrewsisc_entropy_t *t2_ectx = NULL;
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrewsstatic int
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrewst2_vfy_init(void) {
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews isc_result_t isc_result;
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews t2_mctx = NULL;
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews isc_result = isc_mem_create(0, 0, &t2_mctx);
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews if (isc_result != ISC_R_SUCCESS) {
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews t_info("isc_mem_create failed %s\n",
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews isc_result_totext(isc_result));
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews return(0);
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews }
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews t2_ectx = NULL;
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews isc_result = isc_entropy_create(t2_mctx, &t2_ectx);
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews if (isc_result != ISC_R_SUCCESS) {
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews t_info("isc_entropy_create failed %s\n",
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews isc_result_totext(isc_result));
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews return(0);
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews }
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews isc_result = isc_entropy_createfilesource(t2_ectx, "randomfile");
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews if (isc_result != ISC_R_SUCCESS) {
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews t_info("isc_entropy_create failed %s\n",
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews isc_result_totext(isc_result));
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews return(0);
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews }
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews isc_result = dst_lib_init(t2_mctx, t2_ectx, ISC_ENTROPY_BLOCKING);
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews if (isc_result != ISC_R_SUCCESS) {
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews t_info("dst_lib_init failed %s\n",
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews isc_result_totext(isc_result));
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews return(0);
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews }
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews return(1);
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews}
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence/*
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence * av == datafile, sigpath, keyname, keyid, alg, exp_result.
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence */
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William Kingstatic int
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William Kingt2_vfy(char **av) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King char *datapath;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King char *sigpath;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King char *keyname;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King char *key;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King int keyid;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King char *alg;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King int algid;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King char *exp_result;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King int nfails;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King int nprobs;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King int result;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King datapath = *av++;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King sigpath = *av++;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King keyname = *av++;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King key = *av++;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King keyid = atoi(key);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King alg = *av++;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King exp_result = *av++;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King nfails = 0;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King nprobs = 0;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King if (! strcasecmp(alg, "DST_ALG_DSA"))
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King algid = DST_ALG_DSA;
d3735e0e2588a8d07215e0b76d029c1ac3d40a17Brian Wellington else if (! strcasecmp(alg, "DST_ALG_RSAMD5"))
d3735e0e2588a8d07215e0b76d029c1ac3d40a17Brian Wellington algid = DST_ALG_RSAMD5;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King else {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King t_info("Unknown algorithm %s\n", alg);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King return(T_UNRESOLVED);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King }
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
17f04ff2e7533bc20aa7028c953615968f9a8bb0Brian Wellington if (!dst_algorithm_supported(DST_ALG_RSAMD5)) {
17f04ff2e7533bc20aa7028c953615968f9a8bb0Brian Wellington t_info("library built without crypto support\n");
dd19c1a3529e4324ac977bc9e0bc64cc28ce7506Evan Hunt return (T_SKIPPED);
17f04ff2e7533bc20aa7028c953615968f9a8bb0Brian Wellington }
17f04ff2e7533bc20aa7028c953615968f9a8bb0Brian Wellington
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King t_info("testing %s, %s, %s, %s, %s, %s\n",
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King datapath, sigpath, keyname, key, alg, exp_result);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King t2_sigchk(datapath, sigpath, keyname, keyid,
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King algid, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC,
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews t2_mctx, exp_result,
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King &nfails, &nprobs);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King result = T_UNRESOLVED;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King if (nfails)
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King result = T_FAIL;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King else if ((nfails == 0) && (nprobs == 0))
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King result = T_PASS;
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence return(result);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King}
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrewsstatic const char *a2 =
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews "the dst module provides the capability to "
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews "verify data signed with the RSA and DSA algorithms";
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William Kingstatic void
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrencet2(void) {
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King int result;
f148f53794956f491f6527430a93c2c8d884a212Mark Andrews t_assert("dst", 2, T_REQUIRED, "%s", a2);
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews if (!t2_vfy_init()) {
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews result = T_UNRESOLVED;
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews } else {
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews result = t_eval("dst_2_data", t2_vfy, 6);
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews dst_lib_destroy();
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews }
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews if (t2_ectx)
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews isc_entropy_detach(&t2_ectx);
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews if (t2_mctx)
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews isc_mem_destroy(&t2_mctx);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King t_result(result);
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King}
e5966f9b9a13fc83afaf9b74ac1f7eea6a647817William King
615eff12e0e3565c52758292e10080a25d872941William Kingtestspec_t T_testlist[] = {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews { (PFV) t1, "basic dst module verification" },
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews { (PFV) t2, "signature ineffability" },
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews { (PFV) 0, NULL }
615eff12e0e3565c52758292e10080a25d872941William King};
615eff12e0e3565c52758292e10080a25d872941William King
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#ifdef WIN32
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrewsint
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrewsmain(int argc, char **argv) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews t_settests(T_testlist);
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews return (t_main(argc, argv));
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews}
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#endif