diff options
author | jkh <jkh@FreeBSD.org> | 2000-02-22 06:22:54 +0000 |
---|---|---|
committer | jkh <jkh@FreeBSD.org> | 2000-02-22 06:22:54 +0000 |
commit | c99b4c1afc11b82ebcb8e8ad2a9285d44791b92f (patch) | |
tree | 64fa0408ab2433f0f3e68d45a350da8b5572d32f /crypto/openssl | |
parent | baa4395a04d543bb6c3846a0a0de707ce14601af (diff) | |
download | FreeBSD-src-c99b4c1afc11b82ebcb8e8ad2a9285d44791b92f.zip FreeBSD-src-c99b4c1afc11b82ebcb8e8ad2a9285d44791b92f.tar.gz |
Add call stubs for dynamic rsaref loading. This isn't enabled for now
but simply lets us sync up on the solution as it's evolved.
Diffstat (limited to 'crypto/openssl')
-rw-r--r-- | crypto/openssl/rsaref/rsaref_stubs.c | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/crypto/openssl/rsaref/rsaref_stubs.c b/crypto/openssl/rsaref/rsaref_stubs.c new file mode 100644 index 0000000..3ba5bab --- /dev/null +++ b/crypto/openssl/rsaref/rsaref_stubs.c @@ -0,0 +1,161 @@ +/* + * $FreeBSD$ + * + * Copyright (c) 2000 + * Jordan Hubbard. All rights reserved. + * + * Stub functions for RSA code. If you link with this code, you will + * get a full set of weak symbol references to the rsaref library + * functions which are required by openssl. These can then be occluded + * by the real rsaref library by explicitly linking with it or, failing + * that, these stub functions will also attempt to find an appropriate + * rsaref library in the search path and do the link-up at runtime. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer, + * verbatim and that no modifications are made prior to this + * point in the file. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. SO THERE. + * + */ + +#ifndef NO_RSA +#include <dlfcn.h> +#include <stdio.h> + +#define RSA_SHLIB "librsaref.so" /* be more exact if you need to */ +#define VERBOSE_STUBS /* undef if you don't want missing rsaref reported */ + +static void * +getsym(const char *sym) +{ + static void *rsalib; + static int whined; + void *ret = NULL; + + if (!rsalib) + rsalib = dlopen(RSA_SHLIB, RTLD_LAZY); + if (rsalib) + ret = dlsym(rsalib, sym); +#ifdef VERBOSE_STUBS + if (!ret && !whined) { + fprintf(stderr, "** %s: Unable to find an rsaref shared library (%s).\n", sym, RSA_SHLIB); + fprintf(stderr, "** Install an RSA package on your system and run this program again\n"); + whined = 1; + } +#endif + return ret; +} + +#pragma weak RSAPrivateDecrypt=RSAPrivateDecrypt_stub +int +RSAPrivateDecrypt_stub(unsigned char *output, unsigned int *outlen, + unsigned char *input, int inputlen, void *RSAkey) +{ + static int (*sym)(unsigned char *, unsigned int *, unsigned char *, int, void *); + + if (sym || (sym = getsym("RSAPrivateDecrypt"))) + return sym(output, outlen, input, inputlen, RSAkey); + return 0; +} + +#pragma weak RSAPrivateEncrypt=RSAPrivateEncrypt_stub +int +RSAPrivateEncrypt_stub(unsigned char *output, unsigned int *outlen, + unsigned char *input, int inputlen, void *RSAkey) +{ + static int (*sym)(unsigned char *, unsigned int *, unsigned char *, int, void *); + + if (sym || (sym = getsym("RSAPrivateEncrypt"))) + return sym(output, outlen, input, inputlen, RSAkey); + return 0; +} + +#pragma weak RSAPublicDecrypt=RSAPublicDecrypt_stub +int +RSAPublicDecrypt_stub(unsigned char *output, unsigned int *outlen, + unsigned char *input, int inputlen, void *RSAkey) +{ + static int (*sym)(unsigned char *, unsigned int *, unsigned char *, int, void *); + + if (sym || (sym = getsym("RSAPublicDecrypt"))) + return sym(output, outlen, input, inputlen, RSAkey); + return 0; +} + +#pragma weak RSAPublicEncrypt=RSAPublicEncrypt_stub +int +RSAPublicEncrypt_stub(unsigned char *output, unsigned int *outlen, + unsigned char *input, int inputlen, void *RSAkey, void *randomStruct) +{ + static int (*sym)(unsigned char *, unsigned int *, unsigned char *, int, + void *, void *); + + if (sym || (sym = getsym("RSAPublicEncrypt"))) + return sym(output, outlen, input, inputlen, RSAkey, randomStruct); + return 0; +} + +#pragma weak R_GetRandomBytesNeeded=R_GetRandomBytesNeeded_stub +int +R_GetRandomBytesNeeded_stub(unsigned int *bytesNeeded, void *randomStruct) +{ + static int (*sym)(unsigned int *, void *); + + if (sym || (sym = getsym("R_GetRandomBytesNeeded"))) + return sym(bytesNeeded, randomStruct); + return 0; +} + +#pragma weak R_RandomFinal=R_RandomFinal_stub +void +R_RandomFinal_stub(void *randomStruct) +{ + static void (*sym)(void *); + + if (sym || (sym = getsym("R_RandomFinal"))) + sym(randomStruct); +} + +#pragma weak R_RandomInit=R_RandomInit_stub +int +R_RandomInit_stub(void *randomStruct) +{ + static int (*sym)(void *); + + if (sym || (sym = getsym("R_RandomInit"))) + sym(randomStruct); + return 0; +} + +#pragma weak R_RandomUpdate=R_RandomUpdate_stub +int +R_RandomUpdate_stub(void *randomStruct, + unsigned char *block, unsigned int blockLen) +{ + static int (*sym)(void *, unsigned char *, unsigned int); + + if (sym || (sym = getsym("R_RandomUpdate"))) + sym(randomStruct, block, blockLen); + return 0; +} + +#endif /* NO_RSA */ |