openssldh_link.c revision 40f53fa8d9c6a4fc38c0014495e7a42b08f52481
b68401ccae92ee0e92c699a10d28ce44badbc4aaTinderbox User * Portions Copyright (C) 1999, 2000 Internet Software Consortium.
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt * Portions Copyright (C) 1995-2000 by Network Associates, Inc.
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Permission to use, copy, modify, and distribute this software for any
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * purpose with or without fee is hereby granted, provided that the above
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt * copyright notice and this permission notice appear in all copies.
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM AND
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt * NETWORK ASSOCIATES DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt * SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt * FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE CONSORTIUM OR NETWORK
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt * ASSOCIATES BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
35c014cb1d151983c455ad1ac99093591cbda97aMark Andrews * PERFORMANCE OF THIS SOFTWARE.
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt * Principal Author: Brian Wellington
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt * $Id: openssldh_link.c,v 1.27 2000/08/01 01:27:54 tale Exp $
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt#define PRIME768 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088" \
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt "A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25" \
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt "F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A63A3620FFFFFFFFFFFFFFFF"
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt#define PRIME1024 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08" \
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF2" \
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt "5F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406" \
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt "B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF"
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Huntstatic isc_result_t openssldh_todns(const dst_key_t *key, isc_buffer_t *data);
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Huntopenssldh_computesecret(const dst_key_t *pub, const dst_key_t *priv,
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt unsigned int len;
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt ret = DH_compute_key(r.base, dhpub->pub_key, dhpriv);
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Huntopenssldh_compare(const dst_key_t *key1, const dst_key_t *key2) {
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt if (dh1->priv_key != NULL || dh2->priv_key != NULL) {
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt if (dh1->priv_key == NULL || dh2->priv_key == NULL)
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Huntopenssldh_paramcompare(const dst_key_t *key1, const dst_key_t *key2) {
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Huntopenssldh_generate(dst_key_t *key, int generator) {
4e8fe357a619ae2b789b15df7e3d6abf782b4a71Evan Hunt if (key->key_size == 768 || key->key_size == 1024) {
35c014cb1d151983c455ad1ac99093591cbda97aMark Andrews dh = DH_generate_parameters(key->key_size, generator,
35c014cb1d151983c455ad1ac99093591cbda97aMark Andrews isc_buffer_init(&dns, dns_array, sizeof(dns_array));
35c014cb1d151983c455ad1ac99093591cbda97aMark Andrews return (ISC_TF(dh != NULL && dh->priv_key != NULL));
35c014cb1d151983c455ad1ac99093591cbda97aMark Andrewsuint16_toregion(isc_uint16_t val, isc_region_t *region) {
35c014cb1d151983c455ad1ac99093591cbda97aMark Andrewsopenssldh_todns(const dst_key_t *key, isc_buffer_t *data) {
02ceed9f83f82f0de35c7bd73c27a33d4f0fe9cbMark Andrews if (dh->g == &bn2 && (dh->p == &bn768 || dh->p == &bn1024)) {
35c014cb1d151983c455ad1ac99093591cbda97aMark Andrewsopenssldh_fromdns(dst_key_t *key, isc_buffer_t *data) {
35c014cb1d151983c455ad1ac99093591cbda97aMark Andrews * Read the prime length. 1 & 2 are table entries, > 16 means a
35c014cb1d151983c455ad1ac99093591cbda97aMark Andrews * prime follows, otherwise an error.
35c014cb1d151983c455ad1ac99093591cbda97aMark Andrews * Read the generator length. This should be 0 if the prime was
35c014cb1d151983c455ad1ac99093591cbda97aMark Andrews * special, but it might not be. If it's 0 and the prime is not
35c014cb1d151983c455ad1ac99093591cbda97aMark Andrews * special, we have a problem.
return (DST_R_INVALIDPUBLICKEY);
if (glen == 0) {
return (DST_R_INVALIDPUBLICKEY);
return (DST_R_INVALIDPUBLICKEY);
return (DST_R_INVALIDPUBLICKEY);
return (ISC_R_SUCCESS);
static isc_result_t
int cnt = 0;
return (DST_R_NULLKEY);
cnt++;
cnt++;
cnt++;
cnt++;
static isc_result_t
isc_region_t r;
return (ret);
case TAG_DH_PRIME:
case TAG_DH_GENERATOR:
case TAG_DH_PRIVATE:
case TAG_DH_PUBLIC:
return (ISC_R_SUCCESS);
err:
return (ret);
return (ISC_R_SUCCESS);
dst__openssldh_destroy(void) {