summaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
authorjkh <jkh@FreeBSD.org>2000-02-22 06:22:54 +0000
committerjkh <jkh@FreeBSD.org>2000-02-22 06:22:54 +0000
commitc99b4c1afc11b82ebcb8e8ad2a9285d44791b92f (patch)
tree64fa0408ab2433f0f3e68d45a350da8b5572d32f /crypto
parentbaa4395a04d543bb6c3846a0a0de707ce14601af (diff)
downloadFreeBSD-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')
-rw-r--r--crypto/openssl/rsaref/rsaref_stubs.c161
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 */
OpenPOWER on IntegriCloud