opensslrsa_link.c revision 70e5a7403f0e0a3bd292b8287c5fed5772c15270
/*
* Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* 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 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: opensslrsa_link.c,v 1.16 2007/06/19 23:47:16 tbox Exp $
*/
#ifdef OPENSSL
#include <config.h>
#include "dst_internal.h"
#include "dst_openssl.h"
#include "dst_parse.h"
#if OPENSSL_VERSION_NUMBER > 0x00908000L
#endif
/*
* We don't use configure for windows so enforce the OpenSSL version
* here. Unlike with configure we don't support overriding this test.
*/
#ifdef WIN32
#if !((OPENSSL_VERSION_NUMBER >= 0x009070cfL && \
OPENSSL_VERSION_NUMBER < 0x00908000L) || \
OPENSSL_VERSION_NUMBER >= 0x0090804fL)
#endif
#endif
/*
* XXXMPA Temporarially disable RSA_BLINDING as it requires
* good quality random data that cannot currently be guarenteed.
* XXXMPA Find which versions of openssl use pseudo random data
* and set RSA_FLAG_BLINDING for those.
*/
#if 0
#if OPENSSL_VERSION_NUMBER < 0x0090601fL
do { \
} while (0)
#else
do { \
} while (0)
#endif
#endif
#if OPENSSL_VERSION_NUMBER < 0x0090601fL
do { \
} while (0)
#elif defined(RSA_FLAG_NO_BLINDING)
do { \
} while (0)
#else
do { \
} while (0)
#endif
static isc_result_t
return (ISC_R_NOMEMORY);
} else {
return (ISC_R_NOMEMORY);
}
return (ISC_R_SUCCESS);
}
static void
}
} else {
}
}
}
static isc_result_t
} else {
}
return (ISC_R_SUCCESS);
}
static isc_result_t
isc_region_t r;
/* note: ISC_SHA1_DIGESTLENGTH > ISC_MD5_DIGESTLENGTH */
unsigned char digest[ISC_SHA1_DIGESTLENGTH];
unsigned int siglen = 0;
int status;
int type;
unsigned int digestlen;
char *message;
unsigned long err;
const char* file;
int line;
return (ISC_R_NOSPACE);
} else {
}
if (status == 0) {
if (err != 0U) {
}
return (dst__openssl_toresult(DST_R_OPENSSLFAILURE));
}
return (ISC_R_SUCCESS);
}
static isc_result_t
/* note: ISC_SHA1_DIGESTLENGTH > ISC_MD5_DIGESTLENGTH */
unsigned char digest[ISC_SHA1_DIGESTLENGTH];
int status = 0;
int type;
unsigned int digestlen;
} else {
}
return (DST_R_VERIFYFAILURE);
if (status == 0)
return (dst__openssl_toresult(DST_R_VERIFYFAILURE));
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);
if (status != 0)
return (ISC_FALSE);
}
return (ISC_TRUE);
}
static isc_result_t
#if OPENSSL_VERSION_NUMBER > 0x00908000L
goto err;
if (exp == 0) {
/* RSA_F4 0x10001 */
BN_set_bit(e, 0);
BN_set_bit(e, 16);
} else {
/* F5 0x100000001 */
BN_set_bit(e, 0);
BN_set_bit(e, 32);
}
BN_free(e);
return (ISC_R_SUCCESS);
}
err:
if (e != NULL)
BN_free(e);
return (dst__openssl_toresult(DST_R_OPENSSLFAILURE));
#else
unsigned long e;
if (exp == 0)
e = RSA_F4;
else
e = 0x40000003;
return (dst__openssl_toresult(DST_R_OPENSSLFAILURE));
return (ISC_R_SUCCESS);
#endif
}
static isc_boolean_t
}
static void
}
static isc_result_t
isc_region_t r;
unsigned int e_bytes;
unsigned int mod_bytes;
if (r.length < 1)
return (ISC_R_NOSPACE);
} else {
if (r.length < 3)
return (ISC_R_NOSPACE);
isc_buffer_putuint8(data, 0);
}
return (ISC_R_NOSPACE);
return (ISC_R_SUCCESS);
}
static isc_result_t
isc_region_t r;
unsigned int e_bytes;
if (r.length == 0)
return (ISC_R_SUCCESS);
return (dst__openssl_toresult(ISC_R_NOMEMORY));
if (r.length < 1) {
return (DST_R_INVALIDPUBLICKEY);
}
r.length--;
if (e_bytes == 0) {
if (r.length < 2) {
return (DST_R_INVALIDPUBLICKEY);
}
r.length -= 2;
}
return (DST_R_INVALIDPUBLICKEY);
}
return (ISC_R_SUCCESS);
}
static isc_result_t
int i;
unsigned char *bufs[8];
return (DST_R_NULLKEY);
for (i = 0; i < 8; i++) {
goto fail;
}
}
i = 0;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
fail:
for (i = 0; i < 8; i++) {
break;
}
return (result);
}
static isc_result_t
int i;
/* read private key file */
if (ret != ISC_R_SUCCESS)
return (ret);
case TAG_RSA_MODULUS:
break;
case TAG_RSA_PUBLICEXPONENT:
break;
case TAG_RSA_PRIVATEEXPONENT:
break;
case TAG_RSA_PRIME1:
break;
case TAG_RSA_PRIME2:
break;
case TAG_RSA_EXPONENT1:
break;
case TAG_RSA_EXPONENT2:
break;
case TAG_RSA_COEFFICIENT:
break;
}
}
return (ISC_R_SUCCESS);
err:
return (ret);
}
static dst_func_t opensslrsa_functions = {
NULL, /*%< computesecret */
NULL, /*%< paramcompare */
NULL, /*%< cleanup */
};
return (ISC_R_SUCCESS);
}
#else /* OPENSSL */
#endif /* OPENSSL */
/*! \file */