openssldh_link.c revision 016c0a82f1ce3fe4d362d7c9cf8de4377ffaf5a9
/*
* Portions Copyright (C) 2004, 2005 Internet Systems Consortium, Inc. ("ISC")
* Portions Copyright (C) 1999-2002 Internet Software Consortium.
* Portions Copyright (C) 1995-2000 by Network Associates, Inc.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC AND NETWORK ASSOCIATES DISCLAIMS
* ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE
* FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
* IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/*
* Principal Author: Brian Wellington
* $Id: openssldh_link.c,v 1.4 2005/06/17 02:22:44 marka Exp $
*/
#ifdef OPENSSL
#include <config.h>
#include <ctype.h>
#include "dst_internal.h"
#include "dst_openssl.h"
#include "dst_parse.h"
#define PRIME768 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088" \
"A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25" \
"F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A63A3620FFFFFFFFFFFFFFFF"
#define PRIME1024 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08" \
"8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF2" \
"5F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406" \
"B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF"
#define PRIME1536 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" \
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" \
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" \
"E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" \
"EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" \
"C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" \
"83655D23DCA3AD961C62F356208552BB9ED529077096966D" \
"670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF"
static isc_result_t
{
int ret;
isc_region_t r;
unsigned int len;
return (ISC_R_NOSPACE);
if (ret == 0)
return (dst__openssl_toresult(DST_R_COMPUTESECRETFAILURE));
return (ISC_R_SUCCESS);
}
static isc_boolean_t
int status;
return (ISC_TRUE);
return (ISC_FALSE);
if (status != 0)
return (ISC_FALSE);
return (ISC_FALSE);
return (ISC_FALSE);
}
return (ISC_TRUE);
}
static isc_boolean_t
int status;
return (ISC_TRUE);
return (ISC_FALSE);
if (status != 0)
return (ISC_FALSE);
return (ISC_TRUE);
}
static isc_result_t
if (generator == 0) {
{
return (dst__openssl_toresult(ISC_R_NOMEMORY));
else
}
else
generator = 2;
}
if (generator != 0)
return (dst__openssl_toresult(DST_R_OPENSSLFAILURE));
if (DH_generate_key(dh) == 0) {
return (dst__openssl_toresult(DST_R_OPENSSLFAILURE));
}
return (ISC_R_SUCCESS);
}
static isc_boolean_t
}
static void
return;
}
static void
}
static isc_uint16_t
return (val);
}
static isc_result_t
isc_region_t r;
plen = 1;
glen = 0;
}
else {
}
return (ISC_R_NOSPACE);
uint16_toregion(plen, &r);
if (plen == 1) {
*r.base = 1;
*r.base = 2;
else
*r.base = 3;
}
else
uint16_toregion(glen, &r);
if (glen > 0)
uint16_toregion(publen, &r);
return (ISC_R_SUCCESS);
}
static isc_result_t
isc_region_t r;
int special = 0;
if (r.length == 0)
return (ISC_R_SUCCESS);
return (dst__openssl_toresult(ISC_R_NOMEMORY));
/*
* Read the prime length. 1 & 2 are table entries, > 16 means a
* prime follows, otherwise an error.
*/
if (r.length < 2) {
return (DST_R_INVALIDPUBLICKEY);
}
plen = uint16_fromregion(&r);
return (DST_R_INVALIDPUBLICKEY);
}
return (DST_R_INVALIDPUBLICKEY);
}
if (plen == 1)
else
special = uint16_fromregion(&r);
switch (special) {
case 1:
break;
case 2:
break;
case 3:
break;
default:
return (DST_R_INVALIDPUBLICKEY);
}
}
else {
}
/*
* Read the generator length. This should be 0 if the prime was
* special, but it might not be. If it's 0 and the prime is not
* special, we have a problem.
*/
if (r.length < 2) {
return (DST_R_INVALIDPUBLICKEY);
}
glen = uint16_fromregion(&r);
return (DST_R_INVALIDPUBLICKEY);
}
if (special != 0) {
if (glen == 0)
else {
}
else {
return (DST_R_INVALIDPUBLICKEY);
}
}
}
else {
if (glen == 0) {
return (DST_R_INVALIDPUBLICKEY);
}
}
if (r.length < 2) {
return (DST_R_INVALIDPUBLICKEY);
}
publen = uint16_fromregion(&r);
return (DST_R_INVALIDPUBLICKEY);
}
return (ISC_R_SUCCESS);
}
static isc_result_t
int i;
unsigned char *bufs[4];
return (DST_R_NULLKEY);
for (i = 0; i < 4; i++) {
goto fail;
}
}
i = 0;
i++;
i++;
i++;
i++;
fail:
for (i = 0; i < 4; i++) {
break;
}
return (result);
}
static isc_result_t
int i;
/* read private key file */
if (ret != ISC_R_SUCCESS)
return (ret);
case TAG_DH_PRIME:
break;
case TAG_DH_GENERATOR:
break;
case TAG_DH_PRIVATE:
break;
case TAG_DH_PUBLIC:
break;
}
}
{
}
}
return (ISC_R_SUCCESS);
err:
return (ret);
}
static void
static const char hexdigits[] = "0123456789abcdef";
unsigned char data[512];
unsigned int i;
char *s;
RUNTIME_CHECK(s != NULL);
RUNTIME_CHECK(s != NULL);
}
}
static void
openssldh_cleanup(void) {
}
static dst_func_t openssldh_functions = {
NULL, /*%< createctx */
NULL, /*%< destroyctx */
NULL, /*%< adddata */
NULL, /*%< openssldh_sign */
NULL, /*%< openssldh_verify */
};
*funcp = &openssldh_functions;
}
return (ISC_R_SUCCESS);
}
#else /* OPENSSL */
#endif /* OPENSSL */
/*! \file */