summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarkus <>2002-09-05 12:51:52 +0000
committermarkus <>2002-09-05 12:51:52 +0000
commitb200d1ec45aafc7c92b197a4b605e34834d74f1d (patch)
tree2ac47a569cf091151154089c2da1ba18b3701fd6
parentfc21fc70b816bb7340331c8ce53fd71211879700 (diff)
parent5514995a9d5ed91db089875adb509c7781357c0e (diff)
downloadopenbsd-b200d1ec45aafc7c92b197a4b605e34834d74f1d.tar.gz
openbsd-b200d1ec45aafc7c92b197a4b605e34834d74f1d.tar.bz2
openbsd-b200d1ec45aafc7c92b197a4b605e34834d74f1d.zip
This commit was generated by cvs2git to track changes on a CVS vendor
branch.
-rw-r--r--src/lib/libcrypto/opensslconf.h180
-rw-r--r--src/lib/libcrypto/util/pod2mantest53
-rw-r--r--src/lib/libcrypto/util/pod2mantest.pod15
-rw-r--r--src/lib/libssl/src/VMS/tcpip_shr_decc.opt1
-rw-r--r--src/lib/libssl/src/crypto/opensslconf.h180
-rw-r--r--src/lib/libssl/src/demos/engines/rsaref/Makefile119
-rw-r--r--src/lib/libssl/src/demos/engines/rsaref/README22
-rw-r--r--src/lib/libssl/src/demos/engines/rsaref/build.com85
-rw-r--r--src/lib/libssl/src/demos/engines/rsaref/rsaref.c682
-rw-r--r--src/lib/libssl/src/demos/engines/rsaref/rsaref.ec8
-rw-r--r--src/lib/libssl/src/demos/engines/rsaref/rsaref_err.c161
-rw-r--r--src/lib/libssl/src/demos/engines/rsaref/rsaref_err.h109
-rw-r--r--src/lib/libssl/src/util/pod2mantest53
-rw-r--r--src/lib/libssl/src/util/pod2mantest.pod15
14 files changed, 1683 insertions, 0 deletions
diff --git a/src/lib/libcrypto/opensslconf.h b/src/lib/libcrypto/opensslconf.h
new file mode 100644
index 0000000000..c9756e47a3
--- /dev/null
+++ b/src/lib/libcrypto/opensslconf.h
@@ -0,0 +1,180 @@
1/* opensslconf.h */
2/* WARNING: Generated automatically from opensslconf.h.in by Configure. */
3
4/* OpenSSL was configured with the following options: */
5#ifndef OPENSSL_DOING_MAKEDEPEND
6
7#ifndef OPENSSL_NO_KRB5
8# define OPENSSL_NO_KRB5
9#endif
10
11#endif /* OPENSSL_DOING_MAKEDEPEND */
12
13/* The OPENSSL_NO_* macros are also defined as NO_* if the application
14 asks for it. This is a transient feature that is provided for those
15 who haven't had the time to do the appropriate changes in their
16 applications. */
17#ifdef OPENSSL_ALGORITHM_DEFINES
18# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5)
19# define NO_KRB5
20# endif
21#endif
22
23/* crypto/opensslconf.h.in */
24
25/* Generate 80386 code? */
26#undef I386_ONLY
27
28#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
29#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
30#define OPENSSLDIR "/usr/local/ssl"
31#endif
32#endif
33
34#undef OPENSSL_UNISTD
35#define OPENSSL_UNISTD <unistd.h>
36
37#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
38
39#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)
40#define IDEA_INT unsigned int
41#endif
42
43#if defined(HEADER_MD2_H) && !defined(MD2_INT)
44#define MD2_INT unsigned int
45#endif
46
47#if defined(HEADER_RC2_H) && !defined(RC2_INT)
48/* I need to put in a mod for the alpha - eay */
49#define RC2_INT unsigned int
50#endif
51
52#if defined(HEADER_RC4_H)
53#if !defined(RC4_INT)
54/* using int types make the structure larger but make the code faster
55 * on most boxes I have tested - up to %20 faster. */
56/*
57 * I don't know what does "most" mean, but declaring "int" is a must on:
58 * - Intel P6 because partial register stalls are very expensive;
59 * - elder Alpha because it lacks byte load/store instructions;
60 */
61#define RC4_INT unsigned int
62#endif
63#if !defined(RC4_CHUNK)
64/*
65 * This enables code handling data aligned at natural CPU word
66 * boundary. See crypto/rc4/rc4_enc.c for further details.
67 */
68#undef RC4_CHUNK
69#endif
70#endif
71
72#if (defined(HEADER_DES_H) || defined(HEADER_DES_OLD_H)) && !defined(DES_LONG)
73/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a
74 * %20 speed up (longs are 8 bytes, int's are 4). */
75#ifndef DES_LONG
76#define DES_LONG unsigned long
77#endif
78#endif
79
80#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)
81#define CONFIG_HEADER_BN_H
82#undef BN_LLONG
83
84/* Should we define BN_DIV2W here? */
85
86/* Only one for the following should be defined */
87/* The prime number generation stuff may not work when
88 * EIGHT_BIT but I don't care since I've only used this mode
89 * for debuging the bignum libraries */
90#undef SIXTY_FOUR_BIT_LONG
91#undef SIXTY_FOUR_BIT
92#define THIRTY_TWO_BIT
93#undef SIXTEEN_BIT
94#undef EIGHT_BIT
95#endif
96
97#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H)
98#define CONFIG_HEADER_RC4_LOCL_H
99/* if this is defined data[i] is used instead of *data, this is a %20
100 * speedup on x86 */
101#undef RC4_INDEX
102#endif
103
104#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
105#define CONFIG_HEADER_BF_LOCL_H
106#undef BF_PTR
107#endif /* HEADER_BF_LOCL_H */
108
109#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)
110#define CONFIG_HEADER_DES_LOCL_H
111#ifndef DES_DEFAULT_OPTIONS
112/* the following is tweaked from a config script, that is why it is a
113 * protected undef/define */
114#ifndef DES_PTR
115#undef DES_PTR
116#endif
117
118/* This helps C compiler generate the correct code for multiple functional
119 * units. It reduces register dependancies at the expense of 2 more
120 * registers */
121#ifndef DES_RISC1
122#undef DES_RISC1
123#endif
124
125#ifndef DES_RISC2
126#undef DES_RISC2
127#endif
128
129#if defined(DES_RISC1) && defined(DES_RISC2)
130YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
131#endif
132
133/* Unroll the inner loop, this sometimes helps, sometimes hinders.
134 * Very mucy CPU dependant */
135#ifndef DES_UNROLL
136#undef DES_UNROLL
137#endif
138
139/* These default values were supplied by
140 * Peter Gutman <pgut001@cs.auckland.ac.nz>
141 * They are only used if nothing else has been defined */
142#if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL)
143/* Special defines which change the way the code is built depending on the
144 CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find
145 even newer MIPS CPU's, but at the moment one size fits all for
146 optimization options. Older Sparc's work better with only UNROLL, but
147 there's no way to tell at compile time what it is you're running on */
148
149#if defined( sun ) /* Newer Sparc's */
150# define DES_PTR
151# define DES_RISC1
152# define DES_UNROLL
153#elif defined( __ultrix ) /* Older MIPS */
154# define DES_PTR
155# define DES_RISC2
156# define DES_UNROLL
157#elif defined( __osf1__ ) /* Alpha */
158# define DES_PTR
159# define DES_RISC2
160#elif defined ( _AIX ) /* RS6000 */
161 /* Unknown */
162#elif defined( __hpux ) /* HP-PA */
163 /* Unknown */
164#elif defined( __aux ) /* 68K */
165 /* Unknown */
166#elif defined( __dgux ) /* 88K (but P6 in latest boxes) */
167# define DES_UNROLL
168#elif defined( __sgi ) /* Newer MIPS */
169# define DES_PTR
170# define DES_RISC2
171# define DES_UNROLL
172#elif defined(i386) || defined(__i386__) /* x86 boxes, should be gcc */
173# define DES_PTR
174# define DES_RISC1
175# define DES_UNROLL
176#endif /* Systems-specific speed defines */
177#endif
178
179#endif /* DES_DEFAULT_OPTIONS */
180#endif /* HEADER_DES_LOCL_H */
diff --git a/src/lib/libcrypto/util/pod2mantest b/src/lib/libcrypto/util/pod2mantest
new file mode 100644
index 0000000000..79aefafac0
--- /dev/null
+++ b/src/lib/libcrypto/util/pod2mantest
@@ -0,0 +1,53 @@
1#!/bin/sh
2
3# This script is used by test/Makefile.ssl to check whether a sane 'pod2man'
4# is installed.
5# ('make install' should not try to run 'pod2man' if it does not exist or if
6# it is a broken 'pod2man' version that is known to cause trouble. if we find
7# the system 'pod2man' to be broken, we use our own copy instead)
8#
9# In any case, output an appropriate command line for running (or not
10# running) pod2man.
11
12
13IFS=:
14try_without_dir=true
15# First we try "pod2man", then "$dir/pod2man" for each item in $PATH.
16for dir in dummy:$PATH; do
17 if [ "$try_without_dir" = true ]; then
18 # first iteration
19 pod2man=pod2man
20 try_without_dir=false
21 else
22 # second and later iterations
23 pod2man="$dir/pod2man"
24 if [ ! -f "$pod2man" ]; then # '-x' is not available on Ultrix
25 pod2man=''
26 fi
27 fi
28
29 if [ ! "$pod2man" = '' ]; then
30 failure=none
31
32
33 if "$pod2man" --section=1 --center=OpenSSL --release=dev pod2mantest.pod | grep '^MARKER - ' >/dev/null 2>&1; then
34 failure=MultilineTest
35 fi
36
37
38 if [ "$failure" = none ]; then
39 echo "$pod2man"
40 exit 0
41 fi
42
43 echo "$pod2man does not work properly ('$failure' failed). Looking for another pod2man ..." >&2
44 fi
45done
46
47echo "No working pod2man found. Consider installing a new version." >&2
48if [ "$1" = ignore ]; then
49 echo "As a workaround, we'll use a bundled old copy of pod2man.pl." >&2
50 echo "util/pod2man.pl"
51 exit 0
52fi
53exit 1
diff --git a/src/lib/libcrypto/util/pod2mantest.pod b/src/lib/libcrypto/util/pod2mantest.pod
new file mode 100644
index 0000000000..5d2539a17f
--- /dev/null
+++ b/src/lib/libcrypto/util/pod2mantest.pod
@@ -0,0 +1,15 @@
1=pod
2
3=head1 NAME
4
5foo, bar,
6MARKER - test of multiline name section
7
8=head1 DESCRIPTION
9
10This is a test .pod file to see if we have a buggy pod2man or not.
11If we have a buggy implementation, we will get a line matching the
12regular expression "^ +MARKER - test of multiline name section *$"
13at the end of the resulting document.
14
15=cut
diff --git a/src/lib/libssl/src/VMS/tcpip_shr_decc.opt b/src/lib/libssl/src/VMS/tcpip_shr_decc.opt
new file mode 100644
index 0000000000..33b159e5f5
--- /dev/null
+++ b/src/lib/libssl/src/VMS/tcpip_shr_decc.opt
@@ -0,0 +1 @@
sys$share:tcpip$ipc_shr.exe/share
diff --git a/src/lib/libssl/src/crypto/opensslconf.h b/src/lib/libssl/src/crypto/opensslconf.h
new file mode 100644
index 0000000000..c9756e47a3
--- /dev/null
+++ b/src/lib/libssl/src/crypto/opensslconf.h
@@ -0,0 +1,180 @@
1/* opensslconf.h */
2/* WARNING: Generated automatically from opensslconf.h.in by Configure. */
3
4/* OpenSSL was configured with the following options: */
5#ifndef OPENSSL_DOING_MAKEDEPEND
6
7#ifndef OPENSSL_NO_KRB5
8# define OPENSSL_NO_KRB5
9#endif
10
11#endif /* OPENSSL_DOING_MAKEDEPEND */
12
13/* The OPENSSL_NO_* macros are also defined as NO_* if the application
14 asks for it. This is a transient feature that is provided for those
15 who haven't had the time to do the appropriate changes in their
16 applications. */
17#ifdef OPENSSL_ALGORITHM_DEFINES
18# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5)
19# define NO_KRB5
20# endif
21#endif
22
23/* crypto/opensslconf.h.in */
24
25/* Generate 80386 code? */
26#undef I386_ONLY
27
28#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
29#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
30#define OPENSSLDIR "/usr/local/ssl"
31#endif
32#endif
33
34#undef OPENSSL_UNISTD
35#define OPENSSL_UNISTD <unistd.h>
36
37#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
38
39#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)
40#define IDEA_INT unsigned int
41#endif
42
43#if defined(HEADER_MD2_H) && !defined(MD2_INT)
44#define MD2_INT unsigned int
45#endif
46
47#if defined(HEADER_RC2_H) && !defined(RC2_INT)
48/* I need to put in a mod for the alpha - eay */
49#define RC2_INT unsigned int
50#endif
51
52#if defined(HEADER_RC4_H)
53#if !defined(RC4_INT)
54/* using int types make the structure larger but make the code faster
55 * on most boxes I have tested - up to %20 faster. */
56/*
57 * I don't know what does "most" mean, but declaring "int" is a must on:
58 * - Intel P6 because partial register stalls are very expensive;
59 * - elder Alpha because it lacks byte load/store instructions;
60 */
61#define RC4_INT unsigned int
62#endif
63#if !defined(RC4_CHUNK)
64/*
65 * This enables code handling data aligned at natural CPU word
66 * boundary. See crypto/rc4/rc4_enc.c for further details.
67 */
68#undef RC4_CHUNK
69#endif
70#endif
71
72#if (defined(HEADER_DES_H) || defined(HEADER_DES_OLD_H)) && !defined(DES_LONG)
73/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a
74 * %20 speed up (longs are 8 bytes, int's are 4). */
75#ifndef DES_LONG
76#define DES_LONG unsigned long
77#endif
78#endif
79
80#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)
81#define CONFIG_HEADER_BN_H
82#undef BN_LLONG
83
84/* Should we define BN_DIV2W here? */
85
86/* Only one for the following should be defined */
87/* The prime number generation stuff may not work when
88 * EIGHT_BIT but I don't care since I've only used this mode
89 * for debuging the bignum libraries */
90#undef SIXTY_FOUR_BIT_LONG
91#undef SIXTY_FOUR_BIT
92#define THIRTY_TWO_BIT
93#undef SIXTEEN_BIT
94#undef EIGHT_BIT
95#endif
96
97#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H)
98#define CONFIG_HEADER_RC4_LOCL_H
99/* if this is defined data[i] is used instead of *data, this is a %20
100 * speedup on x86 */
101#undef RC4_INDEX
102#endif
103
104#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
105#define CONFIG_HEADER_BF_LOCL_H
106#undef BF_PTR
107#endif /* HEADER_BF_LOCL_H */
108
109#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)
110#define CONFIG_HEADER_DES_LOCL_H
111#ifndef DES_DEFAULT_OPTIONS
112/* the following is tweaked from a config script, that is why it is a
113 * protected undef/define */
114#ifndef DES_PTR
115#undef DES_PTR
116#endif
117
118/* This helps C compiler generate the correct code for multiple functional
119 * units. It reduces register dependancies at the expense of 2 more
120 * registers */
121#ifndef DES_RISC1
122#undef DES_RISC1
123#endif
124
125#ifndef DES_RISC2
126#undef DES_RISC2
127#endif
128
129#if defined(DES_RISC1) && defined(DES_RISC2)
130YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
131#endif
132
133/* Unroll the inner loop, this sometimes helps, sometimes hinders.
134 * Very mucy CPU dependant */
135#ifndef DES_UNROLL
136#undef DES_UNROLL
137#endif
138
139/* These default values were supplied by
140 * Peter Gutman <pgut001@cs.auckland.ac.nz>
141 * They are only used if nothing else has been defined */
142#if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL)
143/* Special defines which change the way the code is built depending on the
144 CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find
145 even newer MIPS CPU's, but at the moment one size fits all for
146 optimization options. Older Sparc's work better with only UNROLL, but
147 there's no way to tell at compile time what it is you're running on */
148
149#if defined( sun ) /* Newer Sparc's */
150# define DES_PTR
151# define DES_RISC1
152# define DES_UNROLL
153#elif defined( __ultrix ) /* Older MIPS */
154# define DES_PTR
155# define DES_RISC2
156# define DES_UNROLL
157#elif defined( __osf1__ ) /* Alpha */
158# define DES_PTR
159# define DES_RISC2
160#elif defined ( _AIX ) /* RS6000 */
161 /* Unknown */
162#elif defined( __hpux ) /* HP-PA */
163 /* Unknown */
164#elif defined( __aux ) /* 68K */
165 /* Unknown */
166#elif defined( __dgux ) /* 88K (but P6 in latest boxes) */
167# define DES_UNROLL
168#elif defined( __sgi ) /* Newer MIPS */
169# define DES_PTR
170# define DES_RISC2
171# define DES_UNROLL
172#elif defined(i386) || defined(__i386__) /* x86 boxes, should be gcc */
173# define DES_PTR
174# define DES_RISC1
175# define DES_UNROLL
176#endif /* Systems-specific speed defines */
177#endif
178
179#endif /* DES_DEFAULT_OPTIONS */
180#endif /* HEADER_DES_LOCL_H */
diff --git a/src/lib/libssl/src/demos/engines/rsaref/Makefile b/src/lib/libssl/src/demos/engines/rsaref/Makefile
new file mode 100644
index 0000000000..5fbcda3576
--- /dev/null
+++ b/src/lib/libssl/src/demos/engines/rsaref/Makefile
@@ -0,0 +1,119 @@
1LIBNAME= librsaref
2SRC= rsaref.c
3OBJ= rsaref.o
4HEADER= rsaref.h
5
6CC= gcc
7PIC= -fPIC
8CFLAGS= -g -I../../../include $(PIC) -DENGINE_DYNAMIC_SUPPORT
9AR= ar r
10RANLIB= ranlib
11
12LIB= $(LIBNAME).a
13SHLIB= $(LIBNAME).so
14
15all:
16 @echo 'Please choose a system to build on:'
17 @echo ''
18 @echo 'tru64: Tru64 Unix, Digital Unix, Digital OSF/1'
19 @echo 'solaris: Solaris'
20 @echo 'irix: IRIX'
21 @echo 'hpux32: 32-bit HP/UX'
22 @echo 'hpux64: 64-bit HP/UX'
23 @echo 'aix: AIX'
24 @echo 'gnu: Generic GNU-based system (gcc and GNU ld)'
25 @echo ''
26
27FORCE.install:
28install: FORCE.install
29 cd install; \
30 make -f unix/makefile CFLAGS='-I. -DPROTOTYPES=1 -O -c' RSAREFLIB=librsaref.a librsaref.a
31
32FORCE.update:
33update: FORCE.update
34 perl ../../../util/mkerr.pl -conf rsaref.ec \
35 -nostatic -staticloader -write rsaref.c
36
37gnu: install $(SHLIB).gnu
38tru64: install $(SHLIB).tru64
39solaris: install $(SHLIB).solaris
40irix: install $(SHLIB).irix
41hpux32: install $(SHLIB).hpux32
42hpux64: install $(SHLIB).hpux64
43aix: install $(SHLIB).aix
44
45$(LIB): $(OBJ)
46 $(AR) $(LIB) $(OBJ)
47 - $(RANLIB) $(LIB)
48
49LINK_SO= \
50 ld -r -o $(LIBNAME).o $$ALLSYMSFLAGS $(LIB) install/librsaref.a && \
51 (nm -Pg $(LIBNAME).o | grep ' [BD] ' | cut -f1 -d' ' > $(LIBNAME).exp; \
52 $$SHAREDCMD $$SHAREDFLAGS -o $(SHLIB) $(LIBNAME).o -L ../../.. -lcrypto -lc)
53
54$(SHLIB).gnu: $(LIB) install/librsaref.a
55 ALLSYMSFLAGS='--whole-archive' \
56 SHAREDFLAGS='-shared -Wl,-soname=$(SHLIB)' \
57 SHAREDCMD='$(CC)'; \
58 $(LINK_SO)
59 touch $(SHLIB).gnu
60$(SHLIB).tru64: $(LIB) install/librsaref.a
61 ALLSYMSFLAGS='-all' \
62 SHAREDFLAGS='-shared' \
63 SHAREDCMD='$(CC)'; \
64 $(LINK_SO)
65 touch $(SHLIB).tru64
66$(SHLIB).solaris: $(LIB) install/librsaref.a
67 ALLSYMSFLAGS='-z allextract' \
68 SHAREDFLAGS='-G -h $(SHLIB)' \
69 SHAREDCMD='$(CC)'; \
70 $(LINK_SO)
71 touch $(SHLIB).solaris
72$(SHLIB).irix: $(LIB) install/librsaref.a
73 ALLSYMSFLAGS='-all' \
74 SHAREDFLAGS='-shared -Wl,-soname,$(SHLIB)' \
75 SHAREDCMD='$(CC)'; \
76 $(LINK_SO)
77 touch $(SHLIB).irix
78$(SHLIB).hpux32: $(LIB) install/librsaref.a
79 ALLSYMSFLAGS='-Fl' \
80 SHAREDFLAGS='+vnocompatwarnings -b -z +s +h $(SHLIB)' \
81 SHAREDCMD='/usr/ccs/bin/ld'; \
82 $(LINK_SO)
83 touch $(SHLIB).hpux32
84$(SHLIB).hpux64: $(LIB) install/librsaref.a
85 ALLSYMSFLAGS='+forceload' \
86 SHAREDFLAGS='-b -z +h $(SHLIB)' \
87 SHAREDCMD='/usr/ccs/bin/ld'; \
88 $(LINK_SO)
89 touch $(SHLIB).hpux64
90$(SHLIB).aix: $(LIB) install/librsaref.a
91 ALLSYMSFLAGS='-bnogc' \
92 SHAREDFLAGS='-G -bE:$(LIBNAME).exp -bM:SRE' \
93 SHAREDCMD='$(CC)'; \
94 $(LINK_SO)
95 touch $(SHLIB).aix
96
97depend:
98 sed -e '/^# DO NOT DELETE.*/,$$d' < Makefile > Makefile.tmp
99 echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' >> Makefile.tmp
100 gcc -M $(CFLAGS) $(SRC) >> Makefile.tmp
101 perl ../../../util/clean-depend.pl < Makefile.tmp > Makefile.new
102 rm -f Makefile.tmp Makefile
103 mv Makefile.new Makefile
104
105# DO NOT DELETE THIS LINE -- make depend depends on it.
106
107rsaref.o: ../../../include/openssl/asn1.h ../../../include/openssl/bio.h
108rsaref.o: ../../../include/openssl/bn.h ../../../include/openssl/crypto.h
109rsaref.o: ../../../include/openssl/dh.h ../../../include/openssl/dsa.h
110rsaref.o: ../../../include/openssl/e_os2.h ../../../include/openssl/engine.h
111rsaref.o: ../../../include/openssl/err.h ../../../include/openssl/lhash.h
112rsaref.o: ../../../include/openssl/opensslconf.h
113rsaref.o: ../../../include/openssl/opensslv.h
114rsaref.o: ../../../include/openssl/ossl_typ.h ../../../include/openssl/rand.h
115rsaref.o: ../../../include/openssl/rsa.h ../../../include/openssl/safestack.h
116rsaref.o: ../../../include/openssl/stack.h ../../../include/openssl/symhacks.h
117rsaref.o: ../../../include/openssl/ui.h rsaref.c rsaref_err.c rsaref_err.h
118rsaref.o: source/des.h source/global.h source/md2.h source/md5.h source/rsa.h
119rsaref.o: source/rsaref.h
diff --git a/src/lib/libssl/src/demos/engines/rsaref/README b/src/lib/libssl/src/demos/engines/rsaref/README
new file mode 100644
index 0000000000..00b1f7473b
--- /dev/null
+++ b/src/lib/libssl/src/demos/engines/rsaref/README
@@ -0,0 +1,22 @@
1librsaref.so is a demonstration dynamic engine that does RSA
2operations using the old RSAref 2.0 implementation.
3
4To make proper use of this engine, you must download RSAref 2.0
5(search the web for rsaref.tar.Z for example) and unpack it in this
6directory, so you'll end up having the subdirectories "install" and
7"source" among others.
8
9To build, do the following:
10
11 make
12
13This will list a number of available targets to choose from. Most of
14them are architecture-specific. The exception is "gnu" which is to be
15used on systems where GNU ld and gcc have been installed in such a way
16that gcc uses GNU ld to link together programs and shared libraries.
17
18The make file assumes you use gcc. To change that, just reassign CC:
19
20 make CC=cc
21
22The result is librsaref.so, which you can copy to any place you wish.
diff --git a/src/lib/libssl/src/demos/engines/rsaref/build.com b/src/lib/libssl/src/demos/engines/rsaref/build.com
new file mode 100644
index 0000000000..b956912916
--- /dev/null
+++ b/src/lib/libssl/src/demos/engines/rsaref/build.com
@@ -0,0 +1,85 @@
1$! BUILD.COM -- Building procedure for the RSAref engine
2$
3$ if f$search("source.dir") .eqs. "" -
4 .or. f$search("install.dir") .eqs. ""
5$ then
6$ write sys$error "RSAref 2.0 hasn't been properly extracted."
7$ exit
8$ endif
9$
10$ _save_default = f$environment("default")
11$ set default [.install]
12$ files := desc,digit,md2c,md5c,nn,prime,-
13 rsa,r_encode,r_dh,r_enhanc,r_keygen,r_random,-
14 r_stdlib
15$ delete rsaref.olb;*
16$ library/create/object rsaref.olb
17$ files_i = 0
18$ rsaref_loop:
19$ files_e = f$edit(f$element(files_i,",",files),"trim")
20$ files_i = files_i + 1
21$ if files_e .eqs. "," then goto rsaref_loop_end
22$ cc/include=([-.source],[])/define=PROTOTYPES=1/object=[]'files_e'.obj -
23 [-.source]'files_e'.c
24$ library/replace/object rsaref.olb 'files_e'.obj
25$ goto rsaref_loop
26$ rsaref_loop_end:
27$
28$ set default [-]
29$ define/user openssl [---.include.openssl]
30$ cc/define=ENGINE_DYNAMIC_SUPPORT rsaref.c
31$
32$ if f$getsyi("CPU") .ge. 128
33$ then
34$ link/share=librsaref.exe sys$input:/option
35[]rsaref.obj
36[.install]rsaref.olb/lib
37[---.axp.exe.crypto]libcrypto.olb/lib
38symbol_vector=(bind_engine=procedure,v_check=procedure)
39$ else
40$ macro/object=rsaref_vec.obj sys$input:
41;
42; Transfer vector for VAX shareable image
43;
44 .TITLE librsaref
45;
46; Define macro to assist in building transfer vector entries. Each entry
47; should take no more than 8 bytes.
48;
49 .MACRO FTRANSFER_ENTRY routine
50 .ALIGN QUAD
51 .TRANSFER routine
52 .MASK routine
53 JMP routine+2
54 .ENDM FTRANSFER_ENTRY
55;
56; Place entries in own program section.
57;
58 .PSECT $$LIBRSAREF,QUAD,PIC,USR,CON,REL,LCL,SHR,EXE,RD,NOWRT
59
60LIBRSAREF_xfer:
61 FTRANSFER_ENTRY bind_engine
62 FTRANSFER_ENTRY v_check
63
64;
65; Allocate extra storage at end of vector to allow for expansion.
66;
67 .BLKB 512-<.-LIBRSAREF_xfer> ; 1 page.
68 .END
69$ link/share=librsaref.exe sys$input:/option
70!
71! Ensure transfer vector is at beginning of image
72!
73CLUSTER=FIRST
74COLLECT=FIRST,$$LIBRSAREF
75!
76! make psects nonshareable so image can be installed.
77!
78PSECT_ATTR=$CHAR_STRING_CONSTANTS,NOWRT
79[]rsaref_vec.obj
80[]rsaref.obj
81[.install]rsaref.olb/lib
82[---.vax.exe.crypto]libcrypto.olb/lib
83$ endif
84$
85$ set default '_save_default'
diff --git a/src/lib/libssl/src/demos/engines/rsaref/rsaref.c b/src/lib/libssl/src/demos/engines/rsaref/rsaref.c
new file mode 100644
index 0000000000..e23f64c01e
--- /dev/null
+++ b/src/lib/libssl/src/demos/engines/rsaref/rsaref.c
@@ -0,0 +1,682 @@
1/* Demo of how to construct your own engine and using it. The basis of this
2 engine is RSAref, an old reference of the RSA algorithm which can still
3 be found a little here and there. */
4
5#include <stdio.h>
6#include "./source/global.h"
7#include "./source/rsaref.h"
8#include "./source/rsa.h"
9#include "./source/des.h"
10#include <openssl/err.h>
11#include <openssl/evp.h>
12#include <openssl/bn.h>
13#include <openssl/engine.h>
14
15#define RSAREF_LIB_NAME "rsaref engine"
16#include "rsaref_err.c"
17
18/*****************************************************************************
19 *** Function declarations and global variable definitions ***
20 *****************************************************************************/
21
22/*****************************************************************************
23 * Constants used when creating the ENGINE
24 **/
25static const char *engine_rsaref_id = "rsaref";
26static const char *engine_rsaref_name = "RSAref engine support";
27
28/*****************************************************************************
29 * Functions to handle the engine
30 **/
31static int rsaref_destroy(ENGINE *e);
32static int rsaref_init(ENGINE *e);
33static int rsaref_finish(ENGINE *e);
34#if 0
35static int rsaref_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)());
36#endif
37
38/*****************************************************************************
39 * Engine commands
40 **/
41static const ENGINE_CMD_DEFN rsaref_cmd_defns[] = {
42 {0, NULL, NULL, 0}
43 };
44
45/*****************************************************************************
46 * RSA functions
47 **/
48static int rsaref_private_decrypt(int len, const unsigned char *from,
49 unsigned char *to, RSA *rsa, int padding);
50static int rsaref_private_encrypt(int len, const unsigned char *from,
51 unsigned char *to, RSA *rsa, int padding);
52static int rsaref_public_encrypt(int len, const unsigned char *from,
53 unsigned char *to, RSA *rsa, int padding);
54static int rsaref_public_decrypt(int len, const unsigned char *from,
55 unsigned char *to, RSA *rsa, int padding);
56static int bnref_mod_exp(BIGNUM *r,const BIGNUM *a,const BIGNUM *p,const BIGNUM *m,
57 BN_CTX *ctx, BN_MONT_CTX *m_ctx);
58static int rsaref_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa);
59
60/*****************************************************************************
61 * Our RSA method
62 **/
63static RSA_METHOD rsaref_rsa =
64{
65 "RSAref PKCS#1 RSA",
66 rsaref_public_encrypt,
67 rsaref_public_decrypt,
68 rsaref_private_encrypt,
69 rsaref_private_decrypt,
70 rsaref_mod_exp,
71 bnref_mod_exp,
72 NULL,
73 NULL,
74 0,
75 NULL,
76 NULL,
77 NULL
78};
79
80/*****************************************************************************
81 * Symetric cipher and digest function registrars
82 **/
83static int rsaref_ciphers(ENGINE *e, const EVP_CIPHER **cipher,
84 const int **nids, int nid);
85static int rsaref_digests(ENGINE *e, const EVP_MD **digest,
86 const int **nids, int nid);
87
88static int rsaref_cipher_nids[] =
89 { NID_des_cbc, NID_des_ede3_cbc, NID_desx_cbc, 0 };
90static int rsaref_digest_nids[] =
91 { NID_md2, NID_md5, 0 };
92
93/*****************************************************************************
94 * DES functions
95 **/
96int cipher_des_cbc_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,
97 const unsigned char *iv, int enc);
98int cipher_des_cbc_code(EVP_CIPHER_CTX *ctx, unsigned char *out,
99 const unsigned char *in, unsigned int inl);
100int cipher_des_cbc_clean(EVP_CIPHER_CTX *);
101int cipher_des_ede3_cbc_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,
102 const unsigned char *iv, int enc);
103int cipher_des_ede3_cbc_code(EVP_CIPHER_CTX *ctx, unsigned char *out,
104 const unsigned char *in, unsigned int inl);
105int cipher_des_ede3_cbc_clean(EVP_CIPHER_CTX *);
106int cipher_desx_cbc_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,
107 const unsigned char *iv, int enc);
108int cipher_desx_cbc_code(EVP_CIPHER_CTX *ctx, unsigned char *out,
109 const unsigned char *in, unsigned int inl);
110int cipher_desx_cbc_clean(EVP_CIPHER_CTX *);
111
112/*****************************************************************************
113 * Our DES ciphers
114 **/
115static const EVP_CIPHER cipher_des_cbc =
116 {
117 NID_des_cbc,
118 8, 8, 8,
119 0,
120 cipher_des_cbc_init,
121 cipher_des_cbc_code,
122 cipher_des_cbc_clean,
123 sizeof(DES_CBC_CTX),
124 NULL,
125 NULL,
126 NULL,
127 NULL
128 };
129
130static const EVP_CIPHER cipher_des_ede3_cbc =
131 {
132 NID_des_ede3_cbc,
133 8, 24, 8,
134 0,
135 cipher_des_ede3_cbc_init,
136 cipher_des_ede3_cbc_code,
137 cipher_des_ede3_cbc_clean,
138 sizeof(DES3_CBC_CTX),
139 NULL,
140 NULL,
141 NULL,
142 NULL
143 };
144
145static const EVP_CIPHER cipher_desx_cbc =
146 {
147 NID_desx_cbc,
148 8, 24, 8,
149 0,
150 cipher_desx_cbc_init,
151 cipher_desx_cbc_code,
152 cipher_desx_cbc_clean,
153 sizeof(DESX_CBC_CTX),
154 NULL,
155 NULL,
156 NULL,
157 NULL
158 };
159
160/*****************************************************************************
161 * MD functions
162 **/
163static int digest_md2_init(EVP_MD_CTX *ctx);
164static int digest_md2_update(EVP_MD_CTX *ctx,const void *data,
165 unsigned long count);
166static int digest_md2_final(EVP_MD_CTX *ctx,unsigned char *md);
167static int digest_md5_init(EVP_MD_CTX *ctx);
168static int digest_md5_update(EVP_MD_CTX *ctx,const void *data,
169 unsigned long count);
170static int digest_md5_final(EVP_MD_CTX *ctx,unsigned char *md);
171
172/*****************************************************************************
173 * Our MD digests
174 **/
175static const EVP_MD digest_md2 =
176 {
177 NID_md2,
178 NID_md2WithRSAEncryption,
179 16,
180 0,
181 digest_md2_init,
182 digest_md2_update,
183 digest_md2_final,
184 NULL,
185 NULL,
186 EVP_PKEY_RSA_method,
187 16,
188 sizeof(MD2_CTX)
189 };
190
191static const EVP_MD digest_md5 =
192 {
193 NID_md5,
194 NID_md5WithRSAEncryption,
195 16,
196 0,
197 digest_md5_init,
198 digest_md5_update,
199 digest_md5_final,
200 NULL,
201 NULL,
202 EVP_PKEY_RSA_method,
203 64,
204 sizeof(MD5_CTX)
205 };
206
207/*****************************************************************************
208 *** Function definitions ***
209 *****************************************************************************/
210
211/*****************************************************************************
212 * Functions to handle the engine
213 **/
214
215static int bind_rsaref(ENGINE *e)
216 {
217 const RSA_METHOD *meth1;
218 if(!ENGINE_set_id(e, engine_rsaref_id)
219 || !ENGINE_set_name(e, engine_rsaref_name)
220 || !ENGINE_set_RSA(e, &rsaref_rsa)
221 || !ENGINE_set_ciphers(e, rsaref_ciphers)
222 || !ENGINE_set_digests(e, rsaref_digests)
223 || !ENGINE_set_destroy_function(e, rsaref_destroy)
224 || !ENGINE_set_init_function(e, rsaref_init)
225 || !ENGINE_set_finish_function(e, rsaref_finish)
226 /* || !ENGINE_set_ctrl_function(e, rsaref_ctrl) */
227 /* || !ENGINE_set_cmd_defns(e, rsaref_cmd_defns) */)
228 return 0;
229
230 /* Ensure the rsaref error handling is set up */
231 ERR_load_RSAREF_strings();
232 return 1;
233 }
234
235#ifdef ENGINE_DYNAMIC_SUPPORT
236static int bind_helper(ENGINE *e, const char *id)
237 {
238 if(id && (strcmp(id, engine_rsaref_id) != 0))
239 return 0;
240 if(!bind_rsaref(e))
241 return 0;
242 return 1;
243 }
244IMPLEMENT_DYNAMIC_CHECK_FN()
245IMPLEMENT_DYNAMIC_BIND_FN(bind_helper)
246#else
247static ENGINE *engine_rsaref(void)
248 {
249 ENGINE *ret = ENGINE_new();
250 if(!ret)
251 return NULL;
252 if(!bind_rsaref(ret))
253 {
254 ENGINE_free(ret);
255 return NULL;
256 }
257 return ret;
258 }
259
260void ENGINE_load_rsaref(void)
261 {
262 /* Copied from eng_[openssl|dyn].c */
263 ENGINE *toadd = engine_rsaref();
264 if(!toadd) return;
265 ENGINE_add(toadd);
266 ENGINE_free(toadd);
267 ERR_clear_error();
268 }
269#endif
270
271/* Initiator which is only present to make sure this engine looks available */
272static int rsaref_init(ENGINE *e)
273 {
274 return 1;
275 }
276
277/* Finisher which is only present to make sure this engine looks available */
278static int rsaref_finish(ENGINE *e)
279 {
280 return 1;
281 }
282
283/* Destructor (complements the "ENGINE_ncipher()" constructor) */
284static int rsaref_destroy(ENGINE *e)
285 {
286 ERR_unload_RSAREF_strings();
287 return 1;
288 }
289
290/*****************************************************************************
291 * RSA functions
292 **/
293
294static int rsaref_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa)
295 {
296 RSAREFerr(RSAREF_F_RSAREF_MOD_EXP,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
297 return(0);
298 }
299
300static int bnref_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
301 const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)
302 {
303 RSAREFerr(RSAREF_F_BNREF_MOD_EXP,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
304 return(0);
305 }
306
307/* unsigned char *to: [max] */
308static int RSAref_bn2bin(BIGNUM *from, unsigned char *to, int max)
309 {
310 int i;
311
312 i=BN_num_bytes(from);
313 if (i > max)
314 {
315 RSAREFerr(RSAREF_F_RSAREF_BN2BIN,RSAREF_R_LEN);
316 return(0);
317 }
318
319 memset(to,0,(unsigned int)max);
320 if (!BN_bn2bin(from,&(to[max-i])))
321 return(0);
322 return(1);
323 }
324
325#ifdef undef
326/* unsigned char *from: [max] */
327static BIGNUM *RSAref_bin2bn(unsigned char *from, BIGNUM *to, int max)
328 {
329 int i;
330 BIGNUM *ret;
331
332 for (i=0; i<max; i++)
333 if (from[i]) break;
334
335 ret=BN_bin2bn(&(from[i]),max-i,to);
336 return(ret);
337 }
338
339static int RSAref_Public_ref2eay(RSArefPublicKey *from, RSA *to)
340 {
341 to->n=RSAref_bin2bn(from->m,NULL,RSAref_MAX_LEN);
342 to->e=RSAref_bin2bn(from->e,NULL,RSAref_MAX_LEN);
343 if ((to->n == NULL) || (to->e == NULL)) return(0);
344 return(1);
345 }
346#endif
347
348static int RSAref_Public_eay2ref(RSA *from, R_RSA_PUBLIC_KEY *to)
349 {
350 to->bits=BN_num_bits(from->n);
351 if (!RSAref_bn2bin(from->n,to->modulus,MAX_RSA_MODULUS_LEN)) return(0);
352 if (!RSAref_bn2bin(from->e,to->exponent,MAX_RSA_MODULUS_LEN)) return(0);
353 return(1);
354 }
355
356#ifdef undef
357static int RSAref_Private_ref2eay(RSArefPrivateKey *from, RSA *to)
358 {
359 if ((to->n=RSAref_bin2bn(from->m,NULL,RSAref_MAX_LEN)) == NULL)
360 return(0);
361 if ((to->e=RSAref_bin2bn(from->e,NULL,RSAref_MAX_LEN)) == NULL)
362 return(0);
363 if ((to->d=RSAref_bin2bn(from->d,NULL,RSAref_MAX_LEN)) == NULL)
364 return(0);
365 if ((to->p=RSAref_bin2bn(from->prime[0],NULL,RSAref_MAX_PLEN)) == NULL)
366 return(0);
367 if ((to->q=RSAref_bin2bn(from->prime[1],NULL,RSAref_MAX_PLEN)) == NULL)
368 return(0);
369 if ((to->dmp1=RSAref_bin2bn(from->pexp[0],NULL,RSAref_MAX_PLEN))
370 == NULL)
371 return(0);
372 if ((to->dmq1=RSAref_bin2bn(from->pexp[1],NULL,RSAref_MAX_PLEN))
373 == NULL)
374 return(0);
375 if ((to->iqmp=RSAref_bin2bn(from->coef,NULL,RSAref_MAX_PLEN)) == NULL)
376 return(0);
377 return(1);
378 }
379#endif
380
381static int RSAref_Private_eay2ref(RSA *from, R_RSA_PRIVATE_KEY *to)
382 {
383 to->bits=BN_num_bits(from->n);
384 if (!RSAref_bn2bin(from->n,to->modulus,MAX_RSA_MODULUS_LEN)) return(0);
385 if (!RSAref_bn2bin(from->e,to->publicExponent,MAX_RSA_MODULUS_LEN)) return(0);
386 if (!RSAref_bn2bin(from->d,to->exponent,MAX_RSA_MODULUS_LEN)) return(0);
387 if (!RSAref_bn2bin(from->p,to->prime[0],MAX_RSA_PRIME_LEN)) return(0);
388 if (!RSAref_bn2bin(from->q,to->prime[1],MAX_RSA_PRIME_LEN)) return(0);
389 if (!RSAref_bn2bin(from->dmp1,to->primeExponent[0],MAX_RSA_PRIME_LEN)) return(0);
390 if (!RSAref_bn2bin(from->dmq1,to->primeExponent[1],MAX_RSA_PRIME_LEN)) return(0);
391 if (!RSAref_bn2bin(from->iqmp,to->coefficient,MAX_RSA_PRIME_LEN)) return(0);
392 return(1);
393 }
394
395static int rsaref_private_decrypt(int len, const unsigned char *from, unsigned char *to,
396 RSA *rsa, int padding)
397 {
398 int i,outlen= -1;
399 R_RSA_PRIVATE_KEY RSAkey;
400
401 if (!RSAref_Private_eay2ref(rsa,&RSAkey))
402 goto err;
403 if ((i=RSAPrivateDecrypt(to,&outlen,(unsigned char *)from,len,&RSAkey)) != 0)
404 {
405 RSAREFerr(RSAREF_F_RSAREF_PRIVATE_DECRYPT,i);
406 outlen= -1;
407 }
408err:
409 memset(&RSAkey,0,sizeof(RSAkey));
410 return(outlen);
411 }
412
413static int rsaref_private_encrypt(int len, const unsigned char *from, unsigned char *to,
414 RSA *rsa, int padding)
415 {
416 int i,outlen= -1;
417 R_RSA_PRIVATE_KEY RSAkey;
418
419 if (padding != RSA_PKCS1_PADDING)
420 {
421 RSAREFerr(RSAREF_F_RSAREF_PRIVATE_ENCRYPT, RSA_R_UNKNOWN_PADDING_TYPE);
422 goto err;
423 }
424 if (!RSAref_Private_eay2ref(rsa,&RSAkey))
425 goto err;
426 if ((i=RSAPrivateEncrypt(to,&outlen,(unsigned char *)from,len,&RSAkey)) != 0)
427 {
428 RSAREFerr(RSAREF_F_RSAREF_PRIVATE_ENCRYPT,i);
429 outlen= -1;
430 }
431err:
432 memset(&RSAkey,0,sizeof(RSAkey));
433 return(outlen);
434 }
435
436static int rsaref_public_decrypt(int len, const unsigned char *from, unsigned char *to,
437 RSA *rsa, int padding)
438 {
439 int i,outlen= -1;
440 R_RSA_PUBLIC_KEY RSAkey;
441
442 if (!RSAref_Public_eay2ref(rsa,&RSAkey))
443 goto err;
444 if ((i=RSAPublicDecrypt(to,&outlen,(unsigned char *)from,len,&RSAkey)) != 0)
445 {
446 RSAREFerr(RSAREF_F_RSAREF_PUBLIC_DECRYPT,i);
447 outlen= -1;
448 }
449err:
450 memset(&RSAkey,0,sizeof(RSAkey));
451 return(outlen);
452 }
453
454static int rsaref_public_encrypt(int len, const unsigned char *from, unsigned char *to,
455 RSA *rsa, int padding)
456 {
457 int outlen= -1;
458 int i;
459 R_RSA_PUBLIC_KEY RSAkey;
460 R_RANDOM_STRUCT rnd;
461 unsigned char buf[16];
462
463 if (padding != RSA_PKCS1_PADDING && padding != RSA_SSLV23_PADDING)
464 {
465 RSAREFerr(RSAREF_F_RSAREF_PUBLIC_ENCRYPT, RSA_R_UNKNOWN_PADDING_TYPE);
466 goto err;
467 }
468
469 R_RandomInit(&rnd);
470 R_GetRandomBytesNeeded((unsigned int *)&i,&rnd);
471 while (i > 0)
472 {
473 if (RAND_bytes(buf,16) <= 0)
474 goto err;
475 R_RandomUpdate(&rnd,buf,(unsigned int)((i>16)?16:i));
476 i-=16;
477 }
478
479 if (!RSAref_Public_eay2ref(rsa,&RSAkey))
480 goto err;
481 if ((i=RSAPublicEncrypt(to,&outlen,(unsigned char *)from,len,&RSAkey,&rnd)) != 0)
482 {
483 RSAREFerr(RSAREF_F_RSAREF_PUBLIC_ENCRYPT,i);
484 outlen= -1;
485 goto err;
486 }
487err:
488 memset(&RSAkey,0,sizeof(RSAkey));
489 R_RandomFinal(&rnd);
490 memset(&rnd,0,sizeof(rnd));
491 return(outlen);
492 }
493
494/*****************************************************************************
495 * Symetric cipher and digest function registrars
496 **/
497static int rsaref_ciphers(ENGINE *e, const EVP_CIPHER **cipher,
498 const int **nids, int nid)
499 {
500 int ok = 1;
501 if(!cipher)
502 {
503 /* We are returning a list of supported nids */
504 *nids = rsaref_cipher_nids;
505 return (sizeof(rsaref_cipher_nids)-1)/sizeof(rsaref_cipher_nids[0]);
506 }
507 /* We are being asked for a specific cipher */
508 switch (nid)
509 {
510 case NID_des_cbc:
511 *cipher = &cipher_des_cbc; break;
512 case NID_des_ede3_cbc:
513 *cipher = &cipher_des_ede3_cbc; break;
514 case NID_desx_cbc:
515 *cipher = &cipher_desx_cbc; break;
516 default:
517 ok = 0;
518 *cipher = NULL;
519 break;
520 }
521 return ok;
522 }
523static int rsaref_digests(ENGINE *e, const EVP_MD **digest,
524 const int **nids, int nid)
525 {
526 int ok = 1;
527 if(!digest)
528 {
529 /* We are returning a list of supported nids */
530 *nids = rsaref_digest_nids;
531 return (sizeof(rsaref_digest_nids)-1)/sizeof(rsaref_digest_nids[0]);
532 }
533 /* We are being asked for a specific digest */
534 switch (nid)
535 {
536 case NID_md2:
537 *digest = &digest_md2; break;
538 case NID_md5:
539 *digest = &digest_md5; break;
540 default:
541 ok = 0;
542 *digest = NULL;
543 break;
544 }
545 return ok;
546 }
547
548/*****************************************************************************
549 * DES functions
550 **/
551#undef data
552#define data(ctx) ((DES_CBC_CTX *)(ctx)->cipher_data)
553int cipher_des_cbc_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,
554 const unsigned char *iv, int enc)
555 {
556 DES_CBCInit(data(ctx), (unsigned char *)key, (unsigned char *)iv, enc);
557 return 1;
558 }
559int cipher_des_cbc_code(EVP_CIPHER_CTX *ctx, unsigned char *out,
560 const unsigned char *in, unsigned int inl)
561 {
562 int ret = DES_CBCUpdate(data(ctx), out, (unsigned char *)in, inl);
563 switch (ret)
564 {
565 case RE_LEN:
566 RSAREFerr(RSAREF_F_CIPHER_DES_CBC_CODE,RSAREF_R_LENGTH_NOT_BLOCK_ALIGNED);
567 break;
568 case 0:
569 break;
570 default:
571 RSAREFerr(RSAREF_F_CIPHER_DES_CBC_CODE,RSAREF_R_UNKNOWN_FAULT);
572 }
573 return !ret;
574 }
575int cipher_des_cbc_clean(EVP_CIPHER_CTX *ctx)
576 {
577 memset(data(ctx), 0, ctx->cipher->ctx_size);
578 return 1;
579 }
580
581#undef data
582#define data(ctx) ((DES3_CBC_CTX *)(ctx)->cipher_data)
583int cipher_des_ede3_cbc_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,
584 const unsigned char *iv, int enc)
585 {
586 DES3_CBCInit(data(ctx), (unsigned char *)key, (unsigned char *)iv,
587 enc);
588 return 1;
589 }
590int cipher_des_ede3_cbc_code(EVP_CIPHER_CTX *ctx, unsigned char *out,
591 const unsigned char *in, unsigned int inl)
592 {
593 int ret = DES3_CBCUpdate(data(ctx), out, (unsigned char *)in, inl);
594 switch (ret)
595 {
596 case RE_LEN:
597 RSAREFerr(RSAREF_F_CIPHER_DES_CBC_CODE,RSAREF_R_LENGTH_NOT_BLOCK_ALIGNED);
598 break;
599 case 0:
600 break;
601 default:
602 RSAREFerr(RSAREF_F_CIPHER_DES_CBC_CODE,RSAREF_R_UNKNOWN_FAULT);
603 }
604 return !ret;
605 }
606int cipher_des_ede3_cbc_clean(EVP_CIPHER_CTX *ctx)
607 {
608 memset(data(ctx), 0, ctx->cipher->ctx_size);
609 return 1;
610 }
611
612#undef data
613#define data(ctx) ((DESX_CBC_CTX *)(ctx)->cipher_data)
614int cipher_desx_cbc_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,
615 const unsigned char *iv, int enc)
616 {
617 DESX_CBCInit(data(ctx), (unsigned char *)key, (unsigned char *)iv,
618 enc);
619 return 1;
620 }
621int cipher_desx_cbc_code(EVP_CIPHER_CTX *ctx, unsigned char *out,
622 const unsigned char *in, unsigned int inl)
623 {
624 int ret = DESX_CBCUpdate(data(ctx), out, (unsigned char *)in, inl);
625 switch (ret)
626 {
627 case RE_LEN:
628 RSAREFerr(RSAREF_F_CIPHER_DES_CBC_CODE,RSAREF_R_LENGTH_NOT_BLOCK_ALIGNED);
629 break;
630 case 0:
631 break;
632 default:
633 RSAREFerr(RSAREF_F_CIPHER_DES_CBC_CODE,RSAREF_R_UNKNOWN_FAULT);
634 }
635 return !ret;
636 }
637int cipher_desx_cbc_clean(EVP_CIPHER_CTX *ctx)
638 {
639 memset(data(ctx), 0, ctx->cipher->ctx_size);
640 return 1;
641 }
642
643/*****************************************************************************
644 * MD functions
645 **/
646#undef data
647#define data(ctx) ((MD2_CTX *)(ctx)->md_data)
648static int digest_md2_init(EVP_MD_CTX *ctx)
649 {
650 MD2Init(data(ctx));
651 return 1;
652 }
653static int digest_md2_update(EVP_MD_CTX *ctx,const void *data,
654 unsigned long count)
655 {
656 MD2Update(data(ctx), (unsigned char *)data, (unsigned int)count);
657 return 1;
658 }
659static int digest_md2_final(EVP_MD_CTX *ctx,unsigned char *md)
660 {
661 MD2Final(md, data(ctx));
662 return 1;
663 }
664
665#undef data
666#define data(ctx) ((MD5_CTX *)(ctx)->md_data)
667static int digest_md5_init(EVP_MD_CTX *ctx)
668 {
669 MD5Init(data(ctx));
670 return 1;
671 }
672static int digest_md5_update(EVP_MD_CTX *ctx,const void *data,
673 unsigned long count)
674 {
675 MD5Update(data(ctx), (unsigned char *)data, (unsigned int)count);
676 return 1;
677 }
678static int digest_md5_final(EVP_MD_CTX *ctx,unsigned char *md)
679 {
680 MD5Final(md, data(ctx));
681 return 1;
682 }
diff --git a/src/lib/libssl/src/demos/engines/rsaref/rsaref.ec b/src/lib/libssl/src/demos/engines/rsaref/rsaref.ec
new file mode 100644
index 0000000000..c690ae3883
--- /dev/null
+++ b/src/lib/libssl/src/demos/engines/rsaref/rsaref.ec
@@ -0,0 +1,8 @@
1# configuration file for util/mkerr.pl
2#
3# use like this:
4#
5# perl ../../../util/mkerr.pl -conf rsaref.ec \
6# -nostatic -staticloader -write *.c
7
8L RSAREF rsaref_err.h rsaref_err.c
diff --git a/src/lib/libssl/src/demos/engines/rsaref/rsaref_err.c b/src/lib/libssl/src/demos/engines/rsaref/rsaref_err.c
new file mode 100644
index 0000000000..ceaf05706d
--- /dev/null
+++ b/src/lib/libssl/src/demos/engines/rsaref/rsaref_err.c
@@ -0,0 +1,161 @@
1/* rsaref_err.c */
2/* ====================================================================
3 * Copyright (c) 1999 The OpenSSL Project. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
15 * distribution.
16 *
17 * 3. All advertising materials mentioning features or use of this
18 * software must display the following acknowledgment:
19 * "This product includes software developed by the OpenSSL Project
20 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
21 *
22 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
23 * endorse or promote products derived from this software without
24 * prior written permission. For written permission, please contact
25 * openssl-core@OpenSSL.org.
26 *
27 * 5. Products derived from this software may not be called "OpenSSL"
28 * nor may "OpenSSL" appear in their names without prior written
29 * permission of the OpenSSL Project.
30 *
31 * 6. Redistributions of any form whatsoever must retain the following
32 * acknowledgment:
33 * "This product includes software developed by the OpenSSL Project
34 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
35 *
36 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
37 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
38 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
39 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
42 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
43 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
44 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
45 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
47 * OF THE POSSIBILITY OF SUCH DAMAGE.
48 * ====================================================================
49 *
50 * This product includes cryptographic software written by Eric Young
51 * (eay@cryptsoft.com). This product includes software written by Tim
52 * Hudson (tjh@cryptsoft.com).
53 *
54 */
55
56/* NOTE: this file was auto generated by the mkerr.pl script: any changes
57 * made to it will be overwritten when the script next updates this file,
58 * only reason strings will be preserved.
59 */
60
61#include <stdio.h>
62#include <openssl/err.h>
63#include "rsaref_err.h"
64
65/* BEGIN ERROR CODES */
66#ifndef OPENSSL_NO_ERR
67static ERR_STRING_DATA RSAREF_str_functs[]=
68 {
69{ERR_PACK(0,RSAREF_F_BNREF_MOD_EXP,0), "BNREF_MOD_EXP"},
70{ERR_PACK(0,RSAREF_F_CIPHER_DES_CBC_CODE,0), "CIPHER_DES_CBC_CODE"},
71{ERR_PACK(0,RSAREF_F_RSAREF_BN2BIN,0), "RSAREF_BN2BIN"},
72{ERR_PACK(0,RSAREF_F_RSAREF_MOD_EXP,0), "RSAREF_MOD_EXP"},
73{ERR_PACK(0,RSAREF_F_RSAREF_PRIVATE_DECRYPT,0), "RSAREF_PRIVATE_DECRYPT"},
74{ERR_PACK(0,RSAREF_F_RSAREF_PRIVATE_ENCRYPT,0), "RSAREF_PRIVATE_ENCRYPT"},
75{ERR_PACK(0,RSAREF_F_RSAREF_PUBLIC_DECRYPT,0), "RSAREF_PUBLIC_DECRYPT"},
76{ERR_PACK(0,RSAREF_F_RSAREF_PUBLIC_ENCRYPT,0), "RSAREF_PUBLIC_ENCRYPT"},
77{ERR_PACK(0,RSAREF_F_RSA_BN2BIN,0), "RSA_BN2BIN"},
78{ERR_PACK(0,RSAREF_F_RSA_PRIVATE_DECRYPT,0), "RSA_PRIVATE_DECRYPT"},
79{ERR_PACK(0,RSAREF_F_RSA_PRIVATE_ENCRYPT,0), "RSA_PRIVATE_ENCRYPT"},
80{ERR_PACK(0,RSAREF_F_RSA_PUBLIC_DECRYPT,0), "RSA_PUBLIC_DECRYPT"},
81{ERR_PACK(0,RSAREF_F_RSA_PUBLIC_ENCRYPT,0), "RSA_PUBLIC_ENCRYPT"},
82{0,NULL}
83 };
84
85static ERR_STRING_DATA RSAREF_str_reasons[]=
86 {
87{RSAREF_R_CONTENT_ENCODING ,"content encoding"},
88{RSAREF_R_DATA ,"data"},
89{RSAREF_R_DIGEST_ALGORITHM ,"digest algorithm"},
90{RSAREF_R_ENCODING ,"encoding"},
91{RSAREF_R_ENCRYPTION_ALGORITHM ,"encryption algorithm"},
92{RSAREF_R_KEY ,"key"},
93{RSAREF_R_KEY_ENCODING ,"key encoding"},
94{RSAREF_R_LEN ,"len"},
95{RSAREF_R_LENGTH_NOT_BLOCK_ALIGNED ,"length not block aligned"},
96{RSAREF_R_MODULUS_LEN ,"modulus len"},
97{RSAREF_R_NEED_RANDOM ,"need random"},
98{RSAREF_R_PRIVATE_KEY ,"private key"},
99{RSAREF_R_PUBLIC_KEY ,"public key"},
100{RSAREF_R_SIGNATURE ,"signature"},
101{RSAREF_R_SIGNATURE_ENCODING ,"signature encoding"},
102{RSAREF_R_UNKNOWN_FAULT ,"unknown fault"},
103{0,NULL}
104 };
105
106#endif
107
108#ifdef RSAREF_LIB_NAME
109static ERR_STRING_DATA RSAREF_lib_name[]=
110 {
111{0 ,RSAREF_LIB_NAME},
112{0,NULL}
113 };
114#endif
115
116
117static int RSAREF_lib_error_code=0;
118static int RSAREF_error_init=1;
119
120static void ERR_load_RSAREF_strings(void)
121 {
122 if (RSAREF_lib_error_code == 0)
123 RSAREF_lib_error_code=ERR_get_next_error_library();
124
125 if (RSAREF_error_init)
126 {
127 RSAREF_error_init=0;
128#ifndef OPENSSL_NO_ERR
129 ERR_load_strings(RSAREF_lib_error_code,RSAREF_str_functs);
130 ERR_load_strings(RSAREF_lib_error_code,RSAREF_str_reasons);
131#endif
132
133#ifdef RSAREF_LIB_NAME
134 RSAREF_lib_name->error = ERR_PACK(RSAREF_lib_error_code,0,0);
135 ERR_load_strings(0,RSAREF_lib_name);
136#endif
137 }
138 }
139
140static void ERR_unload_RSAREF_strings(void)
141 {
142 if (RSAREF_error_init == 0)
143 {
144#ifndef OPENSSL_NO_ERR
145 ERR_unload_strings(RSAREF_lib_error_code,RSAREF_str_functs);
146 ERR_unload_strings(RSAREF_lib_error_code,RSAREF_str_reasons);
147#endif
148
149#ifdef RSAREF_LIB_NAME
150 ERR_unload_strings(0,RSAREF_lib_name);
151#endif
152 RSAREF_error_init=1;
153 }
154 }
155
156static void ERR_RSAREF_error(int function, int reason, char *file, int line)
157 {
158 if (RSAREF_lib_error_code == 0)
159 RSAREF_lib_error_code=ERR_get_next_error_library();
160 ERR_PUT_error(RSAREF_lib_error_code,function,reason,file,line);
161 }
diff --git a/src/lib/libssl/src/demos/engines/rsaref/rsaref_err.h b/src/lib/libssl/src/demos/engines/rsaref/rsaref_err.h
new file mode 100644
index 0000000000..19759709b7
--- /dev/null
+++ b/src/lib/libssl/src/demos/engines/rsaref/rsaref_err.h
@@ -0,0 +1,109 @@
1/* rsaref_err.h */
2/* ====================================================================
3 * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
15 * distribution.
16 *
17 * 3. All advertising materials mentioning features or use of this
18 * software must display the following acknowledgment:
19 * "This product includes software developed by the OpenSSL Project
20 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
21 *
22 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
23 * endorse or promote products derived from this software without
24 * prior written permission. For written permission, please contact
25 * openssl-core@openssl.org.
26 *
27 * 5. Products derived from this software may not be called "OpenSSL"
28 * nor may "OpenSSL" appear in their names without prior written
29 * permission of the OpenSSL Project.
30 *
31 * 6. Redistributions of any form whatsoever must retain the following
32 * acknowledgment:
33 * "This product includes software developed by the OpenSSL Project
34 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
35 *
36 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
37 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
38 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
39 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
42 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
43 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
44 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
45 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
47 * OF THE POSSIBILITY OF SUCH DAMAGE.
48 * ====================================================================
49 *
50 * This product includes cryptographic software written by Eric Young
51 * (eay@cryptsoft.com). This product includes software written by Tim
52 * Hudson (tjh@cryptsoft.com).
53 *
54 */
55
56#ifndef HEADER_RSAREF_ERR_H
57#define HEADER_RSAREF_ERR_H
58
59#ifdef __cplusplus
60extern "C" {
61#endif
62
63/* BEGIN ERROR CODES */
64/* The following lines are auto generated by the script mkerr.pl. Any changes
65 * made after this point may be overwritten when the script is next run.
66 */
67static void ERR_load_RSAREF_strings(void);
68static void ERR_unload_RSAREF_strings(void);
69static void ERR_RSAREF_error(int function, int reason, char *file, int line);
70#define RSAREFerr(f,r) ERR_RSAREF_error((f),(r),__FILE__,__LINE__)
71/* Error codes for the RSAREF functions. */
72
73/* Function codes. */
74#define RSAREF_F_BNREF_MOD_EXP 100
75#define RSAREF_F_CIPHER_DES_CBC_CODE 112
76#define RSAREF_F_RSAREF_BN2BIN 101
77#define RSAREF_F_RSAREF_MOD_EXP 102
78#define RSAREF_F_RSAREF_PRIVATE_DECRYPT 103
79#define RSAREF_F_RSAREF_PRIVATE_ENCRYPT 104
80#define RSAREF_F_RSAREF_PUBLIC_DECRYPT 105
81#define RSAREF_F_RSAREF_PUBLIC_ENCRYPT 106
82#define RSAREF_F_RSA_BN2BIN 107
83#define RSAREF_F_RSA_PRIVATE_DECRYPT 108
84#define RSAREF_F_RSA_PRIVATE_ENCRYPT 109
85#define RSAREF_F_RSA_PUBLIC_DECRYPT 110
86#define RSAREF_F_RSA_PUBLIC_ENCRYPT 111
87
88/* Reason codes. */
89#define RSAREF_R_CONTENT_ENCODING 100
90#define RSAREF_R_DATA 101
91#define RSAREF_R_DIGEST_ALGORITHM 102
92#define RSAREF_R_ENCODING 103
93#define RSAREF_R_ENCRYPTION_ALGORITHM 104
94#define RSAREF_R_KEY 105
95#define RSAREF_R_KEY_ENCODING 106
96#define RSAREF_R_LEN 107
97#define RSAREF_R_LENGTH_NOT_BLOCK_ALIGNED 114
98#define RSAREF_R_MODULUS_LEN 108
99#define RSAREF_R_NEED_RANDOM 109
100#define RSAREF_R_PRIVATE_KEY 110
101#define RSAREF_R_PUBLIC_KEY 111
102#define RSAREF_R_SIGNATURE 112
103#define RSAREF_R_SIGNATURE_ENCODING 113
104#define RSAREF_R_UNKNOWN_FAULT 115
105
106#ifdef __cplusplus
107}
108#endif
109#endif
diff --git a/src/lib/libssl/src/util/pod2mantest b/src/lib/libssl/src/util/pod2mantest
new file mode 100644
index 0000000000..79aefafac0
--- /dev/null
+++ b/src/lib/libssl/src/util/pod2mantest
@@ -0,0 +1,53 @@
1#!/bin/sh
2
3# This script is used by test/Makefile.ssl to check whether a sane 'pod2man'
4# is installed.
5# ('make install' should not try to run 'pod2man' if it does not exist or if
6# it is a broken 'pod2man' version that is known to cause trouble. if we find
7# the system 'pod2man' to be broken, we use our own copy instead)
8#
9# In any case, output an appropriate command line for running (or not
10# running) pod2man.
11
12
13IFS=:
14try_without_dir=true
15# First we try "pod2man", then "$dir/pod2man" for each item in $PATH.
16for dir in dummy:$PATH; do
17 if [ "$try_without_dir" = true ]; then
18 # first iteration
19 pod2man=pod2man
20 try_without_dir=false
21 else
22 # second and later iterations
23 pod2man="$dir/pod2man"
24 if [ ! -f "$pod2man" ]; then # '-x' is not available on Ultrix
25 pod2man=''
26 fi
27 fi
28
29 if [ ! "$pod2man" = '' ]; then
30 failure=none
31
32
33 if "$pod2man" --section=1 --center=OpenSSL --release=dev pod2mantest.pod | grep '^MARKER - ' >/dev/null 2>&1; then
34 failure=MultilineTest
35 fi
36
37
38 if [ "$failure" = none ]; then
39 echo "$pod2man"
40 exit 0
41 fi
42
43 echo "$pod2man does not work properly ('$failure' failed). Looking for another pod2man ..." >&2
44 fi
45done
46
47echo "No working pod2man found. Consider installing a new version." >&2
48if [ "$1" = ignore ]; then
49 echo "As a workaround, we'll use a bundled old copy of pod2man.pl." >&2
50 echo "util/pod2man.pl"
51 exit 0
52fi
53exit 1
diff --git a/src/lib/libssl/src/util/pod2mantest.pod b/src/lib/libssl/src/util/pod2mantest.pod
new file mode 100644
index 0000000000..5d2539a17f
--- /dev/null
+++ b/src/lib/libssl/src/util/pod2mantest.pod
@@ -0,0 +1,15 @@
1=pod
2
3=head1 NAME
4
5foo, bar,
6MARKER - test of multiline name section
7
8=head1 DESCRIPTION
9
10This is a test .pod file to see if we have a buggy pod2man or not.
11If we have a buggy implementation, we will get a line matching the
12regular expression "^ +MARKER - test of multiline name section *$"
13at the end of the resulting document.
14
15=cut