summaryrefslogtreecommitdiff
path: root/src/lib/libssl/src/doc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/src/doc')
-rw-r--r--src/lib/libssl/src/doc/API.doc24
-rw-r--r--src/lib/libssl/src/doc/README10
-rw-r--r--src/lib/libssl/src/doc/a_verify.doc85
-rw-r--r--src/lib/libssl/src/doc/apps.doc53
-rw-r--r--src/lib/libssl/src/doc/asn1.doc401
-rw-r--r--src/lib/libssl/src/doc/bio.doc423
-rw-r--r--src/lib/libssl/src/doc/blowfish.doc146
-rw-r--r--src/lib/libssl/src/doc/bn.doc381
-rw-r--r--src/lib/libssl/src/doc/c-indentation.el36
-rw-r--r--src/lib/libssl/src/doc/ca.1121
-rw-r--r--src/lib/libssl/src/doc/callback.doc240
-rw-r--r--src/lib/libssl/src/doc/cipher.doc345
-rw-r--r--src/lib/libssl/src/doc/cipher.m128
-rw-r--r--src/lib/libssl/src/doc/conf.doc89
-rw-r--r--src/lib/libssl/src/doc/crypto.pod27
-rw-r--r--src/lib/libssl/src/doc/des.doc505
-rw-r--r--src/lib/libssl/src/doc/digest.doc94
-rw-r--r--src/lib/libssl/src/doc/encode.doc15
-rw-r--r--src/lib/libssl/src/doc/envelope.doc67
-rw-r--r--src/lib/libssl/src/doc/error.doc115
-rw-r--r--src/lib/libssl/src/doc/legal.doc117
-rw-r--r--src/lib/libssl/src/doc/lhash.doc151
-rw-r--r--src/lib/libssl/src/doc/md2.doc49
-rw-r--r--src/lib/libssl/src/doc/md5.doc50
-rw-r--r--src/lib/libssl/src/doc/memory.doc27
-rw-r--r--src/lib/libssl/src/doc/ms3-ca.doc398
-rw-r--r--src/lib/libssl/src/doc/ns-ca.doc154
-rw-r--r--src/lib/libssl/src/doc/obj.doc69
-rw-r--r--src/lib/libssl/src/doc/openssl.pod304
-rw-r--r--src/lib/libssl/src/doc/openssl.txt1174
-rw-r--r--src/lib/libssl/src/doc/openssl_button.gifbin0 -> 2063 bytes
-rw-r--r--src/lib/libssl/src/doc/openssl_button.html7
-rw-r--r--src/lib/libssl/src/doc/rand.doc141
-rw-r--r--src/lib/libssl/src/doc/rc2.doc165
-rw-r--r--src/lib/libssl/src/doc/rc4.doc44
-rw-r--r--src/lib/libssl/src/doc/readme6
-rw-r--r--src/lib/libssl/src/doc/ref.doc48
-rw-r--r--src/lib/libssl/src/doc/req.1137
-rw-r--r--src/lib/libssl/src/doc/rsa.doc135
-rw-r--r--src/lib/libssl/src/doc/rsaref.doc35
-rw-r--r--src/lib/libssl/src/doc/s_mult.doc17
-rw-r--r--src/lib/libssl/src/doc/session.doc297
-rw-r--r--src/lib/libssl/src/doc/sha.doc52
-rw-r--r--src/lib/libssl/src/doc/speed.doc96
-rw-r--r--src/lib/libssl/src/doc/ssl-ciph.doc84
-rw-r--r--src/lib/libssl/src/doc/ssl.doc172
-rw-r--r--src/lib/libssl/src/doc/ssl.pod633
-rw-r--r--src/lib/libssl/src/doc/ssl_ctx.doc68
-rw-r--r--src/lib/libssl/src/doc/ssleay.doc213
-rw-r--r--src/lib/libssl/src/doc/ssleay.txt7014
-rw-r--r--src/lib/libssl/src/doc/ssluse.doc45
-rw-r--r--src/lib/libssl/src/doc/stack.doc96
-rw-r--r--src/lib/libssl/src/doc/threads.doc90
-rw-r--r--src/lib/libssl/src/doc/txt_db.doc4
-rw-r--r--src/lib/libssl/src/doc/verify22
-rw-r--r--src/lib/libssl/src/doc/why.doc79
56 files changed, 9205 insertions, 6293 deletions
diff --git a/src/lib/libssl/src/doc/API.doc b/src/lib/libssl/src/doc/API.doc
deleted file mode 100644
index fe2820259a..0000000000
--- a/src/lib/libssl/src/doc/API.doc
+++ /dev/null
@@ -1,24 +0,0 @@
1SSL - SSLv2/v3/v23 etc.
2
3BIO - methods and how they plug together
4
5MEM - memory allocation callback
6
7CRYPTO - locking for threads
8
9EVP - Ciphers/Digests/signatures
10
11RSA - methods
12
13X509 - certificate retrieval
14
15X509 - validation
16
17X509 - X509v3 extensions
18
19Objects - adding object identifiers
20
21ASN.1 - parsing
22
23PEM - parsing
24
diff --git a/src/lib/libssl/src/doc/README b/src/lib/libssl/src/doc/README
new file mode 100644
index 0000000000..a9a588262a
--- /dev/null
+++ b/src/lib/libssl/src/doc/README
@@ -0,0 +1,10 @@
1
2 openssl.pod ..... Documentation of OpenSSL `openssl' command
3 crypto.pod ...... Documentation of OpenSSL crypto.h+libcrypto.a
4 ssl.pod ......... Documentation of OpenSSL ssl.h+libssl.a
5 ssleay.txt ...... Assembled documentation files of ancestor SSLeay [obsolete]
6 openssl.txt ..... Assembled documentation files for OpenSSL [not final]
7
8 An archive of HTML documents for the SSLeay library is available from
9 http://www.columbia.edu/~ariel/ssleay/
10
diff --git a/src/lib/libssl/src/doc/a_verify.doc b/src/lib/libssl/src/doc/a_verify.doc
deleted file mode 100644
index 06eec17c2b..0000000000
--- a/src/lib/libssl/src/doc/a_verify.doc
+++ /dev/null
@@ -1,85 +0,0 @@
1From eay@mincom.com Fri Oct 4 18:29:06 1996
2Received: by orb.mincom.oz.au id AA29080
3 (5.65c/IDA-1.4.4 for eay); Fri, 4 Oct 1996 08:29:07 +1000
4Date: Fri, 4 Oct 1996 08:29:06 +1000 (EST)
5From: Eric Young <eay@mincom.oz.au>
6X-Sender: eay@orb
7To: wplatzer <wplatzer@iaik.tu-graz.ac.at>
8Cc: Eric Young <eay@mincom.oz.au>, SSL Mailing List <ssl-users@mincom.com>
9Subject: Re: Netscape's Public Key
10In-Reply-To: <19961003134837.NTM0049@iaik.tu-graz.ac.at>
11Message-Id: <Pine.SOL.3.91.961004081346.8018K-100000@orb>
12Mime-Version: 1.0
13Content-Type: TEXT/PLAIN; charset=US-ASCII
14Status: RO
15X-Status:
16
17On Thu, 3 Oct 1996, wplatzer wrote:
18> I get Public Key from Netscape (Gold 3.0b4), but cannot do anything
19> with it... It looks like (asn1parse):
20>
21> 0:d=0 hl=3 l=180 cons: SEQUENCE
22> 3:d=1 hl=2 l= 96 cons: SEQUENCE
23> 5:d=2 hl=2 l= 92 cons: SEQUENCE
24> 7:d=3 hl=2 l= 13 cons: SEQUENCE
25> 9:d=4 hl=2 l= 9 prim: OBJECT :rsaEncryption
26> 20:d=4 hl=2 l= 0 prim: NULL
27> 22:d=3 hl=2 l= 75 prim: BIT STRING
28> 99:d=2 hl=2 l= 0 prim: IA5STRING :
29> 101:d=1 hl=2 l= 13 cons: SEQUENCE
30> 103:d=2 hl=2 l= 9 prim: OBJECT :md5withRSAEncryption
31> 114:d=2 hl=2 l= 0 prim: NULL
32> 116:d=1 hl=2 l= 65 prim: BIT STRING
33>
34> The first BIT STRING is the public key and the second BIT STRING is
35> the signature.
36> But a public key consists of the public exponent and the modulus. Are
37> both numbers in the first BIT STRING?
38> Is there a document simply describing this coding stuff (checking
39> signature, get the public key, etc.)?
40
41Minimal in SSLeay. If you want to see what the modulus and exponent are,
42try asn1parse -offset 25 -length 75 <key.pem
43asn1parse will currently stuff up on the 'length 75' part (fixed in next
44release) but it will print the stuff. If you are after more
45documentation on ASN.1, have a look at www.rsa.com and get their PKCS
46documents, most of my initial work on SSLeay was done using them.
47
48As for SSLeay,
49util/crypto.num and util/ssl.num are lists of all exported functions in
50the library (but not macros :-(.
51
52The ones for extracting public keys from certificates and certificate
53requests are EVP_PKEY * X509_REQ_extract_key(X509_REQ *req);
54EVP_PKEY * X509_extract_key(X509 *x509);
55
56To verify a signature on a signed ASN.1 object
57int X509_verify(X509 *a,EVP_PKEY *key);
58int X509_REQ_verify(X509_REQ *a,EVP_PKEY *key);
59int X509_CRL_verify(X509_CRL *a,EVP_PKEY *key);
60int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a,EVP_PKEY *key);
61
62I should mention that EVP_PKEY can be used to hold a public or a private key,
63since for things like RSA and DSS, a public key is just a subset of what
64is stored for the private key.
65
66To sign any of the above structures
67
68int X509_sign(X509 *a,EVP_PKEY *key,EVP_MD *md);
69int X509_REQ_sign(X509_REQ *a,EVP_PKEY *key,EVP_MD *md);
70int X509_CRL_sign(X509_CRL *a,EVP_PKEY *key,EVP_MD *md);
71int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *a,EVP_PKEY *key,EVP_MD *md);
72
73where md is the message digest to sign with.
74
75There are all defined in x509.h and all the _sign and _verify functions are
76actually macros to the ASN1_sign() and ASN1_verify() functions.
77These functions will put the correct algorithm identifiers in the correct
78places in the structures.
79
80eric
81--
82Eric Young | BOOL is tri-state according to Bill Gates.
83AARNet: eay@mincom.oz.au | RTFM Win32 GetMessage().
84
85
diff --git a/src/lib/libssl/src/doc/apps.doc b/src/lib/libssl/src/doc/apps.doc
deleted file mode 100644
index a2a4e0de72..0000000000
--- a/src/lib/libssl/src/doc/apps.doc
+++ /dev/null
@@ -1,53 +0,0 @@
1The applications
2
3Ok, where to begin....
4In the begining, when SSLeay was small (April 1995), there
5were but few applications, they did happily cohabit in
6the one bin directory. Then over time, they did multiply and grow,
7and they started to look like microsoft software; 500k to print 'hello world'.
8A new approach was needed. They were coalessed into one 'Monolithic'
9application, ssleay. This one program is composed of many programs that
10can all be compiled independantly.
11
12ssleay has 3 modes of operation.
131) If the ssleay binaray has the name of one of its component programs, it
14executes that program and then exits. This can be achieve by using hard or
15symbolic links, or failing that, just renaming the binary.
162) If the first argument to ssleay is the name of one of the component
17programs, that program runs that program and then exits.
183) If there are no arguments, ssleay enters a 'command' mode. Each line is
19interpreted as a program name plus arguments. After each 'program' is run,
20ssleay returns to the comand line.
21
22dgst - message digests
23enc - encryption and base64 encoding
24
25ans1parse - 'pulls' appart ASN.1 encoded objects like certificates.
26
27dh - Diffle-Hellman parameter manipulation.
28rsa - RSA manipulations.
29crl - Certificate revokion list manipulations
30x509 - X509 cert fiddles, including signing.
31pkcs7 - pkcs7 manipulation, only DER versions right now.
32
33genrsa - generate an RSA private key.
34gendh - Generate a set of Diffle-Hellman parameters.
35req - Generate a PKCS#10 object, a certificate request.
36
37s_client - SSL client program
38s_server - SSL server program
39s_time - A SSL protocol timing program
40s_mult - Another SSL server, but it multiplexes
41 connections.
42s_filter - under development
43
44errstr - Convert SSLeay error numbers to strings.
45ca - Sign certificate requests, and generate
46 certificate revokion lists
47crl2pkcs7 - put a crl and certifcates into a pkcs7 object.
48speed - Benchmark the ciphers.
49verify - Check certificates
50hashdir - under development
51
52[ there a now a few more options, play with the program to see what they
53 are ]
diff --git a/src/lib/libssl/src/doc/asn1.doc b/src/lib/libssl/src/doc/asn1.doc
deleted file mode 100644
index fdad17c05c..0000000000
--- a/src/lib/libssl/src/doc/asn1.doc
+++ /dev/null
@@ -1,401 +0,0 @@
1The ASN.1 Routines.
2
3ASN.1 is a specification for how to encode structured 'data' in binary form.
4The approach I have take to the manipulation of structures and their encoding
5into ASN.1 is as follows.
6
7For each distinct structure there are 4 function of the following form
8TYPE *TYPE_new(void);
9void TYPE_free(TYPE *);
10TYPE *d2i_TYPE(TYPE **a,unsigned char **pp,long length);
11long i2d_TYPE(TYPE *a,unsigned char **pp); /* CHECK RETURN VALUE */
12
13where TYPE is the type of the 'object'. The TYPE that have these functions
14can be in one of 2 forms, either the internal C malloc()ed data structure
15or in the DER (a variant of ASN.1 encoding) binary encoding which is just
16an array of unsigned bytes. The 'i2d' functions converts from the internal
17form to the DER form and the 'd2i' functions convert from the DER form to
18the internal form.
19
20The 'new' function returns a malloc()ed version of the structure with all
21substructures either created or left as NULL pointers. For 'optional'
22fields, they are normally left as NULL to indicate no value. For variable
23size sub structures (often 'SET OF' or 'SEQUENCE OF' in ASN.1 syntax) the
24STACK data type is used to hold the values. Have a read of stack.doc
25and have a look at the relevant header files to see what I mean. If there
26is an error while malloc()ing the structure, NULL is returned.
27
28The 'free' function will free() all the sub components of a particular
29structure. If any of those sub components have been 'removed', replace
30them with NULL pointers, the 'free' functions are tolerant of NULL fields.
31
32The 'd2i' function copies a binary representation into a C structure. It
33operates as follows. 'a' is a pointer to a pointer to
34the structure to populate, 'pp' is a pointer to a pointer to where the DER
35byte string is located and 'length' is the length of the '*pp' data.
36If there are no errors, a pointer to the populated structure is returned.
37If there is an error, NULL is returned. Errors can occur because of
38malloc() failures but normally they will be due to syntax errors in the DER
39encoded data being parsed. It is also an error if there was an
40attempt to read more that 'length' bytes from '*p'. If
41everything works correctly, the value in '*p' is updated
42to point at the location just beyond where the DER
43structure was read from. In this way, chained calls to 'd2i' type
44functions can be made, with the pointer into the 'data' array being
45'walked' along the input byte array.
46Depending on the value passed for 'a', different things will be done. If
47'a' is NULL, a new structure will be malloc()ed and returned. If '*a' is
48NULL, a new structure will be malloc()ed and put into '*a' and returned.
49If '*a' is not NULL, the structure in '*a' will be populated, or in the
50case of an error, free()ed and then returned.
51Having these semantics means that a structure
52can call a 'd2i' function to populate a field and if the field is currently
53NULL, the structure will be created.
54
55The 'i2d' function type is used to copy a C structure to a byte array.
56The parameter 'a' is the structure to convert and '*p' is where to put it.
57As for the 'd2i' type structure, 'p' is updated to point after the last
58byte written. If p is NULL, no data is written. The function also returns
59the number of bytes written. Where this becomes useful is that if the
60function is called with a NULL 'p' value, the length is returned. This can
61then be used to malloc() an array of bytes and then the same function can
62be recalled passing the malloced array to be written to. e.g.
63
64int len;
65unsigned char *bytes,*p;
66len=i2d_X509(x,NULL); /* get the size of the ASN1 encoding of 'x' */
67if ((bytes=(unsigned char *)malloc(len)) == NULL)
68 goto err;
69p=bytes;
70i2d_X509(x,&p);
71
72Please note that a new variable, 'p' was passed to i2d_X509. After the
73call to i2d_X509 p has been incremented by len bytes.
74
75Now the reason for this functional organisation is that it allows nested
76structures to be built up by calling these functions as required. There
77are various macros used to help write the general 'i2d', 'd2i', 'new' and
78'free' functions. They are discussed in another file and would only be
79used by some-one wanting to add new structures to the library. As you
80might be able to guess, the process of writing ASN.1 files can be a bit CPU
81expensive for complex structures. I'm willing to live with this since the
82simpler library code make my life easier and hopefully most programs using
83these routines will have their execution profiles dominated by cipher or
84message digest routines.
85What follows is a list of 'TYPE' values and the corresponding ASN.1
86structure and where it is used.
87
88TYPE ASN.1
89ASN1_INTEGER INTEGER
90ASN1_BIT_STRING BIT STRING
91ASN1_OCTET_STRING OCTET STRING
92ASN1_OBJECT OBJECT IDENTIFIER
93ASN1_PRINTABLESTRING PrintableString
94ASN1_T61STRING T61String
95ASN1_IA5STRING IA5String
96ASN1_UTCTIME UTCTime
97ASN1_TYPE Any of the above mentioned types plus SEQUENCE and SET
98
99Most of the above mentioned types are actualled stored in the
100ASN1_BIT_STRING type and macros are used to differentiate between them.
101The 3 types used are
102
103typedef struct asn1_object_st
104 {
105 /* both null if a dynamic ASN1_OBJECT, one is
106 * defined if a 'static' ASN1_OBJECT */
107 char *sn,*ln;
108 int nid;
109 int length;
110 unsigned char *data;
111 } ASN1_OBJECT;
112This is used to store ASN1 OBJECTS. Read 'objects.doc' for details ono
113routines to manipulate this structure. 'sn' and 'ln' are used to hold text
114strings that represent the object (short name and long or lower case name).
115These are used by the 'OBJ' library. 'nid' is a number used by the OBJ
116library to uniquely identify objects. The ASN1 routines will populate the
117'length' and 'data' fields which will contain the bit string representing
118the object.
119
120typedef struct asn1_bit_string_st
121 {
122 int length;
123 int type;
124 unsigned char *data;
125 } ASN1_BIT_STRING;
126This structure is used to hold all the other base ASN1 types except for
127ASN1_UTCTIME (which is really just a 'char *'). Length is the number of
128bytes held in data and type is the ASN1 type of the object (there is a list
129in asn1.h).
130
131typedef struct asn1_type_st
132 {
133 int type;
134 union {
135 char *ptr;
136 ASN1_INTEGER * integer;
137 ASN1_BIT_STRING * bit_string;
138 ASN1_OCTET_STRING * octet_string;
139 ASN1_OBJECT * object;
140 ASN1_PRINTABLESTRING * printablestring;
141 ASN1_T61STRING * t61string;
142 ASN1_IA5STRING * ia5string;
143 ASN1_UTCTIME * utctime;
144 ASN1_BIT_STRING * set;
145 ASN1_BIT_STRING * sequence;
146 } value;
147 } ASN1_TYPE;
148This structure is used in a few places when 'any' type of object can be
149expected.
150
151X509 Certificate
152X509_CINF CertificateInfo
153X509_ALGOR AlgorithmIdentifier
154X509_NAME Name
155X509_NAME_ENTRY A single sub component of the name.
156X509_VAL Validity
157X509_PUBKEY SubjectPublicKeyInfo
158The above mentioned types are declared in x509.h. They are all quite
159straight forward except for the X509_NAME/X509_NAME_ENTRY pair.
160A X509_NAME is a STACK (see stack.doc) of X509_NAME_ENTRY's.
161typedef struct X509_name_entry_st
162 {
163 ASN1_OBJECT *object;
164 ASN1_BIT_STRING *value;
165 int set;
166 int size; /* temp variable */
167 } X509_NAME_ENTRY;
168The size is a temporary variable used by i2d_NAME and set is the set number
169for the particular NAME_ENTRY. A X509_NAME is encoded as a sequence of
170sequence of sets. Normally each set contains only a single item.
171Sometimes it contains more. Normally throughout this library there will be
172only one item per set. The set field contains the 'set' that this entry is
173a member of. So if you have just created a X509_NAME structure and
174populated it with X509_NAME_ENTRYs, you should then traverse the X509_NAME
175(which is just a STACK) and set the 'set/' field to incrementing numbers.
176For more details on why this is done, read the ASN.1 spec for Distinguished
177Names.
178
179X509_REQ CertificateRequest
180X509_REQ_INFO CertificateRequestInfo
181These are used to hold certificate requests.
182
183X509_CRL CertificateRevocationList
184These are used to hold a certificate revocation list
185
186RSAPrivateKey PrivateKeyInfo
187RSAPublicKey PublicKeyInfo
188Both these 'function groups' operate on 'RSA' structures (see rsa.doc).
189The difference is that the RSAPublicKey operations only manipulate the m
190and e fields in the RSA structure.
191
192DSAPrivateKey DSS private key
193DSAPublicKey DSS public key
194Both these 'function groups' operate on 'DSS' structures (see dsa.doc).
195The difference is that the RSAPublicKey operations only manipulate the
196XXX fields in the DSA structure.
197
198DHparams DHParameter
199This is used to hold the p and g value for The Diffie-Hellman operation.
200The function deal with the 'DH' strucure (see dh.doc).
201
202Now all of these function types can be used with several other functions to give
203quite useful set of general manipulation routines. Normally one would
204not uses these functions directly but use them via macros.
205
206char *ASN1_dup(int (*i2d)(),char *(*d2i)(),char *x);
207'x' is the input structure case to a 'char *', 'i2d' is the 'i2d_TYPE'
208function for the type that 'x' is and d2i is the 'd2i_TYPE' function for the
209type that 'x' is. As is obvious from the parameters, this function
210duplicates the strucutre by transforming it into the DER form and then
211re-loading it into a new strucutre and returning the new strucutre. This
212is obviously a bit cpu intensive but when faced with a complex dynamic
213structure this is the simplest programming approach. There are macros for
214duplicating the major data types but is simple to add extras.
215
216char *ASN1_d2i_fp(char *(*new)(),char *(*d2i)(),FILE *fp,unsigned char **x);
217'x' is a pointer to a pointer of the 'desired type'. new and d2i are the
218corresponding 'TYPE_new' and 'd2i_TYPE' functions for the type and 'fp' is
219an open file pointer to read from. This function reads from 'fp' as much
220data as it can and then uses 'd2i' to parse the bytes to load and return
221the parsed strucutre in 'x' (if it was non-NULL) and to actually return the
222strucutre. The behavior of 'x' is as per all the other d2i functions.
223
224char *ASN1_d2i_bio(char *(*new)(),char *(*d2i)(),BIO *fp,unsigned char **x);
225The 'BIO' is the new IO type being used in SSLeay (see bio.doc). This
226function is the same as ASN1_d2i_fp() except for the BIO argument.
227ASN1_d2i_fp() actually calls this function.
228
229int ASN1_i2d_fp(int (*i2d)(),FILE *out,unsigned char *x);
230'x' is converted to bytes by 'i2d' and then written to 'out'. ASN1_i2d_fp
231and ASN1_d2i_fp are not really symetric since ASN1_i2d_fp will read all
232available data from the file pointer before parsing a single item while
233ASN1_i2d_fp can be used to write a sequence of data objects. To read a
234series of objects from a file I would sugest loading the file into a buffer
235and calling the relevent 'd2i' functions.
236
237char *ASN1_d2i_bio(char *(*new)(),char *(*d2i)(),BIO *fp,unsigned char **x);
238This function is the same as ASN1_i2d_fp() except for the BIO argument.
239ASN1_i2d_fp() actually calls this function.
240
241char * PEM_ASN1_read(char *(*d2i)(),char *name,FILE *fp,char **x,int (*cb)());
242This function will read the next PEM encoded (base64) object of the same
243type as 'x' (loaded by the d2i function). 'name' is the name that is in
244the '-----BEGIN name-----' that designates the start of that object type.
245If the data is encrypted, 'cb' will be called to prompt for a password. If
246it is NULL a default function will be used to prompt from the password.
247'x' is delt with as per the standard 'd2i' function interface. This
248function can be used to read a series of objects from a file. While any
249data type can be encrypted (see PEM_ASN1_write) only RSA private keys tend
250to be encrypted.
251
252char * PEM_ASN1_read_bio(char *(*d2i)(),char *name,BIO *fp,
253 char **x,int (*cb)());
254Same as PEM_ASN1_read() except using a BIO. This is called by
255PEM_ASN1_read().
256
257int PEM_ASN1_write(int (*i2d)(),char *name,FILE *fp,char *x,EVP_CIPHER *enc,
258 unsigned char *kstr,int klen,int (*callback)());
259
260int PEM_ASN1_write_bio(int (*i2d)(),char *name,BIO *fp,
261 char *x,EVP_CIPHER *enc,unsigned char *kstr,int klen,
262 int (*callback)());
263
264int ASN1_sign(int (*i2d)(), X509_ALGOR *algor1, X509_ALGOR *algor2,
265 ASN1_BIT_STRING *signature, char *data, RSA *rsa, EVP_MD *type);
266int ASN1_verify(int (*i2d)(), X509_ALGOR *algor1,
267 ASN1_BIT_STRING *signature,char *data, RSA *rsa);
268
269int ASN1_BIT_STRING_cmp(ASN1_BIT_STRING *a, ASN1_BIT_STRING *b);
270ASN1_BIT_STRING *ASN1_BIT_STRING_type_new(int type );
271
272int ASN1_UTCTIME_check(ASN1_UTCTIME *a);
273void ASN1_UTCTIME_print(BIO *fp,ASN1_UTCTIME *a);
274ASN1_UTCTIME *ASN1_UTCTIME_dup(ASN1_UTCTIME *a);
275
276ASN1_BIT_STRING *d2i_asn1_print_type(ASN1_BIT_STRING **a,unsigned char **pp,
277 long length,int type);
278
279int i2d_ASN1_SET(STACK *a, unsigned char **pp,
280 int (*func)(), int ex_tag, int ex_class);
281STACK * d2i_ASN1_SET(STACK **a, unsigned char **pp, long length,
282 char *(*func)(), int ex_tag, int ex_class);
283
284int i2a_ASN1_OBJECT(BIO *bp,ASN1_OBJECT *object);
285int i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a);
286int a2i_ASN1_INTEGER(BIO *bp,ASN1_INTEGER *bs,char *buf,int size);
287
288int ASN1_INTEGER_set(ASN1_INTEGER *a, long v);
289long ASN1_INTEGER_get(ASN1_INTEGER *a);
290ASN1_INTEGER *BN_to_ASN1_INTEGER(BIGNUM *bn, ASN1_INTEGER *ai);
291BIGNUM *ASN1_INTEGER_to_BN(ASN1_INTEGER *ai,BIGNUM *bn);
292
293/* given a string, return the correct type. Max is the maximum number
294 * of bytes to parse. It stops parsing when 'max' bytes have been
295 * processed or a '\0' is hit */
296int ASN1_PRINTABLE_type(unsigned char *s,int max);
297
298void ASN1_parse(BIO *fp,unsigned char *pp,long len);
299
300int i2d_ASN1_bytes(ASN1_BIT_STRING *a, unsigned char **pp, int tag, int class);
301ASN1_BIT_STRING *d2i_ASN1_bytes(ASN1_OCTET_STRING **a, unsigned char **pp,
302 long length, int Ptag, int Pclass);
303
304/* PARSING */
305int asn1_Finish(ASN1_CTX *c);
306
307/* SPECIALS */
308int ASN1_get_object(unsigned char **pp, long *plength, int *ptag,
309 int *pclass, long omax);
310int ASN1_check_infinite_end(unsigned char **p,long len);
311void ASN1_put_object(unsigned char **pp, int constructed, int length,
312 int tag, int class);
313int ASN1_object_size(int constructed, int length, int tag);
314
315X509 * X509_get_cert(CERTIFICATE_CTX *ctx,X509_NAME * name,X509 *tmp_x509);
316int X509_add_cert(CERTIFICATE_CTX *ctx,X509 *);
317
318char * X509_cert_verify_error_string(int n);
319int X509_add_cert_file(CERTIFICATE_CTX *c,char *file, int type);
320char * X509_gmtime (char *s, long adj);
321int X509_add_cert_dir (CERTIFICATE_CTX *c,char *dir, int type);
322int X509_load_verify_locations (CERTIFICATE_CTX *ctx,
323 char *file_env, char *dir_env);
324int X509_set_default_verify_paths(CERTIFICATE_CTX *cts);
325X509 * X509_new_D2i_X509(int len, unsigned char *p);
326char * X509_get_default_cert_area(void );
327char * X509_get_default_cert_dir(void );
328char * X509_get_default_cert_file(void );
329char * X509_get_default_cert_dir_env(void );
330char * X509_get_default_cert_file_env(void );
331char * X509_get_default_private_dir(void );
332X509_REQ *X509_X509_TO_req(X509 *x, RSA *rsa);
333int X509_cert_verify(CERTIFICATE_CTX *ctx,X509 *xs, int (*cb)());
334
335CERTIFICATE_CTX *CERTIFICATE_CTX_new();
336void CERTIFICATE_CTX_free(CERTIFICATE_CTX *c);
337
338void X509_NAME_print(BIO *fp, X509_NAME *name, int obase);
339int X509_print_fp(FILE *fp,X509 *x);
340int X509_print(BIO *fp,X509 *x);
341
342X509_INFO * X509_INFO_new(void);
343void X509_INFO_free(X509_INFO *a);
344
345char * X509_NAME_oneline(X509_NAME *a);
346
347#define X509_verify(x,rsa)
348#define X509_REQ_verify(x,rsa)
349#define X509_CRL_verify(x,rsa)
350
351#define X509_sign(x,rsa,md)
352#define X509_REQ_sign(x,rsa,md)
353#define X509_CRL_sign(x,rsa,md)
354
355#define X509_dup(x509)
356#define d2i_X509_fp(fp,x509)
357#define i2d_X509_fp(fp,x509)
358#define d2i_X509_bio(bp,x509)
359#define i2d_X509_bio(bp,x509)
360
361#define X509_CRL_dup(crl)
362#define d2i_X509_CRL_fp(fp,crl)
363#define i2d_X509_CRL_fp(fp,crl)
364#define d2i_X509_CRL_bio(bp,crl)
365#define i2d_X509_CRL_bio(bp,crl)
366
367#define X509_REQ_dup(req)
368#define d2i_X509_REQ_fp(fp,req)
369#define i2d_X509_REQ_fp(fp,req)
370#define d2i_X509_REQ_bio(bp,req)
371#define i2d_X509_REQ_bio(bp,req)
372
373#define RSAPrivateKey_dup(rsa)
374#define d2i_RSAPrivateKey_fp(fp,rsa)
375#define i2d_RSAPrivateKey_fp(fp,rsa)
376#define d2i_RSAPrivateKey_bio(bp,rsa)
377#define i2d_RSAPrivateKey_bio(bp,rsa)
378
379#define X509_NAME_dup(xn)
380#define X509_NAME_ENTRY_dup(ne)
381
382void X509_REQ_print_fp(FILE *fp,X509_REQ *req);
383void X509_REQ_print(BIO *fp,X509_REQ *req);
384
385RSA *X509_REQ_extract_key(X509_REQ *req);
386RSA *X509_extract_key(X509 *x509);
387
388int X509_issuer_and_serial_cmp(X509 *a, X509 *b);
389unsigned long X509_issuer_and_serial_hash(X509 *a);
390
391X509_NAME * X509_get_issuer_name(X509 *a);
392int X509_issuer_name_cmp(X509 *a, X509 *b);
393unsigned long X509_issuer_name_hash(X509 *a);
394
395X509_NAME * X509_get_subject_name(X509 *a);
396int X509_subject_name_cmp(X509 *a,X509 *b);
397unsigned long X509_subject_name_hash(X509 *x);
398
399int X509_NAME_cmp (X509_NAME *a, X509_NAME *b);
400unsigned long X509_NAME_hash(X509_NAME *x);
401
diff --git a/src/lib/libssl/src/doc/bio.doc b/src/lib/libssl/src/doc/bio.doc
deleted file mode 100644
index 545a57cdff..0000000000
--- a/src/lib/libssl/src/doc/bio.doc
+++ /dev/null
@@ -1,423 +0,0 @@
1BIO Routines
2
3This documentation is rather sparse, you are probably best
4off looking at the code for specific details.
5
6The BIO library is a IO abstraction that was originally
7inspired by the need to have callbacks to perform IO to FILE
8pointers when using Windows 3.1 DLLs. There are two types
9of BIO; a source/sink type and a filter type.
10The source/sink methods are as follows:
11- BIO_s_mem() memory buffer - a read/write byte array that
12 grows until memory runs out :-).
13- BIO_s_file() FILE pointer - A wrapper around the normal
14 'FILE *' commands, good for use with stdin/stdout.
15- BIO_s_fd() File descriptor - A wrapper around file
16 descriptors, often used with pipes.
17- BIO_s_socket() Socket - Used around sockets. It is
18 mostly in the Microsoft world that sockets are different
19 from file descriptors and there are all those ugly winsock
20 commands.
21- BIO_s_null() Null - read nothing and write nothing.; a
22 useful endpoint for filter type BIO's specifically things
23 like the message digest BIO.
24
25The filter types are
26- BIO_f_buffer() IO buffering - does output buffering into
27 larger chunks and performs input buffering to allow gets()
28 type functions.
29- BIO_f_md() Message digest - a transparent filter that can
30 be asked to return a message digest for the data that has
31 passed through it.
32- BIO_f_cipher() Encrypt or decrypt all data passing
33 through the filter.
34- BIO_f_base64() Base64 decode on read and encode on write.
35- BIO_f_ssl() A filter that performs SSL encryption on the
36 data sent through it.
37
38Base BIO functions.
39The BIO library has a set of base functions that are
40implemented for each particular type. Filter BIOs will
41normally call the equivalent function on the source/sink BIO
42that they are layered on top of after they have performed
43some modification to the data stream. Multiple filter BIOs
44can be 'push' into a stack of modifers, so to read from a
45file, unbase64 it, then decrypt it, a BIO_f_cipher,
46BIO_f_base64 and a BIO_s_file would probably be used. If a
47sha-1 and md5 message digest needed to be generated, a stack
48two BIO_f_md() BIOs and a BIO_s_null() BIO could be used.
49The base functions are
50- BIO *BIO_new(BIO_METHOD *type); Create a new BIO of type 'type'.
51- int BIO_free(BIO *a); Free a BIO structure. Depending on
52 the configuration, this will free the underlying data
53 object for a source/sink BIO.
54- int BIO_read(BIO *b, char *data, int len); Read upto 'len'
55 bytes into 'data'.
56- int BIO_gets(BIO *bp,char *buf, int size); Depending on
57 the BIO, this can either be a 'get special' or a get one
58 line of data, as per fgets();
59- int BIO_write(BIO *b, char *data, int len); Write 'len'
60 bytes from 'data' to the 'b' BIO.
61- int BIO_puts(BIO *bp,char *buf); Either a 'put special' or
62 a write null terminated string as per fputs().
63- long BIO_ctrl(BIO *bp,int cmd,long larg,char *parg); A
64 control function which is used to manipulate the BIO
65 structure and modify it's state and or report on it. This
66 function is just about never used directly, rather it
67 should be used in conjunction with BIO_METHOD specific
68 macros.
69- BIO *BIO_push(BIO *new_top, BIO *old); new_top is apped to the
70 top of the 'old' BIO list. new_top should be a filter BIO.
71 All writes will go through 'new_top' first and last on read.
72 'old' is returned.
73- BIO *BIO_pop(BIO *bio); the new topmost BIO is returned, NULL if
74 there are no more.
75
76If a particular low level BIO method is not supported
77(normally BIO_gets()), -2 will be returned if that method is
78called. Otherwise the IO methods (read, write, gets, puts)
79will return the number of bytes read or written, and 0 or -1
80for error (or end of input). For the -1 case,
81BIO_should_retry(bio) can be called to determine if it was a
82genuine error or a temporary problem. -2 will also be
83returned if the BIO has not been initalised yet, in all
84cases, the correct error codes are set (accessible via the
85ERR library).
86
87
88The following functions are convenience functions:
89- int BIO_printf(BIO *bio, char * format, ..); printf but
90 to a BIO handle.
91- long BIO_ctrl_int(BIO *bp,int cmd,long larg,int iarg); a
92 convenience function to allow a different argument types
93 to be passed to BIO_ctrl().
94- int BIO_dump(BIO *b,char *bytes,int len); output 'len'
95 bytes from 'bytes' in a hex dump debug format.
96- long BIO_debug_callback(BIO *bio, int cmd, char *argp, int
97 argi, long argl, long ret) - a default debug BIO callback,
98 this is mentioned below. To use this one normally has to
99 use the BIO_set_callback_arg() function to assign an
100 output BIO for the callback to use.
101- BIO *BIO_find_type(BIO *bio,int type); when there is a 'stack'
102 of BIOs, this function scan the list and returns the first
103 that is of type 'type', as listed in buffer.h under BIO_TYPE_XXX.
104- void BIO_free_all(BIO *bio); Free the bio and all other BIOs
105 in the list. It walks the bio->next_bio list.
106
107
108
109Extra commands are normally implemented as macros calling BIO_ctrl().
110- BIO_number_read(BIO *bio) - the number of bytes processed
111 by BIO_read(bio,.).
112- BIO_number_written(BIO *bio) - the number of bytes written
113 by BIO_write(bio,.).
114- BIO_reset(BIO *bio) - 'reset' the BIO.
115- BIO_eof(BIO *bio) - non zero if we are at the current end
116 of input.
117- BIO_set_close(BIO *bio, int close_flag) - set the close flag.
118- BIO_get_close(BIO *bio) - return the close flag.
119 BIO_pending(BIO *bio) - return the number of bytes waiting
120 to be read (normally buffered internally).
121- BIO_flush(BIO *bio) - output any data waiting to be output.
122- BIO_should_retry(BIO *io) - after a BIO_read/BIO_write
123 operation returns 0 or -1, a call to this function will
124 return non zero if you should retry the call later (this
125 is for non-blocking IO).
126- BIO_should_read(BIO *io) - we should retry when data can
127 be read.
128- BIO_should_write(BIO *io) - we should retry when data can
129 be written.
130- BIO_method_name(BIO *io) - return a string for the method name.
131- BIO_method_type(BIO *io) - return the unique ID of the BIO method.
132- BIO_set_callback(BIO *io, long (*callback)(BIO *io, int
133 cmd, char *argp, int argi, long argl, long ret); - sets
134 the debug callback.
135- BIO_get_callback(BIO *io) - return the assigned function
136 as mentioned above.
137- BIO_set_callback_arg(BIO *io, char *arg) - assign some
138 data against the BIO. This is normally used by the debug
139 callback but could in reality be used for anything. To
140 get an idea of how all this works, have a look at the code
141 in the default debug callback mentioned above. The
142 callback can modify the return values.
143
144Details of the BIO_METHOD structure.
145typedef struct bio_method_st
146 {
147 int type;
148 char *name;
149 int (*bwrite)();
150 int (*bread)();
151 int (*bputs)();
152 int (*bgets)();
153 long (*ctrl)();
154 int (*create)();
155 int (*destroy)();
156 } BIO_METHOD;
157
158The 'type' is the numeric type of the BIO, these are listed in buffer.h;
159'Name' is a textual representation of the BIO 'type'.
160The 7 function pointers point to the respective function
161methods, some of which can be NULL if not implemented.
162The BIO structure
163typedef struct bio_st
164 {
165 BIO_METHOD *method;
166 long (*callback)(BIO * bio, int mode, char *argp, int
167 argi, long argl, long ret);
168 char *cb_arg; /* first argument for the callback */
169 int init;
170 int shutdown;
171 int flags; /* extra storage */
172 int num;
173 char *ptr;
174 struct bio_st *next_bio; /* used by filter BIOs */
175 int references;
176 unsigned long num_read;
177 unsigned long num_write;
178 } BIO;
179
180- 'Method' is the BIO method.
181- 'callback', when configured, is called before and after
182 each BIO method is called for that particular BIO. This
183 is intended primarily for debugging and of informational feedback.
184- 'init' is 0 when the BIO can be used for operation.
185 Often, after a BIO is created, a number of operations may
186 need to be performed before it is available for use. An
187 example is for BIO_s_sock(). A socket needs to be
188 assigned to the BIO before it can be used.
189- 'shutdown', this flag indicates if the underlying
190 comunication primative being used should be closed/freed
191 when the BIO is closed.
192- 'flags' is used to hold extra state. It is primarily used
193 to hold information about why a non-blocking operation
194 failed and to record startup protocol information for the
195 SSL BIO.
196- 'num' and 'ptr' are used to hold instance specific state
197 like file descriptors or local data structures.
198- 'next_bio' is used by filter BIOs to hold the pointer of the
199 next BIO in the chain. written data is sent to this BIO and
200 data read is taken from it.
201- 'references' is used to indicate the number of pointers to
202 this structure. This needs to be '1' before a call to
203 BIO_free() is made if the BIO_free() function is to
204 actually free() the structure, otherwise the reference
205 count is just decreased. The actual BIO subsystem does
206 not really use this functionality but it is useful when
207 used in more advanced applicaion.
208- num_read and num_write are the total number of bytes
209 read/written via the 'read()' and 'write()' methods.
210
211BIO_ctrl operations.
212The following is the list of standard commands passed as the
213second parameter to BIO_ctrl() and should be supported by
214all BIO as best as possible. Some are optional, some are
215manditory, in any case, where is makes sense, a filter BIO
216should pass such requests to underlying BIO's.
217- BIO_CTRL_RESET - Reset the BIO back to an initial state.
218- BIO_CTRL_EOF - return 0 if we are not at the end of input,
219 non 0 if we are.
220- BIO_CTRL_INFO - BIO specific special command, normal
221 information return.
222- BIO_CTRL_SET - set IO specific parameter.
223- BIO_CTRL_GET - get IO specific parameter.
224- BIO_CTRL_GET_CLOSE - Get the close on BIO_free() flag, one
225 of BIO_CLOSE or BIO_NOCLOSE.
226- BIO_CTRL_SET_CLOSE - Set the close on BIO_free() flag.
227- BIO_CTRL_PENDING - Return the number of bytes available
228 for instant reading
229- BIO_CTRL_FLUSH - Output pending data, return number of bytes output.
230- BIO_CTRL_SHOULD_RETRY - After an IO error (-1 returned)
231 should we 'retry' when IO is possible on the underlying IO object.
232- BIO_CTRL_RETRY_TYPE - What kind of IO are we waiting on.
233
234The following command is a special BIO_s_file() specific option.
235- BIO_CTRL_SET_FILENAME - specify a file to open for IO.
236
237The BIO_CTRL_RETRY_TYPE needs a little more explanation.
238When performing non-blocking IO, or say reading on a memory
239BIO, when no data is present (or cannot be written),
240BIO_read() and/or BIO_write() will return -1.
241BIO_should_retry(bio) will return true if this is due to an
242IO condition rather than an actual error. In the case of
243BIO_s_mem(), a read when there is no data will return -1 and
244a should retry when there is more 'read' data.
245The retry type is deduced from 2 macros
246BIO_should_read(bio) and BIO_should_write(bio).
247Now while it may appear obvious that a BIO_read() failure
248should indicate that a retry should be performed when more
249read data is available, this is often not true when using
250things like an SSL BIO. During the SSL protocol startup
251multiple reads and writes are performed, triggered by any
252SSL_read or SSL_write.
253So to write code that will transparently handle either a
254socket or SSL BIO,
255 i=BIO_read(bio,..)
256 if (I == -1)
257 {
258 if (BIO_should_retry(bio))
259 {
260 if (BIO_should_read(bio))
261 {
262 /* call us again when BIO can be read */
263 }
264 if (BIO_should_write(bio))
265 {
266 /* call us again when BIO can be written */
267 }
268 }
269 }
270
271At this point in time only read and write conditions can be
272used but in the future I can see the situation for other
273conditions, specifically with SSL there could be a condition
274of a X509 certificate lookup taking place and so the non-
275blocking BIO_read would require a retry when the certificate
276lookup subsystem has finished it's lookup. This is all
277makes more sense and is easy to use in a event loop type
278setup.
279When using the SSL BIO, either SSL_read() or SSL_write()s
280can be called during the protocol startup and things will
281still work correctly.
282The nice aspect of the use of the BIO_should_retry() macro
283is that all the errno codes that indicate a non-fatal error
284are encapsulated in one place. The Windows specific error
285codes and WSAGetLastError() calls are also hidden from the
286application.
287
288Notes on each BIO method.
289Normally buffer.h is just required but depending on the
290BIO_METHOD, ssl.h or evp.h will also be required.
291
292BIO_METHOD *BIO_s_mem(void);
293- BIO_set_mem_buf(BIO *bio, BUF_MEM *bm, int close_flag) -
294 set the underlying BUF_MEM structure for the BIO to use.
295- BIO_get_mem_ptr(BIO *bio, char **pp) - if pp is not NULL,
296 set it to point to the memory array and return the number
297 of bytes available.
298A read/write BIO. Any data written is appended to the
299memory array and any read is read from the front. This BIO
300can be used for read/write at the same time. BIO_gets() is
301supported in the fgets() sense.
302BIO_CTRL_INFO can be used to retrieve pointers to the memory
303buffer and it's length.
304
305BIO_METHOD *BIO_s_file(void);
306- BIO_set_fp(BIO *bio, FILE *fp, int close_flag) - set 'FILE *' to use.
307- BIO_get_fp(BIO *bio, FILE **fp) - get the 'FILE *' in use.
308- BIO_read_filename(BIO *bio, char *name) - read from file.
309- BIO_write_filename(BIO *bio, char *name) - write to file.
310- BIO_append_filename(BIO *bio, char *name) - append to file.
311This BIO sits over the normal system fread()/fgets() type
312functions. Gets() is supported. This BIO in theory could be
313used for read and write but it is best to think of each BIO
314of this type as either a read or a write BIO, not both.
315
316BIO_METHOD *BIO_s_socket(void);
317BIO_METHOD *BIO_s_fd(void);
318- BIO_sock_should_retry(int i) - the underlying function
319 used to determine if a call should be retried; the
320 argument is the '0' or '-1' returned by the previous BIO
321 operation.
322- BIO_fd_should_retry(int i) - same as the
323- BIO_sock_should_retry() except that it is different internally.
324- BIO_set_fd(BIO *bio, int fd, int close_flag) - set the
325 file descriptor to use
326- BIO_get_fd(BIO *bio, int *fd) - get the file descriptor.
327These two methods are very similar. Gets() is not
328supported, if you want this functionality, put a
329BIO_f_buffer() onto it. This BIO is bi-directional if the
330underlying file descriptor is. This is normally the case
331for sockets but not the case for stdio descriptors.
332
333BIO_METHOD *BIO_s_null(void);
334Read and write as much data as you like, it all disappears
335into this BIO.
336
337BIO_METHOD *BIO_f_buffer(void);
338- BIO_get_buffer_num_lines(BIO *bio) - return the number of
339 complete lines in the buffer.
340- BIO_set_buffer_size(BIO *bio, long size) - set the size of
341 the buffers.
342This type performs input and output buffering. It performs
343both at the same time. The size of the buffer can be set
344via the set buffer size option. Data buffered for output is
345only written when the buffer fills.
346
347BIO_METHOD *BIO_f_ssl(void);
348- BIO_set_ssl(BIO *bio, SSL *ssl, int close_flag) - the SSL
349 structure to use.
350- BIO_get_ssl(BIO *bio, SSL **ssl) - get the SSL structure
351 in use.
352The SSL bio is a little different from normal BIOs because
353the underlying SSL structure is a little different. A SSL
354structure performs IO via a read and write BIO. These can
355be different and are normally set via the
356SSL_set_rbio()/SSL_set_wbio() calls. The SSL_set_fd() calls
357are just wrappers that create socket BIOs and then call
358SSL_set_bio() where the read and write BIOs are the same.
359The BIO_push() operation makes the SSLs IO BIOs the same, so
360make sure the BIO pushed is capable of two directional
361traffic. If it is not, you will have to install the BIOs
362via the more conventional SSL_set_bio() call. BIO_pop() will retrieve
363the 'SSL read' BIO.
364
365BIO_METHOD *BIO_f_md(void);
366- BIO_set_md(BIO *bio, EVP_MD *md) - set the message digest
367 to use.
368- BIO_get_md(BIO *bio, EVP_MD **mdp) - return the digest
369 method in use in mdp, return 0 if not set yet.
370- BIO_reset() reinitializes the digest (EVP_DigestInit())
371 and passes the reset to the underlying BIOs.
372All data read or written via BIO_read() or BIO_write() to
373this BIO will be added to the calculated digest. This
374implies that this BIO is only one directional. If read and
375write operations are performed, two separate BIO_f_md() BIOs
376are reuqired to generate digests on both the input and the
377output. BIO_gets(BIO *bio, char *md, int size) will place the
378generated digest into 'md' and return the number of bytes.
379The EVP_MAX_MD_SIZE should probably be used to size the 'md'
380array. Reading the digest will also reset it.
381
382BIO_METHOD *BIO_f_cipher(void);
383- BIO_reset() reinitializes the cipher.
384- BIO_flush() should be called when the last bytes have been
385 output to flush the final block of block ciphers.
386- BIO_get_cipher_status(BIO *b), when called after the last
387 read from a cipher BIO, returns non-zero if the data
388 decrypted correctly, otherwise, 0.
389- BIO_set_cipher(BIO *b, EVP_CIPHER *c, unsigned char *key,
390 unsigned char *iv, int encrypt) This function is used to
391 setup a cipher BIO. The length of key and iv are
392 specified by the choice of EVP_CIPHER. Encrypt is 1 to
393 encrypt and 0 to decrypt.
394
395BIO_METHOD *BIO_f_base64(void);
396- BIO_flush() should be called when the last bytes have been output.
397This BIO base64 encodes when writing and base64 decodes when
398reading. It will scan the input until a suitable begin line
399is found. After reading data, BIO_reset() will reset the
400BIO to start scanning again. Do not mix reading and writing
401on the same base64 BIO. It is meant as a single stream BIO.
402
403Directions type
404both BIO_s_mem()
405one/both BIO_s_file()
406both BIO_s_fd()
407both BIO_s_socket()
408both BIO_s_null()
409both BIO_f_buffer()
410one BIO_f_md()
411one BIO_f_cipher()
412one BIO_f_base64()
413both BIO_f_ssl()
414
415It is easy to mix one and two directional BIOs, all one has
416to do is to keep two separate BIO pointers for reading and
417writing and be careful about usage of underlying BIOs. The
418SSL bio by it's very nature has to be two directional but
419the BIO_push() command will push the one BIO into the SSL
420BIO for both reading and writing.
421
422The best example program to look at is apps/enc.c and/or perhaps apps/dgst.c.
423
diff --git a/src/lib/libssl/src/doc/blowfish.doc b/src/lib/libssl/src/doc/blowfish.doc
deleted file mode 100644
index 8a7f425b32..0000000000
--- a/src/lib/libssl/src/doc/blowfish.doc
+++ /dev/null
@@ -1,146 +0,0 @@
1The Blowfish library.
2
3Blowfish is a block cipher that operates on 64bit (8 byte) quantities. It
4uses variable size key, but 128bit (16 byte) key would normally be considered
5good. It can be used in all the modes that DES can be used. This
6library implements the ecb, cbc, cfb64, ofb64 modes.
7
8Blowfish is quite a bit faster that DES, and much faster than IDEA or
9RC2. It is one of the faster block ciphers.
10
11For all calls that have an 'input' and 'output' variables, they can be the
12same.
13
14This library requires the inclusion of 'blowfish.h'.
15
16All of the encryption functions take what is called an BF_KEY as an
17argument. An BF_KEY is an expanded form of the Blowfish key.
18For all modes of the Blowfish algorithm, the BF_KEY used for
19decryption is the same one that was used for encryption.
20
21The define BF_ENCRYPT is passed to specify encryption for the functions
22that require an encryption/decryption flag. BF_DECRYPT is passed to
23specify decryption.
24
25Please note that any of the encryption modes specified in my DES library
26could be used with Blowfish. I have only implemented ecb, cbc, cfb64 and
27ofb64 for the following reasons.
28- ecb is the basic Blowfish encryption.
29- cbc is the normal 'chaining' form for block ciphers.
30- cfb64 can be used to encrypt single characters, therefore input and output
31 do not need to be a multiple of 8.
32- ofb64 is similar to cfb64 but is more like a stream cipher, not as
33 secure (not cipher feedback) but it does not have an encrypt/decrypt mode.
34- If you want triple Blowfish, thats 384 bits of key and you must be totally
35 obsessed with security. Still, if you want it, it is simple enough to
36 copy the function from the DES library and change the des_encrypt to
37 BF_encrypt; an exercise left for the paranoid reader :-).
38
39The functions are as follows:
40
41void BF_set_key(
42BF_KEY *ks;
43int len;
44unsigned char *key;
45 BF_set_key converts an 'len' byte key into a BF_KEY.
46 A 'ks' is an expanded form of the 'key' which is used to
47 perform actual encryption. It can be regenerated from the Blowfish key
48 so it only needs to be kept when encryption or decryption is about
49 to occur. Don't save or pass around BF_KEY's since they
50 are CPU architecture dependent, 'key's are not. Blowfish is an
51 interesting cipher in that it can be used with a variable length
52 key. 'len' is the length of 'key' to be used as the key.
53 A 'len' of 16 is recomended by me, but blowfish can use upto
54 72 bytes. As a warning, blowfish has a very very slow set_key
55 function, it actually runs BF_encrypt 521 times.
56
57void BF_encrypt(unsigned long *data, BF_KEY *key);
58void BF_decrypt(unsigned long *data, BF_KEY *key);
59 These are the Blowfish encryption function that gets called by just
60 about every other Blowfish routine in the library. You should not
61 use this function except to implement 'modes' of Blowfish.
62 I say this because the
63 functions that call this routine do the conversion from 'char *' to
64 long, and this needs to be done to make sure 'non-aligned' memory
65 access do not occur.
66 Data is a pointer to 2 unsigned long's and key is the
67 BF_KEY to use.
68
69void BF_ecb_encrypt(
70unsigned char *in,
71unsigned char *out,
72BF_KEY *key,
73int encrypt);
74 This is the basic Electronic Code Book form of Blowfish (in DES this
75 mode is called Electronic Code Book so I'm going to use the term
76 for blowfish as well.
77 Input is encrypted into output using the key represented by
78 key. Depending on the encrypt, encryption or
79 decryption occurs. Input is 8 bytes long and output is 8 bytes.
80
81void BF_cbc_encrypt(
82unsigned char *in,
83unsigned char *out,
84long length,
85BF_KEY *ks,
86unsigned char *ivec,
87int encrypt);
88 This routine implements Blowfish in Cipher Block Chaining mode.
89 Input, which should be a multiple of 8 bytes is encrypted
90 (or decrypted) to output which will also be a multiple of 8 bytes.
91 The number of bytes is in length (and from what I've said above,
92 should be a multiple of 8). If length is not a multiple of 8, bad
93 things will probably happen. ivec is the initialisation vector.
94 This function updates iv after each call so that it can be passed to
95 the next call to BF_cbc_encrypt().
96
97void BF_cfb64_encrypt(
98unsigned char *in,
99unsigned char *out,
100long length,
101BF_KEY *schedule,
102unsigned char *ivec,
103int *num,
104int encrypt);
105 This is one of the more useful functions in this Blowfish library, it
106 implements CFB mode of Blowfish with 64bit feedback.
107 This allows you to encrypt an arbitrary number of bytes,
108 you do not require 8 byte padding. Each call to this
109 routine will encrypt the input bytes to output and then update ivec
110 and num. Num contains 'how far' we are though ivec.
111 'Encrypt' is used to indicate encryption or decryption.
112 CFB64 mode operates by using the cipher to generate a stream
113 of bytes which is used to encrypt the plain text.
114 The cipher text is then encrypted to generate the next 64 bits to
115 be xored (incrementally) with the next 64 bits of plain
116 text. As can be seen from this, to encrypt or decrypt,
117 the same 'cipher stream' needs to be generated but the way the next
118 block of data is gathered for encryption is different for
119 encryption and decryption.
120
121void BF_ofb64_encrypt(
122unsigned char *in,
123unsigned char *out,
124long length,
125BF_KEY *schedule,
126unsigned char *ivec,
127int *num);
128 This functions implements OFB mode of Blowfish with 64bit feedback.
129 This allows you to encrypt an arbitrary number of bytes,
130 you do not require 8 byte padding. Each call to this
131 routine will encrypt the input bytes to output and then update ivec
132 and num. Num contains 'how far' we are though ivec.
133 This is in effect a stream cipher, there is no encryption or
134 decryption mode.
135
136For reading passwords, I suggest using des_read_pw_string() from my DES library.
137To generate a password from a text string, I suggest using MD5 (or MD2) to
138produce a 16 byte message digest that can then be passed directly to
139BF_set_key().
140
141=====
142For more information about the specific Blowfish modes in this library
143(ecb, cbc, cfb and ofb), read the section entitled 'Modes of DES' from the
144documentation on my DES library. What is said about DES is directly
145applicable for Blowfish.
146
diff --git a/src/lib/libssl/src/doc/bn.doc b/src/lib/libssl/src/doc/bn.doc
deleted file mode 100644
index 47be23b6ea..0000000000
--- a/src/lib/libssl/src/doc/bn.doc
+++ /dev/null
@@ -1,381 +0,0 @@
1The Big Number library.
2
3#include "bn.h" when using this library.
4
5This big number library was written for use in implementing the RSA and DH
6public key encryption algorithms. As such, features such as negative
7numbers have not been extensively tested but they should work as expected.
8This library uses dynamic memory allocation for storing its data structures
9and so there are no limit on the size of the numbers manipulated by these
10routines but there is always the requirement to check return codes from
11functions just in case a memory allocation error has occurred.
12
13The basic object in this library is a BIGNUM. It is used to hold a single
14large integer. This type should be considered opaque and fields should not
15be modified or accessed directly.
16typedef struct bignum_st
17 {
18 int top; /* Index of last used d. */
19 BN_ULONG *d; /* Pointer to an array of 'BITS2' bit chunks. */
20 int max; /* Size of the d array. */
21 int neg;
22 } BIGNUM;
23The big number is stored in a malloced array of BN_ULONG's. A BN_ULONG can
24be either 16, 32 or 64 bits in size, depending on the 'number of bits'
25specified in bn.h.
26The 'd' field is this array. 'max' is the size of the 'd' array that has
27been allocated. 'top' is the 'last' entry being used, so for a value of 4,
28bn.d[0]=4 and bn.top=1. 'neg' is 1 if the number is negative.
29When a BIGNUM is '0', the 'd' field can be NULL and top == 0.
30
31Various routines in this library require the use of 'temporary' BIGNUM
32variables during their execution. Due to the use of dynamic memory
33allocation to create BIGNUMs being rather expensive when used in
34conjunction with repeated subroutine calls, the BN_CTX structure is
35used. This structure contains BN_CTX BIGNUMs. BN_CTX
36is the maximum number of temporary BIGNUMs any publicly exported
37function will use.
38
39#define BN_CTX 12
40typedef struct bignum_ctx
41 {
42 int tos; /* top of stack */
43 BIGNUM *bn[BN_CTX]; /* The variables */
44 } BN_CTX;
45
46The functions that follow have been grouped according to function. Most
47arithmetic functions return a result in the first argument, sometimes this
48first argument can also be an input parameter, sometimes it cannot. These
49restrictions are documented.
50
51extern BIGNUM *BN_value_one;
52There is one variable defined by this library, a BIGNUM which contains the
53number 1. This variable is useful for use in comparisons and assignment.
54
55Get Size functions.
56
57int BN_num_bits(BIGNUM *a);
58 This function returns the size of 'a' in bits.
59
60int BN_num_bytes(BIGNUM *a);
61 This function (macro) returns the size of 'a' in bytes.
62 For conversion of BIGNUMs to byte streams, this is the number of
63 bytes the output string will occupy. If the output byte
64 format specifies that the 'top' bit indicates if the number is
65 signed, so an extra '0' byte is required if the top bit on a
66 positive number is being written, it is upto the application to
67 make this adjustment. Like I said at the start, I don't
68 really support negative numbers :-).
69
70Creation/Destruction routines.
71
72BIGNUM *BN_new();
73 Return a new BIGNUM object. The number initially has a value of 0. If
74 there is an error, NULL is returned.
75
76void BN_free(BIGNUM *a);
77 Free()s a BIGNUM.
78
79void BN_clear(BIGNUM *a);
80 Sets 'a' to a value of 0 and also zeros all unused allocated
81 memory. This function is used to clear a variable of 'sensitive'
82 data that was held in it.
83
84void BN_clear_free(BIGNUM *a);
85 This function zeros the memory used by 'a' and then free()'s it.
86 This function should be used to BN_free() BIGNUMS that have held
87 sensitive numeric values like RSA private key values. Both this
88 function and BN_clear tend to only be used by RSA and DH routines.
89
90BN_CTX *BN_CTX_new(void);
91 Returns a new BN_CTX. NULL on error.
92
93void BN_CTX_free(BN_CTX *c);
94 Free a BN_CTX structure. The BIGNUMs in 'c' are BN_clear_free()ed.
95
96BIGNUM *bn_expand(BIGNUM *b, int bits);
97 This is an internal function that should not normally be used. It
98 ensures that 'b' has enough room for a 'bits' bit number. It is
99 mostly used by the various BIGNUM routines. If there is an error,
100 NULL is returned. if not, 'b' is returned.
101
102BIGNUM *BN_copy(BIGNUM *to, BIGNUM *from);
103 The 'from' is copied into 'to'. NULL is returned if there is an
104 error, otherwise 'to' is returned.
105
106BIGNUM *BN_dup(BIGNUM *a);
107 A new BIGNUM is created and returned containing the value of 'a'.
108 NULL is returned on error.
109
110Comparison and Test Functions.
111
112int BN_is_zero(BIGNUM *a)
113 Return 1 if 'a' is zero, else 0.
114
115int BN_is_one(a)
116 Return 1 is 'a' is one, else 0.
117
118int BN_is_word(a,w)
119 Return 1 if 'a' == w, else 0. 'w' is a BN_ULONG.
120
121int BN_cmp(BIGNUM *a, BIGNUM *b);
122 Return -1 if 'a' is less than 'b', 0 if 'a' and 'b' are the same
123 and 1 is 'a' is greater than 'b'. This is a signed comparison.
124
125int BN_ucmp(BIGNUM *a, BIGNUM *b);
126 This function is the same as BN_cmp except that the comparison
127 ignores the sign of the numbers.
128
129Arithmetic Functions
130For all of these functions, 0 is returned if there is an error and 1 is
131returned for success. The return value should always be checked. eg.
132if (!BN_add(r,a,b)) goto err;
133Unless explicitly mentioned, the 'return' value can be one of the
134'parameters' to the function.
135
136int BN_add(BIGNUM *r, BIGNUM *a, BIGNUM *b);
137 Add 'a' and 'b' and return the result in 'r'. This is r=a+b.
138
139int BN_sub(BIGNUM *r, BIGNUM *a, BIGNUM *b);
140 Subtract 'a' from 'b' and put the result in 'r'. This is r=a-b.
141
142int BN_lshift(BIGNUM *r, BIGNUM *a, int n);
143 Shift 'a' left by 'n' bits. This is r=a*(2^n).
144
145int BN_lshift1(BIGNUM *r, BIGNUM *a);
146 Shift 'a' left by 1 bit. This form is more efficient than
147 BN_lshift(r,a,1). This is r=a*2.
148
149int BN_rshift(BIGNUM *r, BIGNUM *a, int n);
150 Shift 'a' right by 'n' bits. This is r=int(a/(2^n)).
151
152int BN_rshift1(BIGNUM *r, BIGNUM *a);
153 Shift 'a' right by 1 bit. This form is more efficient than
154 BN_rshift(r,a,1). This is r=int(a/2).
155
156int BN_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b);
157 Multiply a by b and return the result in 'r'. 'r' must not be
158 either 'a' or 'b'. It has to be a different BIGNUM.
159 This is r=a*b.
160
161int BN_sqr(BIGNUM *r, BIGNUM *a, BN_CTX *ctx);
162 Multiply a by a and return the result in 'r'. 'r' must not be
163 'a'. This function is alot faster than BN_mul(r,a,a). This is r=a*a.
164
165int BN_div(BIGNUM *dv, BIGNUM *rem, BIGNUM *m, BIGNUM *d, BN_CTX *ctx);
166 Divide 'm' by 'd' and return the result in 'dv' and the remainder
167 in 'rem'. Either of 'dv' or 'rem' can be NULL in which case that
168 value is not returned. 'ctx' needs to be passed as a source of
169 temporary BIGNUM variables.
170 This is dv=int(m/d), rem=m%d.
171
172int BN_mod(BIGNUM *rem, BIGNUM *m, BIGNUM *d, BN_CTX *ctx);
173 Find the remainder of 'm' divided by 'd' and return it in 'rem'.
174 'ctx' holds the temporary BIGNUMs required by this function.
175 This function is more efficient than BN_div(NULL,rem,m,d,ctx);
176 This is rem=m%d.
177
178int BN_mod_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, BIGNUM *m,BN_CTX *ctx);
179 Multiply 'a' by 'b' and return the remainder when divided by 'm'.
180 'ctx' holds the temporary BIGNUMs required by this function.
181 This is r=(a*b)%m.
182
183int BN_mod_exp(BIGNUM *r, BIGNUM *a, BIGNUM *p, BIGNUM *m,BN_CTX *ctx);
184 Raise 'a' to the 'p' power and return the remainder when divided by
185 'm'. 'ctx' holds the temporary BIGNUMs required by this function.
186 This is r=(a^p)%m.
187
188int BN_reciprocal(BIGNUM *r, BIGNUM *m, BN_CTX *ctx);
189 Return the reciprocal of 'm'. 'ctx' holds the temporary variables
190 required. This function returns -1 on error, otherwise it returns
191 the number of bits 'r' is shifted left to make 'r' into an integer.
192 This number of bits shifted is required in BN_mod_mul_reciprocal().
193 This is r=(1/m)<<(BN_num_bits(m)+1).
194
195int BN_mod_mul_reciprocal(BIGNUM *r, BIGNUM *x, BIGNUM *y, BIGNUM *m,
196 BIGNUM *i, int nb, BN_CTX *ctx);
197 This function is used to perform an efficient BN_mod_mul()
198 operation. If one is going to repeatedly perform BN_mod_mul() with
199 the same modulus is worth calculating the reciprocal of the modulus
200 and then using this function. This operation uses the fact that
201 a/b == a*r where r is the reciprocal of b. On modern computers
202 multiplication is very fast and big number division is very slow.
203 'x' is multiplied by 'y' and then divided by 'm' and the remainder
204 is returned. 'i' is the reciprocal of 'm' and 'nb' is the number
205 of bits as returned from BN_reciprocal(). Normal usage is as follows.
206 bn=BN_reciprocal(i,m);
207 for (...)
208 { BN_mod_mul_reciprocal(r,x,y,m,i,bn,ctx); }
209 This is r=(x*y)%m. Internally it is approximately
210 r=(x*y)-m*(x*y/m) or r=(x*y)-m*((x*y*i) >> bn)
211 This function is used in BN_mod_exp() and BN_is_prime().
212
213Assignment Operations
214
215int BN_one(BIGNUM *a)
216 Set 'a' to hold the value one.
217 This is a=1.
218
219int BN_zero(BIGNUM *a)
220 Set 'a' to hold the value zero.
221 This is a=0.
222
223int BN_set_word(BIGNUM *a, unsigned long w);
224 Set 'a' to hold the value of 'w'. 'w' is an unsigned long.
225 This is a=w.
226
227unsigned long BN_get_word(BIGNUM *a);
228 Returns 'a' in an unsigned long. Not remarkably, often 'a' will
229 be biger than a word, in which case 0xffffffffL is returned.
230
231Word Operations
232These functions are much more efficient that the normal bignum arithmetic
233operations.
234
235BN_ULONG BN_mod_word(BIGNUM *a, unsigned long w);
236 Return the remainder of 'a' divided by 'w'.
237 This is return(a%w).
238
239int BN_add_word(BIGNUM *a, unsigned long w);
240 Add 'w' to 'a'. This function does not take the sign of 'a' into
241 account. This is a+=w;
242
243Bit operations.
244
245int BN_is_bit_set(BIGNUM *a, int n);
246 This function return 1 if bit 'n' is set in 'a' else 0.
247
248int BN_set_bit(BIGNUM *a, int n);
249 This function sets bit 'n' to 1 in 'a'.
250 This is a&= ~(1<<n);
251
252int BN_clear_bit(BIGNUM *a, int n);
253 This function sets bit 'n' to zero in 'a'. Return 0 if less
254 than 'n' bits in 'a' else 1. This is a&= ~(1<<n);
255
256int BN_mask_bits(BIGNUM *a, int n);
257 Truncate 'a' to n bits long. This is a&= ~((~0)<<n)
258
259Format conversion routines.
260
261BIGNUM *BN_bin2bn(unsigned char *s, int len,BIGNUM *ret);
262 This function converts 'len' bytes in 's' into a BIGNUM which
263 is put in 'ret'. If ret is NULL, a new BIGNUM is created.
264 Either this new BIGNUM or ret is returned. The number is
265 assumed to be in bigendian form in 's'. By this I mean that
266 to 'ret' is created as follows for 'len' == 5.
267 ret = s[0]*2^32 + s[1]*2^24 + s[2]*2^16 + s[3]*2^8 + s[4];
268 This function cannot be used to convert negative numbers. It
269 is always assumed the number is positive. The application
270 needs to diddle the 'neg' field of th BIGNUM its self.
271 The better solution would be to save the numbers in ASN.1 format
272 since this is a defined standard for storing big numbers.
273 Look at the functions
274
275 ASN1_INTEGER *BN_to_ASN1_INTEGER(BIGNUM *bn, ASN1_INTEGER *ai);
276 BIGNUM *ASN1_INTEGER_to_BN(ASN1_INTEGER *ai,BIGNUM *bn);
277 int i2d_ASN1_INTEGER(ASN1_INTEGER *a,unsigned char **pp);
278 ASN1_INTEGER *d2i_ASN1_INTEGER(ASN1_INTEGER **a,unsigned char **pp,
279 long length;
280
281int BN_bn2bin(BIGNUM *a, unsigned char *to);
282 This function converts 'a' to a byte string which is put into
283 'to'. The representation is big-endian in that the most
284 significant byte of 'a' is put into to[0]. This function
285 returns the number of bytes used to hold 'a'. BN_num_bytes(a)
286 would return the same value and can be used to determine how
287 large 'to' needs to be. If the number is negative, this
288 information is lost. Since this library was written to
289 manipulate large positive integers, the inability to save and
290 restore them is not considered to be a problem by me :-).
291 As for BN_bin2bn(), look at the ASN.1 integer encoding funtions
292 for SSLeay. They use BN_bin2bn() and BN_bn2bin() internally.
293
294char *BN_bn2ascii(BIGNUM *a);
295 This function returns a malloc()ed string that contains the
296 ascii hexadecimal encoding of 'a'. The number is in bigendian
297 format with a '-' in front if the number is negative.
298
299int BN_ascii2bn(BIGNUM **bn, char *a);
300 The inverse of BN_bn2ascii. The function returns the number of
301 characters from 'a' were processed in generating a the bignum.
302 error is inticated by 0 being returned. The number is a
303 hex digit string, optionally with a leading '-'. If *bn
304 is null, a BIGNUM is created and returned via that variable.
305
306int BN_print_fp(FILE *fp, BIGNUM *a);
307 'a' is printed to file pointer 'fp'. It is in the same format
308 that is output from BN_bn2ascii(). 0 is returned on error,
309 1 if things are ok.
310
311int BN_print(BIO *bp, BIGNUM *a);
312 Same as BN_print except that the output is done to the SSLeay libraries
313 BIO routines. BN_print_fp() actually calls this function.
314
315Miscellaneous Routines.
316
317int BN_rand(BIGNUM *rnd, int bits, int top, int bottom);
318 This function returns in 'rnd' a random BIGNUM that is bits
319 long. If bottom is 1, the number returned is odd. If top is set,
320 the top 2 bits of the number are set. This is useful because if
321 this is set, 2 'n; bit numbers multiplied together will return a 2n
322 bit number. If top was not set, they could produce a 2n-1 bit
323 number.
324
325BIGNUM *BN_mod_inverse(BIGNUM *a, BIGNUM *n,BN_CTX *ctx);
326 This function create a new BIGNUM and returns it. This number
327 is the inverse mod 'n' of 'a'. By this it is meant that the
328 returned value 'r' satisfies (a*r)%n == 1. This function is
329 used in the generation of RSA keys. 'ctx', as per usual,
330 is used to hold temporary variables that are required by the
331 function. NULL is returned on error.
332
333int BN_gcd(BIGNUM *r,BIGNUM *a,BIGNUM *b,BN_CTX *ctx);
334 'r' has the greatest common divisor of 'a' and 'b'. 'ctx' is
335 used for temporary variables and 0 is returned on error.
336
337int BN_is_prime(BIGNUM *p,int nchecks,void (*callback)(),BN_CTX *ctx,
338 char *cb_arg);
339 This function is used to check if a BIGNUM ('p') is prime.
340 It performs this test by using the Miller-Rabin randomised
341 primality test. This is a probalistic test that requires a
342 number of rounds to ensure the number is prime to a high
343 degree of probability. Since this can take quite some time, a
344 callback function can be passed and it will be called each
345 time 'p' passes a round of the prime testing. 'callback' will
346 be called as follows, callback(1,n,cb_arg) where n is the number of
347 the round, just passed. As per usual 'ctx' contains temporary
348 variables used. If ctx is NULL, it does not matter, a local version
349 will be malloced. This parameter is present to save some mallocing
350 inside the function but probably could be removed.
351 0 is returned on error.
352 'ncheck' is the number of Miller-Rabin tests to run. It is
353 suggested to use the value 'BN_prime_checks' by default.
354
355BIGNUM *BN_generate_prime(
356int bits,
357int strong,
358BIGNUM *a,
359BIGNUM *rems,
360void (*callback)());
361char *cb_arg
362 This function is used to generate prime numbers. It returns a
363 new BIGNUM that has a high probability of being a prime.
364 'bits' is the number of bits that
365 are to be in the prime. If 'strong' is true, the returned prime
366 will also be a strong prime ((p-1)/2 is also prime).
367 While searching for the prime ('p'), we
368 can add the requirement that the prime fill the following
369 condition p%a == rem. This can be used to help search for
370 primes with specific features, which is required when looking
371 for primes suitable for use with certain 'g' values in the
372 Diffie-Hellman key exchange algorithm. If 'a' is NULL,
373 this condition is not checked. If rem is NULL, rem is assumed
374 to be 1. Since this search for a prime
375 can take quite some time, if callback is not NULL, it is called
376 in the following situations.
377 We have a suspected prime (from a quick sieve),
378 callback(0,sus_prime++,cb_arg). Each item to be passed to BN_is_prime().
379 callback(1,round++,cb_arg). Each successful 'round' in BN_is_prime().
380 callback(2,round,cb_arg). For each successful BN_is_prime() test.
381
diff --git a/src/lib/libssl/src/doc/c-indentation.el b/src/lib/libssl/src/doc/c-indentation.el
new file mode 100644
index 0000000000..9a4a0be598
--- /dev/null
+++ b/src/lib/libssl/src/doc/c-indentation.el
@@ -0,0 +1,36 @@
1; This Emacs Lisp file defines a C indentation style that closely
2; follows most aspects of the one that is used throughout SSLeay,
3; and hence in OpenSSL.
4;
5; This definition is for the "CC mode" package, which is the default
6; mode for editing C source files in Emacs 20, not for the older
7; c-mode.el (which was the default in less recent releaes of Emacs 19).
8;
9; Copy the definition in your .emacs file or use M-x eval-buffer.
10; To activate this indentation style, visit a C file, type
11; M-x c-set-style <RET> (or C-c . for short), and enter "eay".
12; To toggle the auto-newline feature of CC mode, type C-c C-a.
13;
14; Apparently statement blocks that are not introduced by a statement
15; such as "if" and that are not the body of a function cannot
16; be handled too well by CC mode with this indentation style.
17; The style defined below does not indent them at all.
18; To insert tabs manually, prefix them with ^Q (the "quoted-insert"
19; command of Emacs). If you know a solution to this problem
20; or find other problems with this indentation style definition,
21; please send e-mail to bodo@openssl.org.
22
23(c-add-style "eay"
24 '((c-basic-offset . 8)
25 (c-comment-only-line-offset . 0)
26 (c-hanging-braces-alist)
27 (c-offsets-alist . ((defun-open . +)
28 (defun-block-intro . 0)
29 (block-open . 0)
30 (substatement-open . +)
31 (statement-block-intro . 0)
32 (statement-case-open . +)
33 (statement-case-intro . +)
34 (case-label . -)
35 (label . -)
36 (arglist-cont-nonempty . +)))))
diff --git a/src/lib/libssl/src/doc/ca.1 b/src/lib/libssl/src/doc/ca.1
deleted file mode 100644
index e9e390a434..0000000000
--- a/src/lib/libssl/src/doc/ca.1
+++ /dev/null
@@ -1,121 +0,0 @@
1From eay@orb.mincom.oz.au Thu Dec 28 23:56:45 1995
2Received: by orb.mincom.oz.au id AA07374
3 (5.65c/IDA-1.4.4 for eay); Thu, 28 Dec 1995 13:56:45 +1000
4Date: Thu, 28 Dec 1995 13:56:45 +1000 (EST)
5From: Eric Young <eay@mincom.oz.au>
6X-Sender: eay@orb
7To: sameer <sameer@c2.org>
8Cc: ssleay@mincom.oz.au
9Subject: Re: 'ca'
10In-Reply-To: <199512230440.UAA23410@infinity.c2.org>
11Message-Id: <Pine.SOL.3.91.951228133525.7269A-100000@orb>
12Mime-Version: 1.0
13Content-Type: TEXT/PLAIN; charset=US-ASCII
14Status: RO
15X-Status:
16
17On Fri, 22 Dec 1995, sameer wrote:
18> I could use documentation on 'ca'. Thanks.
19
20Very quickly.
21The ca program uses the ssleay.conf file for most of its configuration
22
23./ca -help
24
25 -verbose - Talk alot while doing things
26 -config file - A config file. If you don't want to use the
27 default config file
28 -name arg - The particular CA definition to use
29 In the config file, the section to use for parameters. This lets
30 multiple setups to be contained in the one file. By default, the
31 default_ca variable is looked up in the [ ca ] section. So in the
32 shipped ssleay.conf, the CA definition used is CA_default. It could be
33 any other name.
34 -gencrl days - Generate a new CRL, days is when the next CRL is due
35 This will generate a new certificate revocion list.
36 -days arg - number of days to certify the certificate for
37 When certifying certificates, this is the number of days to use.
38 -md arg - md to use, one of md2, md5, sha or sha1
39 -policy arg - The CA 'policy' to support
40 I'll describe this later, but there are 2 policies definied in the
41 shipped ssleay.conf
42 -keyfile arg - PEM RSA private key file
43 -key arg - key to decode the RSA private key if it is encrypted
44 since we need to keep the CA's RSA key encrypted
45 -cert - The CA certificate
46 -in file - The input PEM encoded certificate request(s)
47 -out file - Where to put the output file(s)
48 -outdir dir - Where to put output certificates
49 The -out options concatenates all the output
50 certificates to one file, -outdir puts them in a directory,
51 named by serial number.
52 -infiles .... - The last argument, requests to process
53 The certificate requests to process, -in is the same.
54
55Just about all the above have default values defined in ssleay.conf.
56
57The key variables in ssleay.conf are (for the particular '-name' being
58used, in the default, it is CA_default).
59
60dir is where all the CA database stuff is kept.
61certs is where all the previously issued certificates are kept.
62The database is a simple text database containing the following tab separated
63fields.
64status: a value of 'R' - revoked, 'E' -expired or 'V' valid.
65issued date: When the certificate was certified.
66revoked date: When it was revoked, blank if not revoked.
67serial number: The certificate serial number.
68certificate: Where the certificate is located.
69CN: The name of the certificate.
70
71The demo file has quite a few made up values it it. The last 2 were
72added by the ca program and are acurate.
73The CA program does not update the 'certificate' file correctly right now.
74The serial field should be unique as should the CN/status combination.
75The ca program checks these at startup. What still needs to be
76wrtten is a program to 'regenerate' the data base file from the issued
77certificate list (and a CRL list).
78
79Back to the CA_default variables.
80
81Most of the variables are commented.
82
83policy is the default policy.
84
85Ok for policies, they define the order and which fields must be present
86in the certificate request and what gets filled in.
87
88So a value of
89countryName = match
90means that the country name must match the CA certificate.
91organizationalUnitName = optional
92The org.Unit,Name does not have to be present and
93commonName = supplied
94commonName must be supplied in the certificate request.
95
96For the 'policy_match' policy, the order of the attributes in the
97generated certificate would be
98countryName
99stateOrProvinceName
100organizationName
101organizationalUnitName
102commonName
103emailAddress
104
105Have a play, it sort of makes sense. If you think about how the persona
106requests operate, it is similar to the 'policy_match' policy and the
107'policy_anything' is similar to what versign is doing.
108
109I hope this helps a bit. Some backend scripts are definitly needed to
110update the database and to make certificate revocion easy. All
111certificates issued should also be kept forever (or until they expire?)
112
113hope this helps
114eric (who has to run off an buy some cheap knee pads for the caving in 4
115days time :-)
116
117--
118Eric Young | Signature removed since it was generating
119AARNet: eay@mincom.oz.au | more followups than the message contents :-)
120
121
diff --git a/src/lib/libssl/src/doc/callback.doc b/src/lib/libssl/src/doc/callback.doc
deleted file mode 100644
index 7ad0f7f7d2..0000000000
--- a/src/lib/libssl/src/doc/callback.doc
+++ /dev/null
@@ -1,240 +0,0 @@
1Callback functions used in SSLeay.
2
3--------------------------
4The BIO library.
5
6Each BIO structure can have a callback defined against it. This callback is
7called 2 times for each BIO 'function'. It is passed 6 parameters.
8BIO_debug_callback() is an example callback which is defined in
9crypto/buffer/bio_cb.c and is used in apps/dgst.c This is intended mostly
10for debuging or to notify the application of IO.
11
12long BIO_debug_callback(BIO *bio,int cmd,char *argp,int argi,long argl,
13 long ret);
14bio is the BIO being called, cmd is the type of BIO function being called.
15Look at the BIO_CB_* defines in buffer.h. Argp and argi are the arguments
16passed to BIO_read(), BIO_write, BIO_gets(), BIO_puts(). In the case of
17BIO_ctrl(), argl is also defined. The first time the callback is called,
18before the underlying function has been executed, 0 is passed as 'ret', and
19if the return code from the callback is not > 0, the call is aborted
20and the returned <= 0 value is returned.
21The second time the callback is called, the 'cmd' value also has
22BIO_CB_RETURN logically 'or'ed with it. The 'ret' value is the value returned
23from the actuall function call and whatever the callback returns is returned
24from the BIO function.
25
26BIO_set_callback(b,cb) can be used to set the callback function
27(b is a BIO), and BIO_set_callback_arg(b,arg) can be used to
28set the cb_arg argument in the BIO strucutre. This field is only intended
29to be used by application, primarily in the callback function since it is
30accessable since the BIO is passed.
31
32--------------------------
33The PEM library.
34
35The pem library only really uses one type of callback,
36static int def_callback(char *buf, int num, int verify);
37which is used to return a password string if required.
38'buf' is the buffer to put the string in. 'num' is the size of 'buf'
39and 'verify' is used to indicate that the password should be checked.
40This last flag is mostly used when reading a password for encryption.
41
42For all of these functions, a NULL callback will call the above mentioned
43default callback. This default function does not work under Windows 3.1.
44For other machines, it will use an application defined prompt string
45(EVP_set_pw_prompt(), which defines a library wide prompt string)
46if defined, otherwise it will use it's own PEM password prompt.
47It will then call EVP_read_pw_string() to get a password from the console.
48If your application wishes to use nice fancy windows to retrieve passwords,
49replace this function. The callback should return the number of bytes read
50into 'buf'. If the number of bytes <= 0, it is considered an error.
51
52Functions that take this callback are listed below. For the 'read' type
53functions, the callback will only be required if the PEM data is encrypted.
54
55For the Write functions, normally a password can be passed in 'kstr', of
56'klen' bytes which will be used if the 'enc' cipher is not NULL. If
57'kstr' is NULL, the callback will be used to retrieve a password.
58
59int PEM_do_header (EVP_CIPHER_INFO *cipher, unsigned char *data,long *len,
60 int (*callback)());
61char *PEM_ASN1_read_bio(char *(*d2i)(),char *name,BIO *bp,char **x,int (*cb)());
62char *PEM_ASN1_read(char *(*d2i)(),char *name,FILE *fp,char **x,int (*cb)());
63int PEM_ASN1_write_bio(int (*i2d)(),char *name,BIO *bp,char *x,
64 EVP_CIPHER *enc,unsigned char *kstr,int klen,int (*callback)());
65int PEM_ASN1_write(int (*i2d)(),char *name,FILE *fp,char *x,
66 EVP_CIPHER *enc,unsigned char *kstr,int klen,int (*callback)());
67STACK *PEM_X509_INFO_read(FILE *fp, STACK *sk, int (*cb)());
68STACK *PEM_X509_INFO_read_bio(BIO *fp, STACK *sk, int (*cb)());
69
70#define PEM_write_RSAPrivateKey(fp,x,enc,kstr,klen,cb)
71#define PEM_write_DSAPrivateKey(fp,x,enc,kstr,klen,cb)
72#define PEM_write_bio_RSAPrivateKey(bp,x,enc,kstr,klen,cb)
73#define PEM_write_bio_DSAPrivateKey(bp,x,enc,kstr,klen,cb)
74#define PEM_read_SSL_SESSION(fp,x,cb)
75#define PEM_read_X509(fp,x,cb)
76#define PEM_read_X509_REQ(fp,x,cb)
77#define PEM_read_X509_CRL(fp,x,cb)
78#define PEM_read_RSAPrivateKey(fp,x,cb)
79#define PEM_read_DSAPrivateKey(fp,x,cb)
80#define PEM_read_PrivateKey(fp,x,cb)
81#define PEM_read_PKCS7(fp,x,cb)
82#define PEM_read_DHparams(fp,x,cb)
83#define PEM_read_bio_SSL_SESSION(bp,x,cb)
84#define PEM_read_bio_X509(bp,x,cb)
85#define PEM_read_bio_X509_REQ(bp,x,cb)
86#define PEM_read_bio_X509_CRL(bp,x,cb)
87#define PEM_read_bio_RSAPrivateKey(bp,x,cb)
88#define PEM_read_bio_DSAPrivateKey(bp,x,cb)
89#define PEM_read_bio_PrivateKey(bp,x,cb)
90#define PEM_read_bio_PKCS7(bp,x,cb)
91#define PEM_read_bio_DHparams(bp,x,cb)
92int i2d_Netscape_RSA(RSA *a, unsigned char **pp, int (*cb)());
93RSA *d2i_Netscape_RSA(RSA **a, unsigned char **pp, long length, int (*cb)());
94
95Now you will notice that macros like
96#define PEM_write_X509(fp,x) \
97 PEM_ASN1_write((int (*)())i2d_X509,PEM_STRING_X509,fp, \
98 (char *)x, NULL,NULL,0,NULL)
99Don't do encryption normally. If you want to PEM encrypt your X509 structure,
100either just call PEM_ASN1_write directly or just define you own
101macro variant. As you can see, this macro just sets all encryption related
102parameters to NULL.
103
104
105--------------------------
106The SSL library.
107
108#define SSL_set_info_callback(ssl,cb)
109#define SSL_CTX_set_info_callback(ctx,cb)
110void callback(SSL *ssl,int location,int ret)
111This callback is called each time around the SSL_connect()/SSL_accept()
112state machine. So it will be called each time the SSL protocol progresses.
113It is mostly present for use when debugging. When SSL_connect() or
114SSL_accept() return, the location flag is SSL_CB_ACCEPT_EXIT or
115SSL_CB_CONNECT_EXIT and 'ret' is the value about to be returned.
116Have a look at the SSL_CB_* defines in ssl.h. If an info callback is defined
117against the SSL_CTX, it is called unless there is one set against the SSL.
118Have a look at
119void client_info_callback() in apps/s_client() for an example.
120
121Certificate verification.
122void SSL_set_verify(SSL *s, int mode, int (*callback) ());
123void SSL_CTX_set_verify(SSL_CTX *ctx,int mode,int (*callback)());
124This callback is used to help verify client and server X509 certificates.
125It is actually passed to X509_cert_verify(), along with the SSL structure
126so you have to read about X509_cert_verify() :-). The SSL_CTX version is used
127if the SSL version is not defined. X509_cert_verify() is the function used
128by the SSL part of the library to verify certificates. This function is
129nearly always defined by the application.
130
131void SSL_CTX_set_cert_verify_cb(SSL_CTX *ctx, int (*cb)(),char *arg);
132int callback(char *arg,SSL *s,X509 *xs,STACK *cert_chain);
133This call is used to replace the SSLeay certificate verification code.
134The 'arg' is kept in the SSL_CTX and is passed to the callback.
135If the callback returns 0, the certificate is rejected, otherwise it
136is accepted. The callback is replacing the X509_cert_verify() call.
137This feature is not often used, but if you wished to implement
138some totally different certificate authentication system, this 'hook' is
139vital.
140
141SSLeay keeps a cache of session-ids against each SSL_CTX. These callbacks can
142be used to notify the application when a SSL_SESSION is added to the cache
143or to retrieve a SSL_SESSION that is not in the cache from the application.
144#define SSL_CTX_sess_set_get_cb(ctx,cb)
145SSL_SESSION *callback(SSL *s,char *session_id,int session_id_len,int *copy);
146If defined, this callback is called to return the SESSION_ID for the
147session-id in 'session_id', of 'session_id_len' bytes. 'copy' is set to 1
148if the server is to 'take a copy' of the SSL_SESSION structure. It is 0
149if the SSL_SESSION is being 'passed in' so the SSLeay library is now
150responsible for 'free()ing' the structure. Basically it is used to indicate
151if the reference count on the SSL_SESSION structure needs to be incremented.
152
153#define SSL_CTX_sess_set_new_cb(ctx,cb)
154int callback(SSL *s, SSL_SESSION *sess);
155When a new connection is established, if the SSL_SESSION is going to be added
156to the cache, this callback is called. Return 1 if a 'copy' is required,
157otherwise, return 0. This return value just causes the reference count
158to be incremented (on return of a 1), this means the application does
159not need to worry about incrementing the refernece count (and the
160locking that implies in a multi-threaded application).
161
162void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx,int (*cb)());
163This sets the SSL password reading function.
164It is mostly used for windowing applications
165and used by PEM_read_bio_X509() and PEM_read_bio_RSAPrivateKey()
166calls inside the SSL library. The only reason this is present is because the
167calls to PEM_* functions is hidden in the SSLeay library so you have to
168pass in the callback some how.
169
170#define SSL_CTX_set_client_cert_cb(ctx,cb)
171int callback(SSL *s,X509 **x509, EVP_PKEY **pkey);
172Called when a client certificate is requested but there is not one set
173against the SSL_CTX or the SSL. If the callback returns 1, x509 and
174pkey need to point to valid data. The library will free these when
175required so if the application wants to keep these around, increment
176their reference counts. If 0 is returned, no client cert is
177available. If -1 is returned, it is assumed that the callback needs
178to be called again at a later point in time. SSL_connect will return
179-1 and SSL_want_x509_lookup(ssl) returns true. Remember that
180application data can be attached to an SSL structure via the
181SSL_set_app_data(SSL *ssl,char *data) call.
182
183--------------------------
184The X509 library.
185
186int X509_cert_verify(CERTIFICATE_CTX *ctx,X509 *xs, int (*cb)(),
187 int *error,char *arg,STACK *cert_chain);
188int verify_callback(int ok,X509 *xs,X509 *xi,int depth,int error,char *arg,
189 STACK *cert_chain);
190
191X509_cert_verify() is used to authenticate X509 certificates. The 'ctx' holds
192the details of the various caches and files used to locate certificates.
193'xs' is the certificate to verify and 'cb' is the application callback (more
194detail later). 'error' will be set to the error code and 'arg' is passed
195to the 'cb' callback. Look at the VERIFY_* defines in crypto/x509/x509.h
196
197When ever X509_cert_verify() makes a 'negative' decision about a
198certitificate, the callback is called. If everything checks out, the
199callback is called with 'VERIFY_OK' or 'VERIFY_ROOT_OK' (for a self
200signed cert that is not the passed certificate).
201
202The callback is passed the X509_cert_verify opinion of the certificate
203in 'ok', the certificate in 'xs', the issuer certificate in 'xi',
204the 'depth' of the certificate in the verification 'chain', the
205VERIFY_* code in 'error' and the argument passed to X509_cert_verify()
206in 'arg'. cert_chain is a list of extra certs to use if they are not
207in the cache.
208
209The callback can be used to look at the error reason, and then return 0
210for an 'error' or '1' for ok. This will override the X509_cert_verify()
211opinion of the certificates validity. Processing will continue depending on
212the return value. If one just wishes to use the callback for informational
213reason, just return the 'ok' parameter.
214
215--------------------------
216The BN and DH library.
217
218BIGNUM *BN_generate_prime(int bits,int strong,BIGNUM *add,
219 BIGNUM *rem,void (*callback)(int,int));
220int BN_is_prime(BIGNUM *p,int nchecks,void (*callback)(int,int),
221
222Read doc/bn.doc for the description of these 2.
223
224DH *DH_generate_parameters(int prime_len,int generator,
225 void (*callback)(int,int));
226Read doc/bn.doc for the description of the callback, since it is just passed
227to BN_generate_prime(), except that it is also called as
228callback(3,0) by this function.
229
230--------------------------
231The CRYPTO library.
232
233void CRYPTO_set_locking_callback(void (*func)(int mode,int type,char *file,
234 int line));
235void CRYPTO_set_add_lock_callback(int (*func)(int *num,int mount,
236 int type,char *file, int line));
237void CRYPTO_set_id_callback(unsigned long (*func)(void));
238
239Read threads.doc for info on these ones.
240
diff --git a/src/lib/libssl/src/doc/cipher.doc b/src/lib/libssl/src/doc/cipher.doc
deleted file mode 100644
index d49ba78c5c..0000000000
--- a/src/lib/libssl/src/doc/cipher.doc
+++ /dev/null
@@ -1,345 +0,0 @@
1The Cipher subroutines.
2
3These routines require "evp.h" to be included.
4
5These functions are a higher level interface to the various cipher
6routines found in this library. As such, they allow the same code to be
7used to encrypt and decrypt via different ciphers with only a change
8in an initial parameter. These routines also provide buffering for block
9ciphers.
10
11These routines all take a pointer to the following structure to specify
12which cipher to use. If you wish to use a new cipher with these routines,
13you would probably be best off looking an how an existing cipher is
14implemented and copying it. At this point in time, I'm not going to go
15into many details. This structure should be considered opaque
16
17typedef struct pem_cipher_st
18 {
19 int type;
20 int block_size;
21 int key_len;
22 int iv_len;
23 void (*enc_init)(); /* init for encryption */
24 void (*dec_init)(); /* init for decryption */
25 void (*do_cipher)(); /* encrypt data */
26 } EVP_CIPHER;
27
28The type field is the object NID of the cipher type
29(read the section on Objects for an explanation of what a NID is).
30The cipher block_size is how many bytes need to be passed
31to the cipher at a time. Key_len is the
32length of the key the cipher requires and iv_len is the length of the
33initialisation vector required. enc_init is the function
34called to initialise the ciphers context for encryption and dec_init is the
35function to initialise for decryption (they need to be different, especially
36for the IDEA cipher).
37
38One reason for specifying the Cipher via a pointer to a structure
39is that if you only use des-cbc, only the des-cbc routines will
40be included when you link the program. If you passed an integer
41that specified which cipher to use, the routine that mapped that
42integer to a set of cipher functions would cause all the ciphers
43to be link into the code. This setup also allows new ciphers
44to be added by the application (with some restrictions).
45
46The thirteen ciphers currently defined in this library are
47
48EVP_CIPHER *EVP_des_ecb(); /* DES in ecb mode, iv=0, block=8, key= 8 */
49EVP_CIPHER *EVP_des_ede(); /* DES in ecb ede mode, iv=0, block=8, key=16 */
50EVP_CIPHER *EVP_des_ede3(); /* DES in ecb ede mode, iv=0, block=8, key=24 */
51EVP_CIPHER *EVP_des_cfb(); /* DES in cfb mode, iv=8, block=1, key= 8 */
52EVP_CIPHER *EVP_des_ede_cfb(); /* DES in ede cfb mode, iv=8, block=1, key=16 */
53EVP_CIPHER *EVP_des_ede3_cfb();/* DES in ede cfb mode, iv=8, block=1, key=24 */
54EVP_CIPHER *EVP_des_ofb(); /* DES in ofb mode, iv=8, block=1, key= 8 */
55EVP_CIPHER *EVP_des_ede_ofb(); /* DES in ede ofb mode, iv=8, block=1, key=16 */
56EVP_CIPHER *EVP_des_ede3_ofb();/* DES in ede ofb mode, iv=8, block=1, key=24 */
57EVP_CIPHER *EVP_des_cbc(); /* DES in cbc mode, iv=8, block=8, key= 8 */
58EVP_CIPHER *EVP_des_ede_cbc(); /* DES in cbc ede mode, iv=8, block=8, key=16 */
59EVP_CIPHER *EVP_des_ede3_cbc();/* DES in cbc ede mode, iv=8, block=8, key=24 */
60EVP_CIPHER *EVP_desx_cbc(); /* DES in desx cbc mode,iv=8, block=8, key=24 */
61EVP_CIPHER *EVP_rc4(); /* RC4, iv=0, block=1, key=16 */
62EVP_CIPHER *EVP_idea_ecb(); /* IDEA in ecb mode, iv=0, block=8, key=16 */
63EVP_CIPHER *EVP_idea_cfb(); /* IDEA in cfb mode, iv=8, block=1, key=16 */
64EVP_CIPHER *EVP_idea_ofb(); /* IDEA in ofb mode, iv=8, block=1, key=16 */
65EVP_CIPHER *EVP_idea_cbc(); /* IDEA in cbc mode, iv=8, block=8, key=16 */
66EVP_CIPHER *EVP_rc2_ecb(); /* RC2 in ecb mode, iv=0, block=8, key=16 */
67EVP_CIPHER *EVP_rc2_cfb(); /* RC2 in cfb mode, iv=8, block=1, key=16 */
68EVP_CIPHER *EVP_rc2_ofb(); /* RC2 in ofb mode, iv=8, block=1, key=16 */
69EVP_CIPHER *EVP_rc2_cbc(); /* RC2 in cbc mode, iv=8, block=8, key=16 */
70EVP_CIPHER *EVP_bf_ecb(); /* Blowfish in ecb mode,iv=0, block=8, key=16 */
71EVP_CIPHER *EVP_bf_cfb(); /* Blowfish in cfb mode,iv=8, block=1, key=16 */
72EVP_CIPHER *EVP_bf_ofb(); /* Blowfish in ofb mode,iv=8, block=1, key=16 */
73EVP_CIPHER *EVP_bf_cbc(); /* Blowfish in cbc mode,iv=8, block=8, key=16 */
74
75The meaning of the compound names is as follows.
76des The base cipher is DES.
77idea The base cipher is IDEA
78rc4 The base cipher is RC4-128
79rc2 The base cipher is RC2-128
80ecb Electronic Code Book form of the cipher.
81cbc Cipher Block Chaining form of the cipher.
82cfb 64 bit Cipher Feedback form of the cipher.
83ofb 64 bit Output Feedback form of the cipher.
84ede The cipher is used in Encrypt, Decrypt, Encrypt mode. The first
85 and last keys are the same.
86ede3 The cipher is used in Encrypt, Decrypt, Encrypt mode.
87
88All the Cipher routines take a EVP_CIPHER_CTX pointer as an argument.
89The state of the cipher is kept in this structure.
90
91typedef struct EVP_CIPHER_Ctx_st
92 {
93 EVP_CIPHER *cipher;
94 int encrypt; /* encrypt or decrypt */
95 int buf_len; /* number we have left */
96 unsigned char buf[8];
97 union {
98 .... /* cipher specific stuff */
99 } c;
100 } EVP_CIPHER_CTX;
101
102Cipher is a pointer the the EVP_CIPHER for the current context. The encrypt
103flag indicates encryption or decryption. buf_len is the number of bytes
104currently being held in buf.
105The 'c' union holds the cipher specify context.
106
107The following functions are to be used.
108
109int EVP_read_pw_string(
110char *buf,
111int len,
112char *prompt,
113int verify,
114 This function is the same as des_read_pw_string() (des.doc).
115
116void EVP_set_pw_prompt(char *prompt);
117 This function sets the 'default' prompt to use to use in
118 EVP_read_pw_string when the prompt parameter is NULL. If the
119 prompt parameter is NULL, this 'default prompt' feature is turned
120 off. Be warned, this is a global variable so weird things
121 will happen if it is used under Win16 and care must be taken
122 with a multi-threaded version of the library.
123
124char *EVP_get_pw_prompt();
125 This returns a pointer to the default prompt string. NULL
126 if it is not set.
127
128int EVP_BytesToKey(
129EVP_CIPHER *type,
130EVP_MD *md,
131unsigned char *salt,
132unsigned char *data,
133int datal,
134int count,
135unsigned char *key,
136unsigned char *iv);
137 This function is used to generate a key and an initialisation vector
138 for a specified cipher from a key string and a salt. Type
139 specifies the cipher the 'key' is being generated for. Md is the
140 message digest algorithm to use to generate the key and iv. The salt
141 is an optional 8 byte object that is used to help seed the key
142 generator.
143 If the salt value is NULL, it is just not used. Datal is the
144 number of bytes to use from 'data' in the key generation.
145 This function returns the key size for the specified cipher, if
146 data is NULL, this value is returns and no other
147 computation is performed. Count is
148 the number of times to loop around the key generator. I would
149 suggest leaving it's value as 1. Key and iv are the structures to
150 place the returning iv and key in. If they are NULL, no value is
151 generated for that particular value.
152 The algorithm used is as follows
153
154 /* M[] is an array of message digests
155 * MD() is the message digest function */
156 M[0]=MD(data . salt);
157 for (i=1; i<count; i++) M[0]=MD(M[0]);
158
159 i=1
160 while (data still needed for key and iv)
161 {
162 M[i]=MD(M[i-1] . data . salt);
163 for (i=1; i<count; i++) M[i]=MD(M[i]);
164 i++;
165 }
166
167 If the salt is NULL, it is not used.
168 The digests are concatenated together.
169 M = M[0] . M[1] . M[2] .......
170
171 For key= 8, iv=8 => key=M[0.. 8], iv=M[ 9 .. 16].
172 For key=16, iv=0 => key=M[0..16].
173 For key=16, iv=8 => key=M[0..16], iv=M[17 .. 24].
174 For key=24, iv=8 => key=M[0..24], iv=M[25 .. 32].
175
176 This routine will produce DES-CBC keys and iv that are compatible
177 with the PKCS-5 standard when md2 or md5 are used. If md5 is
178 used, the salt is NULL and count is 1, this routine will produce
179 the password to key mapping normally used with RC4.
180 I have attempted to logically extend the PKCS-5 standard to
181 generate keys and iv for ciphers that require more than 16 bytes,
182 if anyone knows what the correct standard is, please inform me.
183 When using sha or sha1, things are a bit different under this scheme,
184 since sha produces a 20 byte digest. So for ciphers requiring
185 24 bits of data, 20 will come from the first MD and 4 will
186 come from the second.
187
188 I have considered having a separate function so this 'routine'
189 can be used without the requirement of passing a EVP_CIPHER *,
190 but I have decided to not bother. If you wish to use the
191 function without official EVP_CIPHER structures, just declare
192 a local one and set the key_len and iv_len fields to the
193 length you desire.
194
195The following routines perform encryption and decryption 'by parts'. By
196this I mean that there are groups of 3 routines. An Init function that is
197used to specify a cipher and initialise data structures. An Update routine
198that does encryption/decryption, one 'chunk' at a time. And finally a
199'Final' function that finishes the encryption/decryption process.
200All these functions take a EVP_CIPHER pointer to specify which cipher to
201encrypt/decrypt with. They also take a EVP_CIPHER_CTX object as an
202argument. This structure is used to hold the state information associated
203with the operation in progress.
204
205void EVP_EncryptInit(
206EVP_CIPHER_CTX *ctx,
207EVP_CIPHER *type,
208unsigned char *key,
209unsigned char *iv);
210 This function initialise a EVP_CIPHER_CTX for encryption using the
211 cipher passed in the 'type' field. The cipher is initialised to use
212 'key' as the key and 'iv' for the initialisation vector (if one is
213 required). If the type, key or iv is NULL, the value currently in the
214 EVP_CIPHER_CTX is reused. So to perform several decrypt
215 using the same cipher, key and iv, initialise with the cipher,
216 key and iv the first time and then for subsequent calls,
217 reuse 'ctx' but pass NULL for type, key and iv. You must make sure
218 to pass a key that is large enough for a particular cipher. I
219 would suggest using the EVP_BytesToKey() function.
220
221void EVP_EncryptUpdate(
222EVP_CIPHER_CTX *ctx,
223unsigned char *out,
224int *outl,
225unsigned char *in,
226int inl);
227 This function takes 'inl' bytes from 'in' and outputs bytes
228 encrypted by the cipher 'ctx' was initialised with into 'out'. The
229 number of bytes written to 'out' is put into outl. If a particular
230 cipher encrypts in blocks, less or more bytes than input may be
231 output. Currently the largest block size used by supported ciphers
232 is 8 bytes, so 'out' should have room for 'inl+7' bytes. Normally
233 EVP_EncryptInit() is called once, followed by lots and lots of
234 calls to EVP_EncryptUpdate, followed by a single EVP_EncryptFinal
235 call.
236
237void EVP_EncryptFinal(
238EVP_CIPHER_CTX *ctx,
239unsigned char *out,
240int *outl);
241 Because quite a large number of ciphers are block ciphers, there is
242 often an incomplete block to write out at the end of the
243 encryption. EVP_EncryptFinal() performs processing on this last
244 block. The last block in encoded in such a way that it is possible
245 to determine how many bytes in the last block are valid. For 8 byte
246 block size ciphers, if only 5 bytes in the last block are valid, the
247 last three bytes will be filled with the value 3. If only 2 were
248 valid, the other 6 would be filled with sixes. If all 8 bytes are
249 valid, a extra 8 bytes are appended to the cipher stream containing
250 nothing but 8 eights. These last bytes are output into 'out' and
251 the number of bytes written is put into 'outl' These last bytes
252 are output into 'out' and the number of bytes written is put into
253 'outl'. This form of block cipher finalisation is compatible with
254 PKCS-5. Please remember that even if you are using ciphers like
255 RC4 that has no blocking and so the function will not write
256 anything into 'out', it would still be a good idea to pass a
257 variable for 'out' that can hold 8 bytes just in case the cipher is
258 changed some time in the future. It should also be remembered
259 that the EVP_CIPHER_CTX contains the password and so when one has
260 finished encryption with a particular EVP_CIPHER_CTX, it is good
261 practice to zero the structure
262 (ie. memset(ctx,0,sizeof(EVP_CIPHER_CTX)).
263
264void EVP_DecryptInit(
265EVP_CIPHER_CTX *ctx,
266EVP_CIPHER *type,
267unsigned char *key,
268unsigned char *iv);
269 This function is basically the same as EVP_EncryptInit() accept that
270 is prepares the EVP_CIPHER_CTX for decryption.
271
272void EVP_DecryptUpdate(
273EVP_CIPHER_CTX *ctx,
274unsigned char *out,
275int *outl,
276unsigned char *in,
277int inl);
278 This function is basically the same as EVP_EncryptUpdate()
279 except that it performs decryption. There is one
280 fundamental difference though. 'out' can not be the same as
281 'in' for any ciphers with a block size greater than 1 if more
282 than one call to EVP_DecryptUpdate() will be made. This
283 is because this routine can hold a 'partial' block between
284 calls. When a partial block is decrypted (due to more bytes
285 being passed via this function, they will be written to 'out'
286 overwriting the input bytes in 'in' that have not been read
287 yet. From this it should also be noted that 'out' should
288 be at least one 'block size' larger than 'inl'. This problem
289 only occurs on the second and subsequent call to
290 EVP_DecryptUpdate() when using a block cipher.
291
292int EVP_DecryptFinal(
293EVP_CIPHER_CTX *ctx,
294unsigned char *out,
295int *outl);
296 This function is different to EVP_EncryptFinal in that it 'removes'
297 any padding bytes appended when the data was encrypted. Due to the
298 way in which 1 to 8 bytes may have been appended when encryption
299 using a block cipher, 'out' can end up with 0 to 7 bytes being put
300 into it. When decoding the padding bytes, it is possible to detect
301 an incorrect decryption. If the decryption appears to be wrong, 0
302 is returned. If everything seems ok, 1 is returned. For ciphers
303 with a block size of 1 (RC4), this function would normally not
304 return any bytes and would always return 1. Just because this
305 function returns 1 does not mean the decryption was correct. It
306 would normally be wrong due to either the wrong key/iv or
307 corruption of the cipher data fed to EVP_DecryptUpdate().
308 As for EVP_EncryptFinal, it is a good idea to zero the
309 EVP_CIPHER_CTX after use since the structure contains the key used
310 to decrypt the data.
311
312The following Cipher routines are convenience routines that call either
313EVP_EncryptXxx or EVP_DecryptXxx depending on weather the EVP_CIPHER_CTX
314was setup to encrypt or decrypt.
315
316void EVP_CipherInit(
317EVP_CIPHER_CTX *ctx,
318EVP_CIPHER *type,
319unsigned char *key,
320unsigned char *iv,
321int enc);
322 This function take arguments that are the same as EVP_EncryptInit()
323 and EVP_DecryptInit() except for the extra 'enc' flag. If 1, the
324 EVP_CIPHER_CTX is setup for encryption, if 0, decryption.
325
326void EVP_CipherUpdate(
327EVP_CIPHER_CTX *ctx,
328unsigned char *out,
329int *outl,
330unsigned char *in,
331int inl);
332 Again this function calls either EVP_EncryptUpdate() or
333 EVP_DecryptUpdate() depending on state in the 'ctx' structure.
334 As noted for EVP_DecryptUpdate(), when this routine is used
335 for decryption with block ciphers, 'out' should not be the
336 same as 'in'.
337
338int EVP_CipherFinal(
339EVP_CIPHER_CTX *ctx,
340unsigned char *outm,
341int *outl);
342 This routine call EVP_EncryptFinal() or EVP_DecryptFinal()
343 depending on the state information in 'ctx'. 1 is always returned
344 if the mode is encryption, otherwise the return value is the return
345 value of EVP_DecryptFinal().
diff --git a/src/lib/libssl/src/doc/cipher.m b/src/lib/libssl/src/doc/cipher.m
deleted file mode 100644
index 9f74917135..0000000000
--- a/src/lib/libssl/src/doc/cipher.m
+++ /dev/null
@@ -1,128 +0,0 @@
1From ssl-lists-owner@mincom.com Tue Oct 15 18:16:14 1996
2Received: from cygnus.mincom.oz.au by orb.mincom.oz.au with SMTP id AA11550
3 (5.65c/IDA-1.4.4 for eay); Tue, 15 Oct 1996 08:17:41 +1000
4Received: (from daemon@localhost) by cygnus.mincom.oz.au (8.7.5/8.7.3) id IAA12472 for ssl-users-outgoing; Tue, 15 Oct 1996 08:16:35 +1000 (EST)
5Received: from orb.mincom.oz.au (eay@orb.mincom.oz.au [192.55.197.1]) by cygnus.mincom.oz.au (8.7.5/8.7.3) with SMTP id IAA12463 for <ssl-users@listserv.mincom.oz.au>; Tue, 15 Oct 1996 08:16:32 +1000 (EST)
6Received: by orb.mincom.oz.au id AA11544
7 (5.65c/IDA-1.4.4 for ssl-users@listserv.mincom.oz.au); Tue, 15 Oct 1996 08:16:15 +1000
8Date: Tue, 15 Oct 1996 08:16:14 +1000 (EST)
9From: Eric Young <eay@mincom.com>
10X-Sender: eay@orb
11To: Roland Haring <rharing@tandem.cl>
12Cc: ssl-users@mincom.com
13Subject: Re: Symmetric encryption with ssleay
14In-Reply-To: <m0vBpyq-00001aC@tandemnet.tandem.cl>
15Message-Id: <Pine.SOL.3.91.961015075623.11394A-100000@orb>
16Mime-Version: 1.0
17Content-Type: TEXT/PLAIN; charset=US-ASCII
18Sender: ssl-lists-owner@mincom.com
19Precedence: bulk
20Status: RO
21X-Status:
22
23
24On Fri, 11 Oct 1996, Roland Haring wrote:
25> THE_POINT:
26> Would somebody be so kind to give me the minimum basic
27> calls I need to do to libcrypto.a to get some text encrypted
28> and decrypted again? ...hopefully with code included to do
29> base64 encryption and decryption ... e.g. that sign-it.c code
30> posted some while ago was a big help :-) (please, do not point
31> me to apps/enc.c where I suspect my Heissenbug to be hidden :-)
32
33Ok, the base64 encoding stuff in 'enc.c' does the wrong thing sometimes
34when the data is less than a line long (this is for decoding). I'll dig
35up the exact fix today and post it. I am taking longer on 0.6.5 than I
36intended so I'll just post this patch.
37
38The documentation to read is in
39doc/cipher.doc,
40doc/encode.doc (very sparse :-).
41and perhaps
42doc/digest.doc,
43
44The basic calls to encrypt with say triple DES are
45
46Given
47char key[EVP_MAX_KEY_LENGTH];
48char iv[EVP_MAX_IV_LENGTH];
49EVP_CIPHER_CTX ctx;
50unsigned char out[512+8];
51int outl;
52
53/* optional generation of key/iv data from text password using md5
54 * via an upward compatable verson of PKCS#5. */
55EVP_BytesToKey(EVP_des_ede3_cbc,EVP_md5,NULL,passwd,strlen(passwd),
56 key,iv);
57
58/* Initalise the EVP_CIPHER_CTX */
59EVP_EncryptInit(ctx,EVP_des_ede3_cbc,key,iv);
60
61while (....)
62 {
63 /* This is processing 512 bytes at a time, the bytes are being
64 * copied into 'out', outl bytes are output. 'out' should not be the
65 * same as 'in' for reasons mentioned in the documentation. */
66 EVP_EncryptUpdate(ctx,out,&outl,in,512);
67 }
68
69/* Output the last 'block'. If the cipher is a block cipher, the last
70 * block is encoded in such a way so that a wrong decryption will normally be
71 * detected - again, one of the PKCS standards. */
72
73EVP_EncryptFinal(ctx,out,&outl);
74
75To decrypt, use the EVP_DecryptXXXXX functions except that EVP_DecryptFinal()
76will return 0 if the decryption fails (only detectable on block ciphers).
77
78You can also use
79EVP_CipherInit()
80EVP_CipherUpdate()
81EVP_CipherFinal()
82which does either encryption or decryption depending on an extra
83parameter to EVP_CipherInit().
84
85
86To do the base64 encoding,
87EVP_EncodeInit()
88EVP_EncodeUpdate()
89EVP_EncodeFinal()
90
91EVP_DecodeInit()
92EVP_DecodeUpdate()
93EVP_DecodeFinal()
94
95where the encoding is quite simple, but the decoding can be a bit more
96fun (due to dud input).
97
98EVP_DecodeUpdate() returns -1 for an error on an input line, 0 if the
99'last line' was just processed, and 1 if more lines should be submitted.
100
101EVP_DecodeFinal() returns -1 for an error or 1 if things are ok.
102
103So the loop becomes
104EVP_DecodeInit(....)
105for (;;)
106 {
107 i=EVP_DecodeUpdate(....);
108 if (i < 0) goto err;
109
110 /* process the data */
111
112 if (i == 0) break;
113 }
114EVP_DecodeFinal(....);
115/* process the data */
116
117The problem in 'enc.c' is that I was stuff the processing up after the
118EVP_DecodeFinal(...) when the for(..) loop was not being run (one line of
119base64 data) and this was because 'enc.c' tries to scan over a file until
120it hits the first valid base64 encoded line.
121
122hope this helps a bit.
123eric
124--
125Eric Young | BOOL is tri-state according to Bill Gates.
126AARNet: eay@mincom.oz.au | RTFM Win32 GetMessage().
127
128
diff --git a/src/lib/libssl/src/doc/conf.doc b/src/lib/libssl/src/doc/conf.doc
deleted file mode 100644
index f12fe884f5..0000000000
--- a/src/lib/libssl/src/doc/conf.doc
+++ /dev/null
@@ -1,89 +0,0 @@
1The CONF library.
2
3The CONF library is a simple set of routines that can be used to configure
4programs. It is a superset of the genenv() function with some extra
5structure.
6
7The library consists of 5 functions.
8
9LHASH *CONF_load(LHASH *config,char *file);
10This function is called to load in a configuration file. Multiple
11configuration files can be loaded, with each subsequent 'load' overwriting
12any already defined 'variables'. If there is an error, NULL is returned.
13If config is NULL, a new LHASH structure is created and returned, otherwise
14the new data in the 'file' is loaded into the 'config' structure.
15
16void CONF_free(LHASH *config);
17This function free()s the data in config.
18
19char *CONF_get_string(LHASH *config,char *section,char *name);
20This function returns the string found in 'config' that corresponds to the
21'section' and 'name' specified. Classes and the naming system used will be
22discussed later in this document. If the variable is not defined, an NULL
23is returned.
24
25long CONF_get_long(LHASH *config,char *section, char *name);
26This function is the same as CONF_get_string() except that it converts the
27string to an long and returns it. If variable is not a number or the
28variable does not exist, 0 is returned. This is a little problematic but I
29don't know of a simple way around it.
30
31STACK *CONF_get_section(LHASH *config, char *section);
32This function returns a 'stack' of CONF_VALUE items that are all the
33items defined in a particular section. DO NOT free() any of the
34variable returned. They will disappear when CONF_free() is called.
35
36The 'lookup' model.
37The configuration file is divided into 'sections'. Each section is started by
38a line of the form '[ section ]'. All subsequent variable definitions are
39of this section. A variable definition is a simple alpha-numeric name
40followed by an '=' and then the data. A section or variable name can be
41described by a regular expression of the following form '[A-Za-z0-9_]+'.
42The value of the variable is the text after the '=' until the end of the
43line, stripped of leading and trailing white space.
44At this point I should mention that a '#' is a comment character, \ is the
45escape character, and all three types of quote can be used to stop any
46special interpretation of the data.
47Now when the data is being loaded, variable expansion can occur. This is
48done by expanding any $NAME sequences into the value represented by the
49variable NAME. If the variable is not in the current section, the different
50section can be specified by using the $SECTION::NAME form. The ${NAME} form
51also works and is very useful for expanding variables inside strings.
52
53When a variable is looked up, there are 2 special section. 'default', which
54is the initial section, and 'ENV' which is the processes environment
55variables (accessed via getenv()). When a variable is looked up, it is
56first 'matched' with it's section (if one was specified), if this fails, the
57'default' section is matched.
58If the 'lhash' variable passed was NULL, the environment is searched.
59
60Now why do we bother with sections? So we can have multiple programs using
61the same configuration file, or multiple instances of the same program
62using different variables. It also provides a nice mechanism to override
63the processes environment variables (eg ENV::HOME=/tmp). If there is a
64program specific variable missing, we can have default values.
65Multiple configuration files can be loaded, with each new value clearing
66any predefined values. A system config file can provide 'default' values,
67and application/usr specific files can provide overriding values.
68
69Examples
70
71# This is a simple example
72SSLEAY_HOME = /usr/local/ssl
73ENV::PATH = $SSLEAY_HOME/bin:$PATH # override my path
74
75[X509]
76cert_dir = $SSLEAY_HOME/certs # /usr/local/ssl/certs
77
78[SSL]
79CIPHER = DES-EDE-MD5:RC4-MD5
80USER_CERT = $HOME/${USER}di'r 5' # /home/eay/eaydir 5
81USER_CERT = $HOME/\${USER}di\'r # /home/eay/${USER}di'r
82USER_CERT = "$HOME/${US"ER}di\'r # $HOME/${USER}di'r
83
84TEST = 1234\
855678\
869ab # TEST=123456789ab
87TTT = 1234\n\n # TTT=1234<nl><nl>
88
89
diff --git a/src/lib/libssl/src/doc/crypto.pod b/src/lib/libssl/src/doc/crypto.pod
new file mode 100644
index 0000000000..9c8a143b09
--- /dev/null
+++ b/src/lib/libssl/src/doc/crypto.pod
@@ -0,0 +1,27 @@
1
2=pod
3
4=head1 NAME
5
6Crypto - OpenSSL Cryptography library
7
8=head1 SYNOPSIS
9
10=head1 DESCRIPTION
11
12The OpenSSL B<crypto> library implements various cryptography standards
13related to the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security
14(TLS v1) protocols. It provides a rich API which is documented here.
15
16...
17
18=head1 SEE ALSO
19
20openssl(1), ssl(3)
21
22=head1 HISTORY
23
24The crypto(3) document appeared in OpenSSL 0.9.2
25
26=cut
27
diff --git a/src/lib/libssl/src/doc/des.doc b/src/lib/libssl/src/doc/des.doc
deleted file mode 100644
index 5879d968f3..0000000000
--- a/src/lib/libssl/src/doc/des.doc
+++ /dev/null
@@ -1,505 +0,0 @@
1The DES library.
2
3Please note that this library was originally written to operate with
4eBones, a version of Kerberos that had had encryption removed when it left
5the USA and then put back in. As such there are some routines that I will
6advise not using but they are still in the library for historical reasons.
7For all calls that have an 'input' and 'output' variables, they can be the
8same.
9
10This library requires the inclusion of 'des.h'.
11
12All of the encryption functions take what is called a des_key_schedule as an
13argument. A des_key_schedule is an expanded form of the des key.
14A des_key is 8 bytes of odd parity, the type used to hold the key is a
15des_cblock. A des_cblock is an array of 8 bytes, often in this library
16description I will refer to input bytes when the function specifies
17des_cblock's as input or output, this just means that the variable should
18be a multiple of 8 bytes.
19
20The define DES_ENCRYPT is passed to specify encryption, DES_DECRYPT to
21specify decryption. The functions and global variable are as follows:
22
23int des_check_key;
24 DES keys are supposed to be odd parity. If this variable is set to
25 a non-zero value, des_set_key() will check that the key has odd
26 parity and is not one of the known weak DES keys. By default this
27 variable is turned off;
28
29void des_set_odd_parity(
30des_cblock *key );
31 This function takes a DES key (8 bytes) and sets the parity to odd.
32
33int des_is_weak_key(
34des_cblock *key );
35 This function returns a non-zero value if the DES key passed is a
36 weak, DES key. If it is a weak key, don't use it, try a different
37 one. If you are using 'random' keys, the chances of hitting a weak
38 key are 1/2^52 so it is probably not worth checking for them.
39
40int des_set_key(
41des_cblock *key,
42des_key_schedule schedule);
43 Des_set_key converts an 8 byte DES key into a des_key_schedule.
44 A des_key_schedule is an expanded form of the key which is used to
45 perform actual encryption. It can be regenerated from the DES key
46 so it only needs to be kept when encryption or decryption is about
47 to occur. Don't save or pass around des_key_schedule's since they
48 are CPU architecture dependent, DES keys are not. If des_check_key
49 is non zero, zero is returned if the key has the wrong parity or
50 the key is a weak key, else 1 is returned.
51
52int des_key_sched(
53des_cblock *key,
54des_key_schedule schedule);
55 An alternative name for des_set_key().
56
57int des_rw_mode; /* defaults to DES_PCBC_MODE */
58 This flag holds either DES_CBC_MODE or DES_PCBC_MODE (default).
59 This specifies the function to use in the enc_read() and enc_write()
60 functions.
61
62void des_encrypt(
63unsigned long *data,
64des_key_schedule ks,
65int enc);
66 This is the DES encryption function that gets called by just about
67 every other DES routine in the library. You should not use this
68 function except to implement 'modes' of DES. I say this because the
69 functions that call this routine do the conversion from 'char *' to
70 long, and this needs to be done to make sure 'non-aligned' memory
71 access do not occur. The characters are loaded 'little endian',
72 have a look at my source code for more details on how I use this
73 function.
74 Data is a pointer to 2 unsigned long's and ks is the
75 des_key_schedule to use. enc, is non zero specifies encryption,
76 zero if decryption.
77
78void des_encrypt2(
79unsigned long *data,
80des_key_schedule ks,
81int enc);
82 This functions is the same as des_encrypt() except that the DES
83 initial permutation (IP) and final permutation (FP) have been left
84 out. As for des_encrypt(), you should not use this function.
85 It is used by the routines in my library that implement triple DES.
86 IP() des_encrypt2() des_encrypt2() des_encrypt2() FP() is the same
87 as des_encrypt() des_encrypt() des_encrypt() except faster :-).
88
89void des_ecb_encrypt(
90des_cblock *input,
91des_cblock *output,
92des_key_schedule ks,
93int enc);
94 This is the basic Electronic Code Book form of DES, the most basic
95 form. Input is encrypted into output using the key represented by
96 ks. If enc is non zero (DES_ENCRYPT), encryption occurs, otherwise
97 decryption occurs. Input is 8 bytes long and output is 8 bytes.
98 (the des_cblock structure is 8 chars).
99
100void des_ecb3_encrypt(
101des_cblock *input,
102des_cblock *output,
103des_key_schedule ks1,
104des_key_schedule ks2,
105des_key_schedule ks3,
106int enc);
107 This is the 3 key EDE mode of ECB DES. What this means is that
108 the 8 bytes of input is encrypted with ks1, decrypted with ks2 and
109 then encrypted again with ks3, before being put into output;
110 C=E(ks3,D(ks2,E(ks1,M))). There is a macro, des_ecb2_encrypt()
111 that only takes 2 des_key_schedules that implements,
112 C=E(ks1,D(ks2,E(ks1,M))) in that the final encrypt is done with ks1.
113
114void des_cbc_encrypt(
115des_cblock *input,
116des_cblock *output,
117long length,
118des_key_schedule ks,
119des_cblock *ivec,
120int enc);
121 This routine implements DES in Cipher Block Chaining mode.
122 Input, which should be a multiple of 8 bytes is encrypted
123 (or decrypted) to output which will also be a multiple of 8 bytes.
124 The number of bytes is in length (and from what I've said above,
125 should be a multiple of 8). If length is not a multiple of 8, I'm
126 not being held responsible :-). ivec is the initialisation vector.
127 This function does not modify this variable. To correctly implement
128 cbc mode, you need to do one of 2 things; copy the last 8 bytes of
129 cipher text for use as the next ivec in your application,
130 or use des_ncbc_encrypt().
131 Only this routine has this problem with updating the ivec, all
132 other routines that are implementing cbc mode update ivec.
133
134void des_ncbc_encrypt(
135des_cblock *input,
136des_cblock *output,
137long length,
138des_key_schedule sk,
139des_cblock *ivec,
140int enc);
141 For historical reasons, des_cbc_encrypt() did not update the
142 ivec with the value requires so that subsequent calls to
143 des_cbc_encrypt() would 'chain'. This was needed so that the same
144 'length' values would not need to be used when decrypting.
145 des_ncbc_encrypt() does the right thing. It is the same as
146 des_cbc_encrypt accept that ivec is updates with the correct value
147 to pass in subsequent calls to des_ncbc_encrypt(). I advise using
148 des_ncbc_encrypt() instead of des_cbc_encrypt();
149
150void des_xcbc_encrypt(
151des_cblock *input,
152des_cblock *output,
153long length,
154des_key_schedule sk,
155des_cblock *ivec,
156des_cblock *inw,
157des_cblock *outw,
158int enc);
159 This is RSA's DESX mode of DES. It uses inw and outw to
160 'whiten' the encryption. inw and outw are secret (unlike the iv)
161 and are as such, part of the key. So the key is sort of 24 bytes.
162 This is much better than cbc des.
163
164void des_3cbc_encrypt(
165des_cblock *input,
166des_cblock *output,
167long length,
168des_key_schedule sk1,
169des_key_schedule sk2,
170des_cblock *ivec1,
171des_cblock *ivec2,
172int enc);
173 This function is flawed, do not use it. I have left it in the
174 library because it is used in my des(1) program and will function
175 correctly when used by des(1). If I removed the function, people
176 could end up unable to decrypt files.
177 This routine implements outer triple cbc encryption using 2 ks and
178 2 ivec's. Use des_ede2_cbc_encrypt() instead.
179
180void des_ede3_cbc_encrypt(
181des_cblock *input,
182des_cblock *output,
183long length,
184des_key_schedule ks1,
185des_key_schedule ks2,
186des_key_schedule ks3,
187des_cblock *ivec,
188int enc);
189 This function implements outer triple CBC DES encryption with 3
190 keys. What this means is that each 'DES' operation
191 inside the cbc mode is really an C=E(ks3,D(ks2,E(ks1,M))).
192 Again, this is cbc mode so an ivec is requires.
193 This mode is used by SSL.
194 There is also a des_ede2_cbc_encrypt() that only uses 2
195 des_key_schedule's, the first being reused for the final
196 encryption. C=E(ks1,D(ks2,E(ks1,M))). This form of triple DES
197 is used by the RSAref library.
198
199void des_pcbc_encrypt(
200des_cblock *input,
201des_cblock *output,
202long length,
203des_key_schedule ks,
204des_cblock *ivec,
205int enc);
206 This is Propagating Cipher Block Chaining mode of DES. It is used
207 by Kerberos v4. It's parameters are the same as des_ncbc_encrypt().
208
209void des_cfb_encrypt(
210unsigned char *in,
211unsigned char *out,
212int numbits,
213long length,
214des_key_schedule ks,
215des_cblock *ivec,
216int enc);
217 Cipher Feedback Back mode of DES. This implementation 'feeds back'
218 in numbit blocks. The input (and output) is in multiples of numbits
219 bits. numbits should to be a multiple of 8 bits. Length is the
220 number of bytes input. If numbits is not a multiple of 8 bits,
221 the extra bits in the bytes will be considered padding. So if
222 numbits is 12, for each 2 input bytes, the 4 high bits of the
223 second byte will be ignored. So to encode 72 bits when using
224 a numbits of 12 take 12 bytes. To encode 72 bits when using
225 numbits of 9 will take 16 bytes. To encode 80 bits when using
226 numbits of 16 will take 10 bytes. etc, etc. This padding will
227 apply to both input and output.
228
229
230void des_cfb64_encrypt(
231unsigned char *in,
232unsigned char *out,
233long length,
234des_key_schedule ks,
235des_cblock *ivec,
236int *num,
237int enc);
238 This is one of the more useful functions in this DES library, it
239 implements CFB mode of DES with 64bit feedback. Why is this
240 useful you ask? Because this routine will allow you to encrypt an
241 arbitrary number of bytes, no 8 byte padding. Each call to this
242 routine will encrypt the input bytes to output and then update ivec
243 and num. num contains 'how far' we are though ivec. If this does
244 not make much sense, read more about cfb mode of DES :-).
245
246void des_ede3_cfb64_encrypt(
247unsigned char *in,
248unsigned char *out,
249long length,
250des_key_schedule ks1,
251des_key_schedule ks2,
252des_key_schedule ks3,
253des_cblock *ivec,
254int *num,
255int enc);
256 Same as des_cfb64_encrypt() accept that the DES operation is
257 triple DES. As usual, there is a macro for
258 des_ede2_cfb64_encrypt() which reuses ks1.
259
260void des_ofb_encrypt(
261unsigned char *in,
262unsigned char *out,
263int numbits,
264long length,
265des_key_schedule ks,
266des_cblock *ivec);
267 This is a implementation of Output Feed Back mode of DES. It is
268 the same as des_cfb_encrypt() in that numbits is the size of the
269 units dealt with during input and output (in bits).
270
271void des_ofb64_encrypt(
272unsigned char *in,
273unsigned char *out,
274long length,
275des_key_schedule ks,
276des_cblock *ivec,
277int *num);
278 The same as des_cfb64_encrypt() except that it is Output Feed Back
279 mode.
280
281void des_ede3_ofb64_encrypt(
282unsigned char *in,
283unsigned char *out,
284long length,
285des_key_schedule ks1,
286des_key_schedule ks2,
287des_key_schedule ks3,
288des_cblock *ivec,
289int *num);
290 Same as des_ofb64_encrypt() accept that the DES operation is
291 triple DES. As usual, there is a macro for
292 des_ede2_ofb64_encrypt() which reuses ks1.
293
294int des_read_pw_string(
295char *buf,
296int length,
297char *prompt,
298int verify);
299 This routine is used to get a password from the terminal with echo
300 turned off. Buf is where the string will end up and length is the
301 size of buf. Prompt is a string presented to the 'user' and if
302 verify is set, the key is asked for twice and unless the 2 copies
303 match, an error is returned. A return code of -1 indicates a
304 system error, 1 failure due to use interaction, and 0 is success.
305
306unsigned long des_cbc_cksum(
307des_cblock *input,
308des_cblock *output,
309long length,
310des_key_schedule ks,
311des_cblock *ivec);
312 This function produces an 8 byte checksum from input that it puts in
313 output and returns the last 4 bytes as a long. The checksum is
314 generated via cbc mode of DES in which only the last 8 byes are
315 kept. I would recommend not using this function but instead using
316 the EVP_Digest routines, or at least using MD5 or SHA. This
317 function is used by Kerberos v4 so that is why it stays in the
318 library.
319
320char *des_fcrypt(
321const char *buf,
322const char *salt
323char *ret);
324 This is my fast version of the unix crypt(3) function. This version
325 takes only a small amount of space relative to other fast
326 crypt() implementations. This is different to the normal crypt
327 in that the third parameter is the buffer that the return value
328 is written into. It needs to be at least 14 bytes long. This
329 function is thread safe, unlike the normal crypt.
330
331char *crypt(
332const char *buf,
333const char *salt);
334 This function calls des_fcrypt() with a static array passed as the
335 third parameter. This emulates the normal non-thread safe semantics
336 of crypt(3).
337
338void des_string_to_key(
339char *str,
340des_cblock *key);
341 This function takes str and converts it into a DES key. I would
342 recommend using MD5 instead and use the first 8 bytes of output.
343 When I wrote the first version of these routines back in 1990, MD5
344 did not exist but I feel these routines are still sound. This
345 routines is compatible with the one in MIT's libdes.
346
347void des_string_to_2keys(
348char *str,
349des_cblock *key1,
350des_cblock *key2);
351 This function takes str and converts it into 2 DES keys.
352 I would recommend using MD5 and using the 16 bytes as the 2 keys.
353 I have nothing against these 2 'string_to_key' routines, it's just
354 that if you say that your encryption key is generated by using the
355 16 bytes of an MD5 hash, every-one knows how you generated your
356 keys.
357
358int des_read_password(
359des_cblock *key,
360char *prompt,
361int verify);
362 This routine combines des_read_pw_string() with des_string_to_key().
363
364int des_read_2passwords(
365des_cblock *key1,
366des_cblock *key2,
367char *prompt,
368int verify);
369 This routine combines des_read_pw_string() with des_string_to_2key().
370
371void des_random_seed(
372des_cblock key);
373 This routine sets a starting point for des_random_key().
374
375void des_random_key(
376des_cblock ret);
377 This function return a random key. Make sure to 'seed' the random
378 number generator (with des_random_seed()) before using this function.
379 I personally now use a MD5 based random number system.
380
381int des_enc_read(
382int fd,
383char *buf,
384int len,
385des_key_schedule ks,
386des_cblock *iv);
387 This function will write to a file descriptor the encrypted data
388 from buf. This data will be preceded by a 4 byte 'byte count' and
389 will be padded out to 8 bytes. The encryption is either CBC of
390 PCBC depending on the value of des_rw_mode. If it is DES_PCBC_MODE,
391 pcbc is used, if DES_CBC_MODE, cbc is used. The default is to use
392 DES_PCBC_MODE.
393
394int des_enc_write(
395int fd,
396char *buf,
397int len,
398des_key_schedule ks,
399des_cblock *iv);
400 This routines read stuff written by des_enc_read() and decrypts it.
401 I have used these routines quite a lot but I don't believe they are
402 suitable for non-blocking io. If you are after a full
403 authentication/encryption over networks, have a look at SSL instead.
404
405unsigned long des_quad_cksum(
406des_cblock *input,
407des_cblock *output,
408long length,
409int out_count,
410des_cblock *seed);
411 This is a function from Kerberos v4 that is not anything to do with
412 DES but was needed. It is a cksum that is quicker to generate than
413 des_cbc_cksum(); I personally would use MD5 routines now.
414=====
415Modes of DES
416Quite a bit of the following information has been taken from
417 AS 2805.5.2
418 Australian Standard
419 Electronic funds transfer - Requirements for interfaces,
420 Part 5.2: Modes of operation for an n-bit block cipher algorithm
421 Appendix A
422
423There are several different modes in which DES can be used, they are
424as follows.
425
426Electronic Codebook Mode (ECB) (des_ecb_encrypt())
427- 64 bits are enciphered at a time.
428- The order of the blocks can be rearranged without detection.
429- The same plaintext block always produces the same ciphertext block
430 (for the same key) making it vulnerable to a 'dictionary attack'.
431- An error will only affect one ciphertext block.
432
433Cipher Block Chaining Mode (CBC) (des_cbc_encrypt())
434- a multiple of 64 bits are enciphered at a time.
435- The CBC mode produces the same ciphertext whenever the same
436 plaintext is encrypted using the same key and starting variable.
437- The chaining operation makes the ciphertext blocks dependent on the
438 current and all preceding plaintext blocks and therefore blocks can not
439 be rearranged.
440- The use of different starting variables prevents the same plaintext
441 enciphering to the same ciphertext.
442- An error will affect the current and the following ciphertext blocks.
443
444Cipher Feedback Mode (CFB) (des_cfb_encrypt())
445- a number of bits (j) <= 64 are enciphered at a time.
446- The CFB mode produces the same ciphertext whenever the same
447 plaintext is encrypted using the same key and starting variable.
448- The chaining operation makes the ciphertext variables dependent on the
449 current and all preceding variables and therefore j-bit variables are
450 chained together and can not be rearranged.
451- The use of different starting variables prevents the same plaintext
452 enciphering to the same ciphertext.
453- The strength of the CFB mode depends on the size of k (maximal if
454 j == k). In my implementation this is always the case.
455- Selection of a small value for j will require more cycles through
456 the encipherment algorithm per unit of plaintext and thus cause
457 greater processing overheads.
458- Only multiples of j bits can be enciphered.
459- An error will affect the current and the following ciphertext variables.
460
461Output Feedback Mode (OFB) (des_ofb_encrypt())
462- a number of bits (j) <= 64 are enciphered at a time.
463- The OFB mode produces the same ciphertext whenever the same
464 plaintext enciphered using the same key and starting variable. More
465 over, in the OFB mode the same key stream is produced when the same
466 key and start variable are used. Consequently, for security reasons
467 a specific start variable should be used only once for a given key.
468- The absence of chaining makes the OFB more vulnerable to specific attacks.
469- The use of different start variables values prevents the same
470 plaintext enciphering to the same ciphertext, by producing different
471 key streams.
472- Selection of a small value for j will require more cycles through
473 the encipherment algorithm per unit of plaintext and thus cause
474 greater processing overheads.
475- Only multiples of j bits can be enciphered.
476- OFB mode of operation does not extend ciphertext errors in the
477 resultant plaintext output. Every bit error in the ciphertext causes
478 only one bit to be in error in the deciphered plaintext.
479- OFB mode is not self-synchronising. If the two operation of
480 encipherment and decipherment get out of synchronism, the system needs
481 to be re-initialised.
482- Each re-initialisation should use a value of the start variable
483 different from the start variable values used before with the same
484 key. The reason for this is that an identical bit stream would be
485 produced each time from the same parameters. This would be
486 susceptible to a ' known plaintext' attack.
487
488Triple ECB Mode (des_ecb3_encrypt())
489- Encrypt with key1, decrypt with key2 and encrypt with key3 again.
490- As for ECB encryption but increases the key length to 168 bits.
491 There are theoretic attacks that can be used that make the effective
492 key length 112 bits, but this attack also requires 2^56 blocks of
493 memory, not very likely, even for the NSA.
494- If both keys are the same it is equivalent to encrypting once with
495 just one key.
496- If the first and last key are the same, the key length is 112 bits.
497 There are attacks that could reduce the key space to 55 bit's but it
498 requires 2^56 blocks of memory.
499- If all 3 keys are the same, this is effectively the same as normal
500 ecb mode.
501
502Triple CBC Mode (des_ede3_cbc_encrypt())
503- Encrypt with key1, decrypt with key2 and then encrypt with key3.
504- As for CBC encryption but increases the key length to 168 bits with
505 the same restrictions as for triple ecb mode.
diff --git a/src/lib/libssl/src/doc/digest.doc b/src/lib/libssl/src/doc/digest.doc
deleted file mode 100644
index d2fb987591..0000000000
--- a/src/lib/libssl/src/doc/digest.doc
+++ /dev/null
@@ -1,94 +0,0 @@
1
2The Message Digest subroutines.
3
4These routines require "evp.h" to be included.
5
6These functions are a higher level interface to the various message digest
7routines found in this library. As such, they allow the same code to be
8used to digest via different algorithms with only a change in an initial
9parameter. They are basically just a front-end to the MD2, MD5, SHA
10and SHA1
11routines.
12
13These routines all take a pointer to the following structure to specify
14which message digest algorithm to use.
15typedef struct evp_md_st
16 {
17 int type;
18 int pkey_type;
19 int md_size;
20 void (*init)();
21 void (*update)();
22 void (*final)();
23
24 int required_pkey_type; /*EVP_PKEY_xxx */
25 int (*sign)();
26 int (*verify)();
27 } EVP_MD;
28
29If additional message digest algorithms are to be supported, a structure of
30this type needs to be declared and populated and then the Digest routines
31can be used with that algorithm. The type field is the object NID of the
32digest type (read the section on Objects for an explanation). The pkey_type
33is the Object type to use when the a message digest is generated by there
34routines and then is to be signed with the pkey algorithm. Md_size is
35the size of the message digest returned. Init, update
36and final are the relevant functions to perform the message digest function
37by parts. One reason for specifying the message digest to use via this
38mechanism is that if you only use md5, only the md5 routines will
39be included in you linked program. If you passed an integer
40that specified which message digest to use, the routine that mapped that
41integer to a set of message digest functions would cause all the message
42digests functions to be link into the code. This setup also allows new
43message digest functions to be added by the application.
44
45The six message digests defined in this library are
46
47EVP_MD *EVP_md2(void); /* RSA sign/verify */
48EVP_MD *EVP_md5(void); /* RSA sign/verify */
49EVP_MD *EVP_sha(void); /* RSA sign/verify */
50EVP_MD *EVP_sha1(void); /* RSA sign/verify */
51EVP_MD *EVP_dss(void); /* DSA sign/verify */
52EVP_MD *EVP_dss1(void); /* DSA sign/verify */
53
54All the message digest routines take a EVP_MD_CTX pointer as an argument.
55The state of the message digest is kept in this structure.
56
57typedef struct pem_md_ctx_st
58 {
59 EVP_MD *digest;
60 union {
61 unsigned char base[4]; /* this is used in my library as a
62 * 'pointer' to all union elements
63 * structures. */
64 MD2_CTX md2;
65 MD5_CTX md5;
66 SHA_CTX sha;
67 } md;
68 } EVP_MD_CTX;
69
70The Digest functions are as follows.
71
72void EVP_DigestInit(
73EVP_MD_CTX *ctx,
74EVP_MD *type);
75 This function is used to initialise the EVP_MD_CTX. The message
76 digest that will associated with 'ctx' is specified by 'type'.
77
78void EVP_DigestUpdate(
79EVP_MD_CTX *ctx,
80unsigned char *data,
81unsigned int cnt);
82 This function is used to pass more data to the message digest
83 function. 'cnt' bytes are digested from 'data'.
84
85void EVP_DigestFinal(
86EVP_MD_CTX *ctx,
87unsigned char *md,
88unsigned int *len);
89 This function finishes the digestion and puts the message digest
90 into 'md'. The length of the message digest is put into len;
91 EVP_MAX_MD_SIZE is the size of the largest message digest that
92 can be returned from this function. Len can be NULL if the
93 size of the digest is not required.
94
diff --git a/src/lib/libssl/src/doc/encode.doc b/src/lib/libssl/src/doc/encode.doc
deleted file mode 100644
index af17549289..0000000000
--- a/src/lib/libssl/src/doc/encode.doc
+++ /dev/null
@@ -1,15 +0,0 @@
1
2void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
3void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,
4 int *outl,unsigned char *in,int inl);
5void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl);
6int EVP_EncodeBlock(unsigned char *t, unsigned char *f, int n);
7
8void EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
9int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl,
10 unsigned char *in, int inl);
11int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned
12 char *out, int *outl);
13int EVP_DecodeBlock(unsigned char *t, unsigned
14 char *f, int n);
15
diff --git a/src/lib/libssl/src/doc/envelope.doc b/src/lib/libssl/src/doc/envelope.doc
deleted file mode 100644
index 483e4fca6b..0000000000
--- a/src/lib/libssl/src/doc/envelope.doc
+++ /dev/null
@@ -1,67 +0,0 @@
1The following routines are use to create 'digital' envelopes.
2By this I mean that they perform various 'higher' level cryptographic
3functions. Have a read of 'cipher.doc' and 'digest.doc' since those
4routines are used by these functions.
5cipher.doc contains documentation about the cipher part of the
6envelope library and digest.doc contatins the description of the
7message digests supported.
8
9To 'sign' a document involves generating a message digest and then encrypting
10the digest with an private key.
11
12#define EVP_SignInit(a,b) EVP_DigestInit(a,b)
13#define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c)
14Due to the fact this operation is basically just an extended message
15digest, the first 2 functions are macro calls to Digest generating
16functions.
17
18int EVP_SignFinal(
19EVP_MD_CTX *ctx,
20unsigned char *md,
21unsigned int *s,
22EVP_PKEY *pkey);
23 This finalisation function finishes the generation of the message
24digest and then encrypts the digest (with the correct message digest
25object identifier) with the EVP_PKEY private key. 'ctx' is the message digest
26context. 'md' will end up containing the encrypted message digest. This
27array needs to be EVP_PKEY_size(pkey) bytes long. 's' will actually
28contain the exact length. 'pkey' of course is the private key. It is
29one of EVP_PKEY_RSA or EVP_PKEY_DSA type.
30If there is an error, 0 is returned, otherwise 1.
31
32Verify is used to check an signed message digest.
33
34#define EVP_VerifyInit(a,b) EVP_DigestInit(a,b)
35#define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c)
36Since the first step is to generate a message digest, the first 2 functions
37are macros.
38
39int EVP_VerifyFinal(
40EVP_MD_CTX *ctx,
41unsigned char *md,
42unsigned int s,
43EVP_PKEY *pkey);
44 This function finishes the generation of the message digest and then
45compares it with the supplied encrypted message digest. 'md' contains the
46's' bytes of encrypted message digest. 'pkey' is used to public key decrypt
47the digest. It is then compared with the message digest just generated.
48If they match, 1 is returned else 0.
49
50int EVP_SealInit(EVP_CIPHER_CTX *ctx, EVP_CIPHER *type, unsigned char **ek,
51 int *ekl, unsigned char *iv, EVP_PKEY **pubk, int npubk);
52Must have at least one public key, error is 0. I should also mention that
53the buffers pointed to by 'ek' need to be EVP_PKEY_size(pubk[n]) is size.
54
55#define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e)
56void EVP_SealFinal(EVP_CIPHER_CTX *ctx,unsigned char *out,int *outl);
57
58
59int EVP_OpenInit(EVP_CIPHER_CTX *ctx,EVP_CIPHER *type,unsigned char *ek,
60 int ekl,unsigned char *iv,EVP_PKEY *priv);
610 on failure
62
63#define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e)
64
65int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
66Decrypt final return code
67
diff --git a/src/lib/libssl/src/doc/error.doc b/src/lib/libssl/src/doc/error.doc
deleted file mode 100644
index a91654999a..0000000000
--- a/src/lib/libssl/src/doc/error.doc
+++ /dev/null
@@ -1,115 +0,0 @@
1The error routines.
2
3The 'error' system I've implemented is intended to server 2 purpose, to
4record the reason why a command failed and to record where in the libraries
5the failure occurred. It is more or less setup to record a 'trace' of which
6library components were being traversed when the error occurred.
7
8When an error is recorded, it is done so a as single unsigned long which is
9composed of three parts. The top byte is the 'library' number, the middle
1012 bytes is the function code, and the bottom 12 bits is the 'reason' code.
11
12Each 'library', or should a say, 'section' of the SSLeay library has a
13different unique 'library' error number. Each function in the library has
14a number that is unique for that library. Each 'library' also has a number
15for each 'error reason' that is only unique for that 'library'.
16
17Due to the way these error routines record a 'error trace', there is an
18array per thread that is used to store the error codes.
19The various functions in this library are used to access
20and manipulate this array.
21
22void ERR_put_error(int lib, int func,int reason);
23 This routine records an error in library 'lib', function 'func'
24and reason 'reason'. As errors get 'put' into the buffer, they wrap
25around and overwrite old errors if too many are written. It is assumed
26that the last errors are the most important.
27
28unsigned long ERR_get_error(void );
29 This function returns the last error added to the error buffer.
30In effect it is popping the value off the buffer so repeated calls will
31continue to return values until there are no more errors to return in which
32case 0 is returned.
33
34unsigned long ERR_peek_error(void );
35 This function returns the value of the last error added to the
36error buffer but does not 'pop' it from the buffer.
37
38void ERR_clear_error(void );
39 This function clears the error buffer, discarding all unread
40errors.
41
42While the above described error system obviously produces lots of different
43error number, a method for 'reporting' these errors in a human readable
44form is required. To achieve this, each library has the option of
45'registering' error strings.
46
47typedef struct ERR_string_data_st
48 {
49 unsigned long error;
50 char *string;
51 } ERR_STRING_DATA;
52
53The 'ERR_STRING_DATA' contains an error code and the corresponding text
54string. To add new function error strings for a library, the
55ERR_STRING_DATA needs to be 'registered' with the library.
56
57void ERR_load_strings(unsigned long lib,ERR_STRING_DATA *err);
58 This function 'registers' the array of ERR_STRING_DATA pointed to by
59'err' as error text strings for the error library 'lib'.
60
61void ERR_free_strings(void);
62 This function free()s all the loaded error strings.
63
64char *ERR_error_string(unsigned long error,char *buf);
65 This function returns a text string that is a human readable
66version of the error represented by 'error'. Buff should be at least 120
67bytes long and if it is NULL, the return value is a pointer to a static
68variable that will contain the error string, otherwise 'buf' is returned.
69If there is not a text string registered for a particular error, a text
70string containing the error number is returned instead.
71
72void ERR_print_errors(BIO *bp);
73void ERR_print_errors_fp(FILE *fp);
74 This function is a convenience routine that prints the error string
75for each error until all errors have been accounted for.
76
77char *ERR_lib_error_string(unsigned long e);
78char *ERR_func_error_string(unsigned long e);
79char *ERR_reason_error_string(unsigned long e);
80The above three functions return the 3 different components strings for the
81error 'e'. ERR_error_string() uses these functions.
82
83void ERR_load_ERR_strings(void );
84 This function 'registers' the error strings for the 'ERR' module.
85
86void ERR_load_crypto_strings(void );
87 This function 'register' the error strings for just about every
88library in the SSLeay package except for the SSL routines. There is no
89need to ever register any error text strings and you will probably save in
90program size. If on the other hand you do 'register' all errors, it is
91quite easy to determine why a particular routine failed.
92
93As a final footnote as to why the error system is designed as it is.
941) I did not want a single 'global' error code.
952) I wanted to know which subroutine a failure occurred in.
963) For Windows NT etc, it should be simple to replace the 'key' routines
97 with code to pass error codes back to the application.
984) I wanted the option of meaningful error text strings.
99
100Late breaking news - the changes to support threads.
101
102Each 'thread' has an 'ERR_STATE' state associated with it.
103ERR_STATE *ERR_get_state(void ) will return the 'state' for the calling
104thread/process.
105
106ERR_remove_state(unsigned long pid); will 'free()' this state. If pid == 0
107the current 'thread/process' will have it's error state removed.
108If you do not remove the error state of a thread, this could be considered a
109form of memory leak, so just after 'reaping' a thread that has died,
110call ERR_remove_state(pid).
111
112Have a read of thread.doc for more details for what is required for
113multi-threading support. All the other error routines will
114work correctly when using threads.
115
diff --git a/src/lib/libssl/src/doc/legal.doc b/src/lib/libssl/src/doc/legal.doc
deleted file mode 100644
index b55ed5ce6a..0000000000
--- a/src/lib/libssl/src/doc/legal.doc
+++ /dev/null
@@ -1,117 +0,0 @@
1From eay@mincom.com Thu Jun 27 00:25:45 1996
2Received: by orb.mincom.oz.au id AA15821
3 (5.65c/IDA-1.4.4 for eay); Wed, 26 Jun 1996 14:25:45 +1000
4Date: Wed, 26 Jun 1996 14:25:45 +1000 (EST)
5From: Eric Young <eay@mincom.oz.au>
6X-Sender: eay@orb
7To: Ken Toll <ktoll@ren.digitalage.com>
8Cc: Eric Young <eay@mincom.oz.au>, ssl-talk@netscape.com
9Subject: Re: Unidentified subject!
10In-Reply-To: <9606261950.ZM28943@ren.digitalage.com>
11Message-Id: <Pine.SOL.3.91.960626131156.28573K-100000@orb>
12Mime-Version: 1.0
13Content-Type: TEXT/PLAIN; charset=US-ASCII
14Status: O
15X-Status:
16
17
18This is a little off topic but since SSLeay is a free implementation of
19the SSLv2 protocol, I feel it is worth responding on the topic of if it
20is actually legal for Americans to use free cryptographic software.
21
22On Wed, 26 Jun 1996, Ken Toll wrote:
23> Is the U.S the only country that SSLeay cannot be used commercially
24> (because of RSAref) or is that going to be an issue with every country
25> that a client/server application (non-web browser/server) is deployed
26> and sold?
27
28>From what I understand, the software patents that apply to algorithms
29like RSA and DH only apply in the USA. The IDEA algorithm I believe is
30patened in europe (USA?), but considing how little it is used by other SSL
31implementations, it quite easily be left out of the SSLeay build
32(this can be done with a compile flag).
33
34Actually if the RSA patent did apply outside the USA, it could be rather
35interesting since RSA is not alowed to let RSA toolkits outside of the USA
36[1], and since these are the only forms that they will alow the algorithm
37to be used in, it would mean that non-one outside of the USA could produce
38public key software which would be a very strong statment for
39international patent law to make :-). This logic is a little flawed but
40it still points out some of the more interesting permutations of USA
41patent law and ITAR restrictions.
42
43Inside the USA there is also the unresolved issue of RC4/RC2 which were
44made public on sci.crypt in Sep 1994 (RC4) and Feb 1996 (RC2). I have
45copies of the origional postings if people are interested. RSA I believe
46claim that they were 'trade-secrets' and that some-one broke an NDA in
47revealing them. Other claim they reverse engineered the algorithms from
48compiled binaries. If the algorithms were reverse engineered, I belive
49RSA had no legal leg to stand on. If an NDA was broken, I don't know.
50Regardless, RSA, I belive, is willing to go to court over the issue so
51licencing is probably the best idea, or at least talk to them.
52If there are people who actually know more about this, pease let me know, I
53don't want to vilify or spread miss-information if I can help it.
54
55If you are not producing a web browser, it is easy to build SSLeay with
56RC2/RC4 removed. Since RC4 is the defacto standard cipher in
57all web software (and it is damn fast) it is more or less required for
58www use. For non www use of SSL, especially for an application where
59interoperability with other vendors is not critical just leave it out.
60
61Removing IDEA, RC2 and RC4 would only leave DES and Triple DES but
62they should be ok. Considing that Triple DES can encrypt at rates of
63410k/sec on a pentium 100, and 940k/sec on a P6/200, this is quite
64reasonable performance. Single DES clocks in at 1160k/s and 2467k/s
65respectivly is actually quite fast for those not so paranoid (56 bit key).[1]
66
67> Is it possible to get a certificate for commercial use outside of the U.S.?
68yes.
69
70Thawte Consulting issues certificates (they are the people who sell the
71 Sioux httpd server and are based in South Africa)
72Verisign will issue certificates for Sioux (sold from South Africa), so this
73 proves that they will issue certificate for OS use if they are
74 happy with the quality of the software.
75
76(The above mentioned companies just the ones that I know for sure are issuing
77 certificates outside the USA).
78
79There is always the point that if you are using SSL for an intra net,
80SSLeay provides programs that can be used so you can issue your own
81certificates. They need polishing but at least it is a good starting point.
82
83I am not doing anything outside Australian law by implementing these
84algorithms (to the best of my knowedge). It is another example of how
85the world legal system does not cope with the internet very well.
86
87I may start making shared libraries available (I have now got DLL's for
88Windows). This will mean that distributions into the usa could be
89shipped with a version with a reduced cipher set and the versions outside
90could use the DLL/shared library with all the ciphers (and without RSAref).
91
92This could be completly hidden from the application, so this would not
93even require a re-linking.
94
95This is the reverse of what people were talking about doing to get around
96USA export regulations :-)
97
98eric
99
100[1]: The RSAref2.0 tookit is available on at least 3 ftp sites in Europe
101 and one in South Africa.
102
103[2]: Since I always get questions when I post benchmark numbers :-),
104 DES performace figures are in 1000's of bytes per second in cbc
105 mode using an 8192 byte buffer. The pentium 100 was running Windows NT
106 3.51 DLLs and the 686/200 was running NextStep.
107 I quote pentium 100 benchmarks because it is basically the
108 'entry level' computer that most people buy for personal use.
109 Windows 95 is the OS shipping on those boxes, so I'll give
110 NT numbers (the same Win32 runtime environment). The 686
111 numbers are present as an indication of where we will be in a
112 few years.
113--
114Eric Young | BOOL is tri-state according to Bill Gates.
115AARNet: eay@mincom.oz.au | RTFM Win32 GetMessage().
116
117
diff --git a/src/lib/libssl/src/doc/lhash.doc b/src/lib/libssl/src/doc/lhash.doc
deleted file mode 100644
index 5a2aeb4b38..0000000000
--- a/src/lib/libssl/src/doc/lhash.doc
+++ /dev/null
@@ -1,151 +0,0 @@
1The LHASH library.
2
3I wrote this library in 1991 and have since forgotten why I called it lhash.
4It implements a hash table from an article I read at the
5time from 'Communications of the ACM'. What makes this hash
6table different is that as the table fills, the hash table is
7increased (or decreased) in size via realloc().
8When a 'resize' is done, instead of all hashes being redistributed over
9twice as many 'buckets', one bucket is split. So when an 'expand' is done,
10there is only a minimal cost to redistribute some values. Subsequent
11inserts will cause more single 'bucket' redistributions but there will
12never be a sudden large cost due to redistributing all the 'buckets'.
13
14The state for a particular hash table is kept in the LHASH structure.
15The LHASH structure also records statistics about most aspects of accessing
16the hash table. This is mostly a legacy of my writing this library for
17the reasons of implementing what looked like a nice algorithm rather than
18for a particular software product.
19
20Internal stuff you probably don't want to know about.
21The decision to increase or decrease the hash table size is made depending
22on the 'load' of the hash table. The load is the number of items in the
23hash table divided by the size of the hash table. The default values are
24as follows. If (hash->up_load < load) => expand.
25if (hash->down_load > load) => contract. The 'up_load' has a default value of
261 and 'down_load' has a default value of 2. These numbers can be modified
27by the application by just playing with the 'up_load' and 'down_load'
28variables. The 'load' is kept in a form which is multiplied by 256. So
29hash->up_load=8*256; will cause a load of 8 to be set.
30
31If you are interested in performance the field to watch is
32num_comp_calls. The hash library keeps track of the 'hash' value for
33each item so when a lookup is done, the 'hashes' are compared, if
34there is a match, then a full compare is done, and
35hash->num_comp_calls is incremented. If num_comp_calls is not equal
36to num_delete plus num_retrieve it means that your hash function is
37generating hashes that are the same for different values. It is
38probably worth changing your hash function if this is the case because
39even if your hash table has 10 items in a 'bucked', it can be searched
40with 10 'unsigned long' compares and 10 linked list traverses. This
41will be much less expensive that 10 calls to you compare function.
42
43LHASH *lh_new(
44unsigned long (*hash)(),
45int (*cmp)());
46 This function is used to create a new LHASH structure. It is passed
47 function pointers that are used to store and retrieve values passed
48 into the hash table. The 'hash'
49 function is a hashing function that will return a hashed value of
50 it's passed structure. 'cmp' is passed 2 parameters, it returns 0
51 is they are equal, otherwise, non zero.
52 If there are any problems (usually malloc failures), NULL is
53 returned, otherwise a new LHASH structure is returned. The
54 hash value is normally truncated to a power of 2, so make sure
55 that your hash function returns well mixed low order bits.
56
57void lh_free(
58LHASH *lh);
59 This function free()s a LHASH structure. If there is malloced
60 data in the hash table, it will not be freed. Consider using the
61 lh_doall function to deallocate any remaining entries in the hash
62 table.
63
64char *lh_insert(
65LHASH *lh,
66char *data);
67 This function inserts the data pointed to by data into the lh hash
68 table. If there is already and entry in the hash table entry, the
69 value being replaced is returned. A NULL is returned if the new
70 entry does not clash with an entry already in the table (the normal
71 case) or on a malloc() failure (perhaps I should change this....).
72 The 'char *data' is exactly what is passed to the hash and
73 comparison functions specified in lh_new().
74
75char *lh_delete(
76LHASH *lh,
77char *data);
78 This routine deletes an entry from the hash table. The value being
79 deleted is returned. NULL is returned if there is no such value in
80 the hash table.
81
82char *lh_retrieve(
83LHASH *lh,
84char *data);
85 If 'data' is in the hash table it is returned, else NULL is
86 returned. The way these routines would normally be uses is that a
87 dummy structure would have key fields populated and then
88 ret=lh_retrieve(hash,&dummy);. Ret would now be a pointer to a fully
89 populated structure.
90
91void lh_doall(
92LHASH *lh,
93void (*func)(char *a));
94 This function will, for every entry in the hash table, call function
95 'func' with the data item as parameters.
96 This function can be quite useful when used as follows.
97 void cleanup(STUFF *a)
98 { STUFF_free(a); }
99 lh_doall(hash,cleanup);
100 lh_free(hash);
101 This can be used to free all the entries, lh_free() then
102 cleans up the 'buckets' that point to nothing. Be careful
103 when doing this. If you delete entries from the hash table,
104 in the call back function, the table may decrease in size,
105 moving item that you are
106 currently on down lower in the hash table. This could cause
107 some entries to be skipped. The best solution to this problem
108 is to set lh->down_load=0 before you start. This will stop
109 the hash table ever being decreased in size.
110
111void lh_doall_arg(
112LHASH *lh;
113void(*func)(char *a,char *arg));
114char *arg;
115 This function is the same as lh_doall except that the function
116 called will be passed 'arg' as the second argument.
117
118unsigned long lh_strhash(
119char *c);
120 This function is a demo string hashing function. Since the LHASH
121 routines would normally be passed structures, this routine would
122 not normally be passed to lh_new(), rather it would be used in the
123 function passed to lh_new().
124
125The next three routines print out various statistics about the state of the
126passed hash table. These numbers are all kept in the lhash structure.
127
128void lh_stats(
129LHASH *lh,
130FILE *out);
131 This function prints out statistics on the size of the hash table,
132 how many entries are in it, and the number and result of calls to
133 the routines in this library.
134
135void lh_node_stats(
136LHASH *lh,
137FILE *out);
138 For each 'bucket' in the hash table, the number of entries is
139 printed.
140
141void lh_node_usage_stats(
142LHASH *lh,
143FILE *out);
144 This function prints out a short summary of the state of the hash
145 table. It prints what I call the 'load' and the 'actual load'.
146 The load is the average number of data items per 'bucket' in the
147 hash table. The 'actual load' is the average number of items per
148 'bucket', but only for buckets which contain entries. So the
149 'actual load' is the average number of searches that will need to
150 find an item in the hash table, while the 'load' is the average number
151 that will be done to record a miss.
diff --git a/src/lib/libssl/src/doc/md2.doc b/src/lib/libssl/src/doc/md2.doc
deleted file mode 100644
index b106bc675d..0000000000
--- a/src/lib/libssl/src/doc/md2.doc
+++ /dev/null
@@ -1,49 +0,0 @@
1The MD2 library.
2MD2 is a message digest algorithm that can be used to condense an arbitrary
3length message down to a 16 byte hash. The functions all need to be passed
4a MD2_CTX which is used to hold the MD2 context during multiple MD2_Update()
5function calls. The normal method of use for this library is as follows
6
7MD2_Init(...);
8MD2_Update(...);
9...
10MD2_Update(...);
11MD2_Final(...);
12
13This library requires the inclusion of 'md2.h'.
14
15The main negative about MD2 is that it is slow, especially when compared
16to MD5.
17
18The functions are as follows:
19
20void MD2_Init(
21MD2_CTX *c);
22 This function needs to be called to initiate a MD2_CTX structure for
23 use.
24
25void MD2_Update(
26MD2_CTX *c;
27unsigned char *data;
28unsigned long len);
29 This updates the message digest context being generated with 'len'
30 bytes from the 'data' pointer. The number of bytes can be any
31 length.
32
33void MD2_Final(
34unsigned char *md;
35MD2_CTX *c;
36 This function is called when a message digest of the data digested
37 with MD2_Update() is wanted. The message digest is put in the 'md'
38 array and is MD2_DIGEST_LENGTH (16) bytes long.
39
40unsigned char *MD2(
41unsigned long n;
42unsigned char *d;
43unsigned char *md;
44 This function performs a MD2_Init(), followed by a MD2_Update()
45 followed by a MD2_Final() (using a local MD2_CTX).
46 The resulting digest is put into 'md' if it is not NULL.
47 Regardless of the value of 'md', the message
48 digest is returned from the function. If 'md' was NULL, the message
49 digest returned is being stored in a static structure.
diff --git a/src/lib/libssl/src/doc/md5.doc b/src/lib/libssl/src/doc/md5.doc
deleted file mode 100644
index 519dbdc61a..0000000000
--- a/src/lib/libssl/src/doc/md5.doc
+++ /dev/null
@@ -1,50 +0,0 @@
1The MD5 library.
2MD5 is a message digest algorithm that can be used to condense an arbitrary
3length message down to a 16 byte hash. The functions all need to be passed
4a MD5_CTX which is used to hold the MD5 context during multiple MD5_Update()
5function calls. This library also contains random number routines that are
6based on MD5
7
8The normal method of use for this library is as follows
9
10MD5_Init(...);
11MD5_Update(...);
12...
13MD5_Update(...);
14MD5_Final(...);
15
16This library requires the inclusion of 'md5.h'.
17
18The functions are as follows:
19
20void MD5_Init(
21MD5_CTX *c);
22 This function needs to be called to initiate a MD5_CTX structure for
23 use.
24
25void MD5_Update(
26MD5_CTX *c;
27unsigned char *data;
28unsigned long len);
29 This updates the message digest context being generated with 'len'
30 bytes from the 'data' pointer. The number of bytes can be any
31 length.
32
33void MD5_Final(
34unsigned char *md;
35MD5_CTX *c;
36 This function is called when a message digest of the data digested
37 with MD5_Update() is wanted. The message digest is put in the 'md'
38 array and is MD5_DIGEST_LENGTH (16) bytes long.
39
40unsigned char *MD5(
41unsigned char *d;
42unsigned long n;
43unsigned char *md;
44 This function performs a MD5_Init(), followed by a MD5_Update()
45 followed by a MD5_Final() (using a local MD5_CTX).
46 The resulting digest is put into 'md' if it is not NULL.
47 Regardless of the value of 'md', the message
48 digest is returned from the function. If 'md' was NULL, the message
49 digest returned is being stored in a static structure.
50
diff --git a/src/lib/libssl/src/doc/memory.doc b/src/lib/libssl/src/doc/memory.doc
deleted file mode 100644
index b9aa33ace0..0000000000
--- a/src/lib/libssl/src/doc/memory.doc
+++ /dev/null
@@ -1,27 +0,0 @@
1In the interests of debugging SSLeay, there is an option to compile
2using some simple memory leak checking.
3
4All malloc(), free() and realloc() calls in SSLeay now go via
5Malloc(), Free() and Realloc() (except those in crypto/lhash).
6
7If CRYPTO_MDEBUG is defined, these calls are #defined to
8CRYPTO_malloc(), CRYPTO_free() and CRYPTO_realloc().
9If it is not defined, they are #defined to malloc(), free() and realloc().
10
11the CRYPTO_malloc() routines by default just call the underlying library
12functons.
13
14If CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON) is called, memory leak detection is
15turned on. CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF) turns it off.
16
17When turned on, each Malloc() or Realloc() call is recored along with the file
18and line number from where the call was made. (This is done using the
19lhash library which always uses normal system malloc(3) routines).
20
21void CRYPTO_mem_leaks(BIO *b);
22void CRYPTO_mem_leaks_fp(FILE *fp);
23These both print out the list of memory that has not been free()ed.
24This will probably be rather hard to read, but if you look for the 'top level'
25structure allocation, this will often give an idea as to what is not being
26free()ed. I don't expect people to use this stuff normally.
27
diff --git a/src/lib/libssl/src/doc/ms3-ca.doc b/src/lib/libssl/src/doc/ms3-ca.doc
deleted file mode 100644
index f8350aadc2..0000000000
--- a/src/lib/libssl/src/doc/ms3-ca.doc
+++ /dev/null
@@ -1,398 +0,0 @@
1Date: Mon, 9 Jun 97 08:00:33 +0200
2From: Holger.Reif@PrakInf.TU-Ilmenau.DE (Holger Reif)
3Subject: ms3-ca.doc
4Organization: TU Ilmenau, Fak. IA, FG Telematik
5Content-Length: 14575
6Status: RO
7X-Status:
8
9Loading client certs into MSIE 3.01
10===================================
11
12This document conatains all the information necessary to succesfully set up
13some scripts to issue client certs to Microsoft Internet Explorer. It
14includes the required knowledge about the model MSIE uses for client
15certification and includes complete sample scripts ready to play with. The
16scripts were tested against a modified ca program of SSLeay 0.6.6 and should
17work with the regular ca program that comes with version 0.8.0. I haven't
18tested against MSIE 4.0
19
20You can use the information contained in this document in either way you
21want. However if you feel it saved you a lot of time I ask you to be as fair
22as to mention my name: Holger Reif <reif@prakinf.tu-ilmenau.de>.
23
241.) The model used by MSIE
25--------------------------
26
27The Internet Explorer doesn't come with a embedded engine for installing
28client certs like Netscape's Navigator. It rather uses the CryptoAPI (CAPI)
29defined by Microsoft. CAPI comes with WindowsNT 4.0 or is installed together
30with Internet Explorer since 3.01. The advantage of this approach is a higher
31flexibility because the certificates in the (per user) system open
32certificate store may be used by other applications as well. The drawback
33however is that you need to do a bit more work to get a client cert issued.
34
35CAPI defines functions which will handle basic cryptographic work, eg.
36generating keys, encrypting some data, signing text or building a certificate
37request. The procedure is as follows: A CAPI function generates you a key
38pair and saves it into the certificate store. After that one builds a
39Distinguished Name. Together with that key pair another CAPI function forms a
40PKCS#10 request which you somehow need to submit to a CA. Finally the issued
41cert is given to a yet another CAPI function which saves it into the
42certificate store.
43
44The certificate store with the user's keys and certs is in the registry. You
45will find it under HKEY_CURRENT_USER/Software/Microsoft/Cryptography/ (I
46leave it to you as a little exercise to figure out what all the entries mean
47;-). Note that the keys are protected only with the user's usual Windows
48login password.
49
502.) The practical usage
51-----------------------
52
53Unfortunatly since CAPI is a system API you can't access its functions from
54HTML code directly. For this purpose Microsoft provides a wrapper called
55certenr3.dll. This DLL accesses the CAPI functions and provides an interface
56usable from Visual Basic Script. One needs to install that library on the
57computer which wants to have client cert. The easiest way is to load it as an
58ActiveX control (certenr3.dll is properly authenticode signed by MS ;-). If
59you have ever enrolled e cert request at a CA you will have installed it.
60
61At time of writing certenr3.dll is contained in
62http://www.microsoft.com/workshop/prog/security/csa/certenr3.exe. It comes
63with an README file which explains the available functions. It is labeled
64beta but every CA seems to use it anyway. The license.txt allows you the
65usage for your own purposes (as far as I understood) and a somehow limited
66distribution.
67
68The two functions of main interest are GenerateKeyPair and AcceptCredentials.
69For complete explanation of all possible parameters see the README file. Here
70are only minimal required parameters and their values.
71
72GenerateKeyPair(sessionID, FASLE, szName, 0, "ClientAuth", TRUE, FALSE, 1)
73- sessionID is a (locally to that computer) unique string to correlate the
74generated key pair with a cert installed later.
75- szName is the DN of the form "C=DE; S=Thueringen; L=Ilmenau; CN=Holger
76Reif; 1.2.840.113549.1.9.1=reif@prakinf.tu-ilmenau.de". Note that S is the
77abreviation for StateOrProvince. The recognized abreviation include CN, O, C,
78OU, G, I, L, S, T. If the abreviation is unknown (eg. for PKCS#9 email addr)
79you need to use the full object identifier. The starting point for searching
80them could be crypto/objects.h since all OIDs know to SSLeay are listed
81there.
82- note: the possible ninth parameter which should give a default name to the
83certificate storage location doesn't seem to work. Changes to the constant
84values in the call above doesn't seem to make sense. You can't generate
85PKCS#10 extensions with that function.
86
87The result of GenerateKeyPair is the base64 encoded PKCS#10 request. However
88it has a little strange format that SSLeay doesn't accept. (BTW I feel the
89decision of rejecting that format as standard conforming.) It looks like
90follows:
91 1st line with 76 chars
92 2nd line with 76 chars
93 ...
94 (n-2)th line with 76 chars
95 (n-1)th line contains a multiple of 4 chars less then 76 (possible
96empty)
97 (n)th line has zero or 4 chars (then with 1 or 2 equal signs - the
98 original text's lenght wasn'T a multiple of 3)
99 The line separator has two chars: 0x0d 0x0a
100
101AcceptCredentials(sessionID, credentials, 0, FALSE)
102- sessionID needs to be the same as while generating the key pair
103- credentials is the base64 encoded PKCS#7 object containing the cert.
104
105CRL's and CA certs are not required simply just the client cert. (It seems to
106me that both are not even checked somehow.) The only format of the base64
107encoded object I succesfully used was all characters in a very long string
108without line feeds or carriage returns. (Hey, it doesn't matter, only a
109computer reads it!)
110
111The result should be S_OK. For error handling see the example that comes with
112certenr3.dll.
113
114A note about ASN.1 character encodings. certenr3.dll seems to know only about
1152 of them: UniversalString and PrintableString. First it is definitely wrong
116for an email address which is IA5STRING (checked by ssleay's ca). Second
117unfortunately MSIE (at least until version 3.02) can't handle UniversalString
118correctly - they just blow up you cert store! Therefore ssleay's ca (starting
119from version 0.8.0) tries to convert the encodings automatically to IA5STRING
120or TeletexString. The beef is it will work only for the latin-1 (western)
121charset. Microsoft still has to do abit of homework...
122
1233.) An example
124--------------
125
126At least you need two steps: generating the key & request and then installing
127the certificate. A real world CA would have some more steps involved, eg.
128accepting some license. Note that both scripts shown below are just
129experimental state without any warrenty!
130
131First how to generate a request. Note that we can't use a static page because
132of the sessionID. I generate it from system time plus pid and hope it is
133unique enough. Your are free to feed it through md5 to get more impressive
134ID's ;-) Then the intended text is read in with sed which inserts the
135sessionID.
136
137-----BEGIN ms-enroll.cgi-----
138#!/bin/sh
139SESSION_ID=`date '+%y%m%d%H%M%S'`$$
140echo Content-type: text/html
141echo
142sed s/template_for_sessId/$SESSION_ID/ <<EOF
143<HTML><HEAD>
144<TITLE>Certificate Enrollment Test Page</TITLE>
145</HEAD><BODY>
146
147<OBJECT
148 classid="clsid:33BEC9E0-F78F-11cf-B782-00C04FD7BF43"
149 codebase=certenr3.dll
150 id=certHelper
151 >
152</OBJECT>
153
154<CENTER>
155<H2>enrollment for a personal cert</H2>
156<BR><HR WIDTH=50%><BR><P>
157<FORM NAME="MSIE_Enrollment" ACTION="ms-gencert.cgi" ENCTYPE=x-www-form-
158encoded METHOD=POST>
159<TABLE>
160 <TR><TD>Country</TD><TD><INPUT NAME="Country" VALUE=""></TD></TR>
161 <TR><TD>State</TD><TD><INPUT NAME="StateOrProvince" VALUE=""></TD></TR>
162 <TR><TD>Location</TD><TD><INPUT NAME="Location" VALUE=""></TD></TR>
163 <TR><TD>Organization</TD><TD><INPUT NAME="Organization"
164VALUE=""></TD></TR>
165 <TR><TD>Organizational Unit</TD>
166 <TD><INPUT NAME="OrganizationalUnit" VALUE=""></TD></TR>
167 <TR><TD>Name</TD><TD><INPUT NAME="CommonName" VALUE=""></TD></TR>
168 <TR><TD>eMail Address</TD>
169 <TD><INPUT NAME="EmailAddress" VALUE=""></TD></TR>
170 <TR><TD></TD>
171 <TD><INPUT TYPE="BUTTON" NAME="submit" VALUE="Beantragen"></TD></TR>
172</TABLE>
173 <INPUT TYPE="hidden" NAME="SessionId" VALUE="template_for_sessId">
174 <INPUT TYPE="hidden" NAME="Request" VALUE="">
175</FORM>
176<BR><HR WIDTH=50%><BR><P>
177</CENTER>
178
179<SCRIPT LANGUAGE=VBS>
180 Dim DN
181
182 Sub Submit_OnClick
183 Dim TheForm
184 Set TheForm = Document.MSIE_Enrollment
185 sessionId = TheForm.SessionId.value
186 reqHardware = FALSE
187 C = TheForm.Country.value
188 SP = TheForm.StateOrProvince.value
189 L = TheForm.Location.value
190 O = TheForm.Organization.value
191 OU = TheForm.OrganizationalUnit.value
192 CN = TheForm.CommonName.value
193 Email = TheForm.EmailAddress.value
194 szPurpose = "ClientAuth"
195 doAcceptanceUINow = FALSE
196 doOnline = TRUE
197
198 DN = ""
199
200 Call Add_RDN("C", C)
201 Call Add_RDN("S", SP)
202 Call Add_RDN("L", L)
203 Call Add_RDN("O", O)
204 Call Add_RDN("OU", OU)
205 Call Add_RDN("CN", CN)
206 Call Add_RDN("1.2.840.113549.1.9.1", Email)
207 ' rsadsi
208 ' pkcs
209 ' pkcs9
210 ' eMailAddress
211 On Error Resume Next
212 sz10 = certHelper.GenerateKeyPair(sessionId, _
213 FALSE, DN, 0, ClientAuth, FASLE, TRUE, 1)_
214 theError = Err.Number
215 On Error Goto 0
216 if (sz10 = Empty OR theError <> 0) Then
217 sz = "The error '" & Hex(theError) & "' occurred." & chr(13) & _
218 chr(10) & "Your credentials could not be generated."
219 result = MsgBox(sz, 0, "Credentials Enrollment")
220 Exit Sub
221 else
222 TheForm.Request.value = sz10
223 TheForm.Submit
224 end if
225 End Sub
226
227 Sub Add_RDN(sn, value)
228 if (value <> "") then
229 if (DN <> "") then
230 DN = DN & "; "
231 end if
232 DN = DN & sn & "=" & value
233 end if
234 End Sub
235</SCRIPT>
236</BODY>
237</HTML>
238EOF
239-----END ms-enroll.cgi-----
240
241Second, how to extract the request and feed the certificate back? We need to
242"normalize" the base64 encoding of the PKCS#10 format which means
243regenerating the lines and wrapping with BEGIN and END line. This is done by
244gawk. The request is taken by ca the normal way. Then the cert needs to be
245packed into a PKCS#7 structure (note: the use of a CRL is necessary for
246crl2pkcs7 as of version 0.6.6. Starting with 0.8.0 it it might probably be
247ommited). Finally we need to format the PKCS#7 object and generate the HTML
248text. I use two templates to have a clearer script.
249
2501st note: postit2 is slightly modified from a program I found at ncsa's ftp
251site. Grab it from http://www.easterngraphics.com/certs/IX9704/postit2.c. You
252need utils.c from there too.
253
2542nd note: I'm note quite sure wether the gawk script really handles all
255possible inputs for the request right! Today I don't use this construction
256anymore myself.
257
2583d note: the cert must be of version 3! This could be done with the nsComment
259line in ssleay.cnf...
260
261------BEGIN ms-gencert.cgi-----
262#!/bin/sh
263FILE="/tmp/"`date '+%y%m%d%H%M%S'-`$$
264rm -f "$FILE".*
265
266HOME=`pwd`; export HOME # as ssleay.cnf insists on having such an env var
267cd /usr/local/ssl #where demoCA (as named in ssleay.conf) is located
268
269postit2 -s " " -i 0x0d > "$FILE".inp # process the FORM vars
270
271SESSION_ID=`gawk '$1 == "SessionId" { print $2; exit }' "$FILE".inp`
272
273gawk \
274 'BEGIN { \
275 OFS = ""; \
276 print "-----BEGIN CERTIFICATE REQUEST-----"; \
277 req_seen=0 \
278 } \
279 $1 == "Request" { \
280 req_seen=1; \
281 if (length($2) == 72) print($2); \
282 lastline=$2; \
283 next; \
284 } \
285 { \
286 if (req_seen == 1) { \
287 if (length($1) >= 72) print($1); \
288 else if (length(lastline) < 72) { \
289 req_seen=0; \
290 print (lastline,$1); \
291 } \
292 lastline=$1; \
293 } \
294 } \
295 END { \
296 print "-----END CERTIFICATE REQUEST-----"; \
297 }' > "$FILE".pem < "$FILE".inp
298
299ssleay ca -batch -in "$FILE".pem -key passwd -out "$FILE".out
300ssleay crl2pkcs7 -certfile "$FILE".out -out "$FILE".pkcs7 -in demoCA/crl.pem
301
302sed s/template_for_sessId/$SESSION_ID/ <ms-enroll2a.html >"$FILE".cert
303/usr/local/bin/gawk \
304 'BEGIN { \
305 OFS = ""; \
306 dq = sprintf("%c",34); \
307 } \
308 $0 ~ "PKCS7" { next; } \
309 { \
310 print dq$0dq" & _"; \
311 }' <"$FILE".pkcs7 >> "$FILE".cert
312cat ms-enroll2b.html >>"$FILE".cert
313
314echo Content-type: text/html
315echo Content-length: `wc -c "$FILE".cert`
316echo
317cat "$FILE".cert
318rm -f "$FILE".*
319-----END ms-gencert.cgi-----
320
321----BEGIN ms-enroll2a.html----
322<HTML><HEAD><TITLE>Certificate Acceptance Test Page</TITLE></HEAD><BODY>
323
324<OBJECT
325 classid="clsid:33BEC9E0-F78F-11cf-B782-00C04FD7BF43"
326 codebase=certenr3.dll
327 id=certHelper
328 >
329</OBJECT>
330
331<CENTER>
332<H2>Your personal certificate</H2>
333<BR><HR WIDTH=50%><BR><P>
334Press the button!
335<P><INPUT TYPE=BUTTON VALUE="Nimm mich!" NAME="InstallCert">
336</CENTER>
337<BR><HR WIDTH=50%><BR>
338
339<SCRIPT LANGUAGE=VBS>
340 Sub InstallCert_OnClick
341
342 sessionId = "template_for_sessId"
343credentials = "" & _
344----END ms-enroll2a.html----
345
346----BEGIN ms-enroll2b.html----
347""
348 On Error Resume Next
349 result = certHelper.AcceptCredentials(sessionId, credentials, 0,
350FALSE)
351 if (IsEmpty(result)) Then
352 sz = "The error '" & Err.Number & "' occurred." & chr(13) &
353chr(10) & "This Digital ID could not be registered."
354 msgOut = MsgBox(sz, 0, "Credentials Registration Error")
355 navigate "error.html"
356 else
357 sz = "Digital ID successfully registered."
358 msgOut = MsgBox(sz, 0, "Credentials Registration")
359 navigate "success.html"
360 end if
361 Exit Sub
362 End Sub
363</SCRIPT>
364</BODY>
365</HTML>
366----END ms-enroll2b.html----
367
3684.) What do do with the cert?
369-----------------------------
370
371The cert is visible (without restarting MSIE) under the following menu:
372View->Options->Security->Personal certs. You can examine it's contents at
373least partially.
374
375To use it for client authentication you need to use SSL3.0 (fortunately
376SSLeay supports it with 0.8.0). Furthermore MSIE is told to only supports a
377kind of automatic selection of certs (I personally wasn't able to test it
378myself). But there is a requirement that the issuer of the server cert and
379the issuer of the client cert needs to be the same (according to a developer
380from MS). Which means: you need may more then one cert to talk to all
381servers...
382
383I'm sure we will get a bit more experience after ApacheSSL is available for
384SSLeay 0.8.8.
385
386
387I hope you enjoyed reading and that in future questions on this topic will
388rarely appear on ssl-users@moncom.com ;-)
389
390Ilmenau, 9th of June 1997
391Holger Reif <reif@prakinf.tu-ilmenau.de>
392--
393read you later - Holger Reif
394---------------------------------------- Signaturprojekt Deutsche Einheit
395TU Ilmenau - Informatik - Telematik (Verdamp lang her)
396Holger.Reif@PrakInf.TU-Ilmenau.DE Alt wie ein Baum werden, um ueber
397http://Remus.PrakInf.TU-Ilmenau.DE/Reif/ alle 7 Bruecken gehen zu koennen
398
diff --git a/src/lib/libssl/src/doc/ns-ca.doc b/src/lib/libssl/src/doc/ns-ca.doc
deleted file mode 100644
index 836883e1a0..0000000000
--- a/src/lib/libssl/src/doc/ns-ca.doc
+++ /dev/null
@@ -1,154 +0,0 @@
1The following documentation was supplied by Jeff Barber, who provided the
2patch to the CA program to add this functionality.
3
4eric
5--
6Jeff Barber Email: jeffb@issl.atl.hp.com
7
8Hewlett Packard Phone: (404) 648-9503
9Internet and System Security Lab Fax: (404) 648-9516
10
11 oo
12---------------------cut /\ here for ns-ca.doc ------------------------------
13
14This document briefly describes how to use SSLeay to implement a
15certificate authority capable of dynamically serving up client
16certificates for version 3.0 beta 5 (and presumably later) versions of
17the Netscape Navigator. Before describing how this is done, it's
18important to understand a little about how the browser implements its
19client certificate support. This is documented in some detail in the
20URLs based at <URL:http://home.netscape.com/eng/security/certs.html>.
21Here's a brief overview:
22
23- The Navigator supports a new HTML tag "KEYGEN" which will cause
24 the browser to generate an RSA key pair when you submit a form
25 containing the tag. The public key, along with an optional
26 challenge (supposedly provided for use in certificate revocation
27 but I don't use it) is signed, DER-encoded, base-64 encoded
28 and sent to the web server as the value of the variable
29 whose NAME is provided in the KEYGEN tag. The private key is
30 stored by the browser in a local key database.
31
32 This "Signed Public Key And Challenge" (SPKAC) arrives formatted
33 into 64 character lines (which are of course URL-encoded when
34 sent via HTTP -- i.e. spaces, newlines and most punctuatation are
35 encoded as "%HH" where HH is the hex equivalent of the ASCII code).
36 Note that the SPKAC does not contain the other usual attributes
37 of a certificate request, especially the subject name fields.
38 These must be otherwise encoded in the form for submission along
39 with the SPKAC.
40
41- Either immediately (in response to this form submission), or at
42 some later date (a real CA will probably verify your identity in
43 some way before issuing the certificate), a web server can send a
44 certificate based on the public key and other attributes back to
45 the browser by encoding it in DER (the binary form) and sending it
46 to the browser as MIME type:
47 "Content-type: application/x-x509-user-cert"
48
49 The browser uses the public key encoded in the certificate to
50 associate the certificate with the appropriate private key in
51 its local key database. Now, the certificate is "installed".
52
53- When a server wants to require authentication based on client
54 certificates, it uses the right signals via the SSL protocol to
55 trigger the Navigator to ask you which certificate you want to
56 send. Whether the certificate is accepted is dependent on CA
57 certificates and so forth installed in the server and is beyond
58 the scope of this document.
59
60
61Now, here's how the SSLeay package can be used to provide client
62certficates:
63
64- You prepare a file for input to the SSLeay ca application.
65 The file contains a number of "name = value" pairs that identify
66 the subject. The names here are the same subject name component
67 identifiers used in the CA section of the lib/ssleay.conf file,
68 such as "emailAddress", "commonName" "organizationName" and so
69 forth. Both the long version and the short version (e.g. "Email",
70 "CN", "O") can be used.
71
72 One more name is supported: this one is "SPKAC". Its value
73 is simply the value of the base-64 encoded SPKAC sent by the
74 browser (with all the newlines and other space charaters
75 removed -- and newline escapes are NOT supported).
76
77 [ As of SSLeay 0.6.4, multiple lines are supported.
78 Put a \ at the end of each line and it will be joined with the
79 previous line with the '\n' removed - eay ]
80
81 Here's a sample input file:
82
83C = US
84SP = Georgia
85O = Some Organization, Inc.
86OU = Netscape Compatibility Group
87CN = John X. Doe
88Email = jxdoe@someorg.com
89SPKAC = MIG0MGAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAwmk6FMJ4uAVIYbcvIOx5+bDGTfvL8X5gE+R67ccMk6rCSGbVQz2cetyQtnI+VIs0NwdD6wjuSuVtVFbLoHonowIDAQABFgAwDQYJKoZIhvcNAQEEBQADQQBFZDUWFl6BJdomtN1Bi53mwijy1rRgJ4YirF15yBEDM3DjAQkKXHYOIX+qpz4KXKnl6EYxTnGSFL5wWt8X2iyx
90
91- You execute the ca command (either from a CGI program run out of
92 the web server, or as a later manual task) giving it the above
93 file as input. For example, if the file were named /tmp/cert.req,
94 you'd run:
95 $SSLDIR/bin/ca -spkac /tmp/cert.req -out /tmp/cert
96
97 The output is in DER format (binary) if a -out argument is
98 provided, as above; otherwise, it's in the PEM format (base-64
99 encoded DER). Also, the "-batch" switch is implied by the
100 "-spkac" so you don't get asked whether to complete the signing
101 (probably it shouldn't work this way but I was only interested
102 in hacking together an online CA that could be used for issuing
103 test certificates).
104
105 The "-spkac" capability doesn't support multiple files (I think).
106
107 Any CHALLENGE provided in the SPKAC is simply ignored.
108
109 The interactions between the identification fields you provide
110 and those identified in your lib/ssleay.conf are the same as if
111 you did an ordinary "ca -in infile -out outfile" -- that is, if
112 something is marked as required in the ssleay.conf file and it
113 isn't found in the -spkac file, the certificate won't be issued.
114
115- Now, you pick up the output from /tmp/cert and pass it back to
116 the Navigator prepending the Content-type string described earlier.
117
118- In order to run the ca command out of a CGI program, you must
119 provide a password to decrypt the CA's private key. You can
120 do this by using "echo MyKeyPassword | $SSLDIR/bin/ca ..."
121 I think there's a way to not encrypt the key file in the first
122 place, but I didn't see how to do that, so I made a small change
123 to the library that allows the password to be accepted from a pipe.
124 Either way is UTTERLY INSECURE and a real CA would never do that.
125
126 [ You can use the 'ssleay rsa' command to remove the password
127 from the private key, or you can use the '-key' option to the
128 ca command to specify the decryption key on the command line
129 or use the -nodes option when generating the key.
130 ca will try to clear the command line version of the password
131 but for quite a few operating systems, this is not possible.
132 - eric ]
133
134So, what do you have to do to make use of this stuff to create an online
135demo CA capability with SSLeay?
136
1371 Create an HTML form for your users. The form should contain
138 fields for all of the required or optional fields in ssleay.conf.
139 The form must contain a KEYGEN tag somewhere with at least a NAME
140 attribute.
141
1422 Create a CGI program to process the form input submitted by the
143 browser. The CGI program must URL-decode the variables and create
144 the file described above, containing subject identification info
145 as well as the SPKAC block. It should then run the the ca program
146 with the -spkac option. If it works (check the exit status),
147 return the new certificate with the appropriate MIME type. If not,
148 return the output of the ca command with MIME type "text/plain".
149
1503 Set up your web server to accept connections signed by your demo
151 CA. This probably involves obtaining the PEM-encoded CA certificate
152 (ordinarily in $SSLDIR/CA/cacert.pem) and installing it into a
153 server database. See your server manual for instructions.
154
diff --git a/src/lib/libssl/src/doc/obj.doc b/src/lib/libssl/src/doc/obj.doc
deleted file mode 100644
index bad347c936..0000000000
--- a/src/lib/libssl/src/doc/obj.doc
+++ /dev/null
@@ -1,69 +0,0 @@
1The Object library.
2
3As part of my Crypto library, I found I required a method of identifying various
4objects. These objects normally had 3 different values associated with
5them, a short text name, a long (or lower case) text name, and an
6ASN.1 Object Identifier (which is a sequence of numbers).
7This library contains a static list of objects and functions to lookup
8according to one type and to return the other types.
9
10To use these routines, 'Object.h' needs to be included.
11
12For each supported object, #define entries are defined as follows
13#define SN_Algorithm "Algorithm"
14#define LN_algorithm "algorithm"
15#define NID_algorithm 38
16#define OBJ_algorithm 1L,3L,14L,3L,2L
17
18SN_ stands for short name.
19LN_ stands for either long name or lowercase name.
20NID_ stands for Numeric ID. I each object has a unique NID and this
21 should be used internally to identify objects.
22OBJ_ stands for ASN.1 Object Identifier or ASN1_OBJECT as defined in the
23 ASN1 routines. These values are used in ASN1 encoding.
24
25The following functions are to be used to return pointers into a static
26definition of these types. What this means is "don't try to free() any
27pointers returned from these functions.
28
29ASN1_OBJECT *OBJ_nid2obj(
30int n);
31 Return the ASN1_OBJECT that corresponds to a NID of n.
32
33char *OBJ_nid2ln(
34int n);
35 Return the long/lower case name of the object represented by the
36 NID of n.
37
38char *OBJ_nid2sn(
39int n);
40 Return the short name for the object represented by the NID of n.
41
42ASN1_OBJECT *OBJ_dup(
43ASN1_OBJECT *o);
44 Duplicate and return a new ASN1_OBJECT that is the same as the
45 passed parameter.
46
47int OBJ_obj2nid(
48ASN1_OBJECT *o);
49 Given ASN1_OBJECT o, return the NID that corresponds.
50
51int OBJ_ln2nid(
52char *s);
53 Given the long/lower case name 's', return the NID of the object.
54
55int OBJ_sn2nid(
56char *s);
57 Given the short name 's', return the NID of the object.
58
59char *OBJ_bsearch(
60char *key,
61char *base,
62int num,
63int size,
64int (*cmp)());
65 Since I have come across a few platforms that do not have the
66 bsearch() function, OBJ_bsearch is my version of that function.
67 Feel free to use this function, but you may as well just use the
68 normal system bsearch(3) if it is present. This version also
69 has tolerance of being passed NULL pointers.
diff --git a/src/lib/libssl/src/doc/openssl.pod b/src/lib/libssl/src/doc/openssl.pod
new file mode 100644
index 0000000000..561f01e0ca
--- /dev/null
+++ b/src/lib/libssl/src/doc/openssl.pod
@@ -0,0 +1,304 @@
1
2=pod
3
4=head1 NAME
5
6openssl - OpenSSL command line tool
7
8=head1 SYNOPSIS
9
10B<openssl>
11I<command>
12[ I<command_opts> ]
13[ I<command_args> ]
14
15=head1 DESCRIPTION
16
17OpenSSL is a cryptography toolkit implementing the Secure Sockets Layer (SSL
18v2/v3) and Transport Layer Security (TLS v1) network protocols and related
19cryptography standards required by them.
20
21The B<openssl> program is a command line tool for using the various
22cryptography functions of OpenSSL's B<crypto> library from the shell.
23It can be used for
24
25 o Creation of RSA, DH and DSA key parameters
26 o Creation of X.509 certificates, CSRs and CRLs
27 o Calculation of Message Digests
28 o Encryption and Decryption with Ciphers
29 o SSL/TLS Client and Server Tests
30
31=head1 COMMAND SUMMARY
32
33The B<openssl> program provides a rich variety of commands (I<command> in the
34SYNOPSIS above), each of which often has a wealth of options and arguments
35(I<command_opts> and I<command_args> in the SYNOPSIS).
36
37=head2 STANDARD COMMANDS
38
39=over 10
40
41=item B<asn1parse>
42
43Parse an ASN.1 sequence.
44
45=item B<ca>
46
47Certificate Authority (CA) Management.
48
49=item B<ciphers>
50
51Cipher Suite Description Determination.
52
53=item B<crl>
54
55Certificate Revocation List (CRL) Management.
56
57=item B<crl2pkcs7>
58
59CRL2 to PKCS#7 Conversion.
60
61=item B<dgst>
62
63Message Digest Calculation.
64
65=item B<dh>
66
67Diffie-Hellman Data Management.
68
69=item B<dsa>
70
71DSA Data Management.
72
73=item B<dsaparam>
74
75DSA Parameter Generation.
76
77=item B<enc>
78
79Encoding with Ciphers.
80
81=item B<errstr>
82
83Error Number to Error String Conversion.
84
85=item B<gendh>
86
87Generation of Diffie-Hellman Parameters.
88
89=item B<gendsa>
90
91Generation of DSA Parameters.
92
93=item B<genrsa>
94
95Generation of RSA Parameters.
96
97=item B<pkcs7>
98
99PKCS#7 Data Management.
100
101=item B<req>
102
103X.509 Certificate Signing Request (CSR) Management.
104
105=item B<rsa>
106
107RSA Data Management.
108
109=item B<s_client>
110
111This implements a generic SSL/TLS client which can establish a transparent
112connection to a remote server speaking SSL/TLS. It's intended for testing
113purposes only and provides only rudimentary interface functionality but
114internally uses mostly all functionality of the OpenSSL B<ssl> library.
115
116=item B<s_server>
117
118This implements a generic SSL/TLS server which accepts connections from remote
119clients speaking SSL/TLS. It's intended for testing purposes only and provides
120only rudimentary interface functionality but internally uses mostly all
121functionality of the OpenSSL B<ssl> library. It provides both an own command
122line oriented protocol for testing SSL functions and a simple HTTP response
123facility to emulate an SSL/TLS-aware webserver.
124
125=item B<s_time>
126
127SSL Connection Timer.
128
129=item B<sess_id>
130
131SSL Session Data Management.
132
133=item B<speed>
134
135Algorithm Speed Measurement.
136
137=item B<verify>
138
139X.509 Certificate Verification.
140
141=item B<version>
142
143OpenSSL Version Information.
144
145=item B<x509>
146
147X.509 Certificate Data Management.
148
149=back
150
151=head2 MESSAGE DIGEST COMMANDS
152
153=over 10
154
155=item B<md2>
156
157MD2 Digest
158
159=item B<md5>
160
161MD5 Digest
162
163=item B<mdc2>
164
165MDC2 Digest
166
167=item B<rmd160>
168
169RMD-160 Digest
170
171=item B<sha>
172
173SHA Digest
174
175=item B<sha1>
176
177SHA-1 Digest
178
179=back
180
181=head2 ENCODING AND CIPHER COMMANDS
182
183=over 10
184
185=item B<base64>
186
187Base64 Encoding
188
189=item B<bf bf-cbc bf-cfb bf-ecb bf-ofb>
190
191Blowfish Cipher
192
193=item B<cast cast-cbc>
194
195CAST Cipher
196
197=item B<cast5-cbc cast5-cfb cast5-ecb cast5-ofb>
198
199CAST5 Cipher
200
201=item B<des des-cbc des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ofb>
202
203DES Cipher
204
205=item B<des3 desx des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb>
206
207Triple-DES Cipher
208
209=item B<idea idea-cbc idea-cfb idea-ecb idea-ofb>
210
211IDEA Cipher
212
213=item B<rc2 rc2-cbc rc2-cfb rc2-ecb rc2-ofb>
214
215RC2 Cipher
216
217=item B<rc4>
218
219RC4 Cipher
220
221=item B<rc5 rc5-cbc rc5-cfb rc5-ecb rc5-ofb>
222
223RC5 Cipher
224
225=back
226
227=head1 DETAILED COMMAND DESCRIPTION
228
229The following is a detailed description of every B<openssl> I<command>.
230
231=over 4
232
233=item B<openssl> B<s_client>
234[B<-connect> I<host>B<:>I<port>]
235[B<-verify> I<arg>]
236[B<-cert> I<arg>]
237[B<-key> I<arg>]
238[B<-CApath> I<arg>]
239[B<-CAfile> I<arg>]
240[B<-reconnect>]
241[B<-pause>]
242[B<-debug>]
243[B<-nbio_test>]
244[B<-state>]
245[B<-nbio>]
246[B<-quiet>]
247[B<-ssl2>]
248[B<-ssl3>]
249[B<-tls1>]
250[B<-no_ssl2>]
251[B<-no_ssl3>]
252[B<-no_tls1>]
253[B<-bugs>]
254[B<-cipher>]
255
256The B<s_client> command implements a generic SSL/TLS client which can
257establish a transparent connection to a remote I<host> and I<port> speaking
258SSL/TLS.
259
260=item B<openssl> B<s_server>
261[B<-accept> I<port>]
262[B<-verify> I<arg>]
263[B<-Verify> I<arg>]
264[B<-cert> I<arg>]
265[B<-key> I<arg>]
266[B<-dcert> I<arg>]
267[B<-dkey> I<arg>]
268[B<-nbio>]
269[B<-nbio_test>]
270[B<-debug>]
271[B<-state>]
272[B<-CApath> I<arg>]
273[B<-CAfile> I<arg>]
274[B<-nocert>]
275[B<-cipher> I<arg>]
276[B<-quiet>]
277[B<-no_tmp_rsa>]
278[B<-ssl2>]
279[B<-ssl3>]
280[B<-tls1>]
281[B<-no_ssl2>]
282[B<-no_ssl3>]
283[B<-no_tls1>]
284[B<-bugs>]
285[B<-www>]
286[B<-WWW>]
287
288The B<s_server> command implements a generic SSL/TLS server which accepts
289connections from remote clients on I<port> speaking SSL/TLS.
290
291=back
292
293...
294
295=head1 SEE ALSO
296
297crypto(3), ssl(3)
298
299=head1 HISTORY
300
301The openssl(3) document appeared in OpenSSL 0.9.2
302
303=cut
304
diff --git a/src/lib/libssl/src/doc/openssl.txt b/src/lib/libssl/src/doc/openssl.txt
new file mode 100644
index 0000000000..91b85e5f14
--- /dev/null
+++ b/src/lib/libssl/src/doc/openssl.txt
@@ -0,0 +1,1174 @@
1
2This is some preliminary documentation for OpenSSL.
3
4==============================================================================
5 BUFFER Library
6==============================================================================
7
8The buffer library handles simple character arrays. Buffers are used for
9various purposes in the library, most notably memory BIOs.
10
11The library uses the BUF_MEM structure defined in buffer.h:
12
13typedef struct buf_mem_st
14{
15 int length; /* current number of bytes */
16 char *data;
17 int max; /* size of buffer */
18} BUF_MEM;
19
20'length' is the current size of the buffer in bytes, 'max' is the amount of
21memory allocated to the buffer. There are three functions which handle these
22and one "miscellaneous" function.
23
24BUF_MEM *BUF_MEM_new()
25
26This allocates a new buffer of zero size. Returns the buffer or NULL on error.
27
28void BUF_MEM_free(BUF_MEM *a)
29
30This frees up an already existing buffer. The data is zeroed before freeing
31up in case the buffer contains sensitive data.
32
33int BUF_MEM_grow(BUF_MEM *str, int len)
34
35This changes the size of an already existing buffer. It returns zero on error
36or the new size (i.e. 'len'). Any data already in the buffer is preserved if
37it increases in size.
38
39char * BUF_strdup(char *str)
40
41This is the previously mentioned strdup function: like the standard library
42strdup() it copies a null terminated string into a block of allocated memory
43and returns a pointer to the allocated block.
44
45Unlike the standard C library strdup() this function uses Malloc() and so
46should be used in preference to the standard library strdup() because it can
47be used for memory leak checking or replacing the malloc() function.
48
49The memory allocated from BUF_strdup() should be freed up using the Free()
50function.
51
52==============================================================================
53 OpenSSL X509V3 extension configuration
54==============================================================================
55
56OpenSSL X509V3 extension configuration: preliminary documentation.
57
58INTRODUCTION.
59
60For OpenSSL 0.9.2 the extension code has be considerably enhanced. It is now
61possible to add and print out common X509 V3 certificate and CRL extensions.
62
63BEGINNERS NOTE
64
65For most simple applications you don't need to know too much about extensions:
66the default openssl.cnf values will usually do sensible things.
67
68If you want to know more you can initially quickly look through the sections
69describing how the standard OpenSSL utilities display and add extensions and
70then the list of supported extensions.
71
72For more technical information about the meaning of extensions see:
73
74http://www.imc.org/ietf-pkix/
75http://home.netscape.com/eng/security/certs.html
76
77PRINTING EXTENSIONS.
78
79Extension values are automatically printed out for supported extensions.
80
81openssl x509 -in cert.pem -text
82openssl crl -in crl.pem -text
83
84will give information in the extension printout, for example:
85
86 X509v3 extensions:
87 X509v3 Basic Constraints:
88 CA:TRUE
89 X509v3 Subject Key Identifier:
90 73:FE:F7:59:A7:E1:26:84:44:D6:44:36:EE:79:1A:95:7C:B1:4B:15
91 X509v3 Authority Key Identifier:
92 keyid:73:FE:F7:59:A7:E1:26:84:44:D6:44:36:EE:79:1A:95:7C:B1:4B:15, DirName:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/Email=email@1.address/Email=email@2.address, serial:00
93 X509v3 Key Usage:
94 Certificate Sign, CRL Sign
95 X509v3 Subject Alternative Name:
96 email:email@1.address, email:email@2.address
97
98CONFIGURATION FILES.
99
100The OpenSSL utilities 'ca' and 'req' can now have extension sections listing
101which certificate extensions to include. In each case a line:
102
103x509_extensions = extension_section
104
105indicates which section contains the extensions. In the case of 'req' the
106extension section is used when the -x509 option is present to create a
107self signed root certificate.
108
109The 'x509' utility also supports extensions when it signs a certificate.
110The -extfile option is used to set the configuration file containing the
111extensions. In this case a line with:
112
113extensions = extension_section
114
115in the nameless (default) section is used. If no such line is included then
116it uses the default section.
117
118You can also add extensions to CRLs: a line
119
120crl_extensions = crl_extension_section
121
122will include extensions when the -gencrl option is used with the 'ca' utility.
123You can add any extension to a CRL but of the supported extensions only
124issuerAltName and authorityKeyIdentifier make any real sense. Note: these are
125CRL extensions NOT CRL *entry* extensions which cannot currently be generated.
126CRL entry extensions can be displayed.
127
128NB. At this time Netscape Communicator rejects V2 CRLs: to get an old V1 CRL
129you should not include a crl_extensions line in the configuration file.
130
131As with all configuration files you can use the inbuilt environment expansion
132to allow the values to be passed in the environment. Therefore if you have
133several extension sections used for different purposes you can have a line:
134
135x509_extensions = $ENV::ENV_EXT
136
137and set the ENV_EXT environment variable before calling the relevant utility.
138
139EXTENSION SYNTAX.
140
141Extensions have the basic form:
142
143extension_name=[critical,] extension_options
144
145the use of the critical option makes the extension critical. Extreme caution
146should be made when using the critical flag. If an extension is marked
147as critical then any client that does not understand the extension should
148reject it as invalid. Some broken software will reject certificates which
149have *any* critical extensions (these violates PKIX but we have to live
150with it).
151
152There are three main types of extension: string extensions, multi-valued
153extensions, and raw extensions.
154
155String extensions simply have a string which contains either the value itself
156or how it is obtained.
157
158For example:
159
160nsComment="This is a Comment"
161
162Multi-valued extensions have a short form and a long form. The short form
163is a list of names and values:
164
165basicConstraints=critical,CA:true,pathlen:1
166
167The long form allows the values to be placed in a separate section:
168
169basicConstraints=critical,@bs_section
170
171[bs_section]
172
173CA=true
174pathlen=1
175
176Both forms are equivalent. However it should be noted that in some cases the
177same name can appear multiple times, for example,
178
179subjectAltName=email:steve@here,email:steve@there
180
181in this case an equivalent long form is:
182
183subjectAltName=@alt_section
184
185[alt_section]
186
187email.1=steve@here
188email.2=steve@there
189
190This is because the configuration file code cannot handle the same name
191occurring twice in the same extension.
192
193The syntax of raw extensions is governed by the extension code: it can
194for example contain data in multiple sections. The correct syntax to
195use is defined by the extension code itself: check out the certificate
196policies extension for an example.
197
198In addition it is also possible to use the word DER to include arbitrary
199data in any extension.
200
2011.2.3.4=critical,DER:01:02:03:04
2021.2.3.4=DER:01020304
203
204The value following DER is a hex dump of the DER encoding of the extension
205Any extension can be placed in this form to override the default behaviour.
206For example:
207
208basicConstraints=critical,DER:00:01:02:03
209
210WARNING: DER should be used with caution. It is possible to create totally
211invalid extensions unless care is taken.
212
213CURRENTLY SUPPORTED EXTENSIONS.
214
215If you aren't sure about extensions then they can be largely ignored: its only
216when you want to do things like restrict certificate usage when you need to
217worry about them.
218
219The only extension that a beginner might want to look at is Basic Constraints.
220If in addition you want to try Netscape object signing the you should also
221look at Netscape Certificate Type.
222
223Literal String extensions.
224
225In each case the 'value' of the extension is placed directly in the
226extension. Currently supported extensions in this category are: nsBaseUrl,
227nsRevocationUrl, nsCaRevocationUrl, nsRenewalUrl, nsCaPolicyUrl,
228nsSslServerName and nsComment.
229
230For example:
231
232nsComment="This is a test comment"
233
234Bit Strings.
235
236Bit string extensions just consist of a list of supported bits, currently
237two extensions are in this category: PKIX keyUsage and the Netscape specific
238nsCertType.
239
240nsCertType (netscape certificate type) takes the flags: client, server, email,
241objsign, reserved, sslCA, emailCA, objCA.
242
243keyUsage (PKIX key usage) takes the flags: digitalSignature, nonRepudiation,
244keyEncipherment, dataEncipherment, keyAgreement, keyCertSign, cRLSign,
245encipherOnly, decipherOnly.
246
247For example:
248
249nsCertType=server
250
251keyUsage=digitalSignature, nonRepudiation
252
253Hints on Netscape Certificate Type.
254
255Other than Basic Constraints this is the only extension a beginner might
256want to use, if you want to try Netscape object signing, otherwise it can
257be ignored.
258
259If you want a certificate that can be used just for object signing then:
260
261nsCertType=objsign
262
263will do the job. If you want to use it as a normal end user and server
264certificate as well then
265
266nsCertType=objsign,email,server
267
268is more appropriate. You cannot use a self signed certificate for object
269signing (well Netscape signtool can but it cheats!) so you need to create
270a CA certificate and sign an end user certificate with it.
271
272Side note: If you want to conform to the Netscape specifications then you
273should really also set:
274
275nsCertType=objCA
276
277in the *CA* certificate for just an object signing CA and
278
279nsCertType=objCA,emailCA,sslCA
280
281for everything. Current Netscape software doesn't enforce this so it can
282be omitted.
283
284Basic Constraints.
285
286This is generally the only extension you need to worry about for simple
287applications. If you want your certificate to be usable as a CA certificate
288(in addition to an end user certificate) then you set this to:
289
290basicConstraints=CA:TRUE
291
292if you want to be certain the certificate cannot be used as a CA then do:
293
294basicConstraints=CA:FALSE
295
296The rest of this section describes more advanced usage.
297
298Basic constraints is a multi-valued extension that supports a CA and an
299optional pathlen option. The CA option takes the values true and false and
300pathlen takes an integer. Note if the CA option is false the pathlen option
301should be omitted.
302
303The pathlen parameter indicates the maximum number of CAs that can appear
304below this one in a chain. So if you have a CA with a pathlen of zero it can
305only be used to sign end user certificates and not further CAs. This all
306assumes that the software correctly interprets this extension of course.
307
308Examples:
309
310basicConstraints=CA:TRUE
311basicConstraints=critical,CA:TRUE, pathlen:0
312
313NOTE: for a CA to be considered valid it must have the CA option set to
314TRUE. An end user certificate MUST NOT have the CA value set to true.
315According to PKIX recommendations it should exclude the extension entirely,
316however some software may require CA set to FALSE for end entity certificates.
317
318Subject Key Identifier.
319
320This is really a string extension and can take two possible values. Either
321a hex string giving details of the extension value to include or the word
322'hash' which then automatically follow PKIX guidelines in selecting and
323appropriate key identifier. The use of the hex string is strongly discouraged.
324
325Example: subjectKeyIdentifier=hash
326
327Authority Key Identifier.
328
329The authority key identifier extension permits two options. keyid and issuer:
330both can take the optional value "always".
331
332If the keyid option is present an attempt is made to copy the subject key
333identifier from the parent certificate. If the value "always" is present
334then an error is returned if the option fails.
335
336The issuer option copies the issuer and serial number from the issuer
337certificate. Normally this will only be done if the keyid option fails or
338is not included: the "always" flag will always include the value.
339
340Subject Alternative Name.
341
342The subject alternative name extension allows various literal values to be
343included in the configuration file. These include "email" (an email address)
344"URI" a uniform resource indicator, "DNS" (a DNS domain name), RID (a
345registered ID: OBJECT IDENTIFIER) and IP (and IP address).
346
347Also the email option include a special 'copy' value. This will automatically
348include and email addresses contained in the certificate subject name in
349the extension.
350
351Examples:
352
353subjectAltName=email:copy,email:my@other.address,URL:http://my.url.here/
354subjectAltName=email:my@other.address,RID:1.2.3.4
355
356Issuer Alternative Name.
357
358The issuer alternative name option supports all the literal options of
359subject alternative name. It does *not* support the email:copy option because
360that would not make sense. It does support an additional issuer:copy option
361that will copy all the subject alternative name values from the issuer
362certificate (if possible).
363
364CRL distribution points.
365
366This is a multi-valued extension that supports all the literal options of
367subject alternative name. Of the few software packages that currently interpret
368this extension most only interpret the URI option.
369
370Currently each option will set a new DistributionPoint with the fullName
371field set to the given value.
372
373Other fields like cRLissuer and reasons cannot currently be set or displayed:
374at this time no examples were available that used these fields.
375
376If you see this extension with <UNSUPPORTED> when you attempt to print it out
377or it doesn't appear to display correctly then let me know, including the
378certificate (mail me at steve@openssl.org) .
379
380Examples:
381
382crlDistributionPoints=URI:http://www.myhost.com/myca.crl
383crlDistributionPoints=URI:http://www.my.com/my.crl,URI:http://www.oth.com/my.crl
384
385Certificate Policies.
386
387This is a RAW extension. It attempts to display the contents of this extension:
388unfortunately this extension is often improperly encoded.
389
390The certificate policies extension will rarely be used in practice: few
391software packages interpret it correctly or at all. IE5 does partially
392support this extension: but it needs the 'ia5org' option because it will
393only correctly support a broken encoding. Of the options below only the
394policy OID, explicitText and CPS options are displayed with IE5.
395
396All the fields of this extension can be set by using the appropriate syntax.
397
398If you follow the PKIX recommendations of not including any qualifiers and just
399using only one OID then you just include the value of that OID. Multiple OIDs
400can be set separated by commas, for example:
401
402certificatePolicies= 1.2.4.5, 1.1.3.4
403
404If you wish to include qualifiers then the policy OID and qualifiers need to
405be specified in a separate section: this is done by using the @section syntax
406instead of a literal OID value.
407
408The section referred to must include the policy OID using the name
409policyIdentifier, cPSuri qualifiers can be included using the syntax:
410
411CPS.nnn=value
412
413userNotice qualifiers can be set using the syntax:
414
415userNotice.nnn=@notice
416
417The value of the userNotice qualifier is specified in the relevant section.
418This section can include explicitText, organization and noticeNumbers
419options. explicitText and organization are text strings, noticeNumbers is a
420comma separated list of numbers. The organization and noticeNumbers options
421(if included) must BOTH be present. If you use the userNotice option with IE5
422then you need the 'ia5org' option at the top level to modify the encoding:
423otherwise it will not be interpreted properly.
424
425Example:
426
427certificatePolicies=ia5org,1.2.3.4,1.5.6.7.8,@polsect
428
429[polsect]
430
431policyIdentifier = 1.3.5.8
432CPS.1="http://my.host.name/"
433CPS.2="http://my.your.name/"
434userNotice.1=@notice
435
436[notice]
437
438explicitText="Explicit Text Here"
439organization="Organisation Name"
440noticeNumbers=1,2,3,4
441
442TECHNICAL NOTE: the ia5org option changes the type of the 'organization' field,
443according to PKIX it should be of type DisplayText but Verisign uses an
444IA5STRING and IE5 needs this too.
445
446Display only extensions.
447
448Some extensions are only partially supported and currently are only displayed
449but cannot be set. These include private key usage period, CRL number, and
450CRL reason.
451
452==============================================================================
453 X509V3 Extension code: programmers guide
454==============================================================================
455
456The purpose of the extension code is twofold. It allows an extension to be
457created from a string or structure describing its contents and it prints out an
458extension in a human or machine readable form.
459
4601. Initialisation and cleanup.
461
462X509V3_add_standard_extensions();
463
464This function should be called before any other extension code. It adds support
465for some common PKIX and Netscape extensions. Additional custom extensions can
466be added as well (see later).
467
468void X509V3_EXT_cleanup(void);
469
470This function should be called last to cleanup the extension code. After this
471call no other extension calls should be made.
472
4732. Printing and parsing extensions.
474
475The simplest way to print out extensions is via the standard X509 printing
476routines: if you use the standard X509_print() function, the supported
477extensions will be printed out automatically.
478
479The following functions allow finer control over extension display:
480
481int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, int flag, int indent);
482int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent);
483
484These two functions print out an individual extension to a BIO or FILE pointer.
485Currently the flag argument is unused and should be set to 0. The 'indent'
486argument is the number of spaces to indent each line.
487
488void *X509V3_EXT_d2i(X509_EXTENSION *ext);
489
490This function parses an extension and returns its internal structure. The
491precise structure you get back depends on the extension being parsed. If the
492extension if basicConstraints you will get back a pointer to a
493BASIC_CONSTRAINTS structure. Check out the source in crypto/x509v3 for more
494details about the structures returned. The returned structure should be freed
495after use using the relevant free function, BASIC_CONSTRAINTS_free() for
496example.
497
4983. Generating extensions.
499
500An extension will typically be generated from a configuration file, or some
501other kind of configuration database.
502
503int X509V3_EXT_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section,
504 X509 *cert);
505int X509V3_EXT_CRL_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section,
506 X509_CRL *crl);
507
508These functions add all the extensions in the given section to the given
509certificate or CRL. They will normally be called just before the certificate
510or CRL is due to be signed. Both return 0 on error on non zero for success.
511
512In each case 'conf' is the LHASH pointer of the configuration file to use
513and 'section' is the section containing the extension details.
514
515See the 'context functions' section for a description of the ctx paramater.
516
517
518X509_EXTENSION *X509V3_EXT_conf(LHASH *conf, X509V3_CTX *ctx, char *name,
519 char *value);
520
521This function returns an extension based on a name and value pair, if the
522pair will not need to access other sections in a config file (or there is no
523config file) then the 'conf' parameter can be set to NULL.
524
525X509_EXTENSION *X509V3_EXT_conf_nid(char *conf, X509V3_CTX *ctx, int nid,
526 char *value);
527
528This function creates an extension in the same way as X509V3_EXT_conf() but
529takes the NID of the extension rather than its name.
530
531For example to produce basicConstraints with the CA flag and a path length of
53210:
533
534x = X509V3_EXT_conf_nid(NULL, NULL, NID_basicConstraints, "CA:TRUE,pathlen:10");
535
536
537X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);
538
539This function sets up an extension from its internal structure. The ext_nid
540parameter is the NID of the extension and 'crit' is the critical flag.
541
5424. Context functions.
543
544The following functions set and manipulate an extension context structure.
545The purpose of the extension context is to allow the extension code to
546access various structures relating to the "environment" of the certificate:
547for example the issuers certificate or the certificate request.
548
549void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject,
550 X509_REQ *req, X509_CRL *crl, int flags);
551
552This function sets up an X509V3_CTX structure with details of the certificate
553environment: specifically the issuers certificate, the subject certificate,
554the certificate request and the CRL: if these are not relevant or not
555available then they can be set to NULL. The 'flags' parameter should be set
556to zero.
557
558X509V3_set_ctx_test(ctx)
559
560This macro is used to set the 'ctx' structure to a 'test' value: this is to
561allow the syntax of an extension (or configuration file) to be tested.
562
563X509V3_set_ctx_nodb(ctx)
564
565This macro is used when no configuration database is present.
566
567void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH *lhash);
568
569This function is used to set the configuration database when it is an LHASH
570structure: typically a configuration file.
571
572The following functions are used to access a configuration database: they
573should only be used in RAW extensions.
574
575char * X509V3_get_string(X509V3_CTX *ctx, char *name, char *section);
576
577This function returns the value of the parameter "name" in "section", or NULL
578if there has been an error.
579
580void X509V3_string_free(X509V3_CTX *ctx, char *str);
581
582This function frees up the string returned by the above function.
583
584STACK_OF(CONF_VALUE) * X509V3_get_section(X509V3_CTX *ctx, char *section);
585
586This function returns a whole section as a STACK_OF(CONF_VALUE) .
587
588void X509V3_section_free( X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section);
589
590This function frees up the STACK returned by the above function.
591
592Note: it is possible to use the extension code with a custom configuration
593database. To do this the "db_meth" element of the X509V3_CTX structure should
594be set to an X509V3_CTX_METHOD structure. This structure contains the following
595function pointers:
596
597char * (*get_string)(void *db, char *section, char *value);
598STACK_OF(CONF_VALUE) * (*get_section)(void *db, char *section);
599void (*free_string)(void *db, char * string);
600void (*free_section)(void *db, STACK_OF(CONF_VALUE) *section);
601
602these will be called and passed the 'db' element in the X509V3_CTX structure
603to access the database. If a given function is not implemented or not required
604it can be set to NULL.
605
6065. String helper functions.
607
608There are several "i2s" and "s2i" functions that convert structures to and
609from ASCII strings. In all the "i2s" cases the returned string should be
610freed using Free() after use. Since some of these are part of other extension
611code they may take a 'method' parameter. Unless otherwise stated it can be
612safely set to NULL.
613
614char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, ASN1_OCTET_STRING *oct);
615
616This returns a hex string from an ASN1_OCTET_STRING.
617
618char * i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint);
619char * i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint);
620
621These return a string decimal representations of an ASN1_INTEGER and an
622ASN1_ENUMERATED type, respectively.
623
624ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
625 X509V3_CTX *ctx, char *str);
626
627This converts an ASCII hex string to an ASN1_OCTET_STRING.
628
629ASN1_INTEGER * s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, char *value);
630
631This converts a decimal ASCII string into an ASN1_INTEGER.
632
6336. Multi valued extension helper functions.
634
635The following functions can be used to manipulate STACKs of CONF_VALUE
636structures, as used by multi valued extensions.
637
638int X509V3_get_value_bool(CONF_VALUE *value, int *asn1_bool);
639
640This function expects a boolean value in 'value' and sets 'asn1_bool' to
641it. That is it sets it to 0 for FALSE or 0xff for TRUE. The following
642strings are acceptable: "TRUE", "true", "Y", "y", "YES", "yes", "FALSE"
643"false", "N", "n", "NO" or "no".
644
645int X509V3_get_value_int(CONF_VALUE *value, ASN1_INTEGER **aint);
646
647This accepts a decimal integer of arbitrary length and sets an ASN1_INTEGER.
648
649int X509V3_add_value(const char *name, const char *value,
650 STACK_OF(CONF_VALUE) **extlist);
651
652This simply adds a string name and value pair.
653
654int X509V3_add_value_uchar(const char *name, const unsigned char *value,
655 STACK_OF(CONF_VALUE) **extlist);
656
657The same as above but for an unsigned character value.
658
659int X509V3_add_value_bool(const char *name, int asn1_bool,
660 STACK_OF(CONF_VALUE) **extlist);
661
662This adds either "TRUE" or "FALSE" depending on the value of 'ans1_bool'
663
664int X509V3_add_value_bool_nf(char *name, int asn1_bool,
665 STACK_OF(CONF_VALUE) **extlist);
666
667This is the same as above except it adds nothing if asn1_bool is FALSE.
668
669int X509V3_add_value_int(const char *name, ASN1_INTEGER *aint,
670 STACK_OF(CONF_VALUE) **extlist);
671
672This function adds the value of the ASN1_INTEGER in decimal form.
673
6747. Other helper functions.
675
676<to be added>
677
678ADDING CUSTOM EXTENSIONS.
679
680Currently there are three types of supported extensions.
681
682String extensions are simple strings where the value is placed directly in the
683extensions, and the string returned is printed out.
684
685Multi value extensions are passed a STACK_OF(CONF_VALUE) name and value pairs
686or return a STACK_OF(CONF_VALUE).
687
688Raw extensions are just passed a BIO or a value and it is the extensions
689responsiblity to handle all the necessary printing.
690
691There are two ways to add an extension. One is simply as an alias to an already
692existing extension. An alias is an extension that is identical in ASN1 structure
693to an existing extension but has a different OBJECT IDENTIFIER. This can be
694done by calling:
695
696int X509V3_EXT_add_alias(int nid_to, int nid_from);
697
698'nid_to' is the new extension NID and 'nid_from' is the already existing
699extension NID.
700
701Alternatively an extension can be written from scratch. This involves writing
702the ASN1 code to encode and decode the extension and functions to print out and
703generate the extension from strings. The relevant functions are then placed in
704a X509V3_EXT_METHOD structure and int X509V3_EXT_add(X509V3_EXT_METHOD *ext);
705called.
706
707The X509V3_EXT_METHOD structure is described below.
708
709strut {
710int ext_nid;
711int ext_flags;
712X509V3_EXT_NEW ext_new;
713X509V3_EXT_FREE ext_free;
714X509V3_EXT_D2I d2i;
715X509V3_EXT_I2D i2d;
716X509V3_EXT_I2S i2s;
717X509V3_EXT_S2I s2i;
718X509V3_EXT_I2V i2v;
719X509V3_EXT_V2I v2i;
720X509V3_EXT_R2I r2i;
721X509V3_EXT_I2R i2r;
722
723void *usr_data;
724};
725
726The elements have the following meanings.
727
728ext_nid is the NID of the object identifier of the extension.
729
730ext_flags is set of flags. Currently the only external flag is
731 X509V3_EXT_MULTILINE which means a multi valued extensions
732 should be printed on separate lines.
733
734usr_data is an extension specific pointer to any relevant data. This
735 allows extensions to share identical code but have different
736 uses. An example of this is the bit string extension which uses
737 usr_data to contain a list of the bit names.
738
739All the remaining elements are function pointers.
740
741ext_new is a pointer to a function that allocates memory for the
742 extension ASN1 structure: for example ASN1_OBJECT_new().
743
744ext_free is a pointer to a function that free up memory of the extension
745 ASN1 structure: for example ASN1_OBJECT_free().
746
747d2i is the standard ASN1 function that converts a DER buffer into
748 the internal ASN1 structure: for example d2i_ASN1_IA5STRING().
749
750i2d is the standard ASN1 function that converts the internal
751 structure into the DER representation: for example
752 i2d_ASN1_IA5STRING().
753
754The remaining functions are depend on the type of extension. One i2X and
755one X2i should be set and the rest set to NULL. The types set do not need
756to match up, for example the extension could be set using the multi valued
757v2i function and printed out using the raw i2r.
758
759All functions have the X509V3_EXT_METHOD passed to them in the 'method'
760parameter and an X509V3_CTX structure. Extension code can then access the
761parent structure via the 'method' parameter to for example make use of the value
762of usr_data. If the code needs to use detail relating to the request it can
763use the 'ctx' parameter.
764
765A note should be given here about the 'flags' member of the 'ctx' parameter.
766If it has the value CTX_TEST then the configuration syntax is being checked
767and no actual certificate or CRL exists. Therefore any attempt in the config
768file to access such information should silently succeed. If the syntax is OK
769then it should simply return a (possibly bogus) extension, otherwise it
770should return NULL.
771
772char *i2s(struct v3_ext_method *method, void *ext);
773
774This function takes the internal structure in the ext parameter and returns
775a Malloc'ed string representing its value.
776
777void * s2i(struct v3_ext_method *method, struct v3_ext_ctx *ctx, char *str);
778
779This function takes the string representation in the ext parameter and returns
780an allocated internal structure: ext_free() will be used on this internal
781structure after use.
782
783i2v and v2i handle a STACK_OF(CONF_VALUE):
784
785typedef struct
786{
787 char *section;
788 char *name;
789 char *value;
790} CONF_VALUE;
791
792Only the name and value members are currently used.
793
794STACK_OF(CONF_VALUE) * i2v(struct v3_ext_method *method, void *ext);
795
796This function is passed the internal structure in the ext parameter and
797returns a STACK of CONF_VALUE structures. The values of name, value,
798section and the structure itself will be freed up with Free after use.
799Several helper functions are available to add values to this STACK.
800
801void * v2i(struct v3_ext_method *method, struct v3_ext_ctx *ctx,
802 STACK_OF(CONF_VALUE) *values);
803
804This function takes a STACK_OF(CONF_VALUE) structures and should set the
805values of the external structure. This typically uses the name element to
806determine which structure element to set and the value element to determine
807what to set it to. Several helper functions are available for this
808purpose (see above).
809
810int i2r(struct v3_ext_method *method, void *ext, BIO *out, int indent);
811
812This function is passed the internal extension structure in the ext parameter
813and sends out a human readable version of the extension to out. The 'indent'
814paremeter should be noted to determine the necessary amount of indentation
815needed on the output.
816
817void * r2i(struct v3_ext_method *method, struct v3_ext_ctx *ctx, char *str);
818
819This is just passed the string representation of the extension. It is intended
820to be used for more elaborate extensions where the standard single and multi
821valued options are insufficient. They can use the 'ctx' parameter to parse the
822configuration database themselves. See the context functions section for details
823of how to do this.
824
825Note: although this type takes the same parameters as the "r2s" function there
826is a subtle difference. Whereas an "r2i" function can access a configuration
827database an "s2i" function MUST NOT. This is so the internal code can safely
828assume that an "s2i" function will work without a configuration database.
829
830==============================================================================
831 PKCS#12 Library
832==============================================================================
833
834This section describes the internal PKCS#12 support. There are very few
835differences between the old external library and the new internal code at
836present. This may well change because the external library will not be updated
837much in future.
838
839This version now includes a couple of high level PKCS#12 functions which
840generally "do the right thing" and should make it much easier to handle PKCS#12
841structures.
842
843HIGH LEVEL FUNCTIONS.
844
845For most applications you only need concern yourself with the high level
846functions. They can parse and generate simple PKCS#12 files as produced by
847Netscape and MSIE or indeed any compliant PKCS#12 file containing a single
848private key and certificate pair.
849
8501. Initialisation and cleanup.
851
852No special initialisation is needed for the internal PKCS#12 library: the
853standard SSLeay_add_all_algorithms() is sufficient. If you do not wish to
854add all algorithms (you should at least add SHA1 though) then you can manually
855initialise the PKCS#12 library with:
856
857PKCS12_PBE_add();
858
859The memory allocated by the PKCS#12 library is freed up when EVP_cleanup() is
860called or it can be directly freed with:
861
862EVP_PBE_cleanup();
863
864after this call (or EVP_cleanup() ) no more PKCS#12 library functions should
865be called.
866
8672. I/O functions.
868
869i2d_PKCS12_bio(bp, p12)
870
871This writes out a PKCS12 structure to a BIO.
872
873i2d_PKCS12_fp(fp, p12)
874
875This is the same but for a FILE pointer.
876
877d2i_PKCS12_bio(bp, p12)
878
879This reads in a PKCS12 structure from a BIO.
880
881d2i_PKCS12_fp(fp, p12)
882
883This is the same but for a FILE pointer.
884
8853. Parsing and creation functions.
886
8873.1 Parsing with PKCS12_parse().
888
889int PKCS12_parse(PKCS12 *p12, char *pass, EVP_PKEY **pkey, X509 **cert,
890 STACK **ca);
891
892This function takes a PKCS12 structure and a password (ASCII, null terminated)
893and returns the private key, the corresponding certificate and any CA
894certificates. If any of these is not required it can be passed as a NULL.
895The 'ca' parameter should be either NULL, a pointer to NULL or a valid STACK
896structure. Typically to read in a PKCS#12 file you might do:
897
898p12 = d2i_PKCS12_fp(fp, NULL);
899PKCS12_parse(p12, password, &pkey, &cert, NULL); /* CAs not wanted */
900PKCS12_free(p12);
901
9023.2 PKCS#12 creation with PKCS12_create().
903
904PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509 *cert,
905 STACK *ca, int nid_key, int nid_cert, int iter,
906 int mac_iter, int keytype);
907
908This function will create a PKCS12 structure from a given password, name,
909private key, certificate and optional STACK of CA certificates. The remaining
9105 parameters can be set to 0 and sensible defaults will be used.
911
912The parameters nid_key and nid_cert are the key and certificate encryption
913algorithms, iter is the encryption iteration count, mac_iter is the MAC
914iteration count and keytype is the type of private key. If you really want
915to know what these last 5 parameters do then read the low level section.
916
917Typically to create a PKCS#12 file the following could be used:
918
919p12 = PKCS12_create(pass, "My Certificate", pkey, cert, NULL, 0,0,0,0,0);
920i2d_PKCS12_fp(fp, p12);
921PKCS12_free(p12);
922
923LOW LEVEL FUNCTIONS.
924
925In some cases the high level functions do not provide the necessary
926functionality. For example if you want to generate or parse more complex
927PKCS#12 files. The sample pkcs12 application uses the low level functions
928to display details about the internal structure of a PKCS#12 file.
929
930Introduction.
931
932This is a brief description of how a PKCS#12 file is represented internally:
933some knowledge of PKCS#12 is assumed.
934
935A PKCS#12 object contains several levels.
936
937At the lowest level is a PKCS12_SAFEBAG. This can contain a certificate, a
938CRL, a private key, encrypted or unencrypted, a set of safebags (so the
939structure can be nested) or other secrets (not documented at present).
940A safebag can optionally have attributes, currently these are: a unicode
941friendlyName (a Unicode string) or a localKeyID (a string of bytes).
942
943At the next level is an authSafe which is a set of safebags collected into
944a PKCS#7 ContentInfo. This can be just plain data, or encrypted itself.
945
946At the top level is the PKCS12 structure itself which contains a set of
947authSafes in an embedded PKCS#7 Contentinfo of type data. In addition it
948contains a MAC which is a kind of password protected digest to preserve
949integrity (so any unencrypted stuff below can't be tampered with).
950
951The reason for these levels is so various objects can be encrypted in various
952ways. For example you might want to encrypt a set of private keys with
953triple-DES and then include the related certificates either unencrypted or
954with lower encryption. Yes it's the dreaded crypto laws at work again which
955allow strong encryption on private keys and only weak encryption on other
956stuff.
957
958To build one of these things you turn all certificates and keys into safebags
959(with optional attributes). You collect the safebags into (one or more) STACKS
960and convert these into authsafes (encrypted or unencrypted). The authsafes
961are collected into a STACK and added to a PKCS12 structure. Finally a MAC
962inserted.
963
964Pulling one apart is basically the reverse process. The MAC is verified against
965the given password. The authsafes are extracted and each authsafe split into
966a set of safebags (possibly involving decryption). Finally the safebags are
967decomposed into the original keys and certificates and the attributes used to
968match up private key and certificate pairs.
969
970Anyway here are the functions that do the dirty work.
971
9721. Construction functions.
973
9741.1 Safebag functions.
975
976M_PKCS12_x5092certbag(x509)
977
978This macro takes an X509 structure and returns a certificate bag. The
979X509 structure can be freed up after calling this function.
980
981M_PKCS12_x509crl2certbag(crl)
982
983As above but for a CRL.
984
985PKCS8_PRIV_KEY_INFO *PKEY2PKCS8(EVP_PKEY *pkey)
986
987Take a private key and convert it into a PKCS#8 PrivateKeyInfo structure.
988Works for both RSA and DSA private keys. NB since the PKCS#8 PrivateKeyInfo
989structure contains a private key data in plain text form it should be free'd
990up as soon as it has been encrypted for security reasons (freeing up the
991structure zeros out the sensitive data). This can be done with
992PKCS8_PRIV_KEY_INFO_free().
993
994PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage)
995
996This sets the key type when a key is imported into MSIE or Outlook 98. Two
997values are currently supported: KEY_EX and KEY_SIG. KEY_EX is an exchange type
998key that can also be used for signing but its size is limited in the export
999versions of MS software to 512 bits, it is also the default. KEY_SIG is a
1000signing only key but the keysize is unlimited (well 16K is supposed to work).
1001If you are using the domestic version of MSIE then you can ignore this because
1002KEY_EX is not limited and can be used for both.
1003
1004PKCS12_SAFEBAG *PKCS12_MAKE_KEYBAG(PKCS8_PRIV_KEY_INFO *p8)
1005
1006Convert a PKCS8 private key structure into a keybag. This routine embeds the
1007p8 structure in the keybag so p8 should not be freed up or used after it is
1008called. The p8 structure will be freed up when the safebag is freed.
1009
1010PKCS12_SAFEBAG *PKCS12_MAKE_SHKEYBAG(int pbe_nid, unsigned char *pass, int passlen, unsigned char *salt, int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8)
1011
1012Convert a PKCS#8 structure into a shrouded key bag (encrypted). p8 is not
1013embedded and can be freed up after use.
1014
1015int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, int namelen)
1016int PKCS12_add_friendlyname(PKCS12_SAFEBAG *bag, unsigned char *name, int namelen)
1017
1018Add a local key id or a friendlyname to a safebag.
1019
10201.2 Authsafe functions.
1021
1022PKCS7 *PKCS12_pack_p7data(STACK *sk)
1023Take a stack of safebags and convert them into an unencrypted authsafe. The
1024stack of safebags can be freed up after calling this function.
1025
1026PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, unsigned char *pass, int passlen, unsigned char *salt, int saltlen, int iter, STACK *bags);
1027
1028As above but encrypted.
1029
10301.3 PKCS12 functions.
1031
1032PKCS12 *PKCS12_init(int mode)
1033
1034Initialise a PKCS12 structure (currently mode should be NID_pkcs7_data).
1035
1036M_PKCS12_pack_authsafes(p12, safes)
1037
1038This macro takes a STACK of authsafes and adds them to a PKCS#12 structure.
1039
1040int PKCS12_set_mac(PKCS12 *p12, unsigned char *pass, int passlen, unsigned char *salt, int saltlen, int iter, EVP_MD *md_type);
1041
1042Add a MAC to a PKCS12 structure. If EVP_MD is NULL use SHA-1, the spec suggests
1043that SHA-1 should be used.
1044
10452. Extraction Functions.
1046
10472.1 Safebags.
1048
1049M_PKCS12_bag_type(bag)
1050
1051Return the type of "bag". Returns one of the following
1052
1053NID_keyBag
1054NID_pkcs8ShroudedKeyBag 7
1055NID_certBag 8
1056NID_crlBag 9
1057NID_secretBag 10
1058NID_safeContentsBag 11
1059
1060M_PKCS12_cert_bag_type(bag)
1061
1062Returns type of certificate bag, following are understood.
1063
1064NID_x509Certificate 14
1065NID_sdsiCertificate 15
1066
1067M_PKCS12_crl_bag_type(bag)
1068
1069Returns crl bag type, currently only NID_crlBag is recognised.
1070
1071M_PKCS12_certbag2x509(bag)
1072
1073This macro extracts an X509 certificate from a certificate bag.
1074
1075M_PKCS12_certbag2x509crl(bag)
1076
1077As above but for a CRL.
1078
1079EVP_PKEY * PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8)
1080
1081Extract a private key from a PKCS8 private key info structure.
1082
1083M_PKCS12_decrypt_skey(bag, pass, passlen)
1084
1085Decrypt a shrouded key bag and return a PKCS8 private key info structure.
1086Works with both RSA and DSA keys
1087
1088char *PKCS12_get_friendlyname(bag)
1089
1090Returns the friendlyName of a bag if present or NULL if none. The returned
1091string is a null terminated ASCII string allocated with Malloc(). It should
1092thus be freed up with Free() after use.
1093
10942.2 AuthSafe functions.
1095
1096M_PKCS12_unpack_p7data(p7)
1097
1098Extract a STACK of safe bags from a PKCS#7 data ContentInfo.
1099
1100#define M_PKCS12_unpack_p7encdata(p7, pass, passlen)
1101
1102As above but for an encrypted content info.
1103
11042.3 PKCS12 functions.
1105
1106M_PKCS12_unpack_authsafes(p12)
1107
1108Extract a STACK of authsafes from a PKCS12 structure.
1109
1110M_PKCS12_mac_present(p12)
1111
1112Check to see if a MAC is present.
1113
1114int PKCS12_verify_mac(PKCS12 *p12, unsigned char *pass, int passlen)
1115
1116Verify a MAC on a PKCS12 structure. Returns an error if MAC not present.
1117
1118
1119Notes.
1120
11211. All the function return 0 or NULL on error.
11222. Encryption based functions take a common set of parameters. These are
1123described below.
1124
1125pass, passlen
1126ASCII password and length. The password on the MAC is called the "integrity
1127password" the encryption password is called the "privacy password" in the
1128PKCS#12 documentation. The passwords do not have to be the same. If -1 is
1129passed for the length it is worked out by the function itself (currently
1130this is sometimes done whatever is passed as the length but that may change).
1131
1132salt, saltlen
1133A 'salt' if salt is NULL a random salt is used. If saltlen is also zero a
1134default length is used.
1135
1136iter
1137Iteration count. This is a measure of how many times an internal function is
1138called to encrypt the data. The larger this value is the longer it takes, it
1139makes dictionary attacks on passwords harder. NOTE: Some implementations do
1140not support an iteration count on the MAC. If the password for the MAC and
1141encryption is the same then there is no point in having a high iteration
1142count for encryption if the MAC has no count. The MAC could be attacked
1143and the password used for the main decryption.
1144
1145pbe_nid
1146This is the NID of the password based encryption method used. The following are
1147supported.
1148NID_pbe_WithSHA1And128BitRC4
1149NID_pbe_WithSHA1And40BitRC4
1150NID_pbe_WithSHA1And3_Key_TripleDES_CBC
1151NID_pbe_WithSHA1And2_Key_TripleDES_CBC
1152NID_pbe_WithSHA1And128BitRC2_CBC
1153NID_pbe_WithSHA1And40BitRC2_CBC
1154
1155Which you use depends on the implementation you are exporting to. "Export
1156grade" (i.e. cryptographically challenged) products cannot support all
1157algorithms. Typically you may be able to use any encryption on shrouded key
1158bags but they must then be placed in an unencrypted authsafe. Other authsafes
1159may only support 40bit encryption. Of course if you are using SSLeay
1160throughout you can strongly encrypt everything and have high iteration counts
1161on everything.
1162
11633. For decryption routines only the password and length are needed.
1164
11654. Unlike the external version the nid's of objects are the values of the
1166constants: that is NID_certBag is the real nid, therefore there is no
1167PKCS12_obj_offset() function. Note the object constants are not the same as
1168those of the external version. If you use these constants then you will need
1169to recompile your code.
1170
11715. With the exception of PKCS12_MAKE_KEYBAG(), after calling any function or
1172macro of the form PKCS12_MAKE_SOMETHING(other) the "other" structure can be
1173reused or freed up safely.
1174
diff --git a/src/lib/libssl/src/doc/openssl_button.gif b/src/lib/libssl/src/doc/openssl_button.gif
new file mode 100644
index 0000000000..3d3c90c9f8
--- /dev/null
+++ b/src/lib/libssl/src/doc/openssl_button.gif
Binary files differ
diff --git a/src/lib/libssl/src/doc/openssl_button.html b/src/lib/libssl/src/doc/openssl_button.html
new file mode 100644
index 0000000000..44c91bd3d0
--- /dev/null
+++ b/src/lib/libssl/src/doc/openssl_button.html
@@ -0,0 +1,7 @@
1
2<!-- the `Includes OpenSSL Cryptogaphy Software' button -->
3<!-- freely usable by any application linked against OpenSSL -->
4<a href="http://www.openssl.org/">
5<img src="openssl_button.gif"
6 width=102 height=47 border=0></a>
7
diff --git a/src/lib/libssl/src/doc/rand.doc b/src/lib/libssl/src/doc/rand.doc
deleted file mode 100644
index da02a07f64..0000000000
--- a/src/lib/libssl/src/doc/rand.doc
+++ /dev/null
@@ -1,141 +0,0 @@
1My Random number library.
2
3These routines can be used to generate pseudo random numbers and can be
4used to 'seed' the pseudo random number generator (RNG). The RNG make no
5effort to reproduce the same random number stream with each execution.
6Various other routines in the SSLeay library 'seed' the RNG when suitable
7'random' input data is available. Read the section at the end for details
8on the design of the RNG.
9
10void RAND_bytes(
11unsigned char *buf,
12int num);
13 This routine puts 'num' random bytes into 'buf'. One should make
14 sure RAND_seed() has been called before using this routine.
15
16void RAND_seed(
17unsigned char *buf,
18int num);
19 This routine adds more 'seed' data the RNG state. 'num' bytes
20 are added to the RNG state, they are taken from 'buf'. This
21 routine can be called with sensitive data such as user entered
22 passwords. This sensitive data is in no way recoverable from
23 the RAND library routines or state. Try to pass as much data
24 from 'random' sources as possible into the RNG via this function.
25 Also strongly consider using the RAND_load_file() and
26 RAND_write_file() routines.
27
28void RAND_cleanup();
29 When a program has finished with the RAND library, if it so
30 desires, it can 'zero' all RNG state.
31
32The following 3 routines are convenience routines that can be used to
33'save' and 'restore' data from/to the RNG and it's state.
34Since the more 'random' data that is feed as seed data the better, why not
35keep it around between executions of the program? Of course the
36application should pass more 'random' data in via RAND_seed() and
37make sure no-one can read the 'random' data file.
38
39char *RAND_file_name(
40char *buf,
41int size);
42 This routine returns a 'default' name for the location of a 'rand'
43 file. The 'rand' file should keep a sequence of random bytes used
44 to initialise the RNG. The filename is put in 'buf'. Buf is 'size'
45 bytes long. Buf is returned if things go well, if they do not,
46 NULL is returned. The 'rand' file name is generated in the
47 following way. First, if there is a 'RANDFILE' environment
48 variable, it is returned. Second, if there is a 'HOME' environment
49 variable, $HOME/.rand is returned. Third, NULL is returned. NULL
50 is also returned if a buf would overflow.
51
52int RAND_load_file(
53char *file,
54long number);
55 This function 'adds' the 'file' into the RNG state. It does this by
56 doing a RAND_seed() on the value returned from a stat() system call
57 on the file and if 'number' is non-zero, upto 'number' bytes read
58 from the file. The number of bytes passed to RAND_seed() is returned.
59
60int RAND_write_file(
61char *file),
62 RAND_write_file() writes N random bytes to the file 'file', where
63 N is the size of the internal RND state (currently 1k).
64 This is a suitable method of saving RNG state for reloading via
65 RAND_load_file().
66
67What follows is a description of this RNG and a description of the rational
68behind it's design.
69
70It should be noted that this RNG is intended to be used to generate
71'random' keys for various ciphers including generation of DH and RSA keys.
72
73It should also be noted that I have just created a system that I am happy with.
74It may be overkill but that does not worry me. I have not spent that much
75time on this algorithm so if there are glaring errors, please let me know.
76Speed has not been a consideration in the design of these routines.
77
78First up I will state the things I believe I need for a good RNG.
791) A good hashing algorithm to mix things up and to convert the RNG 'state'
80 to random numbers.
812) An initial source of random 'state'.
823) The state should be very large. If the RNG is being used to generate
83 4096 bit RSA keys, 2 2048 bit random strings are required (at a minimum).
84 If your RNG state only has 128 bits, you are obviously limiting the
85 search space to 128 bits, not 2048. I'm probably getting a little
86 carried away on this last point but it does indicate that it may not be
87 a bad idea to keep quite a lot of RNG state. It should be easier to
88 break a cipher than guess the RNG seed data.
894) Any RNG seed data should influence all subsequent random numbers
90 generated. This implies that any random seed data entered will have
91 an influence on all subsequent random numbers generated.
925) When using data to seed the RNG state, the data used should not be
93 extractable from the RNG state. I believe this should be a
94 requirement because one possible source of 'secret' semi random
95 data would be a private key or a password. This data must
96 not be disclosed by either subsequent random numbers or a
97 'core' dump left by a program crash.
986) Given the same initial 'state', 2 systems should deviate in their RNG state
99 (and hence the random numbers generated) over time if at all possible.
1007) Given the random number output stream, it should not be possible to determine
101 the RNG state or the next random number.
102
103
104The algorithm is as follows.
105
106There is global state made up of a 1023 byte buffer (the 'state'), a
107working message digest ('md') and a counter ('count').
108
109Whenever seed data is added, it is inserted into the 'state' as
110follows.
111 The input is chopped up into units of 16 bytes (or less for
112 the last block). Each of these blocks is run through the MD5
113 message digest. The data passed to the MD5 digest is the
114 current 'md', the same number of bytes from the 'state'
115 (the location determined by in incremented looping index) as
116 the current 'block' and the new key data 'block'. The result
117 of this is kept in 'md' and also xored into the 'state' at the
118 same locations that were used as input into the MD5.
119 I believe this system addresses points 1 (MD5), 3 (the 'state'),
120 4 (via the 'md'), 5 (by the use of MD5 and xor).
121
122When bytes are extracted from the RNG, the following process is used.
123For each group of 8 bytes (or less), we do the following,
124 Input into MD5, the top 8 bytes from 'md', the byte that are
125 to be overwritten by the random bytes and bytes from the
126 'state' (incrementing looping index). From this digest output
127 (which is kept in 'md'), the top (upto) 8 bytes are
128 returned to the caller and the bottom (upto) 8 bytes are xored
129 into the 'state'.
130 Finally, after we have finished 'generation' random bytes for the
131 called, 'count' (which is incremented) and 'md' are fed into MD5 and
132 the results are kept in 'md'.
133 I believe the above addressed points 1 (use of MD5), 6 (by
134 hashing into the 'state' the 'old' data from the caller that
135 is about to be overwritten) and 7 (by not using the 8 bytes
136 given to the caller to update the 'state', but they are used
137 to update 'md').
138
139So of the points raised, only 2 is not addressed, but sources of
140random data will always be a problem.
141
diff --git a/src/lib/libssl/src/doc/rc2.doc b/src/lib/libssl/src/doc/rc2.doc
deleted file mode 100644
index efab015bd1..0000000000
--- a/src/lib/libssl/src/doc/rc2.doc
+++ /dev/null
@@ -1,165 +0,0 @@
1The RC2 library.
2
3RC2 is a block cipher that operates on 64bit (8 byte) quantities. It
4uses variable size key, but 128bit (16 byte) key would normally be considered
5good. It can be used in all the modes that DES can be used. This
6library implements the ecb, cbc, cfb64, ofb64 modes.
7
8I have implemented this library from an article posted to sci.crypt on
911-Feb-1996. I personally don't know how far to trust the RC2 cipher.
10While it is capable of having a key of any size, not much reseach has
11publically been done on it at this point in time (Apr-1996)
12since the cipher has only been public for a few months :-)
13It is of a similar speed to DES and IDEA, so unless it is required for
14meeting some standard (SSLv2, perhaps S/MIME), it would probably be advisable
15to stick to IDEA, or for the paranoid, Tripple DES.
16
17Mind you, having said all that, I should mention that I just read alot and
18implement ciphers, I'm a 'babe in the woods' when it comes to evaluating
19ciphers :-).
20
21For all calls that have an 'input' and 'output' variables, they can be the
22same.
23
24This library requires the inclusion of 'rc2.h'.
25
26All of the encryption functions take what is called an RC2_KEY as an
27argument. An RC2_KEY is an expanded form of the RC2 key.
28For all modes of the RC2 algorithm, the RC2_KEY used for
29decryption is the same one that was used for encryption.
30
31The define RC2_ENCRYPT is passed to specify encryption for the functions
32that require an encryption/decryption flag. RC2_DECRYPT is passed to
33specify decryption.
34
35Please note that any of the encryption modes specified in my DES library
36could be used with RC2. I have only implemented ecb, cbc, cfb64 and
37ofb64 for the following reasons.
38- ecb is the basic RC2 encryption.
39- cbc is the normal 'chaining' form for block ciphers.
40- cfb64 can be used to encrypt single characters, therefore input and output
41 do not need to be a multiple of 8.
42- ofb64 is similar to cfb64 but is more like a stream cipher, not as
43 secure (not cipher feedback) but it does not have an encrypt/decrypt mode.
44- If you want triple RC2, thats 384 bits of key and you must be totally
45 obsessed with security. Still, if you want it, it is simple enough to
46 copy the function from the DES library and change the des_encrypt to
47 RC2_encrypt; an exercise left for the paranoid reader :-).
48
49The functions are as follows:
50
51void RC2_set_key(
52RC2_KEY *ks;
53int len;
54unsigned char *key;
55int bits;
56 RC2_set_key converts an 'len' byte key into a RC2_KEY.
57 A 'ks' is an expanded form of the 'key' which is used to
58 perform actual encryption. It can be regenerated from the RC2 key
59 so it only needs to be kept when encryption or decryption is about
60 to occur. Don't save or pass around RC2_KEY's since they
61 are CPU architecture dependent, 'key's are not. RC2 is an
62 interesting cipher in that it can be used with a variable length
63 key. 'len' is the length of 'key' to be used as the key.
64 A 'len' of 16 is recomended. The 'bits' argument is an
65 interesting addition which I only found out about in Aug 96.
66 BSAFE uses this parameter to 'limit' the number of bits used
67 for the key. To use the 'key' unmodified, set bits to 1024.
68 This is what old versions of my RC2 library did (SSLeay 0.6.3).
69 RSAs BSAFE library sets this parameter to be 128 if 128 bit
70 keys are being used. So to be compatable with BSAFE, set it
71 to 128, if you don't want to reduce RC2's key length, leave it
72 at 1024.
73
74void RC2_encrypt(
75unsigned long *data,
76RC2_KEY *key,
77int encrypt);
78 This is the RC2 encryption function that gets called by just about
79 every other RC2 routine in the library. You should not use this
80 function except to implement 'modes' of RC2. I say this because the
81 functions that call this routine do the conversion from 'char *' to
82 long, and this needs to be done to make sure 'non-aligned' memory
83 access do not occur.
84 Data is a pointer to 2 unsigned long's and key is the
85 RC2_KEY to use. Encryption or decryption is indicated by 'encrypt'.
86 which can have the values RC2_ENCRYPT or RC2_DECRYPT.
87
88void RC2_ecb_encrypt(
89unsigned char *in,
90unsigned char *out,
91RC2_KEY *key,
92int encrypt);
93 This is the basic Electronic Code Book form of RC2 (in DES this
94 mode is called Electronic Code Book so I'm going to use the term
95 for rc2 as well.
96 Input is encrypted into output using the key represented by
97 key. Depending on the encrypt, encryption or
98 decryption occurs. Input is 8 bytes long and output is 8 bytes.
99
100void RC2_cbc_encrypt(
101unsigned char *in,
102unsigned char *out,
103long length,
104RC2_KEY *ks,
105unsigned char *ivec,
106int encrypt);
107 This routine implements RC2 in Cipher Block Chaining mode.
108 Input, which should be a multiple of 8 bytes is encrypted
109 (or decrypted) to output which will also be a multiple of 8 bytes.
110 The number of bytes is in length (and from what I've said above,
111 should be a multiple of 8). If length is not a multiple of 8, bad
112 things will probably happen. ivec is the initialisation vector.
113 This function updates iv after each call so that it can be passed to
114 the next call to RC2_cbc_encrypt().
115
116void RC2_cfb64_encrypt(
117unsigned char *in,
118unsigned char *out,
119long length,
120RC2_KEY *schedule,
121unsigned char *ivec,
122int *num,
123int encrypt);
124 This is one of the more useful functions in this RC2 library, it
125 implements CFB mode of RC2 with 64bit feedback.
126 This allows you to encrypt an arbitrary number of bytes,
127 you do not require 8 byte padding. Each call to this
128 routine will encrypt the input bytes to output and then update ivec
129 and num. Num contains 'how far' we are though ivec.
130 'Encrypt' is used to indicate encryption or decryption.
131 CFB64 mode operates by using the cipher to generate a stream
132 of bytes which is used to encrypt the plain text.
133 The cipher text is then encrypted to generate the next 64 bits to
134 be xored (incrementally) with the next 64 bits of plain
135 text. As can be seen from this, to encrypt or decrypt,
136 the same 'cipher stream' needs to be generated but the way the next
137 block of data is gathered for encryption is different for
138 encryption and decryption.
139
140void RC2_ofb64_encrypt(
141unsigned char *in,
142unsigned char *out,
143long length,
144RC2_KEY *schedule,
145unsigned char *ivec,
146int *num);
147 This functions implements OFB mode of RC2 with 64bit feedback.
148 This allows you to encrypt an arbitrary number of bytes,
149 you do not require 8 byte padding. Each call to this
150 routine will encrypt the input bytes to output and then update ivec
151 and num. Num contains 'how far' we are though ivec.
152 This is in effect a stream cipher, there is no encryption or
153 decryption mode.
154
155For reading passwords, I suggest using des_read_pw_string() from my DES library.
156To generate a password from a text string, I suggest using MD5 (or MD2) to
157produce a 16 byte message digest that can then be passed directly to
158RC2_set_key().
159
160=====
161For more information about the specific RC2 modes in this library
162(ecb, cbc, cfb and ofb), read the section entitled 'Modes of DES' from the
163documentation on my DES library. What is said about DES is directly
164applicable for RC2.
165
diff --git a/src/lib/libssl/src/doc/rc4.doc b/src/lib/libssl/src/doc/rc4.doc
deleted file mode 100644
index 4b2897eb74..0000000000
--- a/src/lib/libssl/src/doc/rc4.doc
+++ /dev/null
@@ -1,44 +0,0 @@
1The RC4 library.
2RC4 is a stream cipher that operates on a byte stream. It can be used with
3any length key but I would recommend normally using 16 bytes.
4
5This library requires the inclusion of 'rc4.h'.
6
7The RC4 encryption function takes what is called an RC4_KEY as an argument.
8The RC4_KEY is generated by the RC4_set_key function from the key bytes.
9
10RC4, being a stream cipher, does not have an encryption or decryption mode.
11It produces a stream of bytes that the input stream is xor'ed against and
12so decryption is just a case of 'encrypting' again with the same key.
13
14I have only put in one 'mode' for RC4 which is the normal one. This means
15there is no initialisation vector and there is no feedback of the cipher
16text into the cipher. This implies that you should not ever use the
17same key twice if you can help it. If you do, you leave yourself open to
18known plain text attacks; if you know the plain text and
19corresponding cipher text in one message, all messages that used the same
20key can have the cipher text decoded for the corresponding positions in the
21cipher stream.
22
23The main positive feature of RC4 is that it is a very fast cipher; about 4
24times faster that DES. This makes it ideally suited to protocols where the
25key is randomly chosen, like SSL.
26
27The functions are as follows:
28
29void RC4_set_key(
30RC4_KEY *key;
31int len;
32unsigned char *data);
33 This function initialises the RC4_KEY structure with the key passed
34 in 'data', which is 'len' bytes long. The key data can be any
35 length but 16 bytes seems to be a good number.
36
37void RC4(
38RC4_KEY *key;
39unsigned long len;
40unsigned char *in;
41unsigned char *out);
42 Do the actual RC4 encryption/decryption. Using the 'key', 'len'
43 bytes are transformed from 'in' to 'out'. As mentioned above,
44 decryption is the operation as encryption.
diff --git a/src/lib/libssl/src/doc/readme b/src/lib/libssl/src/doc/readme
deleted file mode 100644
index 824d4fd0e2..0000000000
--- a/src/lib/libssl/src/doc/readme
+++ /dev/null
@@ -1,6 +0,0 @@
1This is the old 0.6.6 docuementation. Most of the cipher stuff is still
2relevent but I'm working (very slowly) on new docuemtation.
3The current version can be found online at
4
5http://www.cryptsoft.com/ssleay/doc
6
diff --git a/src/lib/libssl/src/doc/ref.doc b/src/lib/libssl/src/doc/ref.doc
deleted file mode 100644
index 211559900d..0000000000
--- a/src/lib/libssl/src/doc/ref.doc
+++ /dev/null
@@ -1,48 +0,0 @@
1I have lots more references etc, and will update this list in the future,
230 Aug 1996 - eay
3
4
5SSL The SSL Protocol - from Netscapes.
6
7RC4 Newsgroups: sci.crypt
8 From: sterndark@netcom.com (David Sterndark)
9 Subject: RC4 Algorithm revealed.
10 Message-ID: <sternCvKL4B.Hyy@netcom.com>
11
12RC2 Newsgroups: sci.crypt
13 From: pgut01@cs.auckland.ac.nz (Peter Gutmann)
14 Subject: Specification for Ron Rivests Cipher No.2
15 Message-ID: <4fk39f$f70@net.auckland.ac.nz>
16
17MD2 RFC1319 The MD2 Message-Digest Algorithm
18MD5 RFC1321 The MD5 Message-Digest Algorithm
19
20X509 Certificates
21 RFC1421 Privacy Enhancement for Internet Electronic Mail: Part I
22 RFC1422 Privacy Enhancement for Internet Electronic Mail: Part II
23 RFC1423 Privacy Enhancement for Internet Electronic Mail: Part III
24 RFC1424 Privacy Enhancement for Internet Electronic Mail: Part IV
25
26RSA and various standard encoding
27 PKCS#1 RSA Encryption Standard
28 PKCS#5 Password-Based Encryption Standard
29 PKCS#7 Cryptographic Message Syntax Standard
30 A Layman's Guide to a Subset of ASN.1, BER, and DER
31 An Overview of the PKCS Standards
32 Some Examples of the PKCS Standards
33
34IDEA Chapter 3 The Block Cipher IDEA
35
36RSA, prime number generation and bignum algorithms
37 Introduction To Algorithms,
38 Thomas Cormen, Charles Leiserson, Ronald Rivest,
39 Section 29 Arithmetic Circuits
40 Section 33 Number-Theoretic Algorithms
41
42Fast Private Key algorithm
43 Fast Decipherment Algorithm for RSA Public-Key Cryptosystem
44 J.-J. Quisquater and C. Couvreur, Electronics Letters,
45 14th October 1982, Vol. 18 No. 21
46
47Prime number generation and bignum algorithms.
48 PGP-2.3a
diff --git a/src/lib/libssl/src/doc/req.1 b/src/lib/libssl/src/doc/req.1
deleted file mode 100644
index 684fda580e..0000000000
--- a/src/lib/libssl/src/doc/req.1
+++ /dev/null
@@ -1,137 +0,0 @@
1The 'req' command is used to manipulate and deal with pkcs#10
2certificate requests.
3
4It's default mode of operation is to load a certificate and then
5write it out again.
6
7By default the 'req' is read from stdin in 'PEM' format.
8The -inform option can be used to specify 'pem' format or 'der'
9format. PEM format is the base64 encoding of the DER format.
10
11By default 'req' then writes the request back out. -outform can be used
12to indicate the desired output format, be it 'pem' or 'der'.
13
14To specify an input file, use the '-in' option and the '-out' option
15can be used to specify the output file.
16
17If you wish to perform a command and not output the certificate
18request afterwards, use the '-noout' option.
19
20When a certificate is loaded, it can be printed in a human readable
21ascii format via the '-text' option.
22
23To check that the signature on a certificate request is correct, use
24the '-verify' option to make sure that the private key contained in the
25certificate request corresponds to the signature.
26
27Besides the default mode, there is also the 'generate a certificate
28request' mode. There are several flags that trigger this mode.
29
30-new will generate a new RSA key (if required) and then prompts
31the user for details for the certificate request.
32-newkey has an argument that is the number of bits to make the new
33key. This function also triggers '-new'.
34
35The '-new' option can have a key to use specified instead of having to
36load one, '-key' is used to specify the file containg the key.
37-keyform can be used to specify the format of the key. Only
38'pem' and 'der' formats are supported, later, 'netscape' format may be added.
39
40Finally there is the '-x509' options which makes req output a self
41signed x509 certificate instead of a certificate request.
42
43Now as you may have noticed, there are lots of default options that
44cannot be specified via the command line. They are held in a 'template'
45or 'configuration file'. The -config option specifies which configuration
46file to use. See conf.doc for details on the syntax of this file.
47
48The req command uses the 'req' section of the config file.
49
50---
51# The following variables are defined. For this example I will populate
52# the various values
53[ req ]
54default_bits = 512 # default number of bits to use.
55default_keyfile = testkey.pem # Where to write the generated keyfile
56 # if not specified.
57distinguished_name= req_dn # The section that contains the
58 # information about which 'object' we
59 # want to put in the DN.
60attributes = req_attr # The objects we want for the
61 # attributes field.
62encrypt_rsa_key = no # Should we encrypt newly generated
63 # keys. I strongly recommend 'yes'.
64
65# The distinguished name section. For the following entries, the
66# object names must exist in the SSLeay header file objects.h. If they
67# do not, they will be silently ignored. The entries have the following
68# format.
69# <object_name> => string to prompt with
70# <object_name>_default => default value for people
71# <object_name>_value => Automatically use this value for this field.
72# <object_name>_min => minimum number of characters for data (def. 0)
73# <object_name>_max => maximum number of characters for data (def. inf.)
74# All of these entries are optional except for the first one.
75[ req_dn ]
76countryName = Country Name (2 letter code)
77countryName_default = AU
78
79stateOrProvinceName = State or Province Name (full name)
80stateOrProvinceName_default = Queensland
81
82localityName = Locality Name (eg, city)
83
84organizationName = Organization Name (eg, company)
85organizationName_default = Mincom Pty Ltd
86
87organizationalUnitName = Organizational Unit Name (eg, section)
88organizationalUnitName_default = MTR
89
90commonName = Common Name (eg, YOUR name)
91commonName_max = 64
92
93emailAddress = Email Address
94emailAddress_max = 40
95
96# The next section is the attributes section. This is exactly the
97# same as for the previous section except that the resulting objects are
98# put in the attributes field.
99[ req_attr ]
100challengePassword = A challenge password
101challengePassword_min = 4
102challengePassword_max = 20
103
104unstructuredName = An optional company name
105
106----
107Also note that the order that attributes appear in this file is the
108order they will be put into the distinguished name.
109
110Once this request has been generated, it can be sent to a CA for
111certifying.
112
113----
114A few quick examples....
115
116To generate a new request and a new key
117req -new
118
119To generate a new request and a 1058 bit key
120req -newkey 1058
121
122To generate a new request using a pre-existing key
123req -new -key key.pem
124
125To generate a self signed x509 certificate from a certificate
126request using a supplied key, and we want to see the text form of the
127output certificate (which we will put in the file selfSign.pem
128req -x509 -in req.pem -key key.pem -text -out selfSign.pem
129
130Verify that the signature is correct on a certificate request.
131req -verify -in req.pem
132
133Verify that the signature was made using a specified public key.
134req -verify -in req.pem -key key.pem
135
136Print the contents of a certificate request
137req -text -in req.pem
diff --git a/src/lib/libssl/src/doc/rsa.doc b/src/lib/libssl/src/doc/rsa.doc
deleted file mode 100644
index f260452bc6..0000000000
--- a/src/lib/libssl/src/doc/rsa.doc
+++ /dev/null
@@ -1,135 +0,0 @@
1The RSA encryption and utility routines.
2
3The RSA routines are built on top of a big number library (the BN library).
4There are support routines in the X509 library for loading and manipulating
5the various objects in the RSA library. When errors are returned, read
6about the ERR library for how to access the error codes.
7
8All RSA encryption is done according to the PKCS-1 standard which is
9compatible with PEM and RSAref. This means that any values being encrypted
10must be less than the size of the modulus in bytes, minus 10, bytes long.
11
12This library uses RAND_bytes()() for it's random data, make sure to feed
13RAND_seed() with lots of interesting and varied data before using these
14routines.
15
16The RSA library has one specific data type, the RSA structure.
17It is composed of 8 BIGNUM variables (see the BN library for details) and
18can hold either a private RSA key or a public RSA key.
19Some RSA libraries have different structures for public and private keys, I
20don't. For my libraries, a public key is determined by the fact that the
21RSA->d value is NULL. These routines will operate on any size RSA keys.
22While I'm sure 4096 bit keys are very very secure, they take a lot longer
23to process that 1024 bit keys :-).
24
25The function in the RSA library are as follows.
26
27RSA *RSA_new();
28 This function creates a new RSA object. The sub-fields of the RSA
29 type are also malloced so you should always use this routine to
30 create RSA variables.
31
32void RSA_free(
33RSA *rsa);
34 This function 'frees' an RSA structure. This routine should always
35 be used to free the RSA structure since it will also 'free' any
36 sub-fields of the RSA type that need freeing.
37
38int RSA_size(
39RSA *rsa);
40 This function returns the size of the RSA modulus in bytes. Why do
41 I need this you may ask, well the reason is that when you encrypt
42 with RSA, the output string will be the size of the RSA modulus.
43 So the output for the RSA_encrypt and the input for the RSA_decrypt
44 routines need to be RSA_size() bytes long, because this is how many
45 bytes are expected.
46
47For the following 4 RSA encryption routines, it should be noted that
48RSA_private_decrypt() should be used on the output from
49RSA_public_encrypt() and RSA_public_decrypt() should be used on
50the output from RSA_private_encrypt().
51
52int RSA_public_encrypt(
53int from_len;
54unsigned char *from
55unsigned char *to
56RSA *rsa);
57 This function implements RSA public encryption, the rsa variable
58 should be a public key (but can be a private key). 'from_len'
59 bytes taken from 'from' and encrypted and put into 'to'. 'to' needs
60 to be at least RSA_size(rsa) bytes long. The number of bytes
61 written into 'to' is returned. -1 is returned on an error. The
62 operation performed is
63 to = from^rsa->e mod rsa->n.
64
65int RSA_private_encrypt(
66int from_len;
67unsigned char *from
68unsigned char *to
69RSA *rsa);
70 This function implements RSA private encryption, the rsa variable
71 should be a private key. 'from_len' bytes taken from
72 'from' and encrypted and put into 'to'. 'to' needs
73 to be at least RSA_size(rsa) bytes long. The number of bytes
74 written into 'to' is returned. -1 is returned on an error. The
75 operation performed is
76 to = from^rsa->d mod rsa->n.
77
78int RSA_public_decrypt(
79int from_len;
80unsigned char *from
81unsigned char *to
82RSA *rsa);
83 This function implements RSA public decryption, the rsa variable
84 should be a public key (but can be a private key). 'from_len'
85 bytes are taken from 'from' and decrypted. The decrypted data is
86 put into 'to'. The number of bytes encrypted is returned. -1 is
87 returned to indicate an error. The operation performed is
88 to = from^rsa->e mod rsa->n.
89
90int RSA_private_decrypt(
91int from_len;
92unsigned char *from
93unsigned char *to
94RSA *rsa);
95 This function implements RSA private decryption, the rsa variable
96 should be a private key. 'from_len' bytes are taken
97 from 'from' and decrypted. The decrypted data is
98 put into 'to'. The number of bytes encrypted is returned. -1 is
99 returned to indicate an error. The operation performed is
100 to = from^rsa->d mod rsa->n.
101
102int RSA_mod_exp(
103BIGNUM *n;
104BIGNUM *p;
105RSA *rsa);
106 Normally you will never use this routine.
107 This is really an internal function which is called by
108 RSA_private_encrypt() and RSA_private_decrypt(). It performs
109 n=n^p mod rsa->n except that it uses the 5 extra variables in the
110 RSA structure to make this more efficient.
111
112RSA *RSA_generate_key(
113int bits;
114unsigned long e;
115void (*callback)();
116char *cb_arg;
117 This routine is used to generate RSA private keys. It takes
118 quite a period of time to run and should only be used to
119 generate initial private keys that should then be stored
120 for later use. The passed callback function
121 will be called periodically so that feedback can be given
122 as to how this function is progressing.
123 'bits' is the length desired for the modulus, so it would be 1024
124 to generate a 1024 bit private key.
125 'e' is the value to use for the public exponent 'e'. Traditionally
126 it is set to either 3 or 0x10001.
127 The callback function (if not NULL) is called in the following
128 situations.
129 when we have generated a suspected prime number to test,
130 callback(0,num1++,cb_arg). When it passes a prime number test,
131 callback(1,num2++,cb_arg). When it is rejected as one of
132 the 2 primes required due to gcd(prime,e value) != 0,
133 callback(2,num3++,cb_arg). When finally accepted as one
134 of the 2 primes, callback(3,num4++,cb_arg).
135
diff --git a/src/lib/libssl/src/doc/rsaref.doc b/src/lib/libssl/src/doc/rsaref.doc
deleted file mode 100644
index 0505b76f76..0000000000
--- a/src/lib/libssl/src/doc/rsaref.doc
+++ /dev/null
@@ -1,35 +0,0 @@
1This package can be compiled to use the RSAref library.
2This library is not allowed outside of the USA but inside the USA it is
3claimed by RSA to be the only RSA public key library that can be used
4besides BSAFE..
5
6There are 2 files, rsaref/rsaref.c and rsaref/rsaref.h that contain the glue
7code to use RSAref. These files were written by looking at the PGP
8source code and seeing which routines it used to access RSAref.
9I have also been sent by some-one a copy of the RSAref header file that
10contains the library error codes.
11
12[ Jun 1996 update - I have recently gotten hold of RSAref 2.0 from
13 South Africa and have been doing some performace tests. ]
14
15They have now been tested against the recently announced RSAEURO
16library.
17
18There are 2 ways to use SSLeay and RSAref. First, to build so that
19the programs must be linked with RSAref, add '-DRSAref' to CFLAG in the top
20level makefile and -lrsaref (or where ever you are keeping RSAref) to
21EX_LIBS.
22
23To build a makefile via util/mk1mf.pl to do this, use the 'rsaref' option.
24
25The second method is to build as per normal and link applications with
26the RSAglue library. The correct library order would be
27cc -o cmd cmd.o -lssl -lRSAglue -lcrypto -lrsaref -ldes
28The RSAglue library is built in the rsa directory and is NOT
29automatically installed.
30
31Be warned that the RSAEURO library, that is claimed to be compatible
32with RSAref contains a different value for the maximum number of bits
33supported. This changes structure sizes and so if you are using
34RSAEURO, change the value of RSAref_MAX_BITS in rsa/rsaref.h
35
diff --git a/src/lib/libssl/src/doc/s_mult.doc b/src/lib/libssl/src/doc/s_mult.doc
deleted file mode 100644
index 726085bc57..0000000000
--- a/src/lib/libssl/src/doc/s_mult.doc
+++ /dev/null
@@ -1,17 +0,0 @@
1s_mult is a test program I hacked up on a Sunday for testing non-blocking
2IO. It has a select loop at it's centre that handles multiple readers
3and writers.
4
5Try the following command
6ssleay s_mult -echo -nbio -ssl -v
7echo - sends any sent text back to the sender
8nbio - turns on non-blocking IO
9ssl - accept SSL connections, default is normal text
10v - print lots
11 type Q<cr> to quit
12
13In another window, run the following
14ssleay s_client -pause </etc/termcap
15
16The pause option puts in a 1 second pause in each read(2)/write(2) call
17so the other end will have read()s fail.
diff --git a/src/lib/libssl/src/doc/session.doc b/src/lib/libssl/src/doc/session.doc
deleted file mode 100644
index ffccb0306e..0000000000
--- a/src/lib/libssl/src/doc/session.doc
+++ /dev/null
@@ -1,297 +0,0 @@
1I have just checked over and re-worked the session stuff.
2The following brief example will ignore all setup information to do with
3authentication.
4
5Things operate as follows.
6
7The SSL environment has a 'context', a SSL_CTX structure. This holds the
8cached SSL_SESSIONS (which can be reused) and the certificate lookup
9information. Each SSL structure needs to be associated with a SSL_CTX.
10Normally only one SSL_CTX structure is needed per program.
11
12SSL_CTX *SSL_CTX_new(void );
13void SSL_CTX_free(SSL_CTX *);
14These 2 functions create and destroy SSL_CTX structures
15
16The SSL_CTX has a session_cache_mode which is by default,
17in SSL_SESS_CACHE_SERVER mode. What this means is that the library
18will automatically add new session-id's to the cache apon sucsessful
19SSL_accept() calls.
20If SSL_SESS_CACHE_CLIENT is set, then client certificates are also added
21to the cache.
22SSL_set_session_cache_mode(ctx,mode) will set the 'mode' and
23SSL_get_session_cache_mode(ctx) will get the cache 'mode'.
24The modes can be
25SSL_SESS_CACHE_OFF - no caching
26SSL_SESS_CACHE_CLIENT - only SSL_connect()
27SSL_SESS_CACHE_SERVER - only SSL_accept()
28SSL_SESS_NO_CACHE_BOTH - Either SSL_accept() or SSL_connect().
29If SSL_SESS_CACHE_NO_AUTO_CLEAR is set, old timed out sessions are
30not automatically removed each 255, SSL_connect()s or SSL_accept()s.
31
32By default, apon every 255 successful SSL_connect() or SSL_accept()s,
33the cache is flush. Please note that this could be expensive on
34a heavily loaded SSL server, in which case, turn this off and
35clear the cache of old entries 'manually' (with one of the functions
36listed below) every few hours. Perhaps I should up this number, it is hard
37to say. Remember, the '255' new calls is just a mechanims to get called
38every now and then, in theory at most 255 new session-id's will have been
39added but if 100 are added every minute, you would still have
40500 in the cache before any would start being flushed (assuming a 3 minute
41timeout)..
42
43int SSL_CTX_sess_hits(SSL_CTX *ctx);
44int SSL_CTX_sess_misses(SSL_CTX *ctx);
45int SSL_CTX_sess_timeouts(SSL_CTX *ctx);
46These 3 functions return statistics about the SSL_CTX. These 3 are the
47number of session id reuses. hits is the number of reuses, misses are the
48number of lookups that failed, and timeouts is the number of cached
49entries ignored because they had timeouted.
50
51ctx->new_session_cb is a function pointer to a function of type
52int new_session_callback(SSL *ssl,SSL_SESSION *new);
53This function, if set in the SSL_CTX structure is called whenever a new
54SSL_SESSION is added to the cache. If the callback returns non-zero, it
55means that the application will have to do a SSL_SESSION_free()
56on the structure (this is
57to do with the cache keeping the reference counts correct, without the
58application needing to know about it.
59The 'active' parameter is the current SSL session for which this connection
60was created.
61
62void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx,int (*cb)());
63to set the callback,
64int (*cb)() SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)
65to get the callback.
66
67If the 'get session' callback is set, when a session id is looked up and
68it is not in the session-id cache, this callback is called. The callback is
69of the form
70SSL_SESSION *get_session_callback(unsigned char *sess_id,int sess_id_len,
71 int *copy);
72
73The get_session_callback is intended to return null if no session id is found.
74The reference count on the SSL_SESSION in incremented by the SSL library,
75if copy is 1. Otherwise, the reference count is not modified.
76
77void SSL_CTX_sess_set_get_cb(ctx,cb) sets the callback and
78int (*cb)()SSL_CTX_sess_get_get_cb(ctx) returns the callback.
79
80These callbacks are basically indended to be used by processes to
81send their session-id's to other processes. I currently have not implemented
82non-blocking semantics for these callbacks, it is upto the appication
83to make the callbacks effiecent if they require blocking (perhaps
84by 'saving' them and then 'posting them' when control returns from
85the SSL_accept().
86
87LHASH *SSL_CTX_sessions(SSL_CTX *ctx)
88This returns the session cache. The lhash strucutre can be accessed for
89statistics about the cache.
90
91void lh_stats(LHASH *lh, FILE *out);
92void lh_node_stats(LHASH *lh, FILE *out);
93void lh_node_usage_stats(LHASH *lh, FILE *out);
94
95can be used to print details about it's activity and current state.
96You can also delve directly into the lhash structure for 14 different
97counters that are kept against the structure. When I wrote the lhash library,
98I was interested in gathering statistics :-).
99Have a read of doc/lhash.doc in the SSLeay distribution area for more details
100on the lhash library.
101
102Now as mentioned ealier, when a SSL is created, it needs a SSL_CTX.
103SSL * SSL_new(SSL_CTX *);
104
105This stores a session. A session is secret information shared between 2
106SSL contexts. It will only be created if both ends of the connection have
107authenticated their peer to their satisfaction. It basically contains
108the information required to use a particular secret key cipher.
109
110To retrieve the SSL_CTX being used by a SSL,
111SSL_CTX *SSL_get_SSL_CTX(SSL *s);
112
113Now when a SSL session is established between to programs, the 'session'
114information that is cached in the SSL_CTX can me manipulated by the
115following functions.
116int SSL_set_session(SSL *s, SSL_SESSION *session);
117This will set the SSL_SESSION to use for the next SSL_connect(). If you use
118this function on an already 'open' established SSL connection, 'bad things
119will happen'. This function is meaning-less when used on a ssl strucutre
120that is just about to be used in a SSL_accept() call since the
121SSL_accept() will either create a new session or retrieve one from the
122cache.
123
124SSL_SESSION *SSL_get_session(SSL *s);
125This will return the SSL_SESSION for the current SSL, NULL if there is
126no session associated with the SSL structure.
127
128The SSL sessions are kept in the SSL_CTX in a hash table, to remove a
129session
130void SSL_CTX_remove_session(SSL_CTX *,SSL_SESSION *c);
131and to add one
132int SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c);
133SSL_CTX_add_session() returns 1 if the session was already in the cache (so it
134was not added).
135Whenever a new session is created via SSL_connect()/SSL_accept(),
136they are automatically added to the cache, depending on the session_cache_mode
137settings. SSL_set_session()
138does not add it to the cache. Just call SSL_CTX_add_session() if you do want the
139session added. For a 'client' this would not normally be the case.
140SSL_CTX_add_session() is not normally ever used, except for doing 'evil' things
141which the next 2 funtions help you do.
142
143int i2d_SSL_SESSION(SSL_SESSION *in,unsigned char **pp);
144SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a,unsigned char **pp,long length);
145These 2 functions are in the standard ASN1 library form and can be used to
146load and save to a byte format, the SSL_SESSION structure.
147With these functions, you can save and read these structures to a files or
148arbitary byte string.
149The PEM_write_SSL_SESSION(fp,x) and PEM_read_SSL_SESSION(fp,x,cb) will
150write to a file pointer in base64 encoding.
151
152What you can do with this, is pass session information between separate
153processes. Please note, that you will probably also need to modify the
154timeout information on the SSL_SESSIONs.
155
156long SSL_get_time(SSL_SESSION *s)
157will return the 'time' that the session
158was loaded. The timeout is relative to this time. This information is
159saved when the SSL_SESSION is converted to binarary but it is stored
160in as a unix long, which is rather OS dependant, but easy to convert back.
161
162long SSL_set_time(SSL_SESSION *s,long t) will set the above mentioned time.
163The time value is just the value returned from time(3), and should really
164be defined by be to be time_t.
165
166long SSL_get_timeout(SSL_SESSION *s);
167long SSL_set_timeout(SSL_SESSION *s,long t);
168These 2 retrieve and set the timeout which is just a number of secconds
169from the 'SSL_get_time()' value. When this time period has elapesed,
170the session will no longer be in the cache (well it will actually be removed
171the next time it is attempted to be retrieved, so you could 'bump'
172the timeout so it remains valid).
173The 'time' and 'timeout' are set on a session when it is created, not reset
174each time it is reused. If you did wish to 'bump it', just after establishing
175a connection, do a
176SSL_set_time(ssl,time(NULL));
177
178You can also use
179SSL_CTX_set_timeout(SSL_CTX *ctx,unsigned long t) and
180SSL_CTX_get_timeout(SSL_CTX *ctx) to manipulate the default timeouts for
181all SSL connections created against a SSL_CTX. If you set a timeout in
182an SSL_CTX, all new SSL's created will inherit the timeout. It can be over
183written by the SSL_set_timeout(SSL *s,unsigned long t) function call.
184If you 'set' the timeout back to 0, the system default will be used.
185
186SSL_SESSION *SSL_SESSION_new();
187void SSL_SESSION_free(SSL_SESSION *ses);
188These 2 functions are used to create and dispose of SSL_SESSION functions.
189You should not ever normally need to use them unless you are using
190i2d_SSL_SESSION() and/or d2i_SSL_SESSION(). If you 'load' a SSL_SESSION
191via d2i_SSL_SESSION(), you will need to SSL_SESSION_free() it.
192Both SSL_set_session() and SSL_CTX_add_session() will 'take copies' of the
193structure (via reference counts) when it is passed to them.
194
195SSL_CTX_flush_sessions(ctx,time);
196The first function will clear all sessions from the cache, which have expired
197relative to 'time' (which could just be time(NULL)).
198
199SSL_CTX_flush_sessions(ctx,0);
200This is a special case that clears everything.
201
202As a final comment, a 'session' is not enough to establish a new
203connection. If a session has timed out, a certificate and private key
204need to have been associated with the SSL structure.
205SSL_copy_session_id(SSL *to,SSL *from); will copy not only the session
206strucutre but also the private key and certificate associated with
207'from'.
208
209EXAMPLES.
210
211So lets play at being a wierd SSL server.
212
213/* setup a context */
214ctx=SSL_CTX_new();
215
216/* Lets load some session from binary into the cache, why one would do
217 * this is not toally clear, but passing between programs does make sense
218 * Perhaps you are using 4096 bit keys and are happy to keep them
219 * valid for a week, to avoid the RSA overhead of 15 seconds, I'm not toally
220 * sure, perhaps this is a process called from an SSL inetd and this is being
221 * passed to the application. */
222session=d2i_SSL_SESSION(....)
223SSL_CTX_add_session(ctx,session);
224
225/* Lets even add a session from a file */
226session=PEM_read_SSL_SESSION(....)
227SSL_CTX_add_session(ctx,session);
228
229/* create a new SSL structure */
230ssl=SSL_new(ctx);
231
232/* At this point we want to be able to 'create' new session if
233 * required, so we need a certificate and RSAkey. */
234SSL_use_RSAPrivateKey_file(ssl,...)
235SSL_use_certificate_file(ssl,...)
236
237/* Now since we are a server, it make little sence to load a session against
238 * the ssl strucutre since a SSL_accept() will either create a new session or
239 * grab an existing one from the cache. */
240
241/* grab a socket descriptor */
242fd=accept(...);
243
244/* associated it with the ssl strucutre */
245SSL_set_fd(ssl,fd);
246
247SSL_accept(ssl); /* 'do' SSL using out cert and RSA key */
248
249/* Lets print out the session details or lets save it to a file,
250 * perhaps with a secret key cipher, so that we can pass it to the FBI
251 * when they want to decode the session :-). While we have RSA
252 * this does not matter much but when I do SSLv3, this will allow a mechanism
253 * for the server/client to record the information needed to decode
254 * the traffic that went over the wire, even when using Diffie-Hellman */
255PEM_write_SSL_SESSION(SSL_get_session(ssl),stdout,....)
256
257Lets 'connect' back to the caller using the same session id.
258
259ssl2=SSL_new(ctx);
260fd2=connect(them);
261SSL_set_fd(ssl2,fd2);
262SSL_set_session(ssl2,SSL_get_session(ssl));
263SSL_connect(ssl2);
264
265/* what the hell, lets accept no more connections using this session */
266SSL_CTX_remove_session(SSL_get_SSL_CTX(ssl),SSL_get_session(ssl));
267
268/* we could have just as easily used ssl2 since they both are using the
269 * same session.
270 * You will note that both ssl and ssl2 are still using the session, and
271 * the SSL_SESSION structure will be free()ed when both ssl and ssl2
272 * finish using the session. Also note that you could continue to initiate
273 * connections using this session by doing SSL_get_session(ssl) to get the
274 * existing session, but SSL_accept() will not be able to find it to
275 * use for incoming connections.
276 * Of corse, the session will timeout at the far end and it will no
277 * longer be accepted after a while. The time and timeout are ignored except
278 * by SSL_accept(). */
279
280/* Since we have had our server running for 10 weeks, and memory is getting
281 * short, perhaps we should clear the session cache to remove those
282 * 100000 session entries that have expired. Some may consider this
283 * a memory leak :-) */
284
285SSL_CTX_flush_sessions(ctx,time(NULL));
286
287/* Ok, after a bit more time we wish to flush all sessions from the cache
288 * so that all new connections will be authenticated and incure the
289 * public key operation overhead */
290
291SSL_CTX_flush_sessions(ctx,0);
292
293/* As a final note, to copy everything to do with a SSL, use */
294SSL_copy_session_id(SSL *to,SSL *from);
295/* as this also copies the certificate and RSA key so new session can
296 * be established using the same details */
297
diff --git a/src/lib/libssl/src/doc/sha.doc b/src/lib/libssl/src/doc/sha.doc
deleted file mode 100644
index 895fa182ed..0000000000
--- a/src/lib/libssl/src/doc/sha.doc
+++ /dev/null
@@ -1,52 +0,0 @@
1The SHA (Secure Hash Algorithm) library.
2SHA is a message digest algorithm that can be used to condense an arbitrary
3length message down to a 20 byte hash. The functions all need to be passed
4a SHA_CTX which is used to hold the SHA context during multiple SHA_Update()
5function calls. The normal method of use for this library is as follows
6This library contains both SHA and SHA-1 digest algorithms. SHA-1 is
7an update to SHA (which should really be called SHA-0 now) which
8tweaks the algorithm slightly. The SHA-1 algorithm is used by simply
9using SHA1_Init(), SHA1_Update(), SHA1_Final() and SHA1() instead of the
10SHA*() calls
11
12SHA_Init(...);
13SHA_Update(...);
14...
15SHA_Update(...);
16SHA_Final(...);
17
18This library requires the inclusion of 'sha.h'.
19
20The functions are as follows:
21
22void SHA_Init(
23SHA_CTX *c);
24 This function needs to be called to initiate a SHA_CTX structure for
25 use.
26
27void SHA_Update(
28SHA_CTX *c;
29unsigned char *data;
30unsigned long len);
31 This updates the message digest context being generated with 'len'
32 bytes from the 'data' pointer. The number of bytes can be any
33 length.
34
35void SHA_Final(
36unsigned char *md;
37SHA_CTX *c;
38 This function is called when a message digest of the data digested
39 with SHA_Update() is wanted. The message digest is put in the 'md'
40 array and is SHA_DIGEST_LENGTH (20) bytes long.
41
42unsigned char *SHA(
43unsigned char *d;
44unsigned long n;
45unsigned char *md;
46 This function performs a SHA_Init(), followed by a SHA_Update()
47 followed by a SHA_Final() (using a local SHA_CTX).
48 The resulting digest is put into 'md' if it is not NULL.
49 Regardless of the value of 'md', the message
50 digest is returned from the function. If 'md' was NULL, the message
51 digest returned is being stored in a static structure.
52
diff --git a/src/lib/libssl/src/doc/speed.doc b/src/lib/libssl/src/doc/speed.doc
deleted file mode 100644
index 11dfa85f08..0000000000
--- a/src/lib/libssl/src/doc/speed.doc
+++ /dev/null
@@ -1,96 +0,0 @@
1To get an idea of the performance of this library, use
2ssleay speed
3
4perl util/sp-diff.pl file1 file2
5
6will print out the relative differences between the 2 files which are
7expected to be the output from the speed program.
8
9The performace of the library is very dependant on the Compiler
10quality and various flags used to build.
11
12---
13
14These are some numbers I did comparing RSAref and SSLeay on a Pentium 100.
15[ These numbers are all out of date, as of SSL - 0.6.1 the RSA
16operations are about 2 times faster, so check the version number ]
17
18RSA performance.
19
20SSLeay 0.6.0
21Pentium 100, 32meg, Windows NT Workstation 3.51
22linux - gcc v 2.7.0 -O3 -fomit-frame-pointer -m486
23and
24Windows NT - Windows NT 3.51 - Visual C++ 4.1 - 586 code + 32bit assember
25Windows 3.1 - Windows NT 3.51 - Visual C++ 1.52c - 286 code + 32bit assember
26NT Dos Shell- Windows NT 3.51 - Visual C++ 1.52c - 286 code + 16bit assember
27
28Times are how long it takes to do an RSA private key operation.
29
30 512bits 1024bits
31-------------------------------
32SSLeay NT dll 0.042s 0.202s see above
33SSLeay linux 0.046s 0.218s Assember inner loops (normal build)
34SSLeay linux 0.067s 0.380s Pure C code with BN_LLONG defined
35SSLeay W3.1 dll 0.108s 0.478s see above
36SSLeay linux 0.109s 0.713s C without BN_LLONG.
37RSAref2.0 linux 0.149s 0.936s
38SSLeay MS-DOS 0.197s 1.049s see above
39
40486DX66, 32meg, Windows NT Server 3.51
41 512bits 1024bits
42-------------------------------
43SSLeay NT dll 0.084s 0.495s <- SSLeay 0.6.3
44SSLeay NT dll 0.154s 0.882s
45SSLeay W3.1 dll 0.335s 1.538s
46SSLeay MS-DOS 0.490s 2.790s
47
48What I find cute is that I'm still faster than RSAref when using standard C,
49without using the 'long long' data type :-), %35 faster for 512bit and we
50scale up to 3.2 times faster for the 'default linux' build. I should mention
51that people should 'try' to use either x86-lnx.s (elf), x86-lnxa.s or
52x86-sol.s for any x86 based unix they are building on. The only problems
53with be with syntax but the performance gain is quite large, especially for
54servers. The code is very simple, you just need to modify the 'header'.
55
56The message is, if you are stuck using RSAref, the RSA performance will be
57bad. Considering the code was compiled for a pentium, the 486DX66 number
58would indicate 'Use RSAref and turn you Pentium 100 into a 486DX66' :-).
59[ As of verson 0.6.1, it would be correct to say 'turn you pentium 100
60 into a 486DX33' :-) ]
61
62I won't tell people if the DLL's are using RSAref or my stuff if no-one
63asks :-).
64
65eric
66
67PS while I know I could speed things up further, I will probably not do
68 so due to the effort involved. I did do some timings on the
69 SSLeay bignum format -> RSAref number format conversion that occurs
70 each time RSAref is used by SSLeay, and the numbers are trivial.
71 0.00012s a call for 512bit vs 0.149s for the time spent in the function.
72 0.00018s for 1024bit vs 0.938s. Insignificant.
73 So the 'way to go', to support faster RSA libraries, if people are keen,
74 is to write 'glue' code in a similar way that I do for RSAref and send it
75 to me :-).
76 My base library still has the advantage of being able to operate on
77 any size numbers, and is not that far from the performance from the
78 leaders in the field. (-%30?)
79 [ Well as of 0.6.1 I am now the leader in the filed on x86 (we at
80 least very close :-) ]
81
82 I suppose I should also mention some other numbers RSAref numbers, again
83 on my Pentium.
84 DES CBC EDE-DES MD5
85 RSAref linux 830k/s 302k/s 4390k/s
86 SSLeay linux 855k/s 319k/s 10025k/s
87 SSLeay NT 1158k/s 410k/s 10470k/s
88 SSLeay w31 378k/s 143k/s 2383k/s (fully 16bit)
89
90 Got to admit that Visual C++ 4.[01] is a damn fine compiler :-)
91--
92Eric Young | BOOL is tri-state according to Bill Gates.
93AARNet: eay@cryptsoft.com | RTFM Win32 GetMessage().
94
95
96
diff --git a/src/lib/libssl/src/doc/ssl-ciph.doc b/src/lib/libssl/src/doc/ssl-ciph.doc
deleted file mode 100644
index 33a7e41f0e..0000000000
--- a/src/lib/libssl/src/doc/ssl-ciph.doc
+++ /dev/null
@@ -1,84 +0,0 @@
1This is a quick high level summery of how things work now.
2
3Each SSLv2 and SSLv3 cipher is composed of 4 major attributes plus a few extra
4minor ones.
5
6They are 'The key exchange algorithm', which is RSA for SSLv2 but can also
7be Diffle-Hellman for SSLv3.
8
9An 'Authenticion algorithm', which can be RSA, Diffle-Helman, DSS or
10none.
11
12The cipher
13
14The MAC digest.
15
16A cipher can also be an export cipher and is either an SSLv2 or a
17SSLv3 ciphers.
18
19To specify which ciphers to use, one can either specify all the ciphers,
20one at a time, or use 'aliases' to specify the preference and order for
21the ciphers.
22
23There are a large number of aliases, but the most importaint are
24kRSA, kDHr, kDHd and kEDH for key exchange types.
25
26aRSA, aDSS, aNULL and aDH for authentication
27DES, 3DES, RC4, RC2, IDEA and eNULL for ciphers
28MD5, SHA0 and SHA1 digests
29
30Now where this becomes interesting is that these can be put together to
31specify the order and ciphers you wish to use.
32
33To speed this up there are also aliases for certian groups of ciphers.
34The main ones are
35SSLv2 - all SSLv2 ciphers
36SSLv3 - all SSLv3 ciphers
37EXP - all export ciphers
38LOW - all low strngth ciphers (no export ciphers, normally single DES)
39MEDIUM - 128 bit encryption
40HIGH - Triple DES
41
42These aliases can be joined in a : separated list which specifies to
43add ciphers, move them to the current location and delete them.
44
45A simpler way to look at all of this is to use the 'ssleay ciphers -v' command.
46The default library cipher spec is
47!ADH:RC4+RSA:HIGH:MEDIUM:LOW:EXP:+SSLv2:+EXP
48which means, first, remove from consideration any ciphers that do not
49authenticate. Next up, use ciphers using RC4 and RSA. Next include the HIGH,
50MEDIUM and the LOW security ciphers. Finish up by adding all the export
51ciphers on the end, then 'pull' all the SSLv2 and export ciphers to
52the end of the list.
53
54The results are
55$ ssleay ciphers -v '!ADH:RC4+RSA:HIGH:MEDIUM:LOW:EXP:+SSLv2:+EXP'
56
57RC4-SHA SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1
58RC4-MD5 SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5
59EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1
60EDH-DSS-DES-CBC3-SHA SSLv3 Kx=DH Au=DSS Enc=3DES(168) Mac=SHA1
61DES-CBC3-SHA SSLv3 Kx=RSA Au=RSA Enc=3DES(168) Mac=SHA1
62IDEA-CBC-MD5 SSLv3 Kx=RSA Au=RSA Enc=IDEA(128) Mac=SHA1
63EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH Au=RSA Enc=DES(56) Mac=SHA1
64EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH Au=DSS Enc=DES(56) Mac=SHA1
65DES-CBC-SHA SSLv3 Kx=RSA Au=RSA Enc=DES(56) Mac=SHA1
66DES-CBC3-MD5 SSLv2 Kx=RSA Au=RSA Enc=3DES(168) Mac=MD5
67DES-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=DES(56) Mac=MD5
68IDEA-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=IDEA(128) Mac=MD5
69RC2-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC2(128) Mac=MD5
70RC4-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5
71EXP-EDH-RSA-DES-CBC SSLv3 Kx=DH(512) Au=RSA Enc=DES(40) Mac=SHA1 export
72EXP-EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH(512) Au=DSS Enc=DES(40) Mac=SHA1 export
73EXP-DES-CBC-SHA SSLv3 Kx=RSA(512) Au=RSA Enc=DES(40) Mac=SHA1 export
74EXP-RC2-CBC-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export
75EXP-RC4-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
76EXP-RC2-CBC-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export
77EXP-RC4-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
78
79I would recoment people use the 'ssleay ciphers -v "text"'
80command to check what they are going to use.
81
82Anyway, I'm falling asleep here so I'll do some more tomorrow.
83
84eric
diff --git a/src/lib/libssl/src/doc/ssl.doc b/src/lib/libssl/src/doc/ssl.doc
deleted file mode 100644
index 1f89cd5db2..0000000000
--- a/src/lib/libssl/src/doc/ssl.doc
+++ /dev/null
@@ -1,172 +0,0 @@
1SSL_CTX_sessions(SSL_CTX *ctx) - the session-id hash table.
2
3/* Session-id cache stats */
4SSL_CTX_sess_number
5SSL_CTX_sess_connect
6SSL_CTX_sess_connect_good
7SSL_CTX_sess_accept
8SSL_CTX_sess_accept_good
9SSL_CTX_sess_hits
10SSL_CTX_sess_cb_hits
11SSL_CTX_sess_misses
12SSL_CTX_sess_timeouts
13
14/* Session-id application notification callbacks */
15SSL_CTX_sess_set_new_cb
16SSL_CTX_sess_get_new_cb
17SSL_CTX_sess_set_get_cb
18SSL_CTX_sess_get_get_cb
19
20/* Session-id cache operation mode */
21SSL_CTX_set_session_cache_mode
22SSL_CTX_get_session_cache_mode
23
24/* Set default timeout values to use. */
25SSL_CTX_set_timeout
26SSL_CTX_get_timeout
27
28/* Global SSL initalisation informational callback */
29SSL_CTX_set_info_callback
30SSL_CTX_get_info_callback
31SSL_set_info_callback
32SSL_get_info_callback
33
34/* If the SSL_accept/SSL_connect returned with -1, these indicate when
35 * we should re-call *.
36SSL_want
37SSL_want_nothing
38SSL_want_read
39SSL_want_write
40SSL_want_x509_lookup
41
42/* Where we are in SSL initalisation, used in non-blocking, perhaps
43 * have a look at ssl/bio_ssl.c */
44SSL_state
45SSL_is_init_finished
46SSL_in_init
47SSL_in_connect_init
48SSL_in_accept_init
49
50/* Used to set the 'inital' state so SSL_in_connect_init and SSL_in_accept_init
51 * can be used to work out which function to call. */
52SSL_set_connect_state
53SSL_set_accept_state
54
55/* Where to look for certificates for authentication */
56SSL_set_default_verify_paths /* calles SSL_load_verify_locations */
57SSL_load_verify_locations
58
59/* get info from an established connection */
60SSL_get_session
61SSL_get_certificate
62SSL_get_SSL_CTX
63
64SSL_CTX_new
65SSL_CTX_free
66SSL_new
67SSL_clear
68SSL_free
69
70SSL_CTX_set_cipher_list
71SSL_get_cipher
72SSL_set_cipher_list
73SSL_get_cipher_list
74SSL_get_shared_ciphers
75
76SSL_accept
77SSL_connect
78SSL_read
79SSL_write
80
81SSL_debug
82
83SSL_get_read_ahead
84SSL_set_read_ahead
85SSL_set_verify
86
87SSL_pending
88
89SSL_set_fd
90SSL_set_rfd
91SSL_set_wfd
92SSL_set_bio
93SSL_get_fd
94SSL_get_rbio
95SSL_get_wbio
96
97SSL_use_RSAPrivateKey
98SSL_use_RSAPrivateKey_ASN1
99SSL_use_RSAPrivateKey_file
100SSL_use_PrivateKey
101SSL_use_PrivateKey_ASN1
102SSL_use_PrivateKey_file
103SSL_use_certificate
104SSL_use_certificate_ASN1
105SSL_use_certificate_file
106
107ERR_load_SSL_strings
108SSL_load_error_strings
109
110/* human readable version of the 'state' of the SSL connection. */
111SSL_state_string
112SSL_state_string_long
113/* These 2 report what kind of IO operation the library was trying to
114 * perform last. Probably not very usefull. */
115SSL_rstate_string
116SSL_rstate_string_long
117
118SSL_get_peer_certificate
119
120SSL_SESSION_new
121SSL_SESSION_print_fp
122SSL_SESSION_print
123SSL_SESSION_free
124i2d_SSL_SESSION
125d2i_SSL_SESSION
126
127SSL_get_time
128SSL_set_time
129SSL_get_timeout
130SSL_set_timeout
131SSL_copy_session_id
132SSL_set_session
133SSL_CTX_add_session
134SSL_CTX_remove_session
135SSL_CTX_flush_sessions
136
137BIO_f_ssl
138
139/* used to hold information as to why a certificate verification failed */
140SSL_set_verify_result
141SSL_get_verify_result
142
143/* can be used by the application to associate data with an SSL structure.
144 * It needs to be 'free()ed' by the application */
145SSL_set_app_data
146SSL_get_app_data
147
148/* The following all set values that are kept in the SSL_CTX but
149 * are used as the default values when an SSL session is created.
150 * They are over writen by the relevent SSL_xxxx functions */
151
152/* SSL_set_verify */
153void SSL_CTX_set_default_verify
154
155/* This callback, if set, totaly overrides the normal SSLeay verification
156 * functions and should return 1 on sucesss and 0 on failure */
157void SSL_CTX_set_cert_verify_callback
158
159/* The following are the same as the equivilent SSL_xxx functions.
160 * Only one copy of this information is kept and if a particular
161 * SSL structure has a local override, it is totally separate structure.
162 */
163int SSL_CTX_use_RSAPrivateKey
164int SSL_CTX_use_RSAPrivateKey_ASN1
165int SSL_CTX_use_RSAPrivateKey_file
166int SSL_CTX_use_PrivateKey
167int SSL_CTX_use_PrivateKey_ASN1
168int SSL_CTX_use_PrivateKey_file
169int SSL_CTX_use_certificate
170int SSL_CTX_use_certificate_ASN1
171int SSL_CTX_use_certificate_file
172
diff --git a/src/lib/libssl/src/doc/ssl.pod b/src/lib/libssl/src/doc/ssl.pod
new file mode 100644
index 0000000000..46ee443f57
--- /dev/null
+++ b/src/lib/libssl/src/doc/ssl.pod
@@ -0,0 +1,633 @@
1
2=pod
3
4=head1 NAME
5
6SSL - OpenSSL SSL/TLS library
7
8=head1 SYNOPSIS
9
10=head1 DESCRIPTION
11
12The OpenSSL B<ssl> library implements the Secure Sockets Layer (SSL v2/v3) and
13Transport Layer Security (TLS v1) protocols. It provides a rich API which is
14documented here.
15
16=head1 HEADER FILES
17
18Currently the OpenSSL B<ssl> library provides the following C header files
19containing the prototypes for the data structures and and functions:
20
21=over 4
22
23=item B<ssl.h>
24
25That's the common header file for the SSL/TLS API. Include it into your
26program to make the API of the B<ssl> library available. It internally
27includes both more private SSL headers and headers from the B<crypto> library.
28Whenever you need hard-core details on the internals of the SSL API, look
29inside this header file.
30
31=item B<ssl2.h>
32
33That's the sub header file dealing with the SSLv2 protocol only.
34I<Usually you don't have to include it explicitly because
35it's already included by ssl.h>.
36
37=item B<ssl3.h>
38
39That's the sub header file dealing with the SSLv3 protocol only.
40I<Usually you don't have to include it explicitly because
41it's already included by ssl.h>.
42
43=item B<ssl23.h>
44
45That's the sub header file dealing with the combined use of the SSLv2 and
46SSLv3 protocols.
47I<Usually you don't have to include it explicitly because
48it's already included by ssl.h>.
49
50=item B<tls1.h>
51
52That's the sub header file dealing with the TLSv1 protocol only.
53I<Usually you don't have to include it explicitly because
54it's already included by ssl.h>.
55
56=back
57
58=head1 DATA STRUCTURES
59
60Currently the OpenSSL B<ssl> library functions deals with the following data
61structures:
62
63=over 4
64
65=item B<SSL_METHOD> (SSL Method)
66
67That's a dispatch structure describing the internal B<ssl> library
68methods/functions which implement the various protocol versions (SSLv1, SSLv2
69and TLSv1). It's needed to create an B<SSL_CTX>.
70
71=item B<SSL_CIPHER> (SSL Cipher)
72
73This structure holds the algorithm information for a particular cipher which
74are a core part of the SSL/TLS protocol. The available ciphers are configured
75on a B<SSL_CTX> basis and the actually used ones are then part of the
76B<SSL_SESSION>.
77
78=item B<SSL_CTX> (SSL Context)
79
80That's the global context structure which is created by a server or client
81once per program life-time and which holds mainly default values for the
82B<SSL> structures which are later created for the connections.
83
84=item B<SSL_SESSION> (SSL Session)
85
86This is a structure containing the current SSL session details for a
87connection: B<SSL_CIPHER>s, client and server certificates, keys, etc.
88
89=item B<SSL> (SSL Connection)
90
91That's the main SSL/TLS structure which is created by a server or client per
92established connection. This actually is the core structure in the SSL API.
93Under run-time the application usually deals with this structure which has
94links to mostly all other structures.
95
96=back
97
98=head1 API FUNCTIONS
99
100Currently the OpenSSL B<ssl> library exports 214 API functions.
101They are documented in the following:
102
103=head2 DEALING WITH PROTOCOL METHODS
104
105Here we document the various API functions which deal with the SSL/TLS
106protocol methods defined in B<SSL_METHOD> structures.
107
108=over 4
109
110=item SSL_METHOD *B<SSLv2_client_method>(void);
111
112Constructor for the SSLv2 SSL_METHOD structure for a dedicated client.
113
114=item SSL_METHOD *B<SSLv2_server_method>(void);
115
116Constructor for the SSLv2 SSL_METHOD structure for a dedicated server.
117
118=item SSL_METHOD *B<SSLv2_method>(void);
119
120Constructor for the SSLv2 SSL_METHOD structure for combined client and server.
121
122=item SSL_METHOD *B<SSLv3_client_method>(void);
123
124Constructor for the SSLv3 SSL_METHOD structure for a dedicated client.
125
126=item SSL_METHOD *B<SSLv3_server_method>(void);
127
128Constructor for the SSLv3 SSL_METHOD structure for a dedicated server.
129
130=item SSL_METHOD *B<SSLv3_method>(void);
131
132Constructor for the SSLv3 SSL_METHOD structure for combined client and server.
133
134=item SSL_METHOD *B<TLSv1_client_method>(void);
135
136Constructor for the TLSv1 SSL_METHOD structure for a dedicated client.
137
138=item SSL_METHOD *B<TLSv1_server_method>(void);
139
140Constructor for the TLSv1 SSL_METHOD structure for a dedicated server.
141
142=item SSL_METHOD *B<TLSv1_method>(void);
143
144Constructor for the TLSv1 SSL_METHOD structure for combined client and server.
145
146=back
147
148=head2 DEALING WITH CIPHERS
149
150Here we document the various API functions which deal with the SSL/TLS
151ciphers defined in B<SSL_CIPHER> structures.
152
153=over 4
154
155=item char *B<SSL_CIPHER_description>(SSL_CIPHER *cipher, char *buf, int len);
156
157Write a string to I<buf> (with a maximum size of I<len>) containing a human
158readable description of I<cipher>. Returns I<buf>.
159
160=item int B<SSL_CIPHER_get_bits>(SSL_CIPHER *cipher, int *alg_bits);
161
162Determine the number of bits in I<cipher>. Because of export crippled ciphers
163there are two bits: The bits the algorithm supports in general (stored to
164I<alg_bits>) and the bits which are actually used (the return value).
165
166=item char *B<SSL_CIPHER_get_name>(SSL_CIPHER *cipher);
167
168Return the internal name of I<cipher> as a string. These are the various
169strings defined by the I<SSL2_TXT_xxx>, I<SSL3_TXT_xxx> and I<TLS1_TXT_xxx>
170definitions in the header files.
171
172=item char *B<SSL_CIPHER_get_version>(SSL_CIPHER *cipher);
173
174Returns a string like "C<TLSv1/SSLv3>" or "C<SSLv2>" which indicates the
175SSL/TLS protocol version to which I<cipher> belongs (i.e. where it was defined
176in the specification the first time).
177
178=back
179
180=head2 DEALING WITH PROTOCOL CONTEXTS
181
182Here we document the various API functions which deal with the SSL/TLS
183protocol context defined in the B<SSL_CTX> structure.
184
185=over 4
186
187=item int B<SSL_CTX_add_client_CA>(SSL_CTX *ctx, X509 *x);
188
189=item long B<SSL_CTX_add_extra_chain_cert>(SSL_CTX *ctx, X509 *x509);
190
191=item int B<SSL_CTX_add_session>(SSL_CTX *ctx, SSL_SESSION *c);
192
193=item int B<SSL_CTX_check_private_key>(SSL_CTX *ctx);
194
195=item long B<SSL_CTX_ctrl>(SSL_CTX *ctx, int cmd, long larg, char *parg);
196
197=item void B<SSL_CTX_flush_sessions>(SSL_CTX *s, long t);
198
199=item void B<SSL_CTX_free>(SSL_CTX *a);
200
201=item char *B<SSL_CTX_get_app_data>(SSL_CTX *ctx);
202
203=item X509_STORE *B<SSL_CTX_get_cert_store>(SSL_CTX *ctx);
204
205=item STACK *B<SSL_CTX_get_client_CA_list>(SSL_CTX *ctx);
206
207=item int (*B<SSL_CTX_get_client_cert_cb>(SSL_CTX *ctx))(SSL *ssl, X509 **x509, EVP_PKEY **pkey);
208
209=item char *B<SSL_CTX_get_ex_data>(SSL_CTX *s, int idx);
210
211=item int B<SSL_CTX_get_ex_new_index>(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))
212
213=item void (*B<SSL_CTX_get_info_callback>(SSL_CTX *ctx))(SSL *ssl, int cb, int ret);
214
215=item int B<SSL_CTX_get_quiet_shutdown>(SSL_CTX *ctx);
216
217=item int B<SSL_CTX_get_session_cache_mode>(SSL_CTX *ctx);
218
219=item long B<SSL_CTX_get_timeout>(SSL_CTX *ctx);
220
221=item int (*B<SSL_CTX_get_verify_callback>(SSL_CTX *ctx))(int ok, X509_STORE_CTX *ctx);
222
223=item int B<SSL_CTX_get_verify_mode>(SSL_CTX *ctx);
224
225=item int B<SSL_CTX_load_verify_locations>(SSL_CTX *ctx, char *CAfile, char *CApath);
226
227=item long B<SSL_CTX_need_tmp_RSA>(SSL_CTX *ctx);
228
229=item SSL_CTX *B<SSL_CTX_new>(SSL_METHOD *meth);
230
231=item int B<SSL_CTX_remove_session>(SSL_CTX *ctx, SSL_SESSION *c);
232
233=item int B<SSL_CTX_sess_accept>(SSL_CTX *ctx);
234
235=item int B<SSL_CTX_sess_accept_good>(SSL_CTX *ctx);
236
237=item int B<SSL_CTX_sess_accept_renegotiate>(SSL_CTX *ctx);
238
239=item int B<SSL_CTX_sess_cache_full>(SSL_CTX *ctx);
240
241=item int B<SSL_CTX_sess_cb_hits>(SSL_CTX *ctx);
242
243=item int B<SSL_CTX_sess_connect>(SSL_CTX *ctx);
244
245=item int B<SSL_CTX_sess_connect_good>(SSL_CTX *ctx);
246
247=item int B<SSL_CTX_sess_connect_renegotiate>(SSL_CTX *ctx);
248
249=item int B<SSL_CTX_sess_get_cache_size>(SSL_CTX *ctx);
250
251=item SSL_SESSION *(*B<SSL_CTX_sess_get_get_cb>(SSL_CTX *ctx))(SSL *ssl, unsigned char *data, int len, int *copy);
252
253=item int (*B<SSL_CTX_sess_get_new_cb>(SSL_CTX *ctx)(SSL *ssl, SSL_SESSION *sess);
254
255=item void (*B<SSL_CTX_sess_get_remove_cb>(SSL_CTX *ctx)(SSL_CTX *ctx, SSL_SESSION *sess);
256
257=item int B<SSL_CTX_sess_hits>(SSL_CTX *ctx);
258
259=item int B<SSL_CTX_sess_misses>(SSL_CTX *ctx);
260
261=item int B<SSL_CTX_sess_number>(SSL_CTX *ctx);
262
263=item void B<SSL_CTX_sess_set_cache_size>(SSL_CTX *ctx,t);
264
265=item void B<SSL_CTX_sess_set_get_cb>(SSL_CTX *ctx, SSL_SESSION *(*cb)(SSL *ssl, unsigned char *data, int len, int *copy));
266
267=item void B<SSL_CTX_sess_set_new_cb>(SSL_CTX *ctx, int (*cb)(SSL *ssl, SSL_SESSION *sess));
268
269=item void B<SSL_CTX_sess_set_remove_cb>(SSL_CTX *ctx, void (*cb)(SSL_CTX *ctx, SSL_SESSION *sess));
270
271=item int B<SSL_CTX_sess_timeouts>(SSL_CTX *ctx);
272
273=item LHASH *B<SSL_CTX_sessions>(SSL_CTX *ctx);
274
275=item void B<SSL_CTX_set_app_data>(SSL_CTX *ctx, void *arg);
276
277=item void B<SSL_CTX_set_cert_store>(SSL_CTX *ctx, X509_STORE *cs);
278
279=item void B<SSL_CTX_set_cert_verify_cb>(SSL_CTX *ctx, int (*cb)(SSL_CTX *), char *arg)
280
281=item int B<SSL_CTX_set_cipher_list>(SSL_CTX *ctx, char *str);
282
283=item void B<SSL_CTX_set_client_CA_list>(SSL_CTX *ctx, STACK *list);
284
285=item void B<SSL_CTX_set_client_cert_cb>(SSL_CTX *ctx, int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey));
286
287=item void B<SSL_CTX_set_default_passwd_cb>(SSL_CTX *ctx, int (*cb);(void))
288
289=item void B<SSL_CTX_set_default_read_ahead>(SSL_CTX *ctx, int m);
290
291=item int B<SSL_CTX_set_default_verify_paths>(SSL_CTX *ctx);
292
293=item int B<SSL_CTX_set_ex_data>(SSL_CTX *s, int idx, char *arg);
294
295=item void B<SSL_CTX_set_info_callback>(SSL_CTX *ctx, void (*cb)(SSL *ssl, int cb, int ret));
296
297=item void B<SSL_CTX_set_options>(SSL_CTX *ctx, unsigned long op);
298
299=item void B<SSL_CTX_set_quiet_shutdown>(SSL_CTX *ctx, int mode);
300
301=item void B<SSL_CTX_set_session_cache_mode>(SSL_CTX *ctx, int mode);
302
303=item int B<SSL_CTX_set_ssl_version>(SSL_CTX *ctx, SSL_METHOD *meth);
304
305=item void B<SSL_CTX_set_timeout>(SSL_CTX *ctx, long t);
306
307=item long B<SSL_CTX_set_tmp_dh>(SSL_CTX* ctx, DH *dh);
308
309=item long B<SSL_CTX_set_tmp_dh_callback>(SSL_CTX *ctx, DH *(*cb)(void));
310
311=item long B<SSL_CTX_set_tmp_rsa>(SSL_CTX *ctx, RSA *rsa);
312
313=item SSL_CTX_set_tmp_rsa_callback
314
315C<long B<SSL_CTX_set_tmp_rsa_callback>(SSL_CTX *B<ctx>, RSA *(*B<cb>)(SSL *B<ssl>, int B<export>, int B<keylength>));>
316
317Sets the callback which will be called when a temporary private key is
318required. The B<C<export>> flag will be set if the reason for needing
319a temp key is that an export ciphersuite is in use, in which case,
320B<C<keylength>> will contain the required keylength in bits. Generate a key of
321appropriate size (using ???) and return it.
322
323=item SSL_set_tmp_rsa_callback
324
325long B<SSL_set_tmp_rsa_callback>(SSL *ssl, RSA *(*cb)(SSL *ssl, int export, int keylength));
326
327The same as L<"SSL_CTX_set_tmp_rsa_callback">, except it operates on an SSL
328session instead of a context.
329
330=item void B<SSL_CTX_set_verify>(SSL_CTX *ctx, int mode, int (*cb);(void))
331
332=item int B<SSL_CTX_use_PrivateKey>(SSL_CTX *ctx, EVP_PKEY *pkey);
333
334=item int B<SSL_CTX_use_PrivateKey_ASN1>(int type, SSL_CTX *ctx, unsigned char *d, long len);
335
336=item int B<SSL_CTX_use_PrivateKey_file>(SSL_CTX *ctx, char *file, int type);
337
338=item int B<SSL_CTX_use_RSAPrivateKey>(SSL_CTX *ctx, RSA *rsa);
339
340=item int B<SSL_CTX_use_RSAPrivateKey_ASN1>(SSL_CTX *ctx, unsigned char *d, long len);
341
342=item int B<SSL_CTX_use_RSAPrivateKey_file>(SSL_CTX *ctx, char *file, int type);
343
344=item int B<SSL_CTX_use_certificate>(SSL_CTX *ctx, X509 *x);
345
346=item int B<SSL_CTX_use_certificate_ASN1>(SSL_CTX *ctx, int len, unsigned char *d);
347
348=item int B<SSL_CTX_use_certificate_file>(SSL_CTX *ctx, char *file, int type);
349
350=back
351
352=head2 DEALING WITH SESSIONS
353
354Here we document the various API functions which deal with the SSL/TLS
355sessions defined in the B<SSL_SESSION> structures.
356
357=over 4
358
359=item int B<SSL_SESSION_cmp>(SSL_SESSION *a, SSL_SESSION *b);
360
361=item void B<SSL_SESSION_free>(SSL_SESSION *ss);
362
363=item char *B<SSL_SESSION_get_app_data>(SSL_SESSION *s);
364
365=item char *B<SSL_SESSION_get_ex_data>(SSL_SESSION *s, int idx);
366
367=item int B<SSL_SESSION_get_ex_new_index>(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))
368
369=item long B<SSL_SESSION_get_time>(SSL_SESSION *s);
370
371=item long B<SSL_SESSION_get_timeout>(SSL_SESSION *s);
372
373=item unsigned long B<SSL_SESSION_hash>(SSL_SESSION *a);
374
375=item SSL_SESSION *B<SSL_SESSION_new>(void);
376
377=item int B<SSL_SESSION_print>(BIO *bp, SSL_SESSION *x);
378
379=item int B<SSL_SESSION_print_fp>(FILE *fp, SSL_SESSION *x);
380
381=item void B<SSL_SESSION_set_app_data>(SSL_SESSION *s, char *a);
382
383=item int B<SSL_SESSION_set_ex_data>(SSL_SESSION *s, int idx, char *arg);
384
385=item long B<SSL_SESSION_set_time>(SSL_SESSION *s, long t);
386
387=item long B<SSL_SESSION_set_timeout>(SSL_SESSION *s, long t);
388
389=back
390
391=head2 DEALING WITH CONNECTIONS
392
393Here we document the various API functions which deal with the SSL/TLS
394connection defined in the B<SSL> structure.
395
396=over 4
397
398=item int B<SSL_accept>(SSL *ssl);
399
400=item int B<SSL_add_dir_cert_subjects_to_stack>(STACK *stack, const char *dir);
401
402=item int B<SSL_add_file_cert_subjects_to_stack>(STACK *stack, const char *file);
403
404=item int B<SSL_add_client_CA>(SSL *ssl, X509 *x);
405
406=item char *B<SSL_alert_desc_string>(int value);
407
408=item char *B<SSL_alert_desc_string_long>(int value);
409
410=item char *B<SSL_alert_type_string>(int value);
411
412=item char *B<SSL_alert_type_string_long>(int value);
413
414=item int B<SSL_check_private_key>(SSL *ssl);
415
416=item void B<SSL_clear>(SSL *ssl);
417
418=item long B<SSL_clear_num_renegotiations>(SSL *ssl);
419
420=item int B<SSL_connect>(SSL *ssl);
421
422=item void B<SSL_copy_session_id>(SSL *t, SSL *f);
423
424=item long B<SSL_ctrl>(SSL *ssl, int cmd, long larg, char *parg);
425
426=item int B<SSL_do_handshake>(SSL *ssl);
427
428=item SSL *B<SSL_dup>(SSL *ssl);
429
430=item STACK *B<SSL_dup_CA_list>(STACK *sk);
431
432=item void B<SSL_free>(SSL *ssl);
433
434=item SSL_CTX *B<SSL_get_SSL_CTX>(SSL *ssl);
435
436=item char *B<SSL_get_app_data>(SSL *ssl);
437
438=item X509 *B<SSL_get_certificate>(SSL *ssl);
439
440=item SSL_CIPHER *B<SSL_get_cipher>(SSL *ssl);
441
442=item int B<SSL_get_cipher_bits>(SSL *ssl, int *alg_bits);
443
444=item char *B<SSL_get_cipher_list>(SSL *ssl, int n);
445
446=item char *B<SSL_get_cipher_name>(SSL *ssl);
447
448=item char *B<SSL_get_cipher_version>(SSL *ssl);
449
450=item STACK *B<SSL_get_ciphers>(SSL *ssl);
451
452=item STACK *B<SSL_get_client_CA_list>(SSL *ssl);
453
454=item SSL_CIPHER *B<SSL_get_current_cipher>(SSL *ssl);
455
456=item long B<SSL_get_default_timeout>(SSL *ssl);
457
458=item int B<SSL_get_error>(SSL *ssl, int i);
459
460=item char *B<SSL_get_ex_data>(SSL *ssl, int idx);
461
462=item int B<SSL_get_ex_data_X509_STORE_CTX_idx>(void);
463
464=item int B<SSL_get_ex_new_index>(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))
465
466=item int B<SSL_get_fd>(SSL *ssl);
467
468=item void (*B<SSL_get_info_callback>(SSL *ssl);)(void)
469
470=item STACK *B<SSL_get_peer_cert_chain>(SSL *ssl);
471
472=item X509 *B<SSL_get_peer_certificate>(SSL *ssl);
473
474=item EVP_PKEY *B<SSL_get_privatekey>(SSL *ssl);
475
476=item int B<SSL_get_quiet_shutdown>(SSL *ssl);
477
478=item BIO *B<SSL_get_rbio>(SSL *ssl);
479
480=item int B<SSL_get_read_ahead>(SSL *ssl);
481
482=item SSL_SESSION *B<SSL_get_session>(SSL *ssl);
483
484=item char *B<SSL_get_shared_ciphers>(SSL *ssl, char *buf, int len);
485
486=item int B<SSL_get_shutdown>(SSL *ssl);
487
488=item SSL_METHOD *B<SSL_get_ssl_method>(SSL *ssl);
489
490=item int B<SSL_get_state>(SSL *ssl);
491
492=item long B<SSL_get_time>(SSL *ssl);
493
494=item long B<SSL_get_timeout>(SSL *ssl);
495
496=item int (*B<SSL_get_verify_callback>(SSL *ssl);)(void)
497
498=item int B<SSL_get_verify_mode>(SSL *ssl);
499
500=item long B<SSL_get_verify_result>(SSL *ssl);
501
502=item char *B<SSL_get_version>(SSL *ssl);
503
504=item BIO *B<SSL_get_wbio>(SSL *ssl);
505
506=item int B<SSL_in_accept_init>(SSL *ssl);
507
508=item int B<SSL_in_before>(SSL *ssl);
509
510=item int B<SSL_in_connect_init>(SSL *ssl);
511
512=item int B<SSL_in_init>(SSL *ssl);
513
514=item int B<SSL_is_init_finished>(SSL *ssl);
515
516=item STACK *B<SSL_load_client_CA_file>(char *file);
517
518=item void B<SSL_load_error_strings>(void);
519
520=item SSL *B<SSL_new>(SSL_CTX *ctx);
521
522=item long B<SSL_num_renegotiations>(SSL *ssl);
523
524=item int B<SSL_peek>(SSL *ssl, char *buf, int num);
525
526=item int B<SSL_pending>(SSL *ssl);
527
528=item int B<SSL_read>(SSL *ssl, char *buf, int num);
529
530=item int B<SSL_renegotiate>(SSL *ssl);
531
532=item char *B<SSL_rstate_string>(SSL *ssl);
533
534=item char *B<SSL_rstate_string_long>(SSL *ssl);
535
536=item long B<SSL_session_reused>(SSL *ssl);
537
538=item void B<SSL_set_accept_state>(SSL *ssl);
539
540=item void B<SSL_set_app_data>(SSL *ssl, char *arg);
541
542=item void B<SSL_set_bio>(SSL *ssl, BIO *rbio, BIO *wbio);
543
544=item int B<SSL_set_cipher_list>(SSL *ssl, char *str);
545
546=item void B<SSL_set_client_CA_list>(SSL *ssl, STACK *list);
547
548=item void B<SSL_set_connect_state>(SSL *ssl);
549
550=item int B<SSL_set_ex_data>(SSL *ssl, int idx, char *arg);
551
552=item int B<SSL_set_fd>(SSL *ssl, int fd);
553
554=item void B<SSL_set_info_callback>(SSL *ssl, void (*cb);(void))
555
556=item void B<SSL_set_options>(SSL *ssl, unsigned long op);
557
558=item void B<SSL_set_quiet_shutdown>(SSL *ssl, int mode);
559
560=item void B<SSL_set_read_ahead>(SSL *ssl, int yes);
561
562=item int B<SSL_set_rfd>(SSL *ssl, int fd);
563
564=item int B<SSL_set_session>(SSL *ssl, SSL_SESSION *session);
565
566=item void B<SSL_set_shutdown>(SSL *ssl, int mode);
567
568=item int B<SSL_set_ssl_method>(SSL *ssl, SSL_METHOD *meth);
569
570=item void B<SSL_set_time>(SSL *ssl, long t);
571
572=item void B<SSL_set_timeout>(SSL *ssl, long t);
573
574=item void B<SSL_set_verify>(SSL *ssl, int mode, int (*callback);(void))
575
576=item void B<SSL_set_verify_result>(SSL *ssl, long arg);
577
578=item int B<SSL_set_wfd>(SSL *ssl, int fd);
579
580=item int B<SSL_shutdown>(SSL *ssl);
581
582=item int B<SSL_state>(SSL *ssl);
583
584=item char *B<SSL_state_string>(SSL *ssl);
585
586=item char *B<SSL_state_string_long>(SSL *ssl);
587
588=item long B<SSL_total_renegotiations>(SSL *ssl);
589
590=item int B<SSL_use_PrivateKey>(SSL *ssl, EVP_PKEY *pkey);
591
592=item int B<SSL_use_PrivateKey_ASN1>(int type, SSL *ssl, unsigned char *d, long len);
593
594=item int B<SSL_use_PrivateKey_file>(SSL *ssl, char *file, int type);
595
596=item int B<SSL_use_RSAPrivateKey>(SSL *ssl, RSA *rsa);
597
598=item int B<SSL_use_RSAPrivateKey_ASN1>(SSL *ssl, unsigned char *d, long len);
599
600=item int B<SSL_use_RSAPrivateKey_file>(SSL *ssl, char *file, int type);
601
602=item int B<SSL_use_certificate>(SSL *ssl, X509 *x);
603
604=item int B<SSL_use_certificate_ASN1>(SSL *ssl, int len, unsigned char *d);
605
606=item int B<SSL_use_certificate_file>(SSL *ssl, char *file, int type);
607
608=item int B<SSL_version>(SSL *ssl);
609
610=item int B<SSL_want>(SSL *ssl);
611
612=item int B<SSL_want_nothing>(SSL *ssl);
613
614=item int B<SSL_want_read>(SSL *ssl);
615
616=item int B<SSL_want_write>(SSL *ssl);
617
618=item int B<SSL_want_x509_lookup>(s);
619
620=item int B<SSL_write>(SSL *ssl, char *buf, int num);
621
622=back
623
624=head1 SEE ALSO
625
626openssl(1), crypto(3)
627
628=head1 HISTORY
629
630The ssl(3) document appeared in OpenSSL 0.9.2
631
632=cut
633
diff --git a/src/lib/libssl/src/doc/ssl_ctx.doc b/src/lib/libssl/src/doc/ssl_ctx.doc
deleted file mode 100644
index 508394e75f..0000000000
--- a/src/lib/libssl/src/doc/ssl_ctx.doc
+++ /dev/null
@@ -1,68 +0,0 @@
1This is now a bit dated, quite a few of the SSL_ functions could be
2SSL_CTX_ functions. I will update this in the future. 30 Aug 1996
3
4From eay@orb.mincom.oz.au Mon Dec 11 21:37:08 1995
5Received: by orb.mincom.oz.au id AA00696
6 (5.65c/IDA-1.4.4 for eay); Mon, 11 Dec 1995 11:37:08 +1000
7Date: Mon, 11 Dec 1995 11:37:08 +1000 (EST)
8From: Eric Young <eay@mincom.oz.au>
9X-Sender: eay@orb
10To: sameer <sameer@c2.org>
11Cc: Eric Young <eay@mincom.oz.au>
12Subject: Re: PEM_readX509 oesn't seem to be working
13In-Reply-To: <199512110102.RAA12521@infinity.c2.org>
14Message-Id: <Pine.SOL.3.91.951211112115.28608D-100000@orb>
15Mime-Version: 1.0
16Content-Type: TEXT/PLAIN; charset=US-ASCII
17Status: RO
18X-Status:
19
20On Sun, 10 Dec 1995, sameer wrote:
21> OK, that's solved. I've found out that it is saying "no
22> certificate set" in SSL_accept because s->conn == NULL
23> so there is some place I need to initialize s->conn that I am
24> not initializing it.
25
26The full order of things for a server should be.
27
28ctx=SSL_CTX_new();
29
30/* The next line should not really be using ctx->cert but I'll leave it
31 * this way right now... I don't want a X509_ routine to know about an SSL
32 * structure, there should be an SSL_load_verify_locations... hmm, I may
33 * add it tonight.
34 */
35X509_load_verify_locations(ctx->cert,CAfile,CApath);
36
37/* Ok now for each new connection we do the following */
38con=SSL_new(ctx);
39SSL_set_fd(con,s);
40SSL_set_verify(con,verify,verify_callback);
41
42/* set the certificate and private key to use. */
43SSL_use_certificate_ASN1(con,X509_certificate);
44SSL_use_RSAPrivateKey_ASN1(con,RSA_private_key);
45
46SSL_accept(con);
47
48SSL_read(con)/SSL_write(con);
49
50There is a bit more than that but that is basically the structure.
51
52Create a context and specify where to lookup certificates.
53
54foreach connection
55 {
56 create a SSL structure
57 set the certificate and private key
58 do a SSL_accept
59
60 we should now be ok
61 }
62
63eric
64--
65Eric Young | Signature removed since it was generating
66AARNet: eay@mincom.oz.au | more followups than the message contents :-)
67
68
diff --git a/src/lib/libssl/src/doc/ssleay.doc b/src/lib/libssl/src/doc/ssleay.doc
deleted file mode 100644
index a0e86aef7c..0000000000
--- a/src/lib/libssl/src/doc/ssleay.doc
+++ /dev/null
@@ -1,213 +0,0 @@
1SSLeay: a cryptographic kitchen sink.
2
31st December 1995
4Way back at the start of April 1995, I was looking for a mindless
5programming project. A friend of mine (Tim Hudson) said "why don't you do SSL,
6it has DES encryption in it and I would not mind using it in a SSL telnet".
7While it was true I had written a DES library in previous years, litle
8did I know what an expansive task SSL would turn into.
9
10First of all, the SSL protocol contains DES encryption. Well and good. My
11DES library was fast and portable. It also contained the RSA's RC4 stream
12cipher. Again, not a problem, some-one had just posted to sci.crypt
13something that was claimed to be RC4. It also contained IDEA, I had the
14specifications, not a problem to implement. MD5, an RFC, trivial, at most
15I could spend a week or so trying to see if I could speed up the
16implementation. All in all a nice set of ciphers.
17Then the first 'expantion of the scope', RSA public key
18encryption. Since I did not knowing a thing about public key encryption
19or number theory, this appeared quite a daunting task. Just writing a
20big number library would be problomatic in itself, let alone making it fast.
21At this point the scope of 'implementing SSL' expands eponentialy.
22First of all, the RSA private keys were being kept in ASN.1 format.
23Thankfully the RSA PKCS series of documents explains this format. So I now
24needed to be able to encode and decode arbitary ASN.1 objects. The Public
25keys were embeded in X509 certificates. Hmm... these are not only
26ASN.1 objects but they make up a heirachy of authentication. To
27authenticate a X509 certificate one needs to retrieve it's issuers
28certificate etc etc. Hmm..., so I also need to implement some kind
29of certificate management software. I would also have to implement
30software to authenticate certificates. At this point the support code made
31the SSL part of my library look quite small.
32Around this time, the first version of SSLeay was released.
33
34Ah, but here was the problem, I was not happy with the code so far. As may
35have become obvious, I had been treating all of this as a learning
36exersize, so I have completely written the library myself. As such, due
37to the way it had grown like a fungus, much of the library was not
38'elagent' or neat. There were global and static variables all over the
39place, the SSL part did not even handle non-blocking IO.
40The Great rewrite began.
41
42As of this point in time, the 'Great rewrite' has almost finished. So what
43follows is an approximate list of what is actually SSLeay 0.5.0
44
45/********* This needs to be updated for 0.6.0+ *************/
46
47---
48The library contains the following routines. Please note that most of these
49functions are not specfic for SSL or any other particular cipher
50implementation. I have tried to make all the routines as general purpose
51as possible. So you should not think of this library as an SSL
52implemtation, but rather as a library of cryptographic functions
53that also contains SSL. I refer to each of these function groupings as
54libraries since they are often capable of functioning as independant
55libraries
56
57First up, the general ciphers and message digests supported by the library.
58
59MD2 rfc???, a standard 'by parts' interface to this algorithm.
60MD5 rfc???, the same type of interface as for the MD2 library except a
61 different algorithm.
62SHA THe Secure Hash Algorithm. Again the same type of interface as
63 MD2/MD5 except the digest is 20 bytes.
64SHA1 The 'revised' version of SHA. Just about identical to SHA except
65 for one tweak of an inner loop.
66DES This is my libdes library that has been floating around for the last
67 few years. It has been enhanced for no other reason than completeness.
68 It now supports ecb, cbc, cfb, ofb, cfb64, ofb64 in normal mode and
69 triple DES modes of ecb, cbc, cfb64 and ofb64. cfb64 and ofb64 are
70 functional interfaces to the 64 bit modes of cfb and ofb used in
71 such a way thay they function as single character interfaces.
72RC4 The RSA Inc. stream cipher.
73RC2 The RSA Inc. block cipher.
74IDEA An implmentation of the IDEA cipher, the library supports ecb, cbc,
75 cfb64 and ofb64 modes of operation.
76
77Now all the above mentioned ciphers and digests libraries support high
78speed, minimal 'crap in the way' type interfaces. For fastest and
79lowest level access, these routines should be used directly.
80
81Now there was also the matter of public key crypto systems. These are
82based on large integer arithmatic.
83
84BN This is my large integer library. It supports all the normal
85 arithmentic operations. It uses malloc extensivly and as such has
86 no limits of the size of the numbers being manipulated. If you
87 wish to use 4000 bit RSA moduli, these routines will handle it.
88 This library also contains routines to 'generate' prime numbers and
89 to test for primality. The RSA and DH libraries sit on top of this
90 library. As of this point in time, I don't support SHA, but
91 when I do add it, it will just sit on top of the routines contained
92 in this library.
93RSA This implements the RSA public key algorithm. It also contains
94 routines that will generate a new private/public key pair.
95 All the RSA functions conform to the PKCS#1 standard.
96DH This is an implementation of the
97 Diffie-Hellman protocol. There are all the require routines for
98 the protocol, plus extra routines that can be used to generate a
99 strong prime for use with a specified generator. While this last
100 routine is not generally required by applications implementing DH,
101 It is present for completeness and because I thing it is much
102 better to be able to 'generate' your own 'magic' numbers as oposed
103 to using numbers suplied by others. I conform to the PKCS#3
104 standard where required.
105
106You may have noticed the preceeding section mentions the 'generation' of
107prime numbers. Now this requries the use of 'random numbers'.
108
109RAND This psuedo-random number library is based on MD5 at it's core
110 and a large internal state (2k bytes). Once you have entered enough
111 seed data into this random number algorithm I don't feel
112 you will ever need to worry about it generating predictable output.
113 Due to the way I am writing a portable library, I have left the
114 issue of how to get good initial random seed data upto the
115 application but I do have support routines for saving and loading a
116 persistant random number state for use between program runs.
117
118Now to make all these ciphers easier to use, a higher level
119interface was required. In this form, the same function would be used to
120encrypt 'by parts', via any one of the above mentioned ciphers.
121
122EVP The Digital EnVeloPe library is quite large. At it's core are
123 function to perform encryption and decryption by parts while using
124 an initial parameter to specify which of the 17 different ciphers
125 or 4 different message digests to use. On top of these are implmented
126 the digital signature functions, sign, verify, seal and open.
127 Base64 encoding of binary data is also done in this library.
128
129PEM rfc???? describe the format for Privacy Enhanced eMail.
130 As part of this standard, methods of encoding digital enveloped
131 data is an ascii format are defined. As such, I use a form of these
132 to encode enveloped data. While at this point in time full support
133 for PEM has not been built into the library, a minimal subset of
134 the secret key and Base64 encoding is present. These reoutines are
135 mostly used to Ascii encode binary data with a 'type' associated
136 with it and perhaps details of private key encryption used to
137 encrypt the data.
138
139PKCS7 This is another Digital Envelope encoding standard which uses ASN.1
140 to encode the data. At this point in time, while there are some
141 routines to encode and decode this binary format, full support is
142 not present.
143
144As Mentioned, above, there are several different ways to encode
145data structures.
146
147ASN1 This library is more a set of primatives used to encode the packing
148 and unpacking of data structures. It is used by the X509
149 certificate standard and by the PKCS standards which are used by
150 this library. It also contains routines for duplicating and signing
151 the structures asocisated with X509.
152
153X509 The X509 library contains routines for packing and unpacking,
154 verifying and just about every thing else you would want to do with
155 X509 certificates.
156
157PKCS7 PKCS-7 is a standard for encoding digital envelope data
158 structures. At this point in time the routines will load and save
159 DER forms of these structees. They need to be re-worked to support
160 the BER form which is the normal way PKCS-7 is encoded. If the
161 previous 2 sentances don't make much sense, don't worry, this
162 library is not used by this version of SSLeay anyway.
163
164OBJ ASN.1 uses 'object identifiers' to identify objects. A set of
165 functions were requred to translate from ASN.1 to an intenger, to a
166 character string. This library provieds these translations
167
168Now I mentioned an X509 library. X509 specified a hieachy of certificates
169which needs to be traversed to authenticate particular certificates.
170
171METH This library is used to push 'methods' of retrieving certificates
172 into the library. There are some supplied 'methods' with SSLeay
173 but applications can add new methods if they so desire.
174 This library has not been finished and is not being used in this
175 version.
176
177Now all the above are required for use in the initial point of this project.
178
179SSL The SSL protocol. This is a full implmentation of SSL v 2. It
180 support both server and client authentication. SSL v 3 support
181 will be added when the SSL v 3 specification is released in it's
182 final form.
183
184Now quite a few of the above mentioned libraries rely on a few 'complex'
185data structures. For each of these I have a library.
186
187Lhash This is a hash table library which is used extensivly.
188
189STACK An implemetation of a Stack data structure.
190
191BUF A simple character array structure that also support a function to
192 check that the array is greater that a certain size, if it is not,
193 it is realloced so that is it.
194
195TXT_DB A simple memory based text file data base. The application can specify
196 unique indexes that will be enforced at update time.
197
198CONF Most of the programs written for this library require a configuration
199 file. Instead of letting programs constantly re-implment this
200 subsystem, the CONF library provides a consistant and flexable
201 interface to not only configuration files but also environment
202 variables.
203
204But what about when something goes wrong?
205The one advantage (and perhaps disadvantage) of all of these
206functions being in one library was the ability to implement a
207single error reporting system.
208
209ERR This library is used to report errors. The error system records
210 library number, function number (in the library) and reason
211 number. Multiple errors can be reported so that an 'error' trace
212 is created. The errors can be printed in numeric or textual form.
213
diff --git a/src/lib/libssl/src/doc/ssleay.txt b/src/lib/libssl/src/doc/ssleay.txt
new file mode 100644
index 0000000000..094e28ce48
--- /dev/null
+++ b/src/lib/libssl/src/doc/ssleay.txt
@@ -0,0 +1,7014 @@
1
2Bundle of old SSLeay documentation files [OBSOLETE!]
3
4==== readme ========================================================
5
6This is the old 0.6.6 docuementation. Most of the cipher stuff is still
7relevent but I'm working (very slowly) on new docuemtation.
8The current version can be found online at
9
10http://www.cryptsoft.com/ssleay/doc
11
12==== API.doc ========================================================
13
14SSL - SSLv2/v3/v23 etc.
15
16BIO - methods and how they plug together
17
18MEM - memory allocation callback
19
20CRYPTO - locking for threads
21
22EVP - Ciphers/Digests/signatures
23
24RSA - methods
25
26X509 - certificate retrieval
27
28X509 - validation
29
30X509 - X509v3 extensions
31
32Objects - adding object identifiers
33
34ASN.1 - parsing
35
36PEM - parsing
37
38==== ssl/readme =====================================================
39
4022 Jun 1996
41This file belongs in ../apps, but I'll leave it here because it deals
42with SSL :-) It is rather dated but it gives you an idea of how
43things work.
44===
45
4617 Jul 1995
47I have been changing things quite a bit and have not fully updated
48this file, so take what you read with a grain of salt
49eric
50===
51The s_client and s_server programs can be used to test SSL capable
52IP/port addresses and the verification of the X509 certificates in use
53by these services. I strongly advise having a look at the code to get
54an idea of how to use the authentication under SSLeay. Any feedback
55on changes and improvements would be greatly accepted.
56
57This file will probably be gibberish unless you have read
58rfc1421, rfc1422, rfc1423 and rfc1424 which describe PEM
59authentication.
60
61A Brief outline (and examples) how to use them to do so.
62
63NOTE:
64The environment variable SSL_CIPER is used to specify the prefered
65cipher to use, play around with setting it's value to combinations of
66RC4-MD5, EXP-RC4-MD5, CBC-DES-MD5, CBC3-DES-MD5, CFB-DES-NULL
67in a : separated list.
68
69This directory contains 3 X509 certificates which can be used by these programs.
70client.pem: a file containing a certificate and private key to be used
71 by s_client.
72server.pem :a file containing a certificate and private key to be used
73 by s_server.
74eay1024.pem:the certificate used to sign client.pem and server.pem.
75 This would be your CA's certificate. There is also a link
76 from the file a8556381.0 to eay1024.PEM. The value a8556381
77 is returned by 'x509 -hash -noout <eay1024.pem' and is the
78 value used by X509 verification routines to 'find' this
79 certificte when search a directory for it.
80 [the above is not true any more, the CA cert is
81 ../certs/testca.pem which is signed by ../certs/mincomca.pem]
82
83When testing the s_server, you may get
84bind: Address already in use
85errors. These indicate the port is still being held by the unix
86kernel and you are going to have to wait for it to let go of it. If
87this is the case, remember to use the port commands on the s_server and
88s_client to talk on an alternative port.
89
90=====
91s_client.
92This program can be used to connect to any IP/hostname:port that is
93talking SSL. Once connected, it will attempt to authenticate the
94certificate it was passed and if everything works as expected, a 2
95directional channel will be open. Any text typed will be sent to the
96other end. type Q<cr> to exit. Flags are as follows.
97-host arg : Arg is the host or IP address to connect to.
98-port arg : Arg is the port to connect to (https is 443).
99-verify arg : Turn on authentication of the server certificate.
100 : Arg specifies the 'depth', this will covered below.
101-cert arg : The optional certificate to use. This certificate
102 : will be returned to the server if the server
103 : requests it for client authentication.
104-key arg : The private key that matches the certificate
105 : specified by the -cert option. If this is not
106 : specified (but -cert is), the -cert file will be
107 : searched for the Private key. Both files are
108 : assumed to be in PEM format.
109-CApath arg : When to look for certificates when 'verifying' the
110 : certificate from the server.
111-CAfile arg : A file containing certificates to be used for
112 : 'verifying' the server certificate.
113-reconnect : Once a connection has been made, drop it and
114 : reconnect with same session-id. This is for testing :-).
115
116The '-verify n' parameter specifies not only to verify the servers
117certificate but to also only take notice of 'n' levels. The best way
118to explain is to show via examples.
119Given
120s_server -cert server.PEM is running.
121
122s_client
123 CONNECTED
124 depth=0 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=SSLeay demo server
125 issuer= /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=CA
126 verify error:num=1:unable to get issuer certificate
127 verify return:1
128 CIPHER is CBC-DES-MD5
129What has happened is that the 'SSLeay demo server' certificate's
130issuer ('CA') could not be found but because verify is not on, we
131don't care and the connection has been made anyway. It is now 'up'
132using CBC-DES-MD5 mode. This is an unauthenticate secure channel.
133You may not be talking to the right person but the data going to them
134is encrypted.
135
136s_client -verify 0
137 CONNECTED
138 depth=0 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=SSLeay demo server
139 issuer= /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=CA
140 verify error:num=1:unable to get issuer certificate
141 verify return:1
142 CIPHER is CBC-DES-MD5
143We are 'verifying' but only to depth 0, so since the 'SSLeay demo server'
144certificate passed the date and checksum, we are happy to proceed.
145
146s_client -verify 1
147 CONNECTED
148 depth=0 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=SSLeay demo server
149 issuer= /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=CA
150 verify error:num=1:unable to get issuer certificate
151 verify return:0
152 ERROR
153 verify error:unable to get issuer certificate
154In this case we failed to make the connection because we could not
155authenticate the certificate because we could not find the
156'CA' certificate.
157
158s_client -verify 1 -CAfile eay1024.PEM
159 CONNECTED
160 depth=0 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=SSLeay demo server
161 verify return:1
162 depth=1 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=CA
163 verify return:1
164 CIPHER is CBC-DES-MD5
165We loaded the certificates from the file eay1024.PEM. Everything
166checked out and so we made the connection.
167
168s_client -verify 1 -CApath .
169 CONNECTED
170 depth=0 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=SSLeay demo server
171 verify return:1
172 depth=1 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=CA
173 verify return:1
174 CIPHER is CBC-DES-MD5
175We looked in out local directory for issuer certificates and 'found'
176a8556381.0 and so everything is ok.
177
178It is worth noting that 'CA' is a self certified certificate. If you
179are passed one of these, it will fail to 'verify' at depth 0 because
180we need to lookup the certifier of a certificate from some information
181that we trust and keep locally.
182
183SSL_CIPHER=CBC3-DES-MD5:RC4-MD5
184export SSL_CIPHER
185s_client -verify 10 -CApath . -reconnect
186 CONNECTED
187 depth=0 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=SSLeay demo server
188 verify return:1
189 depth=1 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=CA
190 verify return:1
191 drop the connection and reconnect with the same session id
192 CIPHER is CBC3-DES-MD5
193This has done a full connection and then re-estabished it with the
194same session id but a new socket. No RSA stuff occures on the second
195connection. Note that we said we would prefer to use CBC3-DES-MD5
196encryption and so, since the server supports it, we are.
197
198=====
199s_server
200This program accepts SSL connections on a specified port
201Once connected, it will estabish an SSL connection and optionaly
202attempt to authenticate the client. A 2 directional channel will be
203open. Any text typed will be sent to the other end. Type Q<cr> to exit.
204Flags are as follows.
205-port arg : Arg is the port to listen on.
206-verify arg : Turn on authentication of the client if they have a
207 : certificate. Arg specifies the 'depth'.
208-Verify arg : Turn on authentication of the client. If they don't
209 : have a valid certificate, drop the connection.
210-cert arg : The certificate to use. This certificate
211 : will be passed to the client. If it is not
212 : specified, it will default to server.PEM
213-key arg : The private key that matches the certificate
214 : specified by the -cert option. If this is not
215 : specified (but -cert is), the -cert file will be
216 : searched for the Private key. Both files are
217 : assumed to be in PEM format. Default is server.PEM
218-CApath arg : When to look for certificates when 'verifying' the
219 : certificate from the client.
220-CAfile arg : A file containing certificates to be used for
221 : 'verifying' the client certificate.
222
223For the following 'demo' I will specify the s_server command and
224the s_client command and then list the output from the s_server.
225s_server
226s_client
227 CONNECTED
228 CIPHER is CBC-DES-MD5
229Everything up and running
230
231s_server -verify 0
232s_client
233 CONNECTED
234 CIPHER is CBC-DES-MD5
235Ok since no certificate was returned and we don't care.
236
237s_server -verify 0
238./s_client -cert client.PEM
239 CONNECTED
240 depth=0 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=SSLeay demo client
241 issuer= /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=CA
242 verify error:num=1:unable to get issuer certificate
243 verify return:1
244 CIPHER is CBC-DES-MD5
245Ok since we were only verifying to level 0
246
247s_server -verify 4
248s_client -cert client.PEM
249 CONNECTED
250 depth=0 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=SSLeay demo client
251 issuer= /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=CA
252 verify error:num=1:unable to get issuer certificate
253 verify return:0
254 ERROR
255 verify error:unable to get issuer certificate
256Bad because we could not authenticate the returned certificate.
257
258s_server -verify 4 -CApath .
259s_client -cert client.PEM
260 CONNECTED
261 depth=0 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=SSLeay demo client
262 verify return:1
263 depth=1 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=CA
264 verify return:1
265 CIPHER is CBC-DES-MD5
266Ok because we could authenticate the returned certificate :-).
267
268s_server -Verify 0 -CApath .
269s_client
270 CONNECTED
271 ERROR
272 SSL error:function is:REQUEST_CERTIFICATE
273 :error is :client end did not return a certificate
274Error because no certificate returned.
275
276s_server -Verify 4 -CApath .
277s_client -cert client.PEM
278 CONNECTED
279 depth=0 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=SSLeay demo client
280 verify return:1
281 depth=1 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=CA
282 verify return:1
283 CIPHER is CBC-DES-MD5
284Full authentication of the client.
285
286So in summary to do full authentication of both ends
287s_server -Verify 9 -CApath .
288s_client -cert client.PEM -CApath . -verify 9
289From the server side
290 CONNECTED
291 depth=0 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=SSLeay demo client
292 verify return:1
293 depth=1 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=CA
294 verify return:1
295 CIPHER is CBC-DES-MD5
296From the client side
297 CONNECTED
298 depth=0 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=SSLeay demo server
299 verify return:1
300 depth=1 /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=CA
301 verify return:1
302 CIPHER is CBC-DES-MD5
303
304For general probing of the 'internet https' servers for the
305distribution area, run
306s_client -host www.netscape.com -port 443 -verify 4 -CApath ../rsa/hash
307Then enter
308GET /
309and you should be talking to the https server on that host.
310
311www.rsa.com was refusing to respond to connections on 443 when I was
312testing.
313
314have fun :-).
315
316eric
317
318==== a_verify.doc ========================================================
319
320From eay@mincom.com Fri Oct 4 18:29:06 1996
321Received: by orb.mincom.oz.au id AA29080
322 (5.65c/IDA-1.4.4 for eay); Fri, 4 Oct 1996 08:29:07 +1000
323Date: Fri, 4 Oct 1996 08:29:06 +1000 (EST)
324From: Eric Young <eay@mincom.oz.au>
325X-Sender: eay@orb
326To: wplatzer <wplatzer@iaik.tu-graz.ac.at>
327Cc: Eric Young <eay@mincom.oz.au>, SSL Mailing List <ssl-users@mincom.com>
328Subject: Re: Netscape's Public Key
329In-Reply-To: <19961003134837.NTM0049@iaik.tu-graz.ac.at>
330Message-Id: <Pine.SOL.3.91.961004081346.8018K-100000@orb>
331Mime-Version: 1.0
332Content-Type: TEXT/PLAIN; charset=US-ASCII
333Status: RO
334X-Status:
335
336On Thu, 3 Oct 1996, wplatzer wrote:
337> I get Public Key from Netscape (Gold 3.0b4), but cannot do anything
338> with it... It looks like (asn1parse):
339>
340> 0:d=0 hl=3 l=180 cons: SEQUENCE
341> 3:d=1 hl=2 l= 96 cons: SEQUENCE
342> 5:d=2 hl=2 l= 92 cons: SEQUENCE
343> 7:d=3 hl=2 l= 13 cons: SEQUENCE
344> 9:d=4 hl=2 l= 9 prim: OBJECT :rsaEncryption
345> 20:d=4 hl=2 l= 0 prim: NULL
346> 22:d=3 hl=2 l= 75 prim: BIT STRING
347> 99:d=2 hl=2 l= 0 prim: IA5STRING :
348> 101:d=1 hl=2 l= 13 cons: SEQUENCE
349> 103:d=2 hl=2 l= 9 prim: OBJECT :md5withRSAEncryption
350> 114:d=2 hl=2 l= 0 prim: NULL
351> 116:d=1 hl=2 l= 65 prim: BIT STRING
352>
353> The first BIT STRING is the public key and the second BIT STRING is
354> the signature.
355> But a public key consists of the public exponent and the modulus. Are
356> both numbers in the first BIT STRING?
357> Is there a document simply describing this coding stuff (checking
358> signature, get the public key, etc.)?
359
360Minimal in SSLeay. If you want to see what the modulus and exponent are,
361try asn1parse -offset 25 -length 75 <key.pem
362asn1parse will currently stuff up on the 'length 75' part (fixed in next
363release) but it will print the stuff. If you are after more
364documentation on ASN.1, have a look at www.rsa.com and get their PKCS
365documents, most of my initial work on SSLeay was done using them.
366
367As for SSLeay,
368util/crypto.num and util/ssl.num are lists of all exported functions in
369the library (but not macros :-(.
370
371The ones for extracting public keys from certificates and certificate
372requests are EVP_PKEY * X509_REQ_extract_key(X509_REQ *req);
373EVP_PKEY * X509_extract_key(X509 *x509);
374
375To verify a signature on a signed ASN.1 object
376int X509_verify(X509 *a,EVP_PKEY *key);
377int X509_REQ_verify(X509_REQ *a,EVP_PKEY *key);
378int X509_CRL_verify(X509_CRL *a,EVP_PKEY *key);
379int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a,EVP_PKEY *key);
380
381I should mention that EVP_PKEY can be used to hold a public or a private key,
382since for things like RSA and DSS, a public key is just a subset of what
383is stored for the private key.
384
385To sign any of the above structures
386
387int X509_sign(X509 *a,EVP_PKEY *key,EVP_MD *md);
388int X509_REQ_sign(X509_REQ *a,EVP_PKEY *key,EVP_MD *md);
389int X509_CRL_sign(X509_CRL *a,EVP_PKEY *key,EVP_MD *md);
390int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *a,EVP_PKEY *key,EVP_MD *md);
391
392where md is the message digest to sign with.
393
394There are all defined in x509.h and all the _sign and _verify functions are
395actually macros to the ASN1_sign() and ASN1_verify() functions.
396These functions will put the correct algorithm identifiers in the correct
397places in the structures.
398
399eric
400--
401Eric Young | BOOL is tri-state according to Bill Gates.
402AARNet: eay@mincom.oz.au | RTFM Win32 GetMessage().
403
404==== x509 =======================================================
405
406X509_verify()
407X509_sign()
408
409X509_get_version()
410X509_get_serialNumber()
411X509_get_issuer()
412X509_get_subject()
413X509_get_notBefore()
414X509_get_notAfter()
415X509_get_pubkey()
416
417X509_set_version()
418X509_set_serialNumber()
419X509_set_issuer()
420X509_set_subject()
421X509_set_notBefore()
422X509_set_notAfter()
423X509_set_pubkey()
424
425X509_get_extensions()
426X509_set_extensions()
427
428X509_EXTENSIONS_clear()
429X509_EXTENSIONS_retrieve()
430X509_EXTENSIONS_add()
431X509_EXTENSIONS_delete()
432
433==== x509 attribute ================================================
434
435PKCS7
436 STACK of X509_ATTRIBUTES
437 ASN1_OBJECT
438 STACK of ASN1_TYPE
439
440So it is
441
442p7.xa[].obj
443p7.xa[].data[]
444
445get_obj_by_nid(STACK , nid)
446get_num_by_nid(STACK , nid)
447get_data_by_nid(STACK , nid, index)
448
449X509_ATTRIBUTE *X509_ATTRIBUTE_new(void );
450void X509_ATTRIBUTE_free(X509_ATTRIBUTE *a);
451
452X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **ex,
453 int nid, STACK *value);
454
455X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **ex,
456 int nid, STACK *value);
457
458int X509_ATTRIBUTE_set_object(X509_ATTRIBUTE *ex,ASN1_OBJECT *obj);
459int X509_ATTRIBUTE_add_data(X509_ATTRIBUTE *ex, int index,
460 ASN1_TYPE *value);
461
462ASN1_OBJECT * X509_ATTRIBUTE_get_object(X509_ATTRIBUTE *ex);
463int X509_ATTRIBUTE_get_num(X509_ATTRIBUTE *ne);
464ASN1_TYPE * X509_ATTRIBUTE_get_data(X509_ATTRIBUTE *ne,int index);
465
466ASN1_TYPE * X509_ATTRIBUTE_get_data_by_NID(X509_ATTRIBUTE *ne,
467 ASN1_OBJECT *obj);
468
469X509_ATTRIBUTE *PKCS7_get_s_att_by_NID(PKCS7 *p7,int nid);
470X509_ATTRIBUTE *PKCS7_get_u_att_by_NID(PKCS7 *p7,int nid);
471
472==== x509 v3 ========================================================
473
474The 'new' system.
475
476The X509_EXTENSION_METHOD includes extensions and attributes and/or names.
477Basically everthing that can be added to an X509 with an OID identifying it.
478
479It operates via 2 methods per object id.
480int a2i_XXX(X509 *x,char *str,int len);
481int i2a_XXX(BIO *bp,X509 *x);
482
483The a2i_XXX function will add the object with a value converted from the
484string into the X509. Len can be -1 in which case the length is calculated
485via strlen(str). Applications can always use direct knowledge to load and
486unload the relevent objects themselves.
487
488i2a_XXX will print to the passed BIO, a text representation of the
489relevet object. Use a memory BIO if you want it printed to a buffer :-).
490
491X509_add_by_NID(X509 *x,int nid,char *str,int len);
492X509_add_by_OBJ(X509 *x,ASN1_OBJECT *obj,char *str,int len);
493
494X509_print_by_name(BIO *bp,X509 *x);
495X509_print_by_NID(BIO *bp,X509 *x);
496X509_print_by_OBJ(BIO *bp,X509 *x);
497
498==== verify ========================================================
499
500X509_verify_cert_chain(
501 CERT_STORE *cert_store,
502 STACK /* X509 */ *certs,
503 int *verify_result,
504 int (*verify_error_callback)()
505 char *argument_to_callback, /* SSL */
506
507app_verify_callback(
508 char *app_verify_arg, /* from SSL_CTX */
509 STACK /* X509 */ *certs,
510 int *verify_result,
511 int (*verify_error_callback)()
512 SSL *s,
513
514int X509_verify_cert(
515 CERT_STORE *cert_store,
516 X509 *x509,
517 int *verify_result,
518 int (*verify_error_callback)(),
519 char *arg,
520
521==== apps.doc ========================================================
522
523The applications
524
525Ok, where to begin....
526In the begining, when SSLeay was small (April 1995), there
527were but few applications, they did happily cohabit in
528the one bin directory. Then over time, they did multiply and grow,
529and they started to look like microsoft software; 500k to print 'hello world'.
530A new approach was needed. They were coalessed into one 'Monolithic'
531application, ssleay. This one program is composed of many programs that
532can all be compiled independantly.
533
534ssleay has 3 modes of operation.
5351) If the ssleay binaray has the name of one of its component programs, it
536executes that program and then exits. This can be achieve by using hard or
537symbolic links, or failing that, just renaming the binary.
5382) If the first argument to ssleay is the name of one of the component
539programs, that program runs that program and then exits.
5403) If there are no arguments, ssleay enters a 'command' mode. Each line is
541interpreted as a program name plus arguments. After each 'program' is run,
542ssleay returns to the comand line.
543
544dgst - message digests
545enc - encryption and base64 encoding
546
547ans1parse - 'pulls' appart ASN.1 encoded objects like certificates.
548
549dh - Diffle-Hellman parameter manipulation.
550rsa - RSA manipulations.
551crl - Certificate revokion list manipulations
552x509 - X509 cert fiddles, including signing.
553pkcs7 - pkcs7 manipulation, only DER versions right now.
554
555genrsa - generate an RSA private key.
556gendh - Generate a set of Diffle-Hellman parameters.
557req - Generate a PKCS#10 object, a certificate request.
558
559s_client - SSL client program
560s_server - SSL server program
561s_time - A SSL protocol timing program
562s_mult - Another SSL server, but it multiplexes
563 connections.
564s_filter - under development
565
566errstr - Convert SSLeay error numbers to strings.
567ca - Sign certificate requests, and generate
568 certificate revokion lists
569crl2pkcs7 - put a crl and certifcates into a pkcs7 object.
570speed - Benchmark the ciphers.
571verify - Check certificates
572hashdir - under development
573
574[ there a now a few more options, play with the program to see what they
575 are ]
576
577==== asn1.doc ========================================================
578
579The ASN.1 Routines.
580
581ASN.1 is a specification for how to encode structured 'data' in binary form.
582The approach I have take to the manipulation of structures and their encoding
583into ASN.1 is as follows.
584
585For each distinct structure there are 4 function of the following form
586TYPE *TYPE_new(void);
587void TYPE_free(TYPE *);
588TYPE *d2i_TYPE(TYPE **a,unsigned char **pp,long length);
589long i2d_TYPE(TYPE *a,unsigned char **pp); /* CHECK RETURN VALUE */
590
591where TYPE is the type of the 'object'. The TYPE that have these functions
592can be in one of 2 forms, either the internal C malloc()ed data structure
593or in the DER (a variant of ASN.1 encoding) binary encoding which is just
594an array of unsigned bytes. The 'i2d' functions converts from the internal
595form to the DER form and the 'd2i' functions convert from the DER form to
596the internal form.
597
598The 'new' function returns a malloc()ed version of the structure with all
599substructures either created or left as NULL pointers. For 'optional'
600fields, they are normally left as NULL to indicate no value. For variable
601size sub structures (often 'SET OF' or 'SEQUENCE OF' in ASN.1 syntax) the
602STACK data type is used to hold the values. Have a read of stack.doc
603and have a look at the relevant header files to see what I mean. If there
604is an error while malloc()ing the structure, NULL is returned.
605
606The 'free' function will free() all the sub components of a particular
607structure. If any of those sub components have been 'removed', replace
608them with NULL pointers, the 'free' functions are tolerant of NULL fields.
609
610The 'd2i' function copies a binary representation into a C structure. It
611operates as follows. 'a' is a pointer to a pointer to
612the structure to populate, 'pp' is a pointer to a pointer to where the DER
613byte string is located and 'length' is the length of the '*pp' data.
614If there are no errors, a pointer to the populated structure is returned.
615If there is an error, NULL is returned. Errors can occur because of
616malloc() failures but normally they will be due to syntax errors in the DER
617encoded data being parsed. It is also an error if there was an
618attempt to read more that 'length' bytes from '*p'. If
619everything works correctly, the value in '*p' is updated
620to point at the location just beyond where the DER
621structure was read from. In this way, chained calls to 'd2i' type
622functions can be made, with the pointer into the 'data' array being
623'walked' along the input byte array.
624Depending on the value passed for 'a', different things will be done. If
625'a' is NULL, a new structure will be malloc()ed and returned. If '*a' is
626NULL, a new structure will be malloc()ed and put into '*a' and returned.
627If '*a' is not NULL, the structure in '*a' will be populated, or in the
628case of an error, free()ed and then returned.
629Having these semantics means that a structure
630can call a 'd2i' function to populate a field and if the field is currently
631NULL, the structure will be created.
632
633The 'i2d' function type is used to copy a C structure to a byte array.
634The parameter 'a' is the structure to convert and '*p' is where to put it.
635As for the 'd2i' type structure, 'p' is updated to point after the last
636byte written. If p is NULL, no data is written. The function also returns
637the number of bytes written. Where this becomes useful is that if the
638function is called with a NULL 'p' value, the length is returned. This can
639then be used to malloc() an array of bytes and then the same function can
640be recalled passing the malloced array to be written to. e.g.
641
642int len;
643unsigned char *bytes,*p;
644len=i2d_X509(x,NULL); /* get the size of the ASN1 encoding of 'x' */
645if ((bytes=(unsigned char *)malloc(len)) == NULL)
646 goto err;
647p=bytes;
648i2d_X509(x,&p);
649
650Please note that a new variable, 'p' was passed to i2d_X509. After the
651call to i2d_X509 p has been incremented by len bytes.
652
653Now the reason for this functional organisation is that it allows nested
654structures to be built up by calling these functions as required. There
655are various macros used to help write the general 'i2d', 'd2i', 'new' and
656'free' functions. They are discussed in another file and would only be
657used by some-one wanting to add new structures to the library. As you
658might be able to guess, the process of writing ASN.1 files can be a bit CPU
659expensive for complex structures. I'm willing to live with this since the
660simpler library code make my life easier and hopefully most programs using
661these routines will have their execution profiles dominated by cipher or
662message digest routines.
663What follows is a list of 'TYPE' values and the corresponding ASN.1
664structure and where it is used.
665
666TYPE ASN.1
667ASN1_INTEGER INTEGER
668ASN1_BIT_STRING BIT STRING
669ASN1_OCTET_STRING OCTET STRING
670ASN1_OBJECT OBJECT IDENTIFIER
671ASN1_PRINTABLESTRING PrintableString
672ASN1_T61STRING T61String
673ASN1_IA5STRING IA5String
674ASN1_UTCTIME UTCTime
675ASN1_TYPE Any of the above mentioned types plus SEQUENCE and SET
676
677Most of the above mentioned types are actualled stored in the
678ASN1_BIT_STRING type and macros are used to differentiate between them.
679The 3 types used are
680
681typedef struct asn1_object_st
682 {
683 /* both null if a dynamic ASN1_OBJECT, one is
684 * defined if a 'static' ASN1_OBJECT */
685 char *sn,*ln;
686 int nid;
687 int length;
688 unsigned char *data;
689 } ASN1_OBJECT;
690This is used to store ASN1 OBJECTS. Read 'objects.doc' for details ono
691routines to manipulate this structure. 'sn' and 'ln' are used to hold text
692strings that represent the object (short name and long or lower case name).
693These are used by the 'OBJ' library. 'nid' is a number used by the OBJ
694library to uniquely identify objects. The ASN1 routines will populate the
695'length' and 'data' fields which will contain the bit string representing
696the object.
697
698typedef struct asn1_bit_string_st
699 {
700 int length;
701 int type;
702 unsigned char *data;
703 } ASN1_BIT_STRING;
704This structure is used to hold all the other base ASN1 types except for
705ASN1_UTCTIME (which is really just a 'char *'). Length is the number of
706bytes held in data and type is the ASN1 type of the object (there is a list
707in asn1.h).
708
709typedef struct asn1_type_st
710 {
711 int type;
712 union {
713 char *ptr;
714 ASN1_INTEGER * integer;
715 ASN1_BIT_STRING * bit_string;
716 ASN1_OCTET_STRING * octet_string;
717 ASN1_OBJECT * object;
718 ASN1_PRINTABLESTRING * printablestring;
719 ASN1_T61STRING * t61string;
720 ASN1_IA5STRING * ia5string;
721 ASN1_UTCTIME * utctime;
722 ASN1_BIT_STRING * set;
723 ASN1_BIT_STRING * sequence;
724 } value;
725 } ASN1_TYPE;
726This structure is used in a few places when 'any' type of object can be
727expected.
728
729X509 Certificate
730X509_CINF CertificateInfo
731X509_ALGOR AlgorithmIdentifier
732X509_NAME Name
733X509_NAME_ENTRY A single sub component of the name.
734X509_VAL Validity
735X509_PUBKEY SubjectPublicKeyInfo
736The above mentioned types are declared in x509.h. They are all quite
737straight forward except for the X509_NAME/X509_NAME_ENTRY pair.
738A X509_NAME is a STACK (see stack.doc) of X509_NAME_ENTRY's.
739typedef struct X509_name_entry_st
740 {
741 ASN1_OBJECT *object;
742 ASN1_BIT_STRING *value;
743 int set;
744 int size; /* temp variable */
745 } X509_NAME_ENTRY;
746The size is a temporary variable used by i2d_NAME and set is the set number
747for the particular NAME_ENTRY. A X509_NAME is encoded as a sequence of
748sequence of sets. Normally each set contains only a single item.
749Sometimes it contains more. Normally throughout this library there will be
750only one item per set. The set field contains the 'set' that this entry is
751a member of. So if you have just created a X509_NAME structure and
752populated it with X509_NAME_ENTRYs, you should then traverse the X509_NAME
753(which is just a STACK) and set the 'set/' field to incrementing numbers.
754For more details on why this is done, read the ASN.1 spec for Distinguished
755Names.
756
757X509_REQ CertificateRequest
758X509_REQ_INFO CertificateRequestInfo
759These are used to hold certificate requests.
760
761X509_CRL CertificateRevocationList
762These are used to hold a certificate revocation list
763
764RSAPrivateKey PrivateKeyInfo
765RSAPublicKey PublicKeyInfo
766Both these 'function groups' operate on 'RSA' structures (see rsa.doc).
767The difference is that the RSAPublicKey operations only manipulate the m
768and e fields in the RSA structure.
769
770DSAPrivateKey DSS private key
771DSAPublicKey DSS public key
772Both these 'function groups' operate on 'DSS' structures (see dsa.doc).
773The difference is that the RSAPublicKey operations only manipulate the
774XXX fields in the DSA structure.
775
776DHparams DHParameter
777This is used to hold the p and g value for The Diffie-Hellman operation.
778The function deal with the 'DH' strucure (see dh.doc).
779
780Now all of these function types can be used with several other functions to give
781quite useful set of general manipulation routines. Normally one would
782not uses these functions directly but use them via macros.
783
784char *ASN1_dup(int (*i2d)(),char *(*d2i)(),char *x);
785'x' is the input structure case to a 'char *', 'i2d' is the 'i2d_TYPE'
786function for the type that 'x' is and d2i is the 'd2i_TYPE' function for the
787type that 'x' is. As is obvious from the parameters, this function
788duplicates the strucutre by transforming it into the DER form and then
789re-loading it into a new strucutre and returning the new strucutre. This
790is obviously a bit cpu intensive but when faced with a complex dynamic
791structure this is the simplest programming approach. There are macros for
792duplicating the major data types but is simple to add extras.
793
794char *ASN1_d2i_fp(char *(*new)(),char *(*d2i)(),FILE *fp,unsigned char **x);
795'x' is a pointer to a pointer of the 'desired type'. new and d2i are the
796corresponding 'TYPE_new' and 'd2i_TYPE' functions for the type and 'fp' is
797an open file pointer to read from. This function reads from 'fp' as much
798data as it can and then uses 'd2i' to parse the bytes to load and return
799the parsed strucutre in 'x' (if it was non-NULL) and to actually return the
800strucutre. The behavior of 'x' is as per all the other d2i functions.
801
802char *ASN1_d2i_bio(char *(*new)(),char *(*d2i)(),BIO *fp,unsigned char **x);
803The 'BIO' is the new IO type being used in SSLeay (see bio.doc). This
804function is the same as ASN1_d2i_fp() except for the BIO argument.
805ASN1_d2i_fp() actually calls this function.
806
807int ASN1_i2d_fp(int (*i2d)(),FILE *out,unsigned char *x);
808'x' is converted to bytes by 'i2d' and then written to 'out'. ASN1_i2d_fp
809and ASN1_d2i_fp are not really symetric since ASN1_i2d_fp will read all
810available data from the file pointer before parsing a single item while
811ASN1_i2d_fp can be used to write a sequence of data objects. To read a
812series of objects from a file I would sugest loading the file into a buffer
813and calling the relevent 'd2i' functions.
814
815char *ASN1_d2i_bio(char *(*new)(),char *(*d2i)(),BIO *fp,unsigned char **x);
816This function is the same as ASN1_i2d_fp() except for the BIO argument.
817ASN1_i2d_fp() actually calls this function.
818
819char * PEM_ASN1_read(char *(*d2i)(),char *name,FILE *fp,char **x,int (*cb)());
820This function will read the next PEM encoded (base64) object of the same
821type as 'x' (loaded by the d2i function). 'name' is the name that is in
822the '-----BEGIN name-----' that designates the start of that object type.
823If the data is encrypted, 'cb' will be called to prompt for a password. If
824it is NULL a default function will be used to prompt from the password.
825'x' is delt with as per the standard 'd2i' function interface. This
826function can be used to read a series of objects from a file. While any
827data type can be encrypted (see PEM_ASN1_write) only RSA private keys tend
828to be encrypted.
829
830char * PEM_ASN1_read_bio(char *(*d2i)(),char *name,BIO *fp,
831 char **x,int (*cb)());
832Same as PEM_ASN1_read() except using a BIO. This is called by
833PEM_ASN1_read().
834
835int PEM_ASN1_write(int (*i2d)(),char *name,FILE *fp,char *x,EVP_CIPHER *enc,
836 unsigned char *kstr,int klen,int (*callback)());
837
838int PEM_ASN1_write_bio(int (*i2d)(),char *name,BIO *fp,
839 char *x,EVP_CIPHER *enc,unsigned char *kstr,int klen,
840 int (*callback)());
841
842int ASN1_sign(int (*i2d)(), X509_ALGOR *algor1, X509_ALGOR *algor2,
843 ASN1_BIT_STRING *signature, char *data, RSA *rsa, EVP_MD *type);
844int ASN1_verify(int (*i2d)(), X509_ALGOR *algor1,
845 ASN1_BIT_STRING *signature,char *data, RSA *rsa);
846
847int ASN1_BIT_STRING_cmp(ASN1_BIT_STRING *a, ASN1_BIT_STRING *b);
848ASN1_BIT_STRING *ASN1_BIT_STRING_type_new(int type );
849
850int ASN1_UTCTIME_check(ASN1_UTCTIME *a);
851void ASN1_UTCTIME_print(BIO *fp,ASN1_UTCTIME *a);
852ASN1_UTCTIME *ASN1_UTCTIME_dup(ASN1_UTCTIME *a);
853
854ASN1_BIT_STRING *d2i_asn1_print_type(ASN1_BIT_STRING **a,unsigned char **pp,
855 long length,int type);
856
857int i2d_ASN1_SET(STACK *a, unsigned char **pp,
858 int (*func)(), int ex_tag, int ex_class);
859STACK * d2i_ASN1_SET(STACK **a, unsigned char **pp, long length,
860 char *(*func)(), int ex_tag, int ex_class);
861
862int i2a_ASN1_OBJECT(BIO *bp,ASN1_OBJECT *object);
863int i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a);
864int a2i_ASN1_INTEGER(BIO *bp,ASN1_INTEGER *bs,char *buf,int size);
865
866int ASN1_INTEGER_set(ASN1_INTEGER *a, long v);
867long ASN1_INTEGER_get(ASN1_INTEGER *a);
868ASN1_INTEGER *BN_to_ASN1_INTEGER(BIGNUM *bn, ASN1_INTEGER *ai);
869BIGNUM *ASN1_INTEGER_to_BN(ASN1_INTEGER *ai,BIGNUM *bn);
870
871/* given a string, return the correct type. Max is the maximum number
872 * of bytes to parse. It stops parsing when 'max' bytes have been
873 * processed or a '\0' is hit */
874int ASN1_PRINTABLE_type(unsigned char *s,int max);
875
876void ASN1_parse(BIO *fp,unsigned char *pp,long len);
877
878int i2d_ASN1_bytes(ASN1_BIT_STRING *a, unsigned char **pp, int tag, int class);
879ASN1_BIT_STRING *d2i_ASN1_bytes(ASN1_OCTET_STRING **a, unsigned char **pp,
880 long length, int Ptag, int Pclass);
881
882/* PARSING */
883int asn1_Finish(ASN1_CTX *c);
884
885/* SPECIALS */
886int ASN1_get_object(unsigned char **pp, long *plength, int *ptag,
887 int *pclass, long omax);
888int ASN1_check_infinite_end(unsigned char **p,long len);
889void ASN1_put_object(unsigned char **pp, int constructed, int length,
890 int tag, int class);
891int ASN1_object_size(int constructed, int length, int tag);
892
893X509 * X509_get_cert(CERTIFICATE_CTX *ctx,X509_NAME * name,X509 *tmp_x509);
894int X509_add_cert(CERTIFICATE_CTX *ctx,X509 *);
895
896char * X509_cert_verify_error_string(int n);
897int X509_add_cert_file(CERTIFICATE_CTX *c,char *file, int type);
898char * X509_gmtime (char *s, long adj);
899int X509_add_cert_dir (CERTIFICATE_CTX *c,char *dir, int type);
900int X509_load_verify_locations (CERTIFICATE_CTX *ctx,
901 char *file_env, char *dir_env);
902int X509_set_default_verify_paths(CERTIFICATE_CTX *cts);
903X509 * X509_new_D2i_X509(int len, unsigned char *p);
904char * X509_get_default_cert_area(void );
905char * X509_get_default_cert_dir(void );
906char * X509_get_default_cert_file(void );
907char * X509_get_default_cert_dir_env(void );
908char * X509_get_default_cert_file_env(void );
909char * X509_get_default_private_dir(void );
910X509_REQ *X509_X509_TO_req(X509 *x, RSA *rsa);
911int X509_cert_verify(CERTIFICATE_CTX *ctx,X509 *xs, int (*cb)());
912
913CERTIFICATE_CTX *CERTIFICATE_CTX_new();
914void CERTIFICATE_CTX_free(CERTIFICATE_CTX *c);
915
916void X509_NAME_print(BIO *fp, X509_NAME *name, int obase);
917int X509_print_fp(FILE *fp,X509 *x);
918int X509_print(BIO *fp,X509 *x);
919
920X509_INFO * X509_INFO_new(void);
921void X509_INFO_free(X509_INFO *a);
922
923char * X509_NAME_oneline(X509_NAME *a);
924
925#define X509_verify(x,rsa)
926#define X509_REQ_verify(x,rsa)
927#define X509_CRL_verify(x,rsa)
928
929#define X509_sign(x,rsa,md)
930#define X509_REQ_sign(x,rsa,md)
931#define X509_CRL_sign(x,rsa,md)
932
933#define X509_dup(x509)
934#define d2i_X509_fp(fp,x509)
935#define i2d_X509_fp(fp,x509)
936#define d2i_X509_bio(bp,x509)
937#define i2d_X509_bio(bp,x509)
938
939#define X509_CRL_dup(crl)
940#define d2i_X509_CRL_fp(fp,crl)
941#define i2d_X509_CRL_fp(fp,crl)
942#define d2i_X509_CRL_bio(bp,crl)
943#define i2d_X509_CRL_bio(bp,crl)
944
945#define X509_REQ_dup(req)
946#define d2i_X509_REQ_fp(fp,req)
947#define i2d_X509_REQ_fp(fp,req)
948#define d2i_X509_REQ_bio(bp,req)
949#define i2d_X509_REQ_bio(bp,req)
950
951#define RSAPrivateKey_dup(rsa)
952#define d2i_RSAPrivateKey_fp(fp,rsa)
953#define i2d_RSAPrivateKey_fp(fp,rsa)
954#define d2i_RSAPrivateKey_bio(bp,rsa)
955#define i2d_RSAPrivateKey_bio(bp,rsa)
956
957#define X509_NAME_dup(xn)
958#define X509_NAME_ENTRY_dup(ne)
959
960void X509_REQ_print_fp(FILE *fp,X509_REQ *req);
961void X509_REQ_print(BIO *fp,X509_REQ *req);
962
963RSA *X509_REQ_extract_key(X509_REQ *req);
964RSA *X509_extract_key(X509 *x509);
965
966int X509_issuer_and_serial_cmp(X509 *a, X509 *b);
967unsigned long X509_issuer_and_serial_hash(X509 *a);
968
969X509_NAME * X509_get_issuer_name(X509 *a);
970int X509_issuer_name_cmp(X509 *a, X509 *b);
971unsigned long X509_issuer_name_hash(X509 *a);
972
973X509_NAME * X509_get_subject_name(X509 *a);
974int X509_subject_name_cmp(X509 *a,X509 *b);
975unsigned long X509_subject_name_hash(X509 *x);
976
977int X509_NAME_cmp (X509_NAME *a, X509_NAME *b);
978unsigned long X509_NAME_hash(X509_NAME *x);
979
980
981==== bio.doc ========================================================
982
983BIO Routines
984
985This documentation is rather sparse, you are probably best
986off looking at the code for specific details.
987
988The BIO library is a IO abstraction that was originally
989inspired by the need to have callbacks to perform IO to FILE
990pointers when using Windows 3.1 DLLs. There are two types
991of BIO; a source/sink type and a filter type.
992The source/sink methods are as follows:
993- BIO_s_mem() memory buffer - a read/write byte array that
994 grows until memory runs out :-).
995- BIO_s_file() FILE pointer - A wrapper around the normal
996 'FILE *' commands, good for use with stdin/stdout.
997- BIO_s_fd() File descriptor - A wrapper around file
998 descriptors, often used with pipes.
999- BIO_s_socket() Socket - Used around sockets. It is
1000 mostly in the Microsoft world that sockets are different
1001 from file descriptors and there are all those ugly winsock
1002 commands.
1003- BIO_s_null() Null - read nothing and write nothing.; a
1004 useful endpoint for filter type BIO's specifically things
1005 like the message digest BIO.
1006
1007The filter types are
1008- BIO_f_buffer() IO buffering - does output buffering into
1009 larger chunks and performs input buffering to allow gets()
1010 type functions.
1011- BIO_f_md() Message digest - a transparent filter that can
1012 be asked to return a message digest for the data that has
1013 passed through it.
1014- BIO_f_cipher() Encrypt or decrypt all data passing
1015 through the filter.
1016- BIO_f_base64() Base64 decode on read and encode on write.
1017- BIO_f_ssl() A filter that performs SSL encryption on the
1018 data sent through it.
1019
1020Base BIO functions.
1021The BIO library has a set of base functions that are
1022implemented for each particular type. Filter BIOs will
1023normally call the equivalent function on the source/sink BIO
1024that they are layered on top of after they have performed
1025some modification to the data stream. Multiple filter BIOs
1026can be 'push' into a stack of modifers, so to read from a
1027file, unbase64 it, then decrypt it, a BIO_f_cipher,
1028BIO_f_base64 and a BIO_s_file would probably be used. If a
1029sha-1 and md5 message digest needed to be generated, a stack
1030two BIO_f_md() BIOs and a BIO_s_null() BIO could be used.
1031The base functions are
1032- BIO *BIO_new(BIO_METHOD *type); Create a new BIO of type 'type'.
1033- int BIO_free(BIO *a); Free a BIO structure. Depending on
1034 the configuration, this will free the underlying data
1035 object for a source/sink BIO.
1036- int BIO_read(BIO *b, char *data, int len); Read upto 'len'
1037 bytes into 'data'.
1038- int BIO_gets(BIO *bp,char *buf, int size); Depending on
1039 the BIO, this can either be a 'get special' or a get one
1040 line of data, as per fgets();
1041- int BIO_write(BIO *b, char *data, int len); Write 'len'
1042 bytes from 'data' to the 'b' BIO.
1043- int BIO_puts(BIO *bp,char *buf); Either a 'put special' or
1044 a write null terminated string as per fputs().
1045- long BIO_ctrl(BIO *bp,int cmd,long larg,char *parg); A
1046 control function which is used to manipulate the BIO
1047 structure and modify it's state and or report on it. This
1048 function is just about never used directly, rather it
1049 should be used in conjunction with BIO_METHOD specific
1050 macros.
1051- BIO *BIO_push(BIO *new_top, BIO *old); new_top is apped to the
1052 top of the 'old' BIO list. new_top should be a filter BIO.
1053 All writes will go through 'new_top' first and last on read.
1054 'old' is returned.
1055- BIO *BIO_pop(BIO *bio); the new topmost BIO is returned, NULL if
1056 there are no more.
1057
1058If a particular low level BIO method is not supported
1059(normally BIO_gets()), -2 will be returned if that method is
1060called. Otherwise the IO methods (read, write, gets, puts)
1061will return the number of bytes read or written, and 0 or -1
1062for error (or end of input). For the -1 case,
1063BIO_should_retry(bio) can be called to determine if it was a
1064genuine error or a temporary problem. -2 will also be
1065returned if the BIO has not been initalised yet, in all
1066cases, the correct error codes are set (accessible via the
1067ERR library).
1068
1069
1070The following functions are convenience functions:
1071- int BIO_printf(BIO *bio, char * format, ..); printf but
1072 to a BIO handle.
1073- long BIO_ctrl_int(BIO *bp,int cmd,long larg,int iarg); a
1074 convenience function to allow a different argument types
1075 to be passed to BIO_ctrl().
1076- int BIO_dump(BIO *b,char *bytes,int len); output 'len'
1077 bytes from 'bytes' in a hex dump debug format.
1078- long BIO_debug_callback(BIO *bio, int cmd, char *argp, int
1079 argi, long argl, long ret) - a default debug BIO callback,
1080 this is mentioned below. To use this one normally has to
1081 use the BIO_set_callback_arg() function to assign an
1082 output BIO for the callback to use.
1083- BIO *BIO_find_type(BIO *bio,int type); when there is a 'stack'
1084 of BIOs, this function scan the list and returns the first
1085 that is of type 'type', as listed in buffer.h under BIO_TYPE_XXX.
1086- void BIO_free_all(BIO *bio); Free the bio and all other BIOs
1087 in the list. It walks the bio->next_bio list.
1088
1089
1090
1091Extra commands are normally implemented as macros calling BIO_ctrl().
1092- BIO_number_read(BIO *bio) - the number of bytes processed
1093 by BIO_read(bio,.).
1094- BIO_number_written(BIO *bio) - the number of bytes written
1095 by BIO_write(bio,.).
1096- BIO_reset(BIO *bio) - 'reset' the BIO.
1097- BIO_eof(BIO *bio) - non zero if we are at the current end
1098 of input.
1099- BIO_set_close(BIO *bio, int close_flag) - set the close flag.
1100- BIO_get_close(BIO *bio) - return the close flag.
1101 BIO_pending(BIO *bio) - return the number of bytes waiting
1102 to be read (normally buffered internally).
1103- BIO_flush(BIO *bio) - output any data waiting to be output.
1104- BIO_should_retry(BIO *io) - after a BIO_read/BIO_write
1105 operation returns 0 or -1, a call to this function will
1106 return non zero if you should retry the call later (this
1107 is for non-blocking IO).
1108- BIO_should_read(BIO *io) - we should retry when data can
1109 be read.
1110- BIO_should_write(BIO *io) - we should retry when data can
1111 be written.
1112- BIO_method_name(BIO *io) - return a string for the method name.
1113- BIO_method_type(BIO *io) - return the unique ID of the BIO method.
1114- BIO_set_callback(BIO *io, long (*callback)(BIO *io, int
1115 cmd, char *argp, int argi, long argl, long ret); - sets
1116 the debug callback.
1117- BIO_get_callback(BIO *io) - return the assigned function
1118 as mentioned above.
1119- BIO_set_callback_arg(BIO *io, char *arg) - assign some
1120 data against the BIO. This is normally used by the debug
1121 callback but could in reality be used for anything. To
1122 get an idea of how all this works, have a look at the code
1123 in the default debug callback mentioned above. The
1124 callback can modify the return values.
1125
1126Details of the BIO_METHOD structure.
1127typedef struct bio_method_st
1128 {
1129 int type;
1130 char *name;
1131 int (*bwrite)();
1132 int (*bread)();
1133 int (*bputs)();
1134 int (*bgets)();
1135 long (*ctrl)();
1136 int (*create)();
1137 int (*destroy)();
1138 } BIO_METHOD;
1139
1140The 'type' is the numeric type of the BIO, these are listed in buffer.h;
1141'Name' is a textual representation of the BIO 'type'.
1142The 7 function pointers point to the respective function
1143methods, some of which can be NULL if not implemented.
1144The BIO structure
1145typedef struct bio_st
1146 {
1147 BIO_METHOD *method;
1148 long (*callback)(BIO * bio, int mode, char *argp, int
1149 argi, long argl, long ret);
1150 char *cb_arg; /* first argument for the callback */
1151 int init;
1152 int shutdown;
1153 int flags; /* extra storage */
1154 int num;
1155 char *ptr;
1156 struct bio_st *next_bio; /* used by filter BIOs */
1157 int references;
1158 unsigned long num_read;
1159 unsigned long num_write;
1160 } BIO;
1161
1162- 'Method' is the BIO method.
1163- 'callback', when configured, is called before and after
1164 each BIO method is called for that particular BIO. This
1165 is intended primarily for debugging and of informational feedback.
1166- 'init' is 0 when the BIO can be used for operation.
1167 Often, after a BIO is created, a number of operations may
1168 need to be performed before it is available for use. An
1169 example is for BIO_s_sock(). A socket needs to be
1170 assigned to the BIO before it can be used.
1171- 'shutdown', this flag indicates if the underlying
1172 comunication primative being used should be closed/freed
1173 when the BIO is closed.
1174- 'flags' is used to hold extra state. It is primarily used
1175 to hold information about why a non-blocking operation
1176 failed and to record startup protocol information for the
1177 SSL BIO.
1178- 'num' and 'ptr' are used to hold instance specific state
1179 like file descriptors or local data structures.
1180- 'next_bio' is used by filter BIOs to hold the pointer of the
1181 next BIO in the chain. written data is sent to this BIO and
1182 data read is taken from it.
1183- 'references' is used to indicate the number of pointers to
1184 this structure. This needs to be '1' before a call to
1185 BIO_free() is made if the BIO_free() function is to
1186 actually free() the structure, otherwise the reference
1187 count is just decreased. The actual BIO subsystem does
1188 not really use this functionality but it is useful when
1189 used in more advanced applicaion.
1190- num_read and num_write are the total number of bytes
1191 read/written via the 'read()' and 'write()' methods.
1192
1193BIO_ctrl operations.
1194The following is the list of standard commands passed as the
1195second parameter to BIO_ctrl() and should be supported by
1196all BIO as best as possible. Some are optional, some are
1197manditory, in any case, where is makes sense, a filter BIO
1198should pass such requests to underlying BIO's.
1199- BIO_CTRL_RESET - Reset the BIO back to an initial state.
1200- BIO_CTRL_EOF - return 0 if we are not at the end of input,
1201 non 0 if we are.
1202- BIO_CTRL_INFO - BIO specific special command, normal
1203 information return.
1204- BIO_CTRL_SET - set IO specific parameter.
1205- BIO_CTRL_GET - get IO specific parameter.
1206- BIO_CTRL_GET_CLOSE - Get the close on BIO_free() flag, one
1207 of BIO_CLOSE or BIO_NOCLOSE.
1208- BIO_CTRL_SET_CLOSE - Set the close on BIO_free() flag.
1209- BIO_CTRL_PENDING - Return the number of bytes available
1210 for instant reading
1211- BIO_CTRL_FLUSH - Output pending data, return number of bytes output.
1212- BIO_CTRL_SHOULD_RETRY - After an IO error (-1 returned)
1213 should we 'retry' when IO is possible on the underlying IO object.
1214- BIO_CTRL_RETRY_TYPE - What kind of IO are we waiting on.
1215
1216The following command is a special BIO_s_file() specific option.
1217- BIO_CTRL_SET_FILENAME - specify a file to open for IO.
1218
1219The BIO_CTRL_RETRY_TYPE needs a little more explanation.
1220When performing non-blocking IO, or say reading on a memory
1221BIO, when no data is present (or cannot be written),
1222BIO_read() and/or BIO_write() will return -1.
1223BIO_should_retry(bio) will return true if this is due to an
1224IO condition rather than an actual error. In the case of
1225BIO_s_mem(), a read when there is no data will return -1 and
1226a should retry when there is more 'read' data.
1227The retry type is deduced from 2 macros
1228BIO_should_read(bio) and BIO_should_write(bio).
1229Now while it may appear obvious that a BIO_read() failure
1230should indicate that a retry should be performed when more
1231read data is available, this is often not true when using
1232things like an SSL BIO. During the SSL protocol startup
1233multiple reads and writes are performed, triggered by any
1234SSL_read or SSL_write.
1235So to write code that will transparently handle either a
1236socket or SSL BIO,
1237 i=BIO_read(bio,..)
1238 if (I == -1)
1239 {
1240 if (BIO_should_retry(bio))
1241 {
1242 if (BIO_should_read(bio))
1243 {
1244 /* call us again when BIO can be read */
1245 }
1246 if (BIO_should_write(bio))
1247 {
1248 /* call us again when BIO can be written */
1249 }
1250 }
1251 }
1252
1253At this point in time only read and write conditions can be
1254used but in the future I can see the situation for other
1255conditions, specifically with SSL there could be a condition
1256of a X509 certificate lookup taking place and so the non-
1257blocking BIO_read would require a retry when the certificate
1258lookup subsystem has finished it's lookup. This is all
1259makes more sense and is easy to use in a event loop type
1260setup.
1261When using the SSL BIO, either SSL_read() or SSL_write()s
1262can be called during the protocol startup and things will
1263still work correctly.
1264The nice aspect of the use of the BIO_should_retry() macro
1265is that all the errno codes that indicate a non-fatal error
1266are encapsulated in one place. The Windows specific error
1267codes and WSAGetLastError() calls are also hidden from the
1268application.
1269
1270Notes on each BIO method.
1271Normally buffer.h is just required but depending on the
1272BIO_METHOD, ssl.h or evp.h will also be required.
1273
1274BIO_METHOD *BIO_s_mem(void);
1275- BIO_set_mem_buf(BIO *bio, BUF_MEM *bm, int close_flag) -
1276 set the underlying BUF_MEM structure for the BIO to use.
1277- BIO_get_mem_ptr(BIO *bio, char **pp) - if pp is not NULL,
1278 set it to point to the memory array and return the number
1279 of bytes available.
1280A read/write BIO. Any data written is appended to the
1281memory array and any read is read from the front. This BIO
1282can be used for read/write at the same time. BIO_gets() is
1283supported in the fgets() sense.
1284BIO_CTRL_INFO can be used to retrieve pointers to the memory
1285buffer and it's length.
1286
1287BIO_METHOD *BIO_s_file(void);
1288- BIO_set_fp(BIO *bio, FILE *fp, int close_flag) - set 'FILE *' to use.
1289- BIO_get_fp(BIO *bio, FILE **fp) - get the 'FILE *' in use.
1290- BIO_read_filename(BIO *bio, char *name) - read from file.
1291- BIO_write_filename(BIO *bio, char *name) - write to file.
1292- BIO_append_filename(BIO *bio, char *name) - append to file.
1293This BIO sits over the normal system fread()/fgets() type
1294functions. Gets() is supported. This BIO in theory could be
1295used for read and write but it is best to think of each BIO
1296of this type as either a read or a write BIO, not both.
1297
1298BIO_METHOD *BIO_s_socket(void);
1299BIO_METHOD *BIO_s_fd(void);
1300- BIO_sock_should_retry(int i) - the underlying function
1301 used to determine if a call should be retried; the
1302 argument is the '0' or '-1' returned by the previous BIO
1303 operation.
1304- BIO_fd_should_retry(int i) - same as the
1305- BIO_sock_should_retry() except that it is different internally.
1306- BIO_set_fd(BIO *bio, int fd, int close_flag) - set the
1307 file descriptor to use
1308- BIO_get_fd(BIO *bio, int *fd) - get the file descriptor.
1309These two methods are very similar. Gets() is not
1310supported, if you want this functionality, put a
1311BIO_f_buffer() onto it. This BIO is bi-directional if the
1312underlying file descriptor is. This is normally the case
1313for sockets but not the case for stdio descriptors.
1314
1315BIO_METHOD *BIO_s_null(void);
1316Read and write as much data as you like, it all disappears
1317into this BIO.
1318
1319BIO_METHOD *BIO_f_buffer(void);
1320- BIO_get_buffer_num_lines(BIO *bio) - return the number of
1321 complete lines in the buffer.
1322- BIO_set_buffer_size(BIO *bio, long size) - set the size of
1323 the buffers.
1324This type performs input and output buffering. It performs
1325both at the same time. The size of the buffer can be set
1326via the set buffer size option. Data buffered for output is
1327only written when the buffer fills.
1328
1329BIO_METHOD *BIO_f_ssl(void);
1330- BIO_set_ssl(BIO *bio, SSL *ssl, int close_flag) - the SSL
1331 structure to use.
1332- BIO_get_ssl(BIO *bio, SSL **ssl) - get the SSL structure
1333 in use.
1334The SSL bio is a little different from normal BIOs because
1335the underlying SSL structure is a little different. A SSL
1336structure performs IO via a read and write BIO. These can
1337be different and are normally set via the
1338SSL_set_rbio()/SSL_set_wbio() calls. The SSL_set_fd() calls
1339are just wrappers that create socket BIOs and then call
1340SSL_set_bio() where the read and write BIOs are the same.
1341The BIO_push() operation makes the SSLs IO BIOs the same, so
1342make sure the BIO pushed is capable of two directional
1343traffic. If it is not, you will have to install the BIOs
1344via the more conventional SSL_set_bio() call. BIO_pop() will retrieve
1345the 'SSL read' BIO.
1346
1347BIO_METHOD *BIO_f_md(void);
1348- BIO_set_md(BIO *bio, EVP_MD *md) - set the message digest
1349 to use.
1350- BIO_get_md(BIO *bio, EVP_MD **mdp) - return the digest
1351 method in use in mdp, return 0 if not set yet.
1352- BIO_reset() reinitializes the digest (EVP_DigestInit())
1353 and passes the reset to the underlying BIOs.
1354All data read or written via BIO_read() or BIO_write() to
1355this BIO will be added to the calculated digest. This
1356implies that this BIO is only one directional. If read and
1357write operations are performed, two separate BIO_f_md() BIOs
1358are reuqired to generate digests on both the input and the
1359output. BIO_gets(BIO *bio, char *md, int size) will place the
1360generated digest into 'md' and return the number of bytes.
1361The EVP_MAX_MD_SIZE should probably be used to size the 'md'
1362array. Reading the digest will also reset it.
1363
1364BIO_METHOD *BIO_f_cipher(void);
1365- BIO_reset() reinitializes the cipher.
1366- BIO_flush() should be called when the last bytes have been
1367 output to flush the final block of block ciphers.
1368- BIO_get_cipher_status(BIO *b), when called after the last
1369 read from a cipher BIO, returns non-zero if the data
1370 decrypted correctly, otherwise, 0.
1371- BIO_set_cipher(BIO *b, EVP_CIPHER *c, unsigned char *key,
1372 unsigned char *iv, int encrypt) This function is used to
1373 setup a cipher BIO. The length of key and iv are
1374 specified by the choice of EVP_CIPHER. Encrypt is 1 to
1375 encrypt and 0 to decrypt.
1376
1377BIO_METHOD *BIO_f_base64(void);
1378- BIO_flush() should be called when the last bytes have been output.
1379This BIO base64 encodes when writing and base64 decodes when
1380reading. It will scan the input until a suitable begin line
1381is found. After reading data, BIO_reset() will reset the
1382BIO to start scanning again. Do not mix reading and writing
1383on the same base64 BIO. It is meant as a single stream BIO.
1384
1385Directions type
1386both BIO_s_mem()
1387one/both BIO_s_file()
1388both BIO_s_fd()
1389both BIO_s_socket()
1390both BIO_s_null()
1391both BIO_f_buffer()
1392one BIO_f_md()
1393one BIO_f_cipher()
1394one BIO_f_base64()
1395both BIO_f_ssl()
1396
1397It is easy to mix one and two directional BIOs, all one has
1398to do is to keep two separate BIO pointers for reading and
1399writing and be careful about usage of underlying BIOs. The
1400SSL bio by it's very nature has to be two directional but
1401the BIO_push() command will push the one BIO into the SSL
1402BIO for both reading and writing.
1403
1404The best example program to look at is apps/enc.c and/or perhaps apps/dgst.c.
1405
1406
1407==== blowfish.doc ========================================================
1408
1409The Blowfish library.
1410
1411Blowfish is a block cipher that operates on 64bit (8 byte) quantities. It
1412uses variable size key, but 128bit (16 byte) key would normally be considered
1413good. It can be used in all the modes that DES can be used. This
1414library implements the ecb, cbc, cfb64, ofb64 modes.
1415
1416Blowfish is quite a bit faster that DES, and much faster than IDEA or
1417RC2. It is one of the faster block ciphers.
1418
1419For all calls that have an 'input' and 'output' variables, they can be the
1420same.
1421
1422This library requires the inclusion of 'blowfish.h'.
1423
1424All of the encryption functions take what is called an BF_KEY as an
1425argument. An BF_KEY is an expanded form of the Blowfish key.
1426For all modes of the Blowfish algorithm, the BF_KEY used for
1427decryption is the same one that was used for encryption.
1428
1429The define BF_ENCRYPT is passed to specify encryption for the functions
1430that require an encryption/decryption flag. BF_DECRYPT is passed to
1431specify decryption.
1432
1433Please note that any of the encryption modes specified in my DES library
1434could be used with Blowfish. I have only implemented ecb, cbc, cfb64 and
1435ofb64 for the following reasons.
1436- ecb is the basic Blowfish encryption.
1437- cbc is the normal 'chaining' form for block ciphers.
1438- cfb64 can be used to encrypt single characters, therefore input and output
1439 do not need to be a multiple of 8.
1440- ofb64 is similar to cfb64 but is more like a stream cipher, not as
1441 secure (not cipher feedback) but it does not have an encrypt/decrypt mode.
1442- If you want triple Blowfish, thats 384 bits of key and you must be totally
1443 obsessed with security. Still, if you want it, it is simple enough to
1444 copy the function from the DES library and change the des_encrypt to
1445 BF_encrypt; an exercise left for the paranoid reader :-).
1446
1447The functions are as follows:
1448
1449void BF_set_key(
1450BF_KEY *ks;
1451int len;
1452unsigned char *key;
1453 BF_set_key converts an 'len' byte key into a BF_KEY.
1454 A 'ks' is an expanded form of the 'key' which is used to
1455 perform actual encryption. It can be regenerated from the Blowfish key
1456 so it only needs to be kept when encryption or decryption is about
1457 to occur. Don't save or pass around BF_KEY's since they
1458 are CPU architecture dependent, 'key's are not. Blowfish is an
1459 interesting cipher in that it can be used with a variable length
1460 key. 'len' is the length of 'key' to be used as the key.
1461 A 'len' of 16 is recomended by me, but blowfish can use upto
1462 72 bytes. As a warning, blowfish has a very very slow set_key
1463 function, it actually runs BF_encrypt 521 times.
1464
1465void BF_encrypt(unsigned long *data, BF_KEY *key);
1466void BF_decrypt(unsigned long *data, BF_KEY *key);
1467 These are the Blowfish encryption function that gets called by just
1468 about every other Blowfish routine in the library. You should not
1469 use this function except to implement 'modes' of Blowfish.
1470 I say this because the
1471 functions that call this routine do the conversion from 'char *' to
1472 long, and this needs to be done to make sure 'non-aligned' memory
1473 access do not occur.
1474 Data is a pointer to 2 unsigned long's and key is the
1475 BF_KEY to use.
1476
1477void BF_ecb_encrypt(
1478unsigned char *in,
1479unsigned char *out,
1480BF_KEY *key,
1481int encrypt);
1482 This is the basic Electronic Code Book form of Blowfish (in DES this
1483 mode is called Electronic Code Book so I'm going to use the term
1484 for blowfish as well.
1485 Input is encrypted into output using the key represented by
1486 key. Depending on the encrypt, encryption or
1487 decryption occurs. Input is 8 bytes long and output is 8 bytes.
1488
1489void BF_cbc_encrypt(
1490unsigned char *in,
1491unsigned char *out,
1492long length,
1493BF_KEY *ks,
1494unsigned char *ivec,
1495int encrypt);
1496 This routine implements Blowfish in Cipher Block Chaining mode.
1497 Input, which should be a multiple of 8 bytes is encrypted
1498 (or decrypted) to output which will also be a multiple of 8 bytes.
1499 The number of bytes is in length (and from what I've said above,
1500 should be a multiple of 8). If length is not a multiple of 8, bad
1501 things will probably happen. ivec is the initialisation vector.
1502 This function updates iv after each call so that it can be passed to
1503 the next call to BF_cbc_encrypt().
1504
1505void BF_cfb64_encrypt(
1506unsigned char *in,
1507unsigned char *out,
1508long length,
1509BF_KEY *schedule,
1510unsigned char *ivec,
1511int *num,
1512int encrypt);
1513 This is one of the more useful functions in this Blowfish library, it
1514 implements CFB mode of Blowfish with 64bit feedback.
1515 This allows you to encrypt an arbitrary number of bytes,
1516 you do not require 8 byte padding. Each call to this
1517 routine will encrypt the input bytes to output and then update ivec
1518 and num. Num contains 'how far' we are though ivec.
1519 'Encrypt' is used to indicate encryption or decryption.
1520 CFB64 mode operates by using the cipher to generate a stream
1521 of bytes which is used to encrypt the plain text.
1522 The cipher text is then encrypted to generate the next 64 bits to
1523 be xored (incrementally) with the next 64 bits of plain
1524 text. As can be seen from this, to encrypt or decrypt,
1525 the same 'cipher stream' needs to be generated but the way the next
1526 block of data is gathered for encryption is different for
1527 encryption and decryption.
1528
1529void BF_ofb64_encrypt(
1530unsigned char *in,
1531unsigned char *out,
1532long length,
1533BF_KEY *schedule,
1534unsigned char *ivec,
1535int *num);
1536 This functions implements OFB mode of Blowfish with 64bit feedback.
1537 This allows you to encrypt an arbitrary number of bytes,
1538 you do not require 8 byte padding. Each call to this
1539 routine will encrypt the input bytes to output and then update ivec
1540 and num. Num contains 'how far' we are though ivec.
1541 This is in effect a stream cipher, there is no encryption or
1542 decryption mode.
1543
1544For reading passwords, I suggest using des_read_pw_string() from my DES library.
1545To generate a password from a text string, I suggest using MD5 (or MD2) to
1546produce a 16 byte message digest that can then be passed directly to
1547BF_set_key().
1548
1549=====
1550For more information about the specific Blowfish modes in this library
1551(ecb, cbc, cfb and ofb), read the section entitled 'Modes of DES' from the
1552documentation on my DES library. What is said about DES is directly
1553applicable for Blowfish.
1554
1555
1556==== bn.doc ========================================================
1557
1558The Big Number library.
1559
1560#include "bn.h" when using this library.
1561
1562This big number library was written for use in implementing the RSA and DH
1563public key encryption algorithms. As such, features such as negative
1564numbers have not been extensively tested but they should work as expected.
1565This library uses dynamic memory allocation for storing its data structures
1566and so there are no limit on the size of the numbers manipulated by these
1567routines but there is always the requirement to check return codes from
1568functions just in case a memory allocation error has occurred.
1569
1570The basic object in this library is a BIGNUM. It is used to hold a single
1571large integer. This type should be considered opaque and fields should not
1572be modified or accessed directly.
1573typedef struct bignum_st
1574 {
1575 int top; /* Index of last used d. */
1576 BN_ULONG *d; /* Pointer to an array of 'BITS2' bit chunks. */
1577 int max; /* Size of the d array. */
1578 int neg;
1579 } BIGNUM;
1580The big number is stored in a malloced array of BN_ULONG's. A BN_ULONG can
1581be either 16, 32 or 64 bits in size, depending on the 'number of bits'
1582specified in bn.h.
1583The 'd' field is this array. 'max' is the size of the 'd' array that has
1584been allocated. 'top' is the 'last' entry being used, so for a value of 4,
1585bn.d[0]=4 and bn.top=1. 'neg' is 1 if the number is negative.
1586When a BIGNUM is '0', the 'd' field can be NULL and top == 0.
1587
1588Various routines in this library require the use of 'temporary' BIGNUM
1589variables during their execution. Due to the use of dynamic memory
1590allocation to create BIGNUMs being rather expensive when used in
1591conjunction with repeated subroutine calls, the BN_CTX structure is
1592used. This structure contains BN_CTX BIGNUMs. BN_CTX
1593is the maximum number of temporary BIGNUMs any publicly exported
1594function will use.
1595
1596#define BN_CTX 12
1597typedef struct bignum_ctx
1598 {
1599 int tos; /* top of stack */
1600 BIGNUM *bn[BN_CTX]; /* The variables */
1601 } BN_CTX;
1602
1603The functions that follow have been grouped according to function. Most
1604arithmetic functions return a result in the first argument, sometimes this
1605first argument can also be an input parameter, sometimes it cannot. These
1606restrictions are documented.
1607
1608extern BIGNUM *BN_value_one;
1609There is one variable defined by this library, a BIGNUM which contains the
1610number 1. This variable is useful for use in comparisons and assignment.
1611
1612Get Size functions.
1613
1614int BN_num_bits(BIGNUM *a);
1615 This function returns the size of 'a' in bits.
1616
1617int BN_num_bytes(BIGNUM *a);
1618 This function (macro) returns the size of 'a' in bytes.
1619 For conversion of BIGNUMs to byte streams, this is the number of
1620 bytes the output string will occupy. If the output byte
1621 format specifies that the 'top' bit indicates if the number is
1622 signed, so an extra '0' byte is required if the top bit on a
1623 positive number is being written, it is upto the application to
1624 make this adjustment. Like I said at the start, I don't
1625 really support negative numbers :-).
1626
1627Creation/Destruction routines.
1628
1629BIGNUM *BN_new();
1630 Return a new BIGNUM object. The number initially has a value of 0. If
1631 there is an error, NULL is returned.
1632
1633void BN_free(BIGNUM *a);
1634 Free()s a BIGNUM.
1635
1636void BN_clear(BIGNUM *a);
1637 Sets 'a' to a value of 0 and also zeros all unused allocated
1638 memory. This function is used to clear a variable of 'sensitive'
1639 data that was held in it.
1640
1641void BN_clear_free(BIGNUM *a);
1642 This function zeros the memory used by 'a' and then free()'s it.
1643 This function should be used to BN_free() BIGNUMS that have held
1644 sensitive numeric values like RSA private key values. Both this
1645 function and BN_clear tend to only be used by RSA and DH routines.
1646
1647BN_CTX *BN_CTX_new(void);
1648 Returns a new BN_CTX. NULL on error.
1649
1650void BN_CTX_free(BN_CTX *c);
1651 Free a BN_CTX structure. The BIGNUMs in 'c' are BN_clear_free()ed.
1652
1653BIGNUM *bn_expand(BIGNUM *b, int bits);
1654 This is an internal function that should not normally be used. It
1655 ensures that 'b' has enough room for a 'bits' bit number. It is
1656 mostly used by the various BIGNUM routines. If there is an error,
1657 NULL is returned. if not, 'b' is returned.
1658
1659BIGNUM *BN_copy(BIGNUM *to, BIGNUM *from);
1660 The 'from' is copied into 'to'. NULL is returned if there is an
1661 error, otherwise 'to' is returned.
1662
1663BIGNUM *BN_dup(BIGNUM *a);
1664 A new BIGNUM is created and returned containing the value of 'a'.
1665 NULL is returned on error.
1666
1667Comparison and Test Functions.
1668
1669int BN_is_zero(BIGNUM *a)
1670 Return 1 if 'a' is zero, else 0.
1671
1672int BN_is_one(a)
1673 Return 1 is 'a' is one, else 0.
1674
1675int BN_is_word(a,w)
1676 Return 1 if 'a' == w, else 0. 'w' is a BN_ULONG.
1677
1678int BN_cmp(BIGNUM *a, BIGNUM *b);
1679 Return -1 if 'a' is less than 'b', 0 if 'a' and 'b' are the same
1680 and 1 is 'a' is greater than 'b'. This is a signed comparison.
1681
1682int BN_ucmp(BIGNUM *a, BIGNUM *b);
1683 This function is the same as BN_cmp except that the comparison
1684 ignores the sign of the numbers.
1685
1686Arithmetic Functions
1687For all of these functions, 0 is returned if there is an error and 1 is
1688returned for success. The return value should always be checked. eg.
1689if (!BN_add(r,a,b)) goto err;
1690Unless explicitly mentioned, the 'return' value can be one of the
1691'parameters' to the function.
1692
1693int BN_add(BIGNUM *r, BIGNUM *a, BIGNUM *b);
1694 Add 'a' and 'b' and return the result in 'r'. This is r=a+b.
1695
1696int BN_sub(BIGNUM *r, BIGNUM *a, BIGNUM *b);
1697 Subtract 'a' from 'b' and put the result in 'r'. This is r=a-b.
1698
1699int BN_lshift(BIGNUM *r, BIGNUM *a, int n);
1700 Shift 'a' left by 'n' bits. This is r=a*(2^n).
1701
1702int BN_lshift1(BIGNUM *r, BIGNUM *a);
1703 Shift 'a' left by 1 bit. This form is more efficient than
1704 BN_lshift(r,a,1). This is r=a*2.
1705
1706int BN_rshift(BIGNUM *r, BIGNUM *a, int n);
1707 Shift 'a' right by 'n' bits. This is r=int(a/(2^n)).
1708
1709int BN_rshift1(BIGNUM *r, BIGNUM *a);
1710 Shift 'a' right by 1 bit. This form is more efficient than
1711 BN_rshift(r,a,1). This is r=int(a/2).
1712
1713int BN_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b);
1714 Multiply a by b and return the result in 'r'. 'r' must not be
1715 either 'a' or 'b'. It has to be a different BIGNUM.
1716 This is r=a*b.
1717
1718int BN_sqr(BIGNUM *r, BIGNUM *a, BN_CTX *ctx);
1719 Multiply a by a and return the result in 'r'. 'r' must not be
1720 'a'. This function is alot faster than BN_mul(r,a,a). This is r=a*a.
1721
1722int BN_div(BIGNUM *dv, BIGNUM *rem, BIGNUM *m, BIGNUM *d, BN_CTX *ctx);
1723 Divide 'm' by 'd' and return the result in 'dv' and the remainder
1724 in 'rem'. Either of 'dv' or 'rem' can be NULL in which case that
1725 value is not returned. 'ctx' needs to be passed as a source of
1726 temporary BIGNUM variables.
1727 This is dv=int(m/d), rem=m%d.
1728
1729int BN_mod(BIGNUM *rem, BIGNUM *m, BIGNUM *d, BN_CTX *ctx);
1730 Find the remainder of 'm' divided by 'd' and return it in 'rem'.
1731 'ctx' holds the temporary BIGNUMs required by this function.
1732 This function is more efficient than BN_div(NULL,rem,m,d,ctx);
1733 This is rem=m%d.
1734
1735int BN_mod_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, BIGNUM *m,BN_CTX *ctx);
1736 Multiply 'a' by 'b' and return the remainder when divided by 'm'.
1737 'ctx' holds the temporary BIGNUMs required by this function.
1738 This is r=(a*b)%m.
1739
1740int BN_mod_exp(BIGNUM *r, BIGNUM *a, BIGNUM *p, BIGNUM *m,BN_CTX *ctx);
1741 Raise 'a' to the 'p' power and return the remainder when divided by
1742 'm'. 'ctx' holds the temporary BIGNUMs required by this function.
1743 This is r=(a^p)%m.
1744
1745int BN_reciprocal(BIGNUM *r, BIGNUM *m, BN_CTX *ctx);
1746 Return the reciprocal of 'm'. 'ctx' holds the temporary variables
1747 required. This function returns -1 on error, otherwise it returns
1748 the number of bits 'r' is shifted left to make 'r' into an integer.
1749 This number of bits shifted is required in BN_mod_mul_reciprocal().
1750 This is r=(1/m)<<(BN_num_bits(m)+1).
1751
1752int BN_mod_mul_reciprocal(BIGNUM *r, BIGNUM *x, BIGNUM *y, BIGNUM *m,
1753 BIGNUM *i, int nb, BN_CTX *ctx);
1754 This function is used to perform an efficient BN_mod_mul()
1755 operation. If one is going to repeatedly perform BN_mod_mul() with
1756 the same modulus is worth calculating the reciprocal of the modulus
1757 and then using this function. This operation uses the fact that
1758 a/b == a*r where r is the reciprocal of b. On modern computers
1759 multiplication is very fast and big number division is very slow.
1760 'x' is multiplied by 'y' and then divided by 'm' and the remainder
1761 is returned. 'i' is the reciprocal of 'm' and 'nb' is the number
1762 of bits as returned from BN_reciprocal(). Normal usage is as follows.
1763 bn=BN_reciprocal(i,m);
1764 for (...)
1765 { BN_mod_mul_reciprocal(r,x,y,m,i,bn,ctx); }
1766 This is r=(x*y)%m. Internally it is approximately
1767 r=(x*y)-m*(x*y/m) or r=(x*y)-m*((x*y*i) >> bn)
1768 This function is used in BN_mod_exp() and BN_is_prime().
1769
1770Assignment Operations
1771
1772int BN_one(BIGNUM *a)
1773 Set 'a' to hold the value one.
1774 This is a=1.
1775
1776int BN_zero(BIGNUM *a)
1777 Set 'a' to hold the value zero.
1778 This is a=0.
1779
1780int BN_set_word(BIGNUM *a, unsigned long w);
1781 Set 'a' to hold the value of 'w'. 'w' is an unsigned long.
1782 This is a=w.
1783
1784unsigned long BN_get_word(BIGNUM *a);
1785 Returns 'a' in an unsigned long. Not remarkably, often 'a' will
1786 be biger than a word, in which case 0xffffffffL is returned.
1787
1788Word Operations
1789These functions are much more efficient that the normal bignum arithmetic
1790operations.
1791
1792BN_ULONG BN_mod_word(BIGNUM *a, unsigned long w);
1793 Return the remainder of 'a' divided by 'w'.
1794 This is return(a%w).
1795
1796int BN_add_word(BIGNUM *a, unsigned long w);
1797 Add 'w' to 'a'. This function does not take the sign of 'a' into
1798 account. This is a+=w;
1799
1800Bit operations.
1801
1802int BN_is_bit_set(BIGNUM *a, int n);
1803 This function return 1 if bit 'n' is set in 'a' else 0.
1804
1805int BN_set_bit(BIGNUM *a, int n);
1806 This function sets bit 'n' to 1 in 'a'.
1807 This is a&= ~(1<<n);
1808
1809int BN_clear_bit(BIGNUM *a, int n);
1810 This function sets bit 'n' to zero in 'a'. Return 0 if less
1811 than 'n' bits in 'a' else 1. This is a&= ~(1<<n);
1812
1813int BN_mask_bits(BIGNUM *a, int n);
1814 Truncate 'a' to n bits long. This is a&= ~((~0)<<n)
1815
1816Format conversion routines.
1817
1818BIGNUM *BN_bin2bn(unsigned char *s, int len,BIGNUM *ret);
1819 This function converts 'len' bytes in 's' into a BIGNUM which
1820 is put in 'ret'. If ret is NULL, a new BIGNUM is created.
1821 Either this new BIGNUM or ret is returned. The number is
1822 assumed to be in bigendian form in 's'. By this I mean that
1823 to 'ret' is created as follows for 'len' == 5.
1824 ret = s[0]*2^32 + s[1]*2^24 + s[2]*2^16 + s[3]*2^8 + s[4];
1825 This function cannot be used to convert negative numbers. It
1826 is always assumed the number is positive. The application
1827 needs to diddle the 'neg' field of th BIGNUM its self.
1828 The better solution would be to save the numbers in ASN.1 format
1829 since this is a defined standard for storing big numbers.
1830 Look at the functions
1831
1832 ASN1_INTEGER *BN_to_ASN1_INTEGER(BIGNUM *bn, ASN1_INTEGER *ai);
1833 BIGNUM *ASN1_INTEGER_to_BN(ASN1_INTEGER *ai,BIGNUM *bn);
1834 int i2d_ASN1_INTEGER(ASN1_INTEGER *a,unsigned char **pp);
1835 ASN1_INTEGER *d2i_ASN1_INTEGER(ASN1_INTEGER **a,unsigned char **pp,
1836 long length;
1837
1838int BN_bn2bin(BIGNUM *a, unsigned char *to);
1839 This function converts 'a' to a byte string which is put into
1840 'to'. The representation is big-endian in that the most
1841 significant byte of 'a' is put into to[0]. This function
1842 returns the number of bytes used to hold 'a'. BN_num_bytes(a)
1843 would return the same value and can be used to determine how
1844 large 'to' needs to be. If the number is negative, this
1845 information is lost. Since this library was written to
1846 manipulate large positive integers, the inability to save and
1847 restore them is not considered to be a problem by me :-).
1848 As for BN_bin2bn(), look at the ASN.1 integer encoding funtions
1849 for SSLeay. They use BN_bin2bn() and BN_bn2bin() internally.
1850
1851char *BN_bn2ascii(BIGNUM *a);
1852 This function returns a malloc()ed string that contains the
1853 ascii hexadecimal encoding of 'a'. The number is in bigendian
1854 format with a '-' in front if the number is negative.
1855
1856int BN_ascii2bn(BIGNUM **bn, char *a);
1857 The inverse of BN_bn2ascii. The function returns the number of
1858 characters from 'a' were processed in generating a the bignum.
1859 error is inticated by 0 being returned. The number is a
1860 hex digit string, optionally with a leading '-'. If *bn
1861 is null, a BIGNUM is created and returned via that variable.
1862
1863int BN_print_fp(FILE *fp, BIGNUM *a);
1864 'a' is printed to file pointer 'fp'. It is in the same format
1865 that is output from BN_bn2ascii(). 0 is returned on error,
1866 1 if things are ok.
1867
1868int BN_print(BIO *bp, BIGNUM *a);
1869 Same as BN_print except that the output is done to the SSLeay libraries
1870 BIO routines. BN_print_fp() actually calls this function.
1871
1872Miscellaneous Routines.
1873
1874int BN_rand(BIGNUM *rnd, int bits, int top, int bottom);
1875 This function returns in 'rnd' a random BIGNUM that is bits
1876 long. If bottom is 1, the number returned is odd. If top is set,
1877 the top 2 bits of the number are set. This is useful because if
1878 this is set, 2 'n; bit numbers multiplied together will return a 2n
1879 bit number. If top was not set, they could produce a 2n-1 bit
1880 number.
1881
1882BIGNUM *BN_mod_inverse(BIGNUM *a, BIGNUM *n,BN_CTX *ctx);
1883 This function create a new BIGNUM and returns it. This number
1884 is the inverse mod 'n' of 'a'. By this it is meant that the
1885 returned value 'r' satisfies (a*r)%n == 1. This function is
1886 used in the generation of RSA keys. 'ctx', as per usual,
1887 is used to hold temporary variables that are required by the
1888 function. NULL is returned on error.
1889
1890int BN_gcd(BIGNUM *r,BIGNUM *a,BIGNUM *b,BN_CTX *ctx);
1891 'r' has the greatest common divisor of 'a' and 'b'. 'ctx' is
1892 used for temporary variables and 0 is returned on error.
1893
1894int BN_is_prime(BIGNUM *p,int nchecks,void (*callback)(),BN_CTX *ctx,
1895 char *cb_arg);
1896 This function is used to check if a BIGNUM ('p') is prime.
1897 It performs this test by using the Miller-Rabin randomised
1898 primality test. This is a probalistic test that requires a
1899 number of rounds to ensure the number is prime to a high
1900 degree of probability. Since this can take quite some time, a
1901 callback function can be passed and it will be called each
1902 time 'p' passes a round of the prime testing. 'callback' will
1903 be called as follows, callback(1,n,cb_arg) where n is the number of
1904 the round, just passed. As per usual 'ctx' contains temporary
1905 variables used. If ctx is NULL, it does not matter, a local version
1906 will be malloced. This parameter is present to save some mallocing
1907 inside the function but probably could be removed.
1908 0 is returned on error.
1909 'ncheck' is the number of Miller-Rabin tests to run. It is
1910 suggested to use the value 'BN_prime_checks' by default.
1911
1912BIGNUM *BN_generate_prime(
1913int bits,
1914int strong,
1915BIGNUM *a,
1916BIGNUM *rems,
1917void (*callback)());
1918char *cb_arg
1919 This function is used to generate prime numbers. It returns a
1920 new BIGNUM that has a high probability of being a prime.
1921 'bits' is the number of bits that
1922 are to be in the prime. If 'strong' is true, the returned prime
1923 will also be a strong prime ((p-1)/2 is also prime).
1924 While searching for the prime ('p'), we
1925 can add the requirement that the prime fill the following
1926 condition p%a == rem. This can be used to help search for
1927 primes with specific features, which is required when looking
1928 for primes suitable for use with certain 'g' values in the
1929 Diffie-Hellman key exchange algorithm. If 'a' is NULL,
1930 this condition is not checked. If rem is NULL, rem is assumed
1931 to be 1. Since this search for a prime
1932 can take quite some time, if callback is not NULL, it is called
1933 in the following situations.
1934 We have a suspected prime (from a quick sieve),
1935 callback(0,sus_prime++,cb_arg). Each item to be passed to BN_is_prime().
1936 callback(1,round++,cb_arg). Each successful 'round' in BN_is_prime().
1937 callback(2,round,cb_arg). For each successful BN_is_prime() test.
1938
1939Hints
1940-----
1941
1942DSA wants 64*32 to use word mont mul, but RSA wants to use full.
1943
1944==== callback.doc ========================================================
1945
1946Callback functions used in SSLeay.
1947
1948--------------------------
1949The BIO library.
1950
1951Each BIO structure can have a callback defined against it. This callback is
1952called 2 times for each BIO 'function'. It is passed 6 parameters.
1953BIO_debug_callback() is an example callback which is defined in
1954crypto/buffer/bio_cb.c and is used in apps/dgst.c This is intended mostly
1955for debuging or to notify the application of IO.
1956
1957long BIO_debug_callback(BIO *bio,int cmd,char *argp,int argi,long argl,
1958 long ret);
1959bio is the BIO being called, cmd is the type of BIO function being called.
1960Look at the BIO_CB_* defines in buffer.h. Argp and argi are the arguments
1961passed to BIO_read(), BIO_write, BIO_gets(), BIO_puts(). In the case of
1962BIO_ctrl(), argl is also defined. The first time the callback is called,
1963before the underlying function has been executed, 0 is passed as 'ret', and
1964if the return code from the callback is not > 0, the call is aborted
1965and the returned <= 0 value is returned.
1966The second time the callback is called, the 'cmd' value also has
1967BIO_CB_RETURN logically 'or'ed with it. The 'ret' value is the value returned
1968from the actuall function call and whatever the callback returns is returned
1969from the BIO function.
1970
1971BIO_set_callback(b,cb) can be used to set the callback function
1972(b is a BIO), and BIO_set_callback_arg(b,arg) can be used to
1973set the cb_arg argument in the BIO strucutre. This field is only intended
1974to be used by application, primarily in the callback function since it is
1975accessable since the BIO is passed.
1976
1977--------------------------
1978The PEM library.
1979
1980The pem library only really uses one type of callback,
1981static int def_callback(char *buf, int num, int verify);
1982which is used to return a password string if required.
1983'buf' is the buffer to put the string in. 'num' is the size of 'buf'
1984and 'verify' is used to indicate that the password should be checked.
1985This last flag is mostly used when reading a password for encryption.
1986
1987For all of these functions, a NULL callback will call the above mentioned
1988default callback. This default function does not work under Windows 3.1.
1989For other machines, it will use an application defined prompt string
1990(EVP_set_pw_prompt(), which defines a library wide prompt string)
1991if defined, otherwise it will use it's own PEM password prompt.
1992It will then call EVP_read_pw_string() to get a password from the console.
1993If your application wishes to use nice fancy windows to retrieve passwords,
1994replace this function. The callback should return the number of bytes read
1995into 'buf'. If the number of bytes <= 0, it is considered an error.
1996
1997Functions that take this callback are listed below. For the 'read' type
1998functions, the callback will only be required if the PEM data is encrypted.
1999
2000For the Write functions, normally a password can be passed in 'kstr', of
2001'klen' bytes which will be used if the 'enc' cipher is not NULL. If
2002'kstr' is NULL, the callback will be used to retrieve a password.
2003
2004int PEM_do_header (EVP_CIPHER_INFO *cipher, unsigned char *data,long *len,
2005 int (*callback)());
2006char *PEM_ASN1_read_bio(char *(*d2i)(),char *name,BIO *bp,char **x,int (*cb)());
2007char *PEM_ASN1_read(char *(*d2i)(),char *name,FILE *fp,char **x,int (*cb)());
2008int PEM_ASN1_write_bio(int (*i2d)(),char *name,BIO *bp,char *x,
2009 EVP_CIPHER *enc,unsigned char *kstr,int klen,int (*callback)());
2010int PEM_ASN1_write(int (*i2d)(),char *name,FILE *fp,char *x,
2011 EVP_CIPHER *enc,unsigned char *kstr,int klen,int (*callback)());
2012STACK *PEM_X509_INFO_read(FILE *fp, STACK *sk, int (*cb)());
2013STACK *PEM_X509_INFO_read_bio(BIO *fp, STACK *sk, int (*cb)());
2014
2015#define PEM_write_RSAPrivateKey(fp,x,enc,kstr,klen,cb)
2016#define PEM_write_DSAPrivateKey(fp,x,enc,kstr,klen,cb)
2017#define PEM_write_bio_RSAPrivateKey(bp,x,enc,kstr,klen,cb)
2018#define PEM_write_bio_DSAPrivateKey(bp,x,enc,kstr,klen,cb)
2019#define PEM_read_SSL_SESSION(fp,x,cb)
2020#define PEM_read_X509(fp,x,cb)
2021#define PEM_read_X509_REQ(fp,x,cb)
2022#define PEM_read_X509_CRL(fp,x,cb)
2023#define PEM_read_RSAPrivateKey(fp,x,cb)
2024#define PEM_read_DSAPrivateKey(fp,x,cb)
2025#define PEM_read_PrivateKey(fp,x,cb)
2026#define PEM_read_PKCS7(fp,x,cb)
2027#define PEM_read_DHparams(fp,x,cb)
2028#define PEM_read_bio_SSL_SESSION(bp,x,cb)
2029#define PEM_read_bio_X509(bp,x,cb)
2030#define PEM_read_bio_X509_REQ(bp,x,cb)
2031#define PEM_read_bio_X509_CRL(bp,x,cb)
2032#define PEM_read_bio_RSAPrivateKey(bp,x,cb)
2033#define PEM_read_bio_DSAPrivateKey(bp,x,cb)
2034#define PEM_read_bio_PrivateKey(bp,x,cb)
2035#define PEM_read_bio_PKCS7(bp,x,cb)
2036#define PEM_read_bio_DHparams(bp,x,cb)
2037int i2d_Netscape_RSA(RSA *a, unsigned char **pp, int (*cb)());
2038RSA *d2i_Netscape_RSA(RSA **a, unsigned char **pp, long length, int (*cb)());
2039
2040Now you will notice that macros like
2041#define PEM_write_X509(fp,x) \
2042 PEM_ASN1_write((int (*)())i2d_X509,PEM_STRING_X509,fp, \
2043 (char *)x, NULL,NULL,0,NULL)
2044Don't do encryption normally. If you want to PEM encrypt your X509 structure,
2045either just call PEM_ASN1_write directly or just define you own
2046macro variant. As you can see, this macro just sets all encryption related
2047parameters to NULL.
2048
2049
2050--------------------------
2051The SSL library.
2052
2053#define SSL_set_info_callback(ssl,cb)
2054#define SSL_CTX_set_info_callback(ctx,cb)
2055void callback(SSL *ssl,int location,int ret)
2056This callback is called each time around the SSL_connect()/SSL_accept()
2057state machine. So it will be called each time the SSL protocol progresses.
2058It is mostly present for use when debugging. When SSL_connect() or
2059SSL_accept() return, the location flag is SSL_CB_ACCEPT_EXIT or
2060SSL_CB_CONNECT_EXIT and 'ret' is the value about to be returned.
2061Have a look at the SSL_CB_* defines in ssl.h. If an info callback is defined
2062against the SSL_CTX, it is called unless there is one set against the SSL.
2063Have a look at
2064void client_info_callback() in apps/s_client() for an example.
2065
2066Certificate verification.
2067void SSL_set_verify(SSL *s, int mode, int (*callback) ());
2068void SSL_CTX_set_verify(SSL_CTX *ctx,int mode,int (*callback)());
2069This callback is used to help verify client and server X509 certificates.
2070It is actually passed to X509_cert_verify(), along with the SSL structure
2071so you have to read about X509_cert_verify() :-). The SSL_CTX version is used
2072if the SSL version is not defined. X509_cert_verify() is the function used
2073by the SSL part of the library to verify certificates. This function is
2074nearly always defined by the application.
2075
2076void SSL_CTX_set_cert_verify_cb(SSL_CTX *ctx, int (*cb)(),char *arg);
2077int callback(char *arg,SSL *s,X509 *xs,STACK *cert_chain);
2078This call is used to replace the SSLeay certificate verification code.
2079The 'arg' is kept in the SSL_CTX and is passed to the callback.
2080If the callback returns 0, the certificate is rejected, otherwise it
2081is accepted. The callback is replacing the X509_cert_verify() call.
2082This feature is not often used, but if you wished to implement
2083some totally different certificate authentication system, this 'hook' is
2084vital.
2085
2086SSLeay keeps a cache of session-ids against each SSL_CTX. These callbacks can
2087be used to notify the application when a SSL_SESSION is added to the cache
2088or to retrieve a SSL_SESSION that is not in the cache from the application.
2089#define SSL_CTX_sess_set_get_cb(ctx,cb)
2090SSL_SESSION *callback(SSL *s,char *session_id,int session_id_len,int *copy);
2091If defined, this callback is called to return the SESSION_ID for the
2092session-id in 'session_id', of 'session_id_len' bytes. 'copy' is set to 1
2093if the server is to 'take a copy' of the SSL_SESSION structure. It is 0
2094if the SSL_SESSION is being 'passed in' so the SSLeay library is now
2095responsible for 'free()ing' the structure. Basically it is used to indicate
2096if the reference count on the SSL_SESSION structure needs to be incremented.
2097
2098#define SSL_CTX_sess_set_new_cb(ctx,cb)
2099int callback(SSL *s, SSL_SESSION *sess);
2100When a new connection is established, if the SSL_SESSION is going to be added
2101to the cache, this callback is called. Return 1 if a 'copy' is required,
2102otherwise, return 0. This return value just causes the reference count
2103to be incremented (on return of a 1), this means the application does
2104not need to worry about incrementing the refernece count (and the
2105locking that implies in a multi-threaded application).
2106
2107void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx,int (*cb)());
2108This sets the SSL password reading function.
2109It is mostly used for windowing applications
2110and used by PEM_read_bio_X509() and PEM_read_bio_RSAPrivateKey()
2111calls inside the SSL library. The only reason this is present is because the
2112calls to PEM_* functions is hidden in the SSLeay library so you have to
2113pass in the callback some how.
2114
2115#define SSL_CTX_set_client_cert_cb(ctx,cb)
2116int callback(SSL *s,X509 **x509, EVP_PKEY **pkey);
2117Called when a client certificate is requested but there is not one set
2118against the SSL_CTX or the SSL. If the callback returns 1, x509 and
2119pkey need to point to valid data. The library will free these when
2120required so if the application wants to keep these around, increment
2121their reference counts. If 0 is returned, no client cert is
2122available. If -1 is returned, it is assumed that the callback needs
2123to be called again at a later point in time. SSL_connect will return
2124-1 and SSL_want_x509_lookup(ssl) returns true. Remember that
2125application data can be attached to an SSL structure via the
2126SSL_set_app_data(SSL *ssl,char *data) call.
2127
2128--------------------------
2129The X509 library.
2130
2131int X509_cert_verify(CERTIFICATE_CTX *ctx,X509 *xs, int (*cb)(),
2132 int *error,char *arg,STACK *cert_chain);
2133int verify_callback(int ok,X509 *xs,X509 *xi,int depth,int error,char *arg,
2134 STACK *cert_chain);
2135
2136X509_cert_verify() is used to authenticate X509 certificates. The 'ctx' holds
2137the details of the various caches and files used to locate certificates.
2138'xs' is the certificate to verify and 'cb' is the application callback (more
2139detail later). 'error' will be set to the error code and 'arg' is passed
2140to the 'cb' callback. Look at the VERIFY_* defines in crypto/x509/x509.h
2141
2142When ever X509_cert_verify() makes a 'negative' decision about a
2143certitificate, the callback is called. If everything checks out, the
2144callback is called with 'VERIFY_OK' or 'VERIFY_ROOT_OK' (for a self
2145signed cert that is not the passed certificate).
2146
2147The callback is passed the X509_cert_verify opinion of the certificate
2148in 'ok', the certificate in 'xs', the issuer certificate in 'xi',
2149the 'depth' of the certificate in the verification 'chain', the
2150VERIFY_* code in 'error' and the argument passed to X509_cert_verify()
2151in 'arg'. cert_chain is a list of extra certs to use if they are not
2152in the cache.
2153
2154The callback can be used to look at the error reason, and then return 0
2155for an 'error' or '1' for ok. This will override the X509_cert_verify()
2156opinion of the certificates validity. Processing will continue depending on
2157the return value. If one just wishes to use the callback for informational
2158reason, just return the 'ok' parameter.
2159
2160--------------------------
2161The BN and DH library.
2162
2163BIGNUM *BN_generate_prime(int bits,int strong,BIGNUM *add,
2164 BIGNUM *rem,void (*callback)(int,int));
2165int BN_is_prime(BIGNUM *p,int nchecks,void (*callback)(int,int),
2166
2167Read doc/bn.doc for the description of these 2.
2168
2169DH *DH_generate_parameters(int prime_len,int generator,
2170 void (*callback)(int,int));
2171Read doc/bn.doc for the description of the callback, since it is just passed
2172to BN_generate_prime(), except that it is also called as
2173callback(3,0) by this function.
2174
2175--------------------------
2176The CRYPTO library.
2177
2178void CRYPTO_set_locking_callback(void (*func)(int mode,int type,char *file,
2179 int line));
2180void CRYPTO_set_add_lock_callback(int (*func)(int *num,int mount,
2181 int type,char *file, int line));
2182void CRYPTO_set_id_callback(unsigned long (*func)(void));
2183
2184Read threads.doc for info on these ones.
2185
2186
2187==== cipher.doc ========================================================
2188
2189The Cipher subroutines.
2190
2191These routines require "evp.h" to be included.
2192
2193These functions are a higher level interface to the various cipher
2194routines found in this library. As such, they allow the same code to be
2195used to encrypt and decrypt via different ciphers with only a change
2196in an initial parameter. These routines also provide buffering for block
2197ciphers.
2198
2199These routines all take a pointer to the following structure to specify
2200which cipher to use. If you wish to use a new cipher with these routines,
2201you would probably be best off looking an how an existing cipher is
2202implemented and copying it. At this point in time, I'm not going to go
2203into many details. This structure should be considered opaque
2204
2205typedef struct pem_cipher_st
2206 {
2207 int type;
2208 int block_size;
2209 int key_len;
2210 int iv_len;
2211 void (*enc_init)(); /* init for encryption */
2212 void (*dec_init)(); /* init for decryption */
2213 void (*do_cipher)(); /* encrypt data */
2214 } EVP_CIPHER;
2215
2216The type field is the object NID of the cipher type
2217(read the section on Objects for an explanation of what a NID is).
2218The cipher block_size is how many bytes need to be passed
2219to the cipher at a time. Key_len is the
2220length of the key the cipher requires and iv_len is the length of the
2221initialisation vector required. enc_init is the function
2222called to initialise the ciphers context for encryption and dec_init is the
2223function to initialise for decryption (they need to be different, especially
2224for the IDEA cipher).
2225
2226One reason for specifying the Cipher via a pointer to a structure
2227is that if you only use des-cbc, only the des-cbc routines will
2228be included when you link the program. If you passed an integer
2229that specified which cipher to use, the routine that mapped that
2230integer to a set of cipher functions would cause all the ciphers
2231to be link into the code. This setup also allows new ciphers
2232to be added by the application (with some restrictions).
2233
2234The thirteen ciphers currently defined in this library are
2235
2236EVP_CIPHER *EVP_des_ecb(); /* DES in ecb mode, iv=0, block=8, key= 8 */
2237EVP_CIPHER *EVP_des_ede(); /* DES in ecb ede mode, iv=0, block=8, key=16 */
2238EVP_CIPHER *EVP_des_ede3(); /* DES in ecb ede mode, iv=0, block=8, key=24 */
2239EVP_CIPHER *EVP_des_cfb(); /* DES in cfb mode, iv=8, block=1, key= 8 */
2240EVP_CIPHER *EVP_des_ede_cfb(); /* DES in ede cfb mode, iv=8, block=1, key=16 */
2241EVP_CIPHER *EVP_des_ede3_cfb();/* DES in ede cfb mode, iv=8, block=1, key=24 */
2242EVP_CIPHER *EVP_des_ofb(); /* DES in ofb mode, iv=8, block=1, key= 8 */
2243EVP_CIPHER *EVP_des_ede_ofb(); /* DES in ede ofb mode, iv=8, block=1, key=16 */
2244EVP_CIPHER *EVP_des_ede3_ofb();/* DES in ede ofb mode, iv=8, block=1, key=24 */
2245EVP_CIPHER *EVP_des_cbc(); /* DES in cbc mode, iv=8, block=8, key= 8 */
2246EVP_CIPHER *EVP_des_ede_cbc(); /* DES in cbc ede mode, iv=8, block=8, key=16 */
2247EVP_CIPHER *EVP_des_ede3_cbc();/* DES in cbc ede mode, iv=8, block=8, key=24 */
2248EVP_CIPHER *EVP_desx_cbc(); /* DES in desx cbc mode,iv=8, block=8, key=24 */
2249EVP_CIPHER *EVP_rc4(); /* RC4, iv=0, block=1, key=16 */
2250EVP_CIPHER *EVP_idea_ecb(); /* IDEA in ecb mode, iv=0, block=8, key=16 */
2251EVP_CIPHER *EVP_idea_cfb(); /* IDEA in cfb mode, iv=8, block=1, key=16 */
2252EVP_CIPHER *EVP_idea_ofb(); /* IDEA in ofb mode, iv=8, block=1, key=16 */
2253EVP_CIPHER *EVP_idea_cbc(); /* IDEA in cbc mode, iv=8, block=8, key=16 */
2254EVP_CIPHER *EVP_rc2_ecb(); /* RC2 in ecb mode, iv=0, block=8, key=16 */
2255EVP_CIPHER *EVP_rc2_cfb(); /* RC2 in cfb mode, iv=8, block=1, key=16 */
2256EVP_CIPHER *EVP_rc2_ofb(); /* RC2 in ofb mode, iv=8, block=1, key=16 */
2257EVP_CIPHER *EVP_rc2_cbc(); /* RC2 in cbc mode, iv=8, block=8, key=16 */
2258EVP_CIPHER *EVP_bf_ecb(); /* Blowfish in ecb mode,iv=0, block=8, key=16 */
2259EVP_CIPHER *EVP_bf_cfb(); /* Blowfish in cfb mode,iv=8, block=1, key=16 */
2260EVP_CIPHER *EVP_bf_ofb(); /* Blowfish in ofb mode,iv=8, block=1, key=16 */
2261EVP_CIPHER *EVP_bf_cbc(); /* Blowfish in cbc mode,iv=8, block=8, key=16 */
2262
2263The meaning of the compound names is as follows.
2264des The base cipher is DES.
2265idea The base cipher is IDEA
2266rc4 The base cipher is RC4-128
2267rc2 The base cipher is RC2-128
2268ecb Electronic Code Book form of the cipher.
2269cbc Cipher Block Chaining form of the cipher.
2270cfb 64 bit Cipher Feedback form of the cipher.
2271ofb 64 bit Output Feedback form of the cipher.
2272ede The cipher is used in Encrypt, Decrypt, Encrypt mode. The first
2273 and last keys are the same.
2274ede3 The cipher is used in Encrypt, Decrypt, Encrypt mode.
2275
2276All the Cipher routines take a EVP_CIPHER_CTX pointer as an argument.
2277The state of the cipher is kept in this structure.
2278
2279typedef struct EVP_CIPHER_Ctx_st
2280 {
2281 EVP_CIPHER *cipher;
2282 int encrypt; /* encrypt or decrypt */
2283 int buf_len; /* number we have left */
2284 unsigned char buf[8];
2285 union {
2286 .... /* cipher specific stuff */
2287 } c;
2288 } EVP_CIPHER_CTX;
2289
2290Cipher is a pointer the the EVP_CIPHER for the current context. The encrypt
2291flag indicates encryption or decryption. buf_len is the number of bytes
2292currently being held in buf.
2293The 'c' union holds the cipher specify context.
2294
2295The following functions are to be used.
2296
2297int EVP_read_pw_string(
2298char *buf,
2299int len,
2300char *prompt,
2301int verify,
2302 This function is the same as des_read_pw_string() (des.doc).
2303
2304void EVP_set_pw_prompt(char *prompt);
2305 This function sets the 'default' prompt to use to use in
2306 EVP_read_pw_string when the prompt parameter is NULL. If the
2307 prompt parameter is NULL, this 'default prompt' feature is turned
2308 off. Be warned, this is a global variable so weird things
2309 will happen if it is used under Win16 and care must be taken
2310 with a multi-threaded version of the library.
2311
2312char *EVP_get_pw_prompt();
2313 This returns a pointer to the default prompt string. NULL
2314 if it is not set.
2315
2316int EVP_BytesToKey(
2317EVP_CIPHER *type,
2318EVP_MD *md,
2319unsigned char *salt,
2320unsigned char *data,
2321int datal,
2322int count,
2323unsigned char *key,
2324unsigned char *iv);
2325 This function is used to generate a key and an initialisation vector
2326 for a specified cipher from a key string and a salt. Type
2327 specifies the cipher the 'key' is being generated for. Md is the
2328 message digest algorithm to use to generate the key and iv. The salt
2329 is an optional 8 byte object that is used to help seed the key
2330 generator.
2331 If the salt value is NULL, it is just not used. Datal is the
2332 number of bytes to use from 'data' in the key generation.
2333 This function returns the key size for the specified cipher, if
2334 data is NULL, this value is returns and no other
2335 computation is performed. Count is
2336 the number of times to loop around the key generator. I would
2337 suggest leaving it's value as 1. Key and iv are the structures to
2338 place the returning iv and key in. If they are NULL, no value is
2339 generated for that particular value.
2340 The algorithm used is as follows
2341
2342 /* M[] is an array of message digests
2343 * MD() is the message digest function */
2344 M[0]=MD(data . salt);
2345 for (i=1; i<count; i++) M[0]=MD(M[0]);
2346
2347 i=1
2348 while (data still needed for key and iv)
2349 {
2350 M[i]=MD(M[i-1] . data . salt);
2351 for (i=1; i<count; i++) M[i]=MD(M[i]);
2352 i++;
2353 }
2354
2355 If the salt is NULL, it is not used.
2356 The digests are concatenated together.
2357 M = M[0] . M[1] . M[2] .......
2358
2359 For key= 8, iv=8 => key=M[0.. 8], iv=M[ 9 .. 16].
2360 For key=16, iv=0 => key=M[0..16].
2361 For key=16, iv=8 => key=M[0..16], iv=M[17 .. 24].
2362 For key=24, iv=8 => key=M[0..24], iv=M[25 .. 32].
2363
2364 This routine will produce DES-CBC keys and iv that are compatible
2365 with the PKCS-5 standard when md2 or md5 are used. If md5 is
2366 used, the salt is NULL and count is 1, this routine will produce
2367 the password to key mapping normally used with RC4.
2368 I have attempted to logically extend the PKCS-5 standard to
2369 generate keys and iv for ciphers that require more than 16 bytes,
2370 if anyone knows what the correct standard is, please inform me.
2371 When using sha or sha1, things are a bit different under this scheme,
2372 since sha produces a 20 byte digest. So for ciphers requiring
2373 24 bits of data, 20 will come from the first MD and 4 will
2374 come from the second.
2375
2376 I have considered having a separate function so this 'routine'
2377 can be used without the requirement of passing a EVP_CIPHER *,
2378 but I have decided to not bother. If you wish to use the
2379 function without official EVP_CIPHER structures, just declare
2380 a local one and set the key_len and iv_len fields to the
2381 length you desire.
2382
2383The following routines perform encryption and decryption 'by parts'. By
2384this I mean that there are groups of 3 routines. An Init function that is
2385used to specify a cipher and initialise data structures. An Update routine
2386that does encryption/decryption, one 'chunk' at a time. And finally a
2387'Final' function that finishes the encryption/decryption process.
2388All these functions take a EVP_CIPHER pointer to specify which cipher to
2389encrypt/decrypt with. They also take a EVP_CIPHER_CTX object as an
2390argument. This structure is used to hold the state information associated
2391with the operation in progress.
2392
2393void EVP_EncryptInit(
2394EVP_CIPHER_CTX *ctx,
2395EVP_CIPHER *type,
2396unsigned char *key,
2397unsigned char *iv);
2398 This function initialise a EVP_CIPHER_CTX for encryption using the
2399 cipher passed in the 'type' field. The cipher is initialised to use
2400 'key' as the key and 'iv' for the initialisation vector (if one is
2401 required). If the type, key or iv is NULL, the value currently in the
2402 EVP_CIPHER_CTX is reused. So to perform several decrypt
2403 using the same cipher, key and iv, initialise with the cipher,
2404 key and iv the first time and then for subsequent calls,
2405 reuse 'ctx' but pass NULL for type, key and iv. You must make sure
2406 to pass a key that is large enough for a particular cipher. I
2407 would suggest using the EVP_BytesToKey() function.
2408
2409void EVP_EncryptUpdate(
2410EVP_CIPHER_CTX *ctx,
2411unsigned char *out,
2412int *outl,
2413unsigned char *in,
2414int inl);
2415 This function takes 'inl' bytes from 'in' and outputs bytes
2416 encrypted by the cipher 'ctx' was initialised with into 'out'. The
2417 number of bytes written to 'out' is put into outl. If a particular
2418 cipher encrypts in blocks, less or more bytes than input may be
2419 output. Currently the largest block size used by supported ciphers
2420 is 8 bytes, so 'out' should have room for 'inl+7' bytes. Normally
2421 EVP_EncryptInit() is called once, followed by lots and lots of
2422 calls to EVP_EncryptUpdate, followed by a single EVP_EncryptFinal
2423 call.
2424
2425void EVP_EncryptFinal(
2426EVP_CIPHER_CTX *ctx,
2427unsigned char *out,
2428int *outl);
2429 Because quite a large number of ciphers are block ciphers, there is
2430 often an incomplete block to write out at the end of the
2431 encryption. EVP_EncryptFinal() performs processing on this last
2432 block. The last block in encoded in such a way that it is possible
2433 to determine how many bytes in the last block are valid. For 8 byte
2434 block size ciphers, if only 5 bytes in the last block are valid, the
2435 last three bytes will be filled with the value 3. If only 2 were
2436 valid, the other 6 would be filled with sixes. If all 8 bytes are
2437 valid, a extra 8 bytes are appended to the cipher stream containing
2438 nothing but 8 eights. These last bytes are output into 'out' and
2439 the number of bytes written is put into 'outl' These last bytes
2440 are output into 'out' and the number of bytes written is put into
2441 'outl'. This form of block cipher finalisation is compatible with
2442 PKCS-5. Please remember that even if you are using ciphers like
2443 RC4 that has no blocking and so the function will not write
2444 anything into 'out', it would still be a good idea to pass a
2445 variable for 'out' that can hold 8 bytes just in case the cipher is
2446 changed some time in the future. It should also be remembered
2447 that the EVP_CIPHER_CTX contains the password and so when one has
2448 finished encryption with a particular EVP_CIPHER_CTX, it is good
2449 practice to zero the structure
2450 (ie. memset(ctx,0,sizeof(EVP_CIPHER_CTX)).
2451
2452void EVP_DecryptInit(
2453EVP_CIPHER_CTX *ctx,
2454EVP_CIPHER *type,
2455unsigned char *key,
2456unsigned char *iv);
2457 This function is basically the same as EVP_EncryptInit() accept that
2458 is prepares the EVP_CIPHER_CTX for decryption.
2459
2460void EVP_DecryptUpdate(
2461EVP_CIPHER_CTX *ctx,
2462unsigned char *out,
2463int *outl,
2464unsigned char *in,
2465int inl);
2466 This function is basically the same as EVP_EncryptUpdate()
2467 except that it performs decryption. There is one
2468 fundamental difference though. 'out' can not be the same as
2469 'in' for any ciphers with a block size greater than 1 if more
2470 than one call to EVP_DecryptUpdate() will be made. This
2471 is because this routine can hold a 'partial' block between
2472 calls. When a partial block is decrypted (due to more bytes
2473 being passed via this function, they will be written to 'out'
2474 overwriting the input bytes in 'in' that have not been read
2475 yet. From this it should also be noted that 'out' should
2476 be at least one 'block size' larger than 'inl'. This problem
2477 only occurs on the second and subsequent call to
2478 EVP_DecryptUpdate() when using a block cipher.
2479
2480int EVP_DecryptFinal(
2481EVP_CIPHER_CTX *ctx,
2482unsigned char *out,
2483int *outl);
2484 This function is different to EVP_EncryptFinal in that it 'removes'
2485 any padding bytes appended when the data was encrypted. Due to the
2486 way in which 1 to 8 bytes may have been appended when encryption
2487 using a block cipher, 'out' can end up with 0 to 7 bytes being put
2488 into it. When decoding the padding bytes, it is possible to detect
2489 an incorrect decryption. If the decryption appears to be wrong, 0
2490 is returned. If everything seems ok, 1 is returned. For ciphers
2491 with a block size of 1 (RC4), this function would normally not
2492 return any bytes and would always return 1. Just because this
2493 function returns 1 does not mean the decryption was correct. It
2494 would normally be wrong due to either the wrong key/iv or
2495 corruption of the cipher data fed to EVP_DecryptUpdate().
2496 As for EVP_EncryptFinal, it is a good idea to zero the
2497 EVP_CIPHER_CTX after use since the structure contains the key used
2498 to decrypt the data.
2499
2500The following Cipher routines are convenience routines that call either
2501EVP_EncryptXxx or EVP_DecryptXxx depending on weather the EVP_CIPHER_CTX
2502was setup to encrypt or decrypt.
2503
2504void EVP_CipherInit(
2505EVP_CIPHER_CTX *ctx,
2506EVP_CIPHER *type,
2507unsigned char *key,
2508unsigned char *iv,
2509int enc);
2510 This function take arguments that are the same as EVP_EncryptInit()
2511 and EVP_DecryptInit() except for the extra 'enc' flag. If 1, the
2512 EVP_CIPHER_CTX is setup for encryption, if 0, decryption.
2513
2514void EVP_CipherUpdate(
2515EVP_CIPHER_CTX *ctx,
2516unsigned char *out,
2517int *outl,
2518unsigned char *in,
2519int inl);
2520 Again this function calls either EVP_EncryptUpdate() or
2521 EVP_DecryptUpdate() depending on state in the 'ctx' structure.
2522 As noted for EVP_DecryptUpdate(), when this routine is used
2523 for decryption with block ciphers, 'out' should not be the
2524 same as 'in'.
2525
2526int EVP_CipherFinal(
2527EVP_CIPHER_CTX *ctx,
2528unsigned char *outm,
2529int *outl);
2530 This routine call EVP_EncryptFinal() or EVP_DecryptFinal()
2531 depending on the state information in 'ctx'. 1 is always returned
2532 if the mode is encryption, otherwise the return value is the return
2533 value of EVP_DecryptFinal().
2534
2535==== cipher.m ========================================================
2536
2537Date: Tue, 15 Oct 1996 08:16:14 +1000 (EST)
2538From: Eric Young <eay@mincom.com>
2539X-Sender: eay@orb
2540To: Roland Haring <rharing@tandem.cl>
2541Cc: ssl-users@mincom.com
2542Subject: Re: Symmetric encryption with ssleay
2543In-Reply-To: <m0vBpyq-00001aC@tandemnet.tandem.cl>
2544Message-Id: <Pine.SOL.3.91.961015075623.11394A-100000@orb>
2545Mime-Version: 1.0
2546Content-Type: TEXT/PLAIN; charset=US-ASCII
2547Sender: ssl-lists-owner@mincom.com
2548Precedence: bulk
2549Status: RO
2550X-Status:
2551
2552On Fri, 11 Oct 1996, Roland Haring wrote:
2553> THE_POINT:
2554> Would somebody be so kind to give me the minimum basic
2555> calls I need to do to libcrypto.a to get some text encrypted
2556> and decrypted again? ...hopefully with code included to do
2557> base64 encryption and decryption ... e.g. that sign-it.c code
2558> posted some while ago was a big help :-) (please, do not point
2559> me to apps/enc.c where I suspect my Heissenbug to be hidden :-)
2560
2561Ok, the base64 encoding stuff in 'enc.c' does the wrong thing sometimes
2562when the data is less than a line long (this is for decoding). I'll dig
2563up the exact fix today and post it. I am taking longer on 0.6.5 than I
2564intended so I'll just post this patch.
2565
2566The documentation to read is in
2567doc/cipher.doc,
2568doc/encode.doc (very sparse :-).
2569and perhaps
2570doc/digest.doc,
2571
2572The basic calls to encrypt with say triple DES are
2573
2574Given
2575char key[EVP_MAX_KEY_LENGTH];
2576char iv[EVP_MAX_IV_LENGTH];
2577EVP_CIPHER_CTX ctx;
2578unsigned char out[512+8];
2579int outl;
2580
2581/* optional generation of key/iv data from text password using md5
2582 * via an upward compatable verson of PKCS#5. */
2583EVP_BytesToKey(EVP_des_ede3_cbc,EVP_md5,NULL,passwd,strlen(passwd),
2584 key,iv);
2585
2586/* Initalise the EVP_CIPHER_CTX */
2587EVP_EncryptInit(ctx,EVP_des_ede3_cbc,key,iv);
2588
2589while (....)
2590 {
2591 /* This is processing 512 bytes at a time, the bytes are being
2592 * copied into 'out', outl bytes are output. 'out' should not be the
2593 * same as 'in' for reasons mentioned in the documentation. */
2594 EVP_EncryptUpdate(ctx,out,&outl,in,512);
2595 }
2596
2597/* Output the last 'block'. If the cipher is a block cipher, the last
2598 * block is encoded in such a way so that a wrong decryption will normally be
2599 * detected - again, one of the PKCS standards. */
2600
2601EVP_EncryptFinal(ctx,out,&outl);
2602
2603To decrypt, use the EVP_DecryptXXXXX functions except that EVP_DecryptFinal()
2604will return 0 if the decryption fails (only detectable on block ciphers).
2605
2606You can also use
2607EVP_CipherInit()
2608EVP_CipherUpdate()
2609EVP_CipherFinal()
2610which does either encryption or decryption depending on an extra
2611parameter to EVP_CipherInit().
2612
2613
2614To do the base64 encoding,
2615EVP_EncodeInit()
2616EVP_EncodeUpdate()
2617EVP_EncodeFinal()
2618
2619EVP_DecodeInit()
2620EVP_DecodeUpdate()
2621EVP_DecodeFinal()
2622
2623where the encoding is quite simple, but the decoding can be a bit more
2624fun (due to dud input).
2625
2626EVP_DecodeUpdate() returns -1 for an error on an input line, 0 if the
2627'last line' was just processed, and 1 if more lines should be submitted.
2628
2629EVP_DecodeFinal() returns -1 for an error or 1 if things are ok.
2630
2631So the loop becomes
2632EVP_DecodeInit(....)
2633for (;;)
2634 {
2635 i=EVP_DecodeUpdate(....);
2636 if (i < 0) goto err;
2637
2638 /* process the data */
2639
2640 if (i == 0) break;
2641 }
2642EVP_DecodeFinal(....);
2643/* process the data */
2644
2645The problem in 'enc.c' is that I was stuff the processing up after the
2646EVP_DecodeFinal(...) when the for(..) loop was not being run (one line of
2647base64 data) and this was because 'enc.c' tries to scan over a file until
2648it hits the first valid base64 encoded line.
2649
2650hope this helps a bit.
2651eric
2652--
2653Eric Young | BOOL is tri-state according to Bill Gates.
2654AARNet: eay@mincom.oz.au | RTFM Win32 GetMessage().
2655
2656==== conf.doc ========================================================
2657
2658The CONF library.
2659
2660The CONF library is a simple set of routines that can be used to configure
2661programs. It is a superset of the genenv() function with some extra
2662structure.
2663
2664The library consists of 5 functions.
2665
2666LHASH *CONF_load(LHASH *config,char *file);
2667This function is called to load in a configuration file. Multiple
2668configuration files can be loaded, with each subsequent 'load' overwriting
2669any already defined 'variables'. If there is an error, NULL is returned.
2670If config is NULL, a new LHASH structure is created and returned, otherwise
2671the new data in the 'file' is loaded into the 'config' structure.
2672
2673void CONF_free(LHASH *config);
2674This function free()s the data in config.
2675
2676char *CONF_get_string(LHASH *config,char *section,char *name);
2677This function returns the string found in 'config' that corresponds to the
2678'section' and 'name' specified. Classes and the naming system used will be
2679discussed later in this document. If the variable is not defined, an NULL
2680is returned.
2681
2682long CONF_get_long(LHASH *config,char *section, char *name);
2683This function is the same as CONF_get_string() except that it converts the
2684string to an long and returns it. If variable is not a number or the
2685variable does not exist, 0 is returned. This is a little problematic but I
2686don't know of a simple way around it.
2687
2688STACK *CONF_get_section(LHASH *config, char *section);
2689This function returns a 'stack' of CONF_VALUE items that are all the
2690items defined in a particular section. DO NOT free() any of the
2691variable returned. They will disappear when CONF_free() is called.
2692
2693The 'lookup' model.
2694The configuration file is divided into 'sections'. Each section is started by
2695a line of the form '[ section ]'. All subsequent variable definitions are
2696of this section. A variable definition is a simple alpha-numeric name
2697followed by an '=' and then the data. A section or variable name can be
2698described by a regular expression of the following form '[A-Za-z0-9_]+'.
2699The value of the variable is the text after the '=' until the end of the
2700line, stripped of leading and trailing white space.
2701At this point I should mention that a '#' is a comment character, \ is the
2702escape character, and all three types of quote can be used to stop any
2703special interpretation of the data.
2704Now when the data is being loaded, variable expansion can occur. This is
2705done by expanding any $NAME sequences into the value represented by the
2706variable NAME. If the variable is not in the current section, the different
2707section can be specified by using the $SECTION::NAME form. The ${NAME} form
2708also works and is very useful for expanding variables inside strings.
2709
2710When a variable is looked up, there are 2 special section. 'default', which
2711is the initial section, and 'ENV' which is the processes environment
2712variables (accessed via getenv()). When a variable is looked up, it is
2713first 'matched' with it's section (if one was specified), if this fails, the
2714'default' section is matched.
2715If the 'lhash' variable passed was NULL, the environment is searched.
2716
2717Now why do we bother with sections? So we can have multiple programs using
2718the same configuration file, or multiple instances of the same program
2719using different variables. It also provides a nice mechanism to override
2720the processes environment variables (eg ENV::HOME=/tmp). If there is a
2721program specific variable missing, we can have default values.
2722Multiple configuration files can be loaded, with each new value clearing
2723any predefined values. A system config file can provide 'default' values,
2724and application/usr specific files can provide overriding values.
2725
2726Examples
2727
2728# This is a simple example
2729SSLEAY_HOME = /usr/local/ssl
2730ENV::PATH = $SSLEAY_HOME/bin:$PATH # override my path
2731
2732[X509]
2733cert_dir = $SSLEAY_HOME/certs # /usr/local/ssl/certs
2734
2735[SSL]
2736CIPHER = DES-EDE-MD5:RC4-MD5
2737USER_CERT = $HOME/${USER}di'r 5' # /home/eay/eaydir 5
2738USER_CERT = $HOME/\${USER}di\'r # /home/eay/${USER}di'r
2739USER_CERT = "$HOME/${US"ER}di\'r # $HOME/${USER}di'r
2740
2741TEST = 1234\
27425678\
27439ab # TEST=123456789ab
2744TTT = 1234\n\n # TTT=1234<nl><nl>
2745
2746
2747
2748==== des.doc ========================================================
2749
2750The DES library.
2751
2752Please note that this library was originally written to operate with
2753eBones, a version of Kerberos that had had encryption removed when it left
2754the USA and then put back in. As such there are some routines that I will
2755advise not using but they are still in the library for historical reasons.
2756For all calls that have an 'input' and 'output' variables, they can be the
2757same.
2758
2759This library requires the inclusion of 'des.h'.
2760
2761All of the encryption functions take what is called a des_key_schedule as an
2762argument. A des_key_schedule is an expanded form of the des key.
2763A des_key is 8 bytes of odd parity, the type used to hold the key is a
2764des_cblock. A des_cblock is an array of 8 bytes, often in this library
2765description I will refer to input bytes when the function specifies
2766des_cblock's as input or output, this just means that the variable should
2767be a multiple of 8 bytes.
2768
2769The define DES_ENCRYPT is passed to specify encryption, DES_DECRYPT to
2770specify decryption. The functions and global variable are as follows:
2771
2772int des_check_key;
2773 DES keys are supposed to be odd parity. If this variable is set to
2774 a non-zero value, des_set_key() will check that the key has odd
2775 parity and is not one of the known weak DES keys. By default this
2776 variable is turned off;
2777
2778void des_set_odd_parity(
2779des_cblock *key );
2780 This function takes a DES key (8 bytes) and sets the parity to odd.
2781
2782int des_is_weak_key(
2783des_cblock *key );
2784 This function returns a non-zero value if the DES key passed is a
2785 weak, DES key. If it is a weak key, don't use it, try a different
2786 one. If you are using 'random' keys, the chances of hitting a weak
2787 key are 1/2^52 so it is probably not worth checking for them.
2788
2789int des_set_key(
2790des_cblock *key,
2791des_key_schedule schedule);
2792 Des_set_key converts an 8 byte DES key into a des_key_schedule.
2793 A des_key_schedule is an expanded form of the key which is used to
2794 perform actual encryption. It can be regenerated from the DES key
2795 so it only needs to be kept when encryption or decryption is about
2796 to occur. Don't save or pass around des_key_schedule's since they
2797 are CPU architecture dependent, DES keys are not. If des_check_key
2798 is non zero, zero is returned if the key has the wrong parity or
2799 the key is a weak key, else 1 is returned.
2800
2801int des_key_sched(
2802des_cblock *key,
2803des_key_schedule schedule);
2804 An alternative name for des_set_key().
2805
2806int des_rw_mode; /* defaults to DES_PCBC_MODE */
2807 This flag holds either DES_CBC_MODE or DES_PCBC_MODE (default).
2808 This specifies the function to use in the enc_read() and enc_write()
2809 functions.
2810
2811void des_encrypt(
2812unsigned long *data,
2813des_key_schedule ks,
2814int enc);
2815 This is the DES encryption function that gets called by just about
2816 every other DES routine in the library. You should not use this
2817 function except to implement 'modes' of DES. I say this because the
2818 functions that call this routine do the conversion from 'char *' to
2819 long, and this needs to be done to make sure 'non-aligned' memory
2820 access do not occur. The characters are loaded 'little endian',
2821 have a look at my source code for more details on how I use this
2822 function.
2823 Data is a pointer to 2 unsigned long's and ks is the
2824 des_key_schedule to use. enc, is non zero specifies encryption,
2825 zero if decryption.
2826
2827void des_encrypt2(
2828unsigned long *data,
2829des_key_schedule ks,
2830int enc);
2831 This functions is the same as des_encrypt() except that the DES
2832 initial permutation (IP) and final permutation (FP) have been left
2833 out. As for des_encrypt(), you should not use this function.
2834 It is used by the routines in my library that implement triple DES.
2835 IP() des_encrypt2() des_encrypt2() des_encrypt2() FP() is the same
2836 as des_encrypt() des_encrypt() des_encrypt() except faster :-).
2837
2838void des_ecb_encrypt(
2839des_cblock *input,
2840des_cblock *output,
2841des_key_schedule ks,
2842int enc);
2843 This is the basic Electronic Code Book form of DES, the most basic
2844 form. Input is encrypted into output using the key represented by
2845 ks. If enc is non zero (DES_ENCRYPT), encryption occurs, otherwise
2846 decryption occurs. Input is 8 bytes long and output is 8 bytes.
2847 (the des_cblock structure is 8 chars).
2848
2849void des_ecb3_encrypt(
2850des_cblock *input,
2851des_cblock *output,
2852des_key_schedule ks1,
2853des_key_schedule ks2,
2854des_key_schedule ks3,
2855int enc);
2856 This is the 3 key EDE mode of ECB DES. What this means is that
2857 the 8 bytes of input is encrypted with ks1, decrypted with ks2 and
2858 then encrypted again with ks3, before being put into output;
2859 C=E(ks3,D(ks2,E(ks1,M))). There is a macro, des_ecb2_encrypt()
2860 that only takes 2 des_key_schedules that implements,
2861 C=E(ks1,D(ks2,E(ks1,M))) in that the final encrypt is done with ks1.
2862
2863void des_cbc_encrypt(
2864des_cblock *input,
2865des_cblock *output,
2866long length,
2867des_key_schedule ks,
2868des_cblock *ivec,
2869int enc);
2870 This routine implements DES in Cipher Block Chaining mode.
2871 Input, which should be a multiple of 8 bytes is encrypted
2872 (or decrypted) to output which will also be a multiple of 8 bytes.
2873 The number of bytes is in length (and from what I've said above,
2874 should be a multiple of 8). If length is not a multiple of 8, I'm
2875 not being held responsible :-). ivec is the initialisation vector.
2876 This function does not modify this variable. To correctly implement
2877 cbc mode, you need to do one of 2 things; copy the last 8 bytes of
2878 cipher text for use as the next ivec in your application,
2879 or use des_ncbc_encrypt().
2880 Only this routine has this problem with updating the ivec, all
2881 other routines that are implementing cbc mode update ivec.
2882
2883void des_ncbc_encrypt(
2884des_cblock *input,
2885des_cblock *output,
2886long length,
2887des_key_schedule sk,
2888des_cblock *ivec,
2889int enc);
2890 For historical reasons, des_cbc_encrypt() did not update the
2891 ivec with the value requires so that subsequent calls to
2892 des_cbc_encrypt() would 'chain'. This was needed so that the same
2893 'length' values would not need to be used when decrypting.
2894 des_ncbc_encrypt() does the right thing. It is the same as
2895 des_cbc_encrypt accept that ivec is updates with the correct value
2896 to pass in subsequent calls to des_ncbc_encrypt(). I advise using
2897 des_ncbc_encrypt() instead of des_cbc_encrypt();
2898
2899void des_xcbc_encrypt(
2900des_cblock *input,
2901des_cblock *output,
2902long length,
2903des_key_schedule sk,
2904des_cblock *ivec,
2905des_cblock *inw,
2906des_cblock *outw,
2907int enc);
2908 This is RSA's DESX mode of DES. It uses inw and outw to
2909 'whiten' the encryption. inw and outw are secret (unlike the iv)
2910 and are as such, part of the key. So the key is sort of 24 bytes.
2911 This is much better than cbc des.
2912
2913void des_3cbc_encrypt(
2914des_cblock *input,
2915des_cblock *output,
2916long length,
2917des_key_schedule sk1,
2918des_key_schedule sk2,
2919des_cblock *ivec1,
2920des_cblock *ivec2,
2921int enc);
2922 This function is flawed, do not use it. I have left it in the
2923 library because it is used in my des(1) program and will function
2924 correctly when used by des(1). If I removed the function, people
2925 could end up unable to decrypt files.
2926 This routine implements outer triple cbc encryption using 2 ks and
2927 2 ivec's. Use des_ede2_cbc_encrypt() instead.
2928
2929void des_ede3_cbc_encrypt(
2930des_cblock *input,
2931des_cblock *output,
2932long length,
2933des_key_schedule ks1,
2934des_key_schedule ks2,
2935des_key_schedule ks3,
2936des_cblock *ivec,
2937int enc);
2938 This function implements outer triple CBC DES encryption with 3
2939 keys. What this means is that each 'DES' operation
2940 inside the cbc mode is really an C=E(ks3,D(ks2,E(ks1,M))).
2941 Again, this is cbc mode so an ivec is requires.
2942 This mode is used by SSL.
2943 There is also a des_ede2_cbc_encrypt() that only uses 2
2944 des_key_schedule's, the first being reused for the final
2945 encryption. C=E(ks1,D(ks2,E(ks1,M))). This form of triple DES
2946 is used by the RSAref library.
2947
2948void des_pcbc_encrypt(
2949des_cblock *input,
2950des_cblock *output,
2951long length,
2952des_key_schedule ks,
2953des_cblock *ivec,
2954int enc);
2955 This is Propagating Cipher Block Chaining mode of DES. It is used
2956 by Kerberos v4. It's parameters are the same as des_ncbc_encrypt().
2957
2958void des_cfb_encrypt(
2959unsigned char *in,
2960unsigned char *out,
2961int numbits,
2962long length,
2963des_key_schedule ks,
2964des_cblock *ivec,
2965int enc);
2966 Cipher Feedback Back mode of DES. This implementation 'feeds back'
2967 in numbit blocks. The input (and output) is in multiples of numbits
2968 bits. numbits should to be a multiple of 8 bits. Length is the
2969 number of bytes input. If numbits is not a multiple of 8 bits,
2970 the extra bits in the bytes will be considered padding. So if
2971 numbits is 12, for each 2 input bytes, the 4 high bits of the
2972 second byte will be ignored. So to encode 72 bits when using
2973 a numbits of 12 take 12 bytes. To encode 72 bits when using
2974 numbits of 9 will take 16 bytes. To encode 80 bits when using
2975 numbits of 16 will take 10 bytes. etc, etc. This padding will
2976 apply to both input and output.
2977
2978
2979void des_cfb64_encrypt(
2980unsigned char *in,
2981unsigned char *out,
2982long length,
2983des_key_schedule ks,
2984des_cblock *ivec,
2985int *num,
2986int enc);
2987 This is one of the more useful functions in this DES library, it
2988 implements CFB mode of DES with 64bit feedback. Why is this
2989 useful you ask? Because this routine will allow you to encrypt an
2990 arbitrary number of bytes, no 8 byte padding. Each call to this
2991 routine will encrypt the input bytes to output and then update ivec
2992 and num. num contains 'how far' we are though ivec. If this does
2993 not make much sense, read more about cfb mode of DES :-).
2994
2995void des_ede3_cfb64_encrypt(
2996unsigned char *in,
2997unsigned char *out,
2998long length,
2999des_key_schedule ks1,
3000des_key_schedule ks2,
3001des_key_schedule ks3,
3002des_cblock *ivec,
3003int *num,
3004int enc);
3005 Same as des_cfb64_encrypt() accept that the DES operation is
3006 triple DES. As usual, there is a macro for
3007 des_ede2_cfb64_encrypt() which reuses ks1.
3008
3009void des_ofb_encrypt(
3010unsigned char *in,
3011unsigned char *out,
3012int numbits,
3013long length,
3014des_key_schedule ks,
3015des_cblock *ivec);
3016 This is a implementation of Output Feed Back mode of DES. It is
3017 the same as des_cfb_encrypt() in that numbits is the size of the
3018 units dealt with during input and output (in bits).
3019
3020void des_ofb64_encrypt(
3021unsigned char *in,
3022unsigned char *out,
3023long length,
3024des_key_schedule ks,
3025des_cblock *ivec,
3026int *num);
3027 The same as des_cfb64_encrypt() except that it is Output Feed Back
3028 mode.
3029
3030void des_ede3_ofb64_encrypt(
3031unsigned char *in,
3032unsigned char *out,
3033long length,
3034des_key_schedule ks1,
3035des_key_schedule ks2,
3036des_key_schedule ks3,
3037des_cblock *ivec,
3038int *num);
3039 Same as des_ofb64_encrypt() accept that the DES operation is
3040 triple DES. As usual, there is a macro for
3041 des_ede2_ofb64_encrypt() which reuses ks1.
3042
3043int des_read_pw_string(
3044char *buf,
3045int length,
3046char *prompt,
3047int verify);
3048 This routine is used to get a password from the terminal with echo
3049 turned off. Buf is where the string will end up and length is the
3050 size of buf. Prompt is a string presented to the 'user' and if
3051 verify is set, the key is asked for twice and unless the 2 copies
3052 match, an error is returned. A return code of -1 indicates a
3053 system error, 1 failure due to use interaction, and 0 is success.
3054
3055unsigned long des_cbc_cksum(
3056des_cblock *input,
3057des_cblock *output,
3058long length,
3059des_key_schedule ks,
3060des_cblock *ivec);
3061 This function produces an 8 byte checksum from input that it puts in
3062 output and returns the last 4 bytes as a long. The checksum is
3063 generated via cbc mode of DES in which only the last 8 byes are
3064 kept. I would recommend not using this function but instead using
3065 the EVP_Digest routines, or at least using MD5 or SHA. This
3066 function is used by Kerberos v4 so that is why it stays in the
3067 library.
3068
3069char *des_fcrypt(
3070const char *buf,
3071const char *salt
3072char *ret);
3073 This is my fast version of the unix crypt(3) function. This version
3074 takes only a small amount of space relative to other fast
3075 crypt() implementations. This is different to the normal crypt
3076 in that the third parameter is the buffer that the return value
3077 is written into. It needs to be at least 14 bytes long. This
3078 function is thread safe, unlike the normal crypt.
3079
3080char *crypt(
3081const char *buf,
3082const char *salt);
3083 This function calls des_fcrypt() with a static array passed as the
3084 third parameter. This emulates the normal non-thread safe semantics
3085 of crypt(3).
3086
3087void des_string_to_key(
3088char *str,
3089des_cblock *key);
3090 This function takes str and converts it into a DES key. I would
3091 recommend using MD5 instead and use the first 8 bytes of output.
3092 When I wrote the first version of these routines back in 1990, MD5
3093 did not exist but I feel these routines are still sound. This
3094 routines is compatible with the one in MIT's libdes.
3095
3096void des_string_to_2keys(
3097char *str,
3098des_cblock *key1,
3099des_cblock *key2);
3100 This function takes str and converts it into 2 DES keys.
3101 I would recommend using MD5 and using the 16 bytes as the 2 keys.
3102 I have nothing against these 2 'string_to_key' routines, it's just
3103 that if you say that your encryption key is generated by using the
3104 16 bytes of an MD5 hash, every-one knows how you generated your
3105 keys.
3106
3107int des_read_password(
3108des_cblock *key,
3109char *prompt,
3110int verify);
3111 This routine combines des_read_pw_string() with des_string_to_key().
3112
3113int des_read_2passwords(
3114des_cblock *key1,
3115des_cblock *key2,
3116char *prompt,
3117int verify);
3118 This routine combines des_read_pw_string() with des_string_to_2key().
3119
3120void des_random_seed(
3121des_cblock key);
3122 This routine sets a starting point for des_random_key().
3123
3124void des_random_key(
3125des_cblock ret);
3126 This function return a random key. Make sure to 'seed' the random
3127 number generator (with des_random_seed()) before using this function.
3128 I personally now use a MD5 based random number system.
3129
3130int des_enc_read(
3131int fd,
3132char *buf,
3133int len,
3134des_key_schedule ks,
3135des_cblock *iv);
3136 This function will write to a file descriptor the encrypted data
3137 from buf. This data will be preceded by a 4 byte 'byte count' and
3138 will be padded out to 8 bytes. The encryption is either CBC of
3139 PCBC depending on the value of des_rw_mode. If it is DES_PCBC_MODE,
3140 pcbc is used, if DES_CBC_MODE, cbc is used. The default is to use
3141 DES_PCBC_MODE.
3142
3143int des_enc_write(
3144int fd,
3145char *buf,
3146int len,
3147des_key_schedule ks,
3148des_cblock *iv);
3149 This routines read stuff written by des_enc_read() and decrypts it.
3150 I have used these routines quite a lot but I don't believe they are
3151 suitable for non-blocking io. If you are after a full
3152 authentication/encryption over networks, have a look at SSL instead.
3153
3154unsigned long des_quad_cksum(
3155des_cblock *input,
3156des_cblock *output,
3157long length,
3158int out_count,
3159des_cblock *seed);
3160 This is a function from Kerberos v4 that is not anything to do with
3161 DES but was needed. It is a cksum that is quicker to generate than
3162 des_cbc_cksum(); I personally would use MD5 routines now.
3163=====
3164Modes of DES
3165Quite a bit of the following information has been taken from
3166 AS 2805.5.2
3167 Australian Standard
3168 Electronic funds transfer - Requirements for interfaces,
3169 Part 5.2: Modes of operation for an n-bit block cipher algorithm
3170 Appendix A
3171
3172There are several different modes in which DES can be used, they are
3173as follows.
3174
3175Electronic Codebook Mode (ECB) (des_ecb_encrypt())
3176- 64 bits are enciphered at a time.
3177- The order of the blocks can be rearranged without detection.
3178- The same plaintext block always produces the same ciphertext block
3179 (for the same key) making it vulnerable to a 'dictionary attack'.
3180- An error will only affect one ciphertext block.
3181
3182Cipher Block Chaining Mode (CBC) (des_cbc_encrypt())
3183- a multiple of 64 bits are enciphered at a time.
3184- The CBC mode produces the same ciphertext whenever the same
3185 plaintext is encrypted using the same key and starting variable.
3186- The chaining operation makes the ciphertext blocks dependent on the
3187 current and all preceding plaintext blocks and therefore blocks can not
3188 be rearranged.
3189- The use of different starting variables prevents the same plaintext
3190 enciphering to the same ciphertext.
3191- An error will affect the current and the following ciphertext blocks.
3192
3193Cipher Feedback Mode (CFB) (des_cfb_encrypt())
3194- a number of bits (j) <= 64 are enciphered at a time.
3195- The CFB mode produces the same ciphertext whenever the same
3196 plaintext is encrypted using the same key and starting variable.
3197- The chaining operation makes the ciphertext variables dependent on the
3198 current and all preceding variables and therefore j-bit variables are
3199 chained together and can not be rearranged.
3200- The use of different starting variables prevents the same plaintext
3201 enciphering to the same ciphertext.
3202- The strength of the CFB mode depends on the size of k (maximal if
3203 j == k). In my implementation this is always the case.
3204- Selection of a small value for j will require more cycles through
3205 the encipherment algorithm per unit of plaintext and thus cause
3206 greater processing overheads.
3207- Only multiples of j bits can be enciphered.
3208- An error will affect the current and the following ciphertext variables.
3209
3210Output Feedback Mode (OFB) (des_ofb_encrypt())
3211- a number of bits (j) <= 64 are enciphered at a time.
3212- The OFB mode produces the same ciphertext whenever the same
3213 plaintext enciphered using the same key and starting variable. More
3214 over, in the OFB mode the same key stream is produced when the same
3215 key and start variable are used. Consequently, for security reasons
3216 a specific start variable should be used only once for a given key.
3217- The absence of chaining makes the OFB more vulnerable to specific attacks.
3218- The use of different start variables values prevents the same
3219 plaintext enciphering to the same ciphertext, by producing different
3220 key streams.
3221- Selection of a small value for j will require more cycles through
3222 the encipherment algorithm per unit of plaintext and thus cause
3223 greater processing overheads.
3224- Only multiples of j bits can be enciphered.
3225- OFB mode of operation does not extend ciphertext errors in the
3226 resultant plaintext output. Every bit error in the ciphertext causes
3227 only one bit to be in error in the deciphered plaintext.
3228- OFB mode is not self-synchronising. If the two operation of
3229 encipherment and decipherment get out of synchronism, the system needs
3230 to be re-initialised.
3231- Each re-initialisation should use a value of the start variable
3232 different from the start variable values used before with the same
3233 key. The reason for this is that an identical bit stream would be
3234 produced each time from the same parameters. This would be
3235 susceptible to a ' known plaintext' attack.
3236
3237Triple ECB Mode (des_ecb3_encrypt())
3238- Encrypt with key1, decrypt with key2 and encrypt with key3 again.
3239- As for ECB encryption but increases the key length to 168 bits.
3240 There are theoretic attacks that can be used that make the effective
3241 key length 112 bits, but this attack also requires 2^56 blocks of
3242 memory, not very likely, even for the NSA.
3243- If both keys are the same it is equivalent to encrypting once with
3244 just one key.
3245- If the first and last key are the same, the key length is 112 bits.
3246 There are attacks that could reduce the key space to 55 bit's but it
3247 requires 2^56 blocks of memory.
3248- If all 3 keys are the same, this is effectively the same as normal
3249 ecb mode.
3250
3251Triple CBC Mode (des_ede3_cbc_encrypt())
3252- Encrypt with key1, decrypt with key2 and then encrypt with key3.
3253- As for CBC encryption but increases the key length to 168 bits with
3254 the same restrictions as for triple ecb mode.
3255
3256==== digest.doc ========================================================
3257
3258
3259The Message Digest subroutines.
3260
3261These routines require "evp.h" to be included.
3262
3263These functions are a higher level interface to the various message digest
3264routines found in this library. As such, they allow the same code to be
3265used to digest via different algorithms with only a change in an initial
3266parameter. They are basically just a front-end to the MD2, MD5, SHA
3267and SHA1
3268routines.
3269
3270These routines all take a pointer to the following structure to specify
3271which message digest algorithm to use.
3272typedef struct evp_md_st
3273 {
3274 int type;
3275 int pkey_type;
3276 int md_size;
3277 void (*init)();
3278 void (*update)();
3279 void (*final)();
3280
3281 int required_pkey_type; /*EVP_PKEY_xxx */
3282 int (*sign)();
3283 int (*verify)();
3284 } EVP_MD;
3285
3286If additional message digest algorithms are to be supported, a structure of
3287this type needs to be declared and populated and then the Digest routines
3288can be used with that algorithm. The type field is the object NID of the
3289digest type (read the section on Objects for an explanation). The pkey_type
3290is the Object type to use when the a message digest is generated by there
3291routines and then is to be signed with the pkey algorithm. Md_size is
3292the size of the message digest returned. Init, update
3293and final are the relevant functions to perform the message digest function
3294by parts. One reason for specifying the message digest to use via this
3295mechanism is that if you only use md5, only the md5 routines will
3296be included in you linked program. If you passed an integer
3297that specified which message digest to use, the routine that mapped that
3298integer to a set of message digest functions would cause all the message
3299digests functions to be link into the code. This setup also allows new
3300message digest functions to be added by the application.
3301
3302The six message digests defined in this library are
3303
3304EVP_MD *EVP_md2(void); /* RSA sign/verify */
3305EVP_MD *EVP_md5(void); /* RSA sign/verify */
3306EVP_MD *EVP_sha(void); /* RSA sign/verify */
3307EVP_MD *EVP_sha1(void); /* RSA sign/verify */
3308EVP_MD *EVP_dss(void); /* DSA sign/verify */
3309EVP_MD *EVP_dss1(void); /* DSA sign/verify */
3310
3311All the message digest routines take a EVP_MD_CTX pointer as an argument.
3312The state of the message digest is kept in this structure.
3313
3314typedef struct pem_md_ctx_st
3315 {
3316 EVP_MD *digest;
3317 union {
3318 unsigned char base[4]; /* this is used in my library as a
3319 * 'pointer' to all union elements
3320 * structures. */
3321 MD2_CTX md2;
3322 MD5_CTX md5;
3323 SHA_CTX sha;
3324 } md;
3325 } EVP_MD_CTX;
3326
3327The Digest functions are as follows.
3328
3329void EVP_DigestInit(
3330EVP_MD_CTX *ctx,
3331EVP_MD *type);
3332 This function is used to initialise the EVP_MD_CTX. The message
3333 digest that will associated with 'ctx' is specified by 'type'.
3334
3335void EVP_DigestUpdate(
3336EVP_MD_CTX *ctx,
3337unsigned char *data,
3338unsigned int cnt);
3339 This function is used to pass more data to the message digest
3340 function. 'cnt' bytes are digested from 'data'.
3341
3342void EVP_DigestFinal(
3343EVP_MD_CTX *ctx,
3344unsigned char *md,
3345unsigned int *len);
3346 This function finishes the digestion and puts the message digest
3347 into 'md'. The length of the message digest is put into len;
3348 EVP_MAX_MD_SIZE is the size of the largest message digest that
3349 can be returned from this function. Len can be NULL if the
3350 size of the digest is not required.
3351
3352
3353==== encode.doc ========================================================
3354
3355
3356void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
3357void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,
3358 int *outl,unsigned char *in,int inl);
3359void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl);
3360int EVP_EncodeBlock(unsigned char *t, unsigned char *f, int n);
3361
3362void EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
3363int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl,
3364 unsigned char *in, int inl);
3365int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned
3366 char *out, int *outl);
3367int EVP_DecodeBlock(unsigned char *t, unsigned
3368 char *f, int n);
3369
3370
3371==== envelope.doc ========================================================
3372
3373The following routines are use to create 'digital' envelopes.
3374By this I mean that they perform various 'higher' level cryptographic
3375functions. Have a read of 'cipher.doc' and 'digest.doc' since those
3376routines are used by these functions.
3377cipher.doc contains documentation about the cipher part of the
3378envelope library and digest.doc contatins the description of the
3379message digests supported.
3380
3381To 'sign' a document involves generating a message digest and then encrypting
3382the digest with an private key.
3383
3384#define EVP_SignInit(a,b) EVP_DigestInit(a,b)
3385#define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c)
3386Due to the fact this operation is basically just an extended message
3387digest, the first 2 functions are macro calls to Digest generating
3388functions.
3389
3390int EVP_SignFinal(
3391EVP_MD_CTX *ctx,
3392unsigned char *md,
3393unsigned int *s,
3394EVP_PKEY *pkey);
3395 This finalisation function finishes the generation of the message
3396digest and then encrypts the digest (with the correct message digest
3397object identifier) with the EVP_PKEY private key. 'ctx' is the message digest
3398context. 'md' will end up containing the encrypted message digest. This
3399array needs to be EVP_PKEY_size(pkey) bytes long. 's' will actually
3400contain the exact length. 'pkey' of course is the private key. It is
3401one of EVP_PKEY_RSA or EVP_PKEY_DSA type.
3402If there is an error, 0 is returned, otherwise 1.
3403
3404Verify is used to check an signed message digest.
3405
3406#define EVP_VerifyInit(a,b) EVP_DigestInit(a,b)
3407#define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c)
3408Since the first step is to generate a message digest, the first 2 functions
3409are macros.
3410
3411int EVP_VerifyFinal(
3412EVP_MD_CTX *ctx,
3413unsigned char *md,
3414unsigned int s,
3415EVP_PKEY *pkey);
3416 This function finishes the generation of the message digest and then
3417compares it with the supplied encrypted message digest. 'md' contains the
3418's' bytes of encrypted message digest. 'pkey' is used to public key decrypt
3419the digest. It is then compared with the message digest just generated.
3420If they match, 1 is returned else 0.
3421
3422int EVP_SealInit(EVP_CIPHER_CTX *ctx, EVP_CIPHER *type, unsigned char **ek,
3423 int *ekl, unsigned char *iv, EVP_PKEY **pubk, int npubk);
3424Must have at least one public key, error is 0. I should also mention that
3425the buffers pointed to by 'ek' need to be EVP_PKEY_size(pubk[n]) is size.
3426
3427#define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e)
3428void EVP_SealFinal(EVP_CIPHER_CTX *ctx,unsigned char *out,int *outl);
3429
3430
3431int EVP_OpenInit(EVP_CIPHER_CTX *ctx,EVP_CIPHER *type,unsigned char *ek,
3432 int ekl,unsigned char *iv,EVP_PKEY *priv);
34330 on failure
3434
3435#define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e)
3436
3437int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
3438Decrypt final return code
3439
3440
3441==== error.doc ========================================================
3442
3443The error routines.
3444
3445The 'error' system I've implemented is intended to server 2 purpose, to
3446record the reason why a command failed and to record where in the libraries
3447the failure occurred. It is more or less setup to record a 'trace' of which
3448library components were being traversed when the error occurred.
3449
3450When an error is recorded, it is done so a as single unsigned long which is
3451composed of three parts. The top byte is the 'library' number, the middle
345212 bytes is the function code, and the bottom 12 bits is the 'reason' code.
3453
3454Each 'library', or should a say, 'section' of the SSLeay library has a
3455different unique 'library' error number. Each function in the library has
3456a number that is unique for that library. Each 'library' also has a number
3457for each 'error reason' that is only unique for that 'library'.
3458
3459Due to the way these error routines record a 'error trace', there is an
3460array per thread that is used to store the error codes.
3461The various functions in this library are used to access
3462and manipulate this array.
3463
3464void ERR_put_error(int lib, int func,int reason);
3465 This routine records an error in library 'lib', function 'func'
3466and reason 'reason'. As errors get 'put' into the buffer, they wrap
3467around and overwrite old errors if too many are written. It is assumed
3468that the last errors are the most important.
3469
3470unsigned long ERR_get_error(void );
3471 This function returns the last error added to the error buffer.
3472In effect it is popping the value off the buffer so repeated calls will
3473continue to return values until there are no more errors to return in which
3474case 0 is returned.
3475
3476unsigned long ERR_peek_error(void );
3477 This function returns the value of the last error added to the
3478error buffer but does not 'pop' it from the buffer.
3479
3480void ERR_clear_error(void );
3481 This function clears the error buffer, discarding all unread
3482errors.
3483
3484While the above described error system obviously produces lots of different
3485error number, a method for 'reporting' these errors in a human readable
3486form is required. To achieve this, each library has the option of
3487'registering' error strings.
3488
3489typedef struct ERR_string_data_st
3490 {
3491 unsigned long error;
3492 char *string;
3493 } ERR_STRING_DATA;
3494
3495The 'ERR_STRING_DATA' contains an error code and the corresponding text
3496string. To add new function error strings for a library, the
3497ERR_STRING_DATA needs to be 'registered' with the library.
3498
3499void ERR_load_strings(unsigned long lib,ERR_STRING_DATA *err);
3500 This function 'registers' the array of ERR_STRING_DATA pointed to by
3501'err' as error text strings for the error library 'lib'.
3502
3503void ERR_free_strings(void);
3504 This function free()s all the loaded error strings.
3505
3506char *ERR_error_string(unsigned long error,char *buf);
3507 This function returns a text string that is a human readable
3508version of the error represented by 'error'. Buff should be at least 120
3509bytes long and if it is NULL, the return value is a pointer to a static
3510variable that will contain the error string, otherwise 'buf' is returned.
3511If there is not a text string registered for a particular error, a text
3512string containing the error number is returned instead.
3513
3514void ERR_print_errors(BIO *bp);
3515void ERR_print_errors_fp(FILE *fp);
3516 This function is a convenience routine that prints the error string
3517for each error until all errors have been accounted for.
3518
3519char *ERR_lib_error_string(unsigned long e);
3520char *ERR_func_error_string(unsigned long e);
3521char *ERR_reason_error_string(unsigned long e);
3522The above three functions return the 3 different components strings for the
3523error 'e'. ERR_error_string() uses these functions.
3524
3525void ERR_load_ERR_strings(void );
3526 This function 'registers' the error strings for the 'ERR' module.
3527
3528void ERR_load_crypto_strings(void );
3529 This function 'register' the error strings for just about every
3530library in the SSLeay package except for the SSL routines. There is no
3531need to ever register any error text strings and you will probably save in
3532program size. If on the other hand you do 'register' all errors, it is
3533quite easy to determine why a particular routine failed.
3534
3535As a final footnote as to why the error system is designed as it is.
35361) I did not want a single 'global' error code.
35372) I wanted to know which subroutine a failure occurred in.
35383) For Windows NT etc, it should be simple to replace the 'key' routines
3539 with code to pass error codes back to the application.
35404) I wanted the option of meaningful error text strings.
3541
3542Late breaking news - the changes to support threads.
3543
3544Each 'thread' has an 'ERR_STATE' state associated with it.
3545ERR_STATE *ERR_get_state(void ) will return the 'state' for the calling
3546thread/process.
3547
3548ERR_remove_state(unsigned long pid); will 'free()' this state. If pid == 0
3549the current 'thread/process' will have it's error state removed.
3550If you do not remove the error state of a thread, this could be considered a
3551form of memory leak, so just after 'reaping' a thread that has died,
3552call ERR_remove_state(pid).
3553
3554Have a read of thread.doc for more details for what is required for
3555multi-threading support. All the other error routines will
3556work correctly when using threads.
3557
3558
3559==== idea.doc ========================================================
3560
3561The IDEA library.
3562IDEA is a block cipher that operates on 64bit (8 byte) quantities. It
3563uses a 128bit (16 byte) key. It can be used in all the modes that DES can
3564be used. This library implements the ecb, cbc, cfb64 and ofb64 modes.
3565
3566For all calls that have an 'input' and 'output' variables, they can be the
3567same.
3568
3569This library requires the inclusion of 'idea.h'.
3570
3571All of the encryption functions take what is called an IDEA_KEY_SCHEDULE as an
3572argument. An IDEA_KEY_SCHEDULE is an expanded form of the idea key.
3573For all modes of the IDEA algorithm, the IDEA_KEY_SCHEDULE used for
3574decryption is different to the one used for encryption.
3575
3576The define IDEA_ENCRYPT is passed to specify encryption for the functions
3577that require an encryption/decryption flag. IDEA_DECRYPT is passed to
3578specify decryption. For some mode there is no encryption/decryption
3579flag since this is determined by the IDEA_KEY_SCHEDULE.
3580
3581So to encrypt you would do the following
3582idea_set_encrypt_key(key,encrypt_ks);
3583idea_ecb_encrypt(...,encrypt_ks);
3584idea_cbc_encrypt(....,encrypt_ks,...,IDEA_ENCRYPT);
3585
3586To Decrypt
3587idea_set_encrypt_key(key,encrypt_ks);
3588idea_set_decrypt_key(encrypt_ks,decrypt_ks);
3589idea_ecb_encrypt(...,decrypt_ks);
3590idea_cbc_encrypt(....,decrypt_ks,...,IDEA_DECRYPT);
3591
3592Please note that any of the encryption modes specified in my DES library
3593could be used with IDEA. I have only implemented ecb, cbc, cfb64 and
3594ofb64 for the following reasons.
3595- ecb is the basic IDEA encryption.
3596- cbc is the normal 'chaining' form for block ciphers.
3597- cfb64 can be used to encrypt single characters, therefore input and output
3598 do not need to be a multiple of 8.
3599- ofb64 is similar to cfb64 but is more like a stream cipher, not as
3600 secure (not cipher feedback) but it does not have an encrypt/decrypt mode.
3601- If you want triple IDEA, thats 384 bits of key and you must be totally
3602 obsessed with security. Still, if you want it, it is simple enough to
3603 copy the function from the DES library and change the des_encrypt to
3604 idea_encrypt; an exercise left for the paranoid reader :-).
3605
3606The functions are as follows:
3607
3608void idea_set_encrypt_key(
3609unsigned char *key;
3610IDEA_KEY_SCHEDULE *ks);
3611 idea_set_encrypt_key converts a 16 byte IDEA key into an
3612 IDEA_KEY_SCHEDULE. The IDEA_KEY_SCHEDULE is an expanded form of
3613 the key which can be used to perform IDEA encryption.
3614 An IDEA_KEY_SCHEDULE is an expanded form of the key which is used to
3615 perform actual encryption. It can be regenerated from the IDEA key
3616 so it only needs to be kept when encryption is about
3617 to occur. Don't save or pass around IDEA_KEY_SCHEDULE's since they
3618 are CPU architecture dependent, IDEA keys are not.
3619
3620void idea_set_decrypt_key(
3621IDEA_KEY_SCHEDULE *encrypt_ks,
3622IDEA_KEY_SCHEDULE *decrypt_ks);
3623 This functions converts an encryption IDEA_KEY_SCHEDULE into a
3624 decryption IDEA_KEY_SCHEDULE. For all decryption, this conversion
3625 of the key must be done. In some modes of IDEA, an
3626 encryption/decryption flag is also required, this is because these
3627 functions involve block chaining and the way this is done changes
3628 depending on which of encryption of decryption is being done.
3629 Please note that there is no quick way to generate the decryption
3630 key schedule other than generating the encryption key schedule and
3631 then converting it.
3632
3633void idea_encrypt(
3634unsigned long *data,
3635IDEA_KEY_SCHEDULE *ks);
3636 This is the IDEA encryption function that gets called by just about
3637 every other IDEA routine in the library. You should not use this
3638 function except to implement 'modes' of IDEA. I say this because the
3639 functions that call this routine do the conversion from 'char *' to
3640 long, and this needs to be done to make sure 'non-aligned' memory
3641 access do not occur.
3642 Data is a pointer to 2 unsigned long's and ks is the
3643 IDEA_KEY_SCHEDULE to use. Encryption or decryption depends on the
3644 IDEA_KEY_SCHEDULE.
3645
3646void idea_ecb_encrypt(
3647unsigned char *input,
3648unsigned char *output,
3649IDEA_KEY_SCHEDULE *ks);
3650 This is the basic Electronic Code Book form of IDEA (in DES this
3651 mode is called Electronic Code Book so I'm going to use the term
3652 for idea as well :-).
3653 Input is encrypted into output using the key represented by
3654 ks. Depending on the IDEA_KEY_SCHEDULE, encryption or
3655 decryption occurs. Input is 8 bytes long and output is 8 bytes.
3656
3657void idea_cbc_encrypt(
3658unsigned char *input,
3659unsigned char *output,
3660long length,
3661IDEA_KEY_SCHEDULE *ks,
3662unsigned char *ivec,
3663int enc);
3664 This routine implements IDEA in Cipher Block Chaining mode.
3665 Input, which should be a multiple of 8 bytes is encrypted
3666 (or decrypted) to output which will also be a multiple of 8 bytes.
3667 The number of bytes is in length (and from what I've said above,
3668 should be a multiple of 8). If length is not a multiple of 8, bad
3669 things will probably happen. ivec is the initialisation vector.
3670 This function updates iv after each call so that it can be passed to
3671 the next call to idea_cbc_encrypt().
3672
3673void idea_cfb64_encrypt(
3674unsigned char *in,
3675unsigned char *out,
3676long length,
3677des_key_schedule ks,
3678des_cblock *ivec,
3679int *num,
3680int enc);
3681 This is one of the more useful functions in this IDEA library, it
3682 implements CFB mode of IDEA with 64bit feedback.
3683 This allows you to encrypt an arbitrary number of bytes,
3684 you do not require 8 byte padding. Each call to this
3685 routine will encrypt the input bytes to output and then update ivec
3686 and num. Num contains 'how far' we are though ivec.
3687 Enc is used to indicate encryption or decryption.
3688 One very important thing to remember is that when decrypting, use
3689 the encryption form of the key.
3690 CFB64 mode operates by using the cipher to
3691 generate a stream of bytes which is used to encrypt the plain text.
3692 The cipher text is then encrypted to generate the next 64 bits to
3693 be xored (incrementally) with the next 64 bits of plain
3694 text. As can be seen from this, to encrypt or decrypt,
3695 the same 'cipher stream' needs to be generated but the way the next
3696 block of data is gathered for encryption is different for
3697 encryption and decryption. What this means is that to encrypt
3698 idea_set_encrypt_key(key,ks);
3699 idea_cfb64_encrypt(...,ks,..,IDEA_ENCRYPT)
3700 do decrypt
3701 idea_set_encrypt_key(key,ks)
3702 idea_cfb64_encrypt(...,ks,...,IDEA_DECRYPT)
3703 Note: The same IDEA_KEY_SCHEDULE but different encryption flags.
3704 For idea_cbc or idea_ecb, idea_set_decrypt_key() would need to be
3705 used to generate the IDEA_KEY_SCHEDULE for decryption.
3706 The reason I'm stressing this point is that I just wasted 3 hours
3707 today trying to decrypt using this mode and the decryption form of
3708 the key :-(.
3709
3710void idea_ofb64_encrypt(
3711unsigned char *in,
3712unsigned char *out,
3713long length,
3714des_key_schedule ks,
3715des_cblock *ivec,
3716int *num);
3717 This functions implements OFB mode of IDEA with 64bit feedback.
3718 This allows you to encrypt an arbitrary number of bytes,
3719 you do not require 8 byte padding. Each call to this
3720 routine will encrypt the input bytes to output and then update ivec
3721 and num. Num contains 'how far' we are though ivec.
3722 This is in effect a stream cipher, there is no encryption or
3723 decryption mode. The same key and iv should be used to
3724 encrypt and decrypt.
3725
3726For reading passwords, I suggest using des_read_pw_string() from my DES library.
3727To generate a password from a text string, I suggest using MD5 (or MD2) to
3728produce a 16 byte message digest that can then be passed directly to
3729idea_set_encrypt_key().
3730
3731=====
3732For more information about the specific IDEA modes in this library
3733(ecb, cbc, cfb and ofb), read the section entitled 'Modes of DES' from the
3734documentation on my DES library. What is said about DES is directly
3735applicable for IDEA.
3736
3737
3738==== legal.doc ========================================================
3739
3740From eay@mincom.com Thu Jun 27 00:25:45 1996
3741Received: by orb.mincom.oz.au id AA15821
3742 (5.65c/IDA-1.4.4 for eay); Wed, 26 Jun 1996 14:25:45 +1000
3743Date: Wed, 26 Jun 1996 14:25:45 +1000 (EST)
3744From: Eric Young <eay@mincom.oz.au>
3745X-Sender: eay@orb
3746To: Ken Toll <ktoll@ren.digitalage.com>
3747Cc: Eric Young <eay@mincom.oz.au>, ssl-talk@netscape.com
3748Subject: Re: Unidentified subject!
3749In-Reply-To: <9606261950.ZM28943@ren.digitalage.com>
3750Message-Id: <Pine.SOL.3.91.960626131156.28573K-100000@orb>
3751Mime-Version: 1.0
3752Content-Type: TEXT/PLAIN; charset=US-ASCII
3753Status: O
3754X-Status:
3755
3756
3757This is a little off topic but since SSLeay is a free implementation of
3758the SSLv2 protocol, I feel it is worth responding on the topic of if it
3759is actually legal for Americans to use free cryptographic software.
3760
3761On Wed, 26 Jun 1996, Ken Toll wrote:
3762> Is the U.S the only country that SSLeay cannot be used commercially
3763> (because of RSAref) or is that going to be an issue with every country
3764> that a client/server application (non-web browser/server) is deployed
3765> and sold?
3766
3767>From what I understand, the software patents that apply to algorithms
3768like RSA and DH only apply in the USA. The IDEA algorithm I believe is
3769patened in europe (USA?), but considing how little it is used by other SSL
3770implementations, it quite easily be left out of the SSLeay build
3771(this can be done with a compile flag).
3772
3773Actually if the RSA patent did apply outside the USA, it could be rather
3774interesting since RSA is not alowed to let RSA toolkits outside of the USA
3775[1], and since these are the only forms that they will alow the algorithm
3776to be used in, it would mean that non-one outside of the USA could produce
3777public key software which would be a very strong statment for
3778international patent law to make :-). This logic is a little flawed but
3779it still points out some of the more interesting permutations of USA
3780patent law and ITAR restrictions.
3781
3782Inside the USA there is also the unresolved issue of RC4/RC2 which were
3783made public on sci.crypt in Sep 1994 (RC4) and Feb 1996 (RC2). I have
3784copies of the origional postings if people are interested. RSA I believe
3785claim that they were 'trade-secrets' and that some-one broke an NDA in
3786revealing them. Other claim they reverse engineered the algorithms from
3787compiled binaries. If the algorithms were reverse engineered, I belive
3788RSA had no legal leg to stand on. If an NDA was broken, I don't know.
3789Regardless, RSA, I belive, is willing to go to court over the issue so
3790licencing is probably the best idea, or at least talk to them.
3791If there are people who actually know more about this, pease let me know, I
3792don't want to vilify or spread miss-information if I can help it.
3793
3794If you are not producing a web browser, it is easy to build SSLeay with
3795RC2/RC4 removed. Since RC4 is the defacto standard cipher in
3796all web software (and it is damn fast) it is more or less required for
3797www use. For non www use of SSL, especially for an application where
3798interoperability with other vendors is not critical just leave it out.
3799
3800Removing IDEA, RC2 and RC4 would only leave DES and Triple DES but
3801they should be ok. Considing that Triple DES can encrypt at rates of
3802410k/sec on a pentium 100, and 940k/sec on a P6/200, this is quite
3803reasonable performance. Single DES clocks in at 1160k/s and 2467k/s
3804respectivly is actually quite fast for those not so paranoid (56 bit key).[1]
3805
3806> Is it possible to get a certificate for commercial use outside of the U.S.?
3807yes.
3808
3809Thawte Consulting issues certificates (they are the people who sell the
3810 Sioux httpd server and are based in South Africa)
3811Verisign will issue certificates for Sioux (sold from South Africa), so this
3812 proves that they will issue certificate for OS use if they are
3813 happy with the quality of the software.
3814
3815(The above mentioned companies just the ones that I know for sure are issuing
3816 certificates outside the USA).
3817
3818There is always the point that if you are using SSL for an intra net,
3819SSLeay provides programs that can be used so you can issue your own
3820certificates. They need polishing but at least it is a good starting point.
3821
3822I am not doing anything outside Australian law by implementing these
3823algorithms (to the best of my knowedge). It is another example of how
3824the world legal system does not cope with the internet very well.
3825
3826I may start making shared libraries available (I have now got DLL's for
3827Windows). This will mean that distributions into the usa could be
3828shipped with a version with a reduced cipher set and the versions outside
3829could use the DLL/shared library with all the ciphers (and without RSAref).
3830
3831This could be completly hidden from the application, so this would not
3832even require a re-linking.
3833
3834This is the reverse of what people were talking about doing to get around
3835USA export regulations :-)
3836
3837eric
3838
3839[1]: The RSAref2.0 tookit is available on at least 3 ftp sites in Europe
3840 and one in South Africa.
3841
3842[2]: Since I always get questions when I post benchmark numbers :-),
3843 DES performace figures are in 1000's of bytes per second in cbc
3844 mode using an 8192 byte buffer. The pentium 100 was running Windows NT
3845 3.51 DLLs and the 686/200 was running NextStep.
3846 I quote pentium 100 benchmarks because it is basically the
3847 'entry level' computer that most people buy for personal use.
3848 Windows 95 is the OS shipping on those boxes, so I'll give
3849 NT numbers (the same Win32 runtime environment). The 686
3850 numbers are present as an indication of where we will be in a
3851 few years.
3852--
3853Eric Young | BOOL is tri-state according to Bill Gates.
3854AARNet: eay@mincom.oz.au | RTFM Win32 GetMessage().
3855
3856
3857
3858==== lhash.doc ========================================================
3859
3860The LHASH library.
3861
3862I wrote this library in 1991 and have since forgotten why I called it lhash.
3863It implements a hash table from an article I read at the
3864time from 'Communications of the ACM'. What makes this hash
3865table different is that as the table fills, the hash table is
3866increased (or decreased) in size via realloc().
3867When a 'resize' is done, instead of all hashes being redistributed over
3868twice as many 'buckets', one bucket is split. So when an 'expand' is done,
3869there is only a minimal cost to redistribute some values. Subsequent
3870inserts will cause more single 'bucket' redistributions but there will
3871never be a sudden large cost due to redistributing all the 'buckets'.
3872
3873The state for a particular hash table is kept in the LHASH structure.
3874The LHASH structure also records statistics about most aspects of accessing
3875the hash table. This is mostly a legacy of my writing this library for
3876the reasons of implementing what looked like a nice algorithm rather than
3877for a particular software product.
3878
3879Internal stuff you probably don't want to know about.
3880The decision to increase or decrease the hash table size is made depending
3881on the 'load' of the hash table. The load is the number of items in the
3882hash table divided by the size of the hash table. The default values are
3883as follows. If (hash->up_load < load) => expand.
3884if (hash->down_load > load) => contract. The 'up_load' has a default value of
38851 and 'down_load' has a default value of 2. These numbers can be modified
3886by the application by just playing with the 'up_load' and 'down_load'
3887variables. The 'load' is kept in a form which is multiplied by 256. So
3888hash->up_load=8*256; will cause a load of 8 to be set.
3889
3890If you are interested in performance the field to watch is
3891num_comp_calls. The hash library keeps track of the 'hash' value for
3892each item so when a lookup is done, the 'hashes' are compared, if
3893there is a match, then a full compare is done, and
3894hash->num_comp_calls is incremented. If num_comp_calls is not equal
3895to num_delete plus num_retrieve it means that your hash function is
3896generating hashes that are the same for different values. It is
3897probably worth changing your hash function if this is the case because
3898even if your hash table has 10 items in a 'bucked', it can be searched
3899with 10 'unsigned long' compares and 10 linked list traverses. This
3900will be much less expensive that 10 calls to you compare function.
3901
3902LHASH *lh_new(
3903unsigned long (*hash)(),
3904int (*cmp)());
3905 This function is used to create a new LHASH structure. It is passed
3906 function pointers that are used to store and retrieve values passed
3907 into the hash table. The 'hash'
3908 function is a hashing function that will return a hashed value of
3909 it's passed structure. 'cmp' is passed 2 parameters, it returns 0
3910 is they are equal, otherwise, non zero.
3911 If there are any problems (usually malloc failures), NULL is
3912 returned, otherwise a new LHASH structure is returned. The
3913 hash value is normally truncated to a power of 2, so make sure
3914 that your hash function returns well mixed low order bits.
3915
3916void lh_free(
3917LHASH *lh);
3918 This function free()s a LHASH structure. If there is malloced
3919 data in the hash table, it will not be freed. Consider using the
3920 lh_doall function to deallocate any remaining entries in the hash
3921 table.
3922
3923char *lh_insert(
3924LHASH *lh,
3925char *data);
3926 This function inserts the data pointed to by data into the lh hash
3927 table. If there is already and entry in the hash table entry, the
3928 value being replaced is returned. A NULL is returned if the new
3929 entry does not clash with an entry already in the table (the normal
3930 case) or on a malloc() failure (perhaps I should change this....).
3931 The 'char *data' is exactly what is passed to the hash and
3932 comparison functions specified in lh_new().
3933
3934char *lh_delete(
3935LHASH *lh,
3936char *data);
3937 This routine deletes an entry from the hash table. The value being
3938 deleted is returned. NULL is returned if there is no such value in
3939 the hash table.
3940
3941char *lh_retrieve(
3942LHASH *lh,
3943char *data);
3944 If 'data' is in the hash table it is returned, else NULL is
3945 returned. The way these routines would normally be uses is that a
3946 dummy structure would have key fields populated and then
3947 ret=lh_retrieve(hash,&dummy);. Ret would now be a pointer to a fully
3948 populated structure.
3949
3950void lh_doall(
3951LHASH *lh,
3952void (*func)(char *a));
3953 This function will, for every entry in the hash table, call function
3954 'func' with the data item as parameters.
3955 This function can be quite useful when used as follows.
3956 void cleanup(STUFF *a)
3957 { STUFF_free(a); }
3958 lh_doall(hash,cleanup);
3959 lh_free(hash);
3960 This can be used to free all the entries, lh_free() then
3961 cleans up the 'buckets' that point to nothing. Be careful
3962 when doing this. If you delete entries from the hash table,
3963 in the call back function, the table may decrease in size,
3964 moving item that you are
3965 currently on down lower in the hash table. This could cause
3966 some entries to be skipped. The best solution to this problem
3967 is to set lh->down_load=0 before you start. This will stop
3968 the hash table ever being decreased in size.
3969
3970void lh_doall_arg(
3971LHASH *lh;
3972void(*func)(char *a,char *arg));
3973char *arg;
3974 This function is the same as lh_doall except that the function
3975 called will be passed 'arg' as the second argument.
3976
3977unsigned long lh_strhash(
3978char *c);
3979 This function is a demo string hashing function. Since the LHASH
3980 routines would normally be passed structures, this routine would
3981 not normally be passed to lh_new(), rather it would be used in the
3982 function passed to lh_new().
3983
3984The next three routines print out various statistics about the state of the
3985passed hash table. These numbers are all kept in the lhash structure.
3986
3987void lh_stats(
3988LHASH *lh,
3989FILE *out);
3990 This function prints out statistics on the size of the hash table,
3991 how many entries are in it, and the number and result of calls to
3992 the routines in this library.
3993
3994void lh_node_stats(
3995LHASH *lh,
3996FILE *out);
3997 For each 'bucket' in the hash table, the number of entries is
3998 printed.
3999
4000void lh_node_usage_stats(
4001LHASH *lh,
4002FILE *out);
4003 This function prints out a short summary of the state of the hash
4004 table. It prints what I call the 'load' and the 'actual load'.
4005 The load is the average number of data items per 'bucket' in the
4006 hash table. The 'actual load' is the average number of items per
4007 'bucket', but only for buckets which contain entries. So the
4008 'actual load' is the average number of searches that will need to
4009 find an item in the hash table, while the 'load' is the average number
4010 that will be done to record a miss.
4011
4012==== md2.doc ========================================================
4013
4014The MD2 library.
4015MD2 is a message digest algorithm that can be used to condense an arbitrary
4016length message down to a 16 byte hash. The functions all need to be passed
4017a MD2_CTX which is used to hold the MD2 context during multiple MD2_Update()
4018function calls. The normal method of use for this library is as follows
4019
4020MD2_Init(...);
4021MD2_Update(...);
4022...
4023MD2_Update(...);
4024MD2_Final(...);
4025
4026This library requires the inclusion of 'md2.h'.
4027
4028The main negative about MD2 is that it is slow, especially when compared
4029to MD5.
4030
4031The functions are as follows:
4032
4033void MD2_Init(
4034MD2_CTX *c);
4035 This function needs to be called to initiate a MD2_CTX structure for
4036 use.
4037
4038void MD2_Update(
4039MD2_CTX *c;
4040unsigned char *data;
4041unsigned long len);
4042 This updates the message digest context being generated with 'len'
4043 bytes from the 'data' pointer. The number of bytes can be any
4044 length.
4045
4046void MD2_Final(
4047unsigned char *md;
4048MD2_CTX *c;
4049 This function is called when a message digest of the data digested
4050 with MD2_Update() is wanted. The message digest is put in the 'md'
4051 array and is MD2_DIGEST_LENGTH (16) bytes long.
4052
4053unsigned char *MD2(
4054unsigned long n;
4055unsigned char *d;
4056unsigned char *md;
4057 This function performs a MD2_Init(), followed by a MD2_Update()
4058 followed by a MD2_Final() (using a local MD2_CTX).
4059 The resulting digest is put into 'md' if it is not NULL.
4060 Regardless of the value of 'md', the message
4061 digest is returned from the function. If 'md' was NULL, the message
4062 digest returned is being stored in a static structure.
4063
4064==== md5.doc ========================================================
4065
4066The MD5 library.
4067MD5 is a message digest algorithm that can be used to condense an arbitrary
4068length message down to a 16 byte hash. The functions all need to be passed
4069a MD5_CTX which is used to hold the MD5 context during multiple MD5_Update()
4070function calls. This library also contains random number routines that are
4071based on MD5
4072
4073The normal method of use for this library is as follows
4074
4075MD5_Init(...);
4076MD5_Update(...);
4077...
4078MD5_Update(...);
4079MD5_Final(...);
4080
4081This library requires the inclusion of 'md5.h'.
4082
4083The functions are as follows:
4084
4085void MD5_Init(
4086MD5_CTX *c);
4087 This function needs to be called to initiate a MD5_CTX structure for
4088 use.
4089
4090void MD5_Update(
4091MD5_CTX *c;
4092unsigned char *data;
4093unsigned long len);
4094 This updates the message digest context being generated with 'len'
4095 bytes from the 'data' pointer. The number of bytes can be any
4096 length.
4097
4098void MD5_Final(
4099unsigned char *md;
4100MD5_CTX *c;
4101 This function is called when a message digest of the data digested
4102 with MD5_Update() is wanted. The message digest is put in the 'md'
4103 array and is MD5_DIGEST_LENGTH (16) bytes long.
4104
4105unsigned char *MD5(
4106unsigned char *d;
4107unsigned long n;
4108unsigned char *md;
4109 This function performs a MD5_Init(), followed by a MD5_Update()
4110 followed by a MD5_Final() (using a local MD5_CTX).
4111 The resulting digest is put into 'md' if it is not NULL.
4112 Regardless of the value of 'md', the message
4113 digest is returned from the function. If 'md' was NULL, the message
4114 digest returned is being stored in a static structure.
4115
4116
4117==== memory.doc ========================================================
4118
4119In the interests of debugging SSLeay, there is an option to compile
4120using some simple memory leak checking.
4121
4122All malloc(), free() and realloc() calls in SSLeay now go via
4123Malloc(), Free() and Realloc() (except those in crypto/lhash).
4124
4125If CRYPTO_MDEBUG is defined, these calls are #defined to
4126CRYPTO_malloc(), CRYPTO_free() and CRYPTO_realloc().
4127If it is not defined, they are #defined to malloc(), free() and realloc().
4128
4129the CRYPTO_malloc() routines by default just call the underlying library
4130functons.
4131
4132If CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON) is called, memory leak detection is
4133turned on. CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF) turns it off.
4134
4135When turned on, each Malloc() or Realloc() call is recored along with the file
4136and line number from where the call was made. (This is done using the
4137lhash library which always uses normal system malloc(3) routines).
4138
4139void CRYPTO_mem_leaks(BIO *b);
4140void CRYPTO_mem_leaks_fp(FILE *fp);
4141These both print out the list of memory that has not been free()ed.
4142This will probably be rather hard to read, but if you look for the 'top level'
4143structure allocation, this will often give an idea as to what is not being
4144free()ed. I don't expect people to use this stuff normally.
4145
4146==== ca.1 ========================================================
4147
4148From eay@orb.mincom.oz.au Thu Dec 28 23:56:45 1995
4149Received: by orb.mincom.oz.au id AA07374
4150 (5.65c/IDA-1.4.4 for eay); Thu, 28 Dec 1995 13:56:45 +1000
4151Date: Thu, 28 Dec 1995 13:56:45 +1000 (EST)
4152From: Eric Young <eay@mincom.oz.au>
4153X-Sender: eay@orb
4154To: sameer <sameer@c2.org>
4155Cc: ssleay@mincom.oz.au
4156Subject: Re: 'ca'
4157In-Reply-To: <199512230440.UAA23410@infinity.c2.org>
4158Message-Id: <Pine.SOL.3.91.951228133525.7269A-100000@orb>
4159Mime-Version: 1.0
4160Content-Type: TEXT/PLAIN; charset=US-ASCII
4161Status: RO
4162X-Status:
4163
4164On Fri, 22 Dec 1995, sameer wrote:
4165> I could use documentation on 'ca'. Thanks.
4166
4167Very quickly.
4168The ca program uses the ssleay.conf file for most of its configuration
4169
4170./ca -help
4171
4172 -verbose - Talk alot while doing things
4173 -config file - A config file. If you don't want to use the
4174 default config file
4175 -name arg - The particular CA definition to use
4176 In the config file, the section to use for parameters. This lets
4177 multiple setups to be contained in the one file. By default, the
4178 default_ca variable is looked up in the [ ca ] section. So in the
4179 shipped ssleay.conf, the CA definition used is CA_default. It could be
4180 any other name.
4181 -gencrl days - Generate a new CRL, days is when the next CRL is due
4182 This will generate a new certificate revocion list.
4183 -days arg - number of days to certify the certificate for
4184 When certifiying certificates, this is the number of days to use.
4185 -md arg - md to use, one of md2, md5, sha or sha1
4186 -policy arg - The CA 'policy' to support
4187 I'll describe this later, but there are 2 policies definied in the
4188 shipped ssleay.conf
4189 -keyfile arg - PEM RSA private key file
4190 -key arg - key to decode the RSA private key if it is encrypted
4191 since we need to keep the CA's RSA key encrypted
4192 -cert - The CA certificate
4193 -in file - The input PEM encoded certificate request(s)
4194 -out file - Where to put the output file(s)
4195 -outdir dir - Where to put output certificates
4196 The -out options concatinates all the output certificied
4197 certificates to one file, -outdir puts them in a directory,
4198 named by serial number.
4199 -infiles .... - The last argument, requests to process
4200 The certificate requests to process, -in is the same.
4201
4202Just about all the above have default values defined in ssleay.conf.
4203
4204The key variables in ssleay.conf are (for the pariticular '-name' being
4205used, in the default, it is CA_default).
4206
4207dir is where all the CA database stuff is kept.
4208certs is where all the previously issued certificates are kept.
4209The database is a simple text database containing the following tab separated
4210fields.
4211status: a value of 'R' - revoked, 'E' -expired or 'V' valid.
4212issued date: When the certificate was certified.
4213revoked date: When it was revoked, blank if not revoked.
4214serial number: The certificate serial number.
4215certificate: Where the certificate is located.
4216CN: The name of the certificate.
4217
4218The demo file has quite a few made up values it it. The last 2 were
4219added by the ca program and are acurate.
4220The CA program does not update the 'certificate' file correctly right now.
4221The serial field should be unique as should the CN/status combination.
4222The ca program checks these at startup. What still needs to be
4223wrtten is a program to 'regenerate' the data base file from the issued
4224certificate list (and a CRL list).
4225
4226Back to the CA_default variables.
4227
4228Most of the variables are commented.
4229
4230policy is the default policy.
4231
4232Ok for policies, they define the order and which fields must be present
4233in the certificate request and what gets filled in.
4234
4235So a value of
4236countryName = match
4237means that the country name must match the CA certificate.
4238organizationalUnitName = optional
4239The org.Unit,Name does not have to be present and
4240commonName = supplied
4241commonName must be supplied in the certificate request.
4242
4243For the 'policy_match' polocy, the order of the attributes in the
4244generated certiticate would be
4245countryName
4246stateOrProvinceName
4247organizationName
4248organizationalUnitName
4249commonName
4250emailAddress
4251
4252Have a play, it sort of makes sense. If you think about how the persona
4253requests operate, it is similar to the 'policy_match' policy and the
4254'policy_anything' is similar to what versign is doing.
4255
4256I hope this helps a bit. Some backend scripts are definitly needed to
4257update the database and to make certificate revocion easy. All
4258certificates issued should also be kept forever (or until they expire?)
4259
4260hope this helps
4261eric (who has to run off an buy some cheap knee pads for the caving in 4
4262days time :-)
4263
4264--
4265Eric Young | Signature removed since it was generating
4266AARNet: eay@mincom.oz.au | more followups than the message contents :-)
4267
4268
4269==== ms3-ca.doc ========================================================
4270
4271Date: Mon, 9 Jun 97 08:00:33 +0200
4272From: Holger.Reif@PrakInf.TU-Ilmenau.DE (Holger Reif)
4273Subject: ms3-ca.doc
4274Organization: TU Ilmenau, Fak. IA, FG Telematik
4275Content-Length: 14575
4276Status: RO
4277X-Status:
4278
4279Loading client certs into MSIE 3.01
4280===================================
4281
4282This document conatains all the information necessary to succesfully set up
4283some scripts to issue client certs to Microsoft Internet Explorer. It
4284includes the required knowledge about the model MSIE uses for client
4285certification and includes complete sample scripts ready to play with. The
4286scripts were tested against a modified ca program of SSLeay 0.6.6 and should
4287work with the regular ca program that comes with version 0.8.0. I haven't
4288tested against MSIE 4.0
4289
4290You can use the information contained in this document in either way you
4291want. However if you feel it saved you a lot of time I ask you to be as fair
4292as to mention my name: Holger Reif <reif@prakinf.tu-ilmenau.de>.
4293
42941.) The model used by MSIE
4295--------------------------
4296
4297The Internet Explorer doesn't come with a embedded engine for installing
4298client certs like Netscape's Navigator. It rather uses the CryptoAPI (CAPI)
4299defined by Microsoft. CAPI comes with WindowsNT 4.0 or is installed together
4300with Internet Explorer since 3.01. The advantage of this approach is a higher
4301flexibility because the certificates in the (per user) system open
4302certificate store may be used by other applications as well. The drawback
4303however is that you need to do a bit more work to get a client cert issued.
4304
4305CAPI defines functions which will handle basic cryptographic work, eg.
4306generating keys, encrypting some data, signing text or building a certificate
4307request. The procedure is as follows: A CAPI function generates you a key
4308pair and saves it into the certificate store. After that one builds a
4309Distinguished Name. Together with that key pair another CAPI function forms a
4310PKCS#10 request which you somehow need to submit to a CA. Finally the issued
4311cert is given to a yet another CAPI function which saves it into the
4312certificate store.
4313
4314The certificate store with the user's keys and certs is in the registry. You
4315will find it under HKEY_CURRENT_USER/Software/Microsoft/Cryptography/ (I
4316leave it to you as a little exercise to figure out what all the entries mean
4317;-). Note that the keys are protected only with the user's usual Windows
4318login password.
4319
43202.) The practical usage
4321-----------------------
4322
4323Unfortunatly since CAPI is a system API you can't access its functions from
4324HTML code directly. For this purpose Microsoft provides a wrapper called
4325certenr3.dll. This DLL accesses the CAPI functions and provides an interface
4326usable from Visual Basic Script. One needs to install that library on the
4327computer which wants to have client cert. The easiest way is to load it as an
4328ActiveX control (certenr3.dll is properly authenticode signed by MS ;-). If
4329you have ever enrolled e cert request at a CA you will have installed it.
4330
4331At time of writing certenr3.dll is contained in
4332http://www.microsoft.com/workshop/prog/security/csa/certenr3.exe. It comes
4333with an README file which explains the available functions. It is labeled
4334beta but every CA seems to use it anyway. The license.txt allows you the
4335usage for your own purposes (as far as I understood) and a somehow limited
4336distribution.
4337
4338The two functions of main interest are GenerateKeyPair and AcceptCredentials.
4339For complete explanation of all possible parameters see the README file. Here
4340are only minimal required parameters and their values.
4341
4342GenerateKeyPair(sessionID, FASLE, szName, 0, "ClientAuth", TRUE, FALSE, 1)
4343- sessionID is a (locally to that computer) unique string to correlate the
4344generated key pair with a cert installed later.
4345- szName is the DN of the form "C=DE; S=Thueringen; L=Ilmenau; CN=Holger
4346Reif; 1.2.840.113549.1.9.1=reif@prakinf.tu-ilmenau.de". Note that S is the
4347abreviation for StateOrProvince. The recognized abreviation include CN, O, C,
4348OU, G, I, L, S, T. If the abreviation is unknown (eg. for PKCS#9 email addr)
4349you need to use the full object identifier. The starting point for searching
4350them could be crypto/objects.h since all OIDs know to SSLeay are listed
4351there.
4352- note: the possible ninth parameter which should give a default name to the
4353certificate storage location doesn't seem to work. Changes to the constant
4354values in the call above doesn't seem to make sense. You can't generate
4355PKCS#10 extensions with that function.
4356
4357The result of GenerateKeyPair is the base64 encoded PKCS#10 request. However
4358it has a little strange format that SSLeay doesn't accept. (BTW I feel the
4359decision of rejecting that format as standard conforming.) It looks like
4360follows:
4361 1st line with 76 chars
4362 2nd line with 76 chars
4363 ...
4364 (n-2)th line with 76 chars
4365 (n-1)th line contains a multiple of 4 chars less then 76 (possible
4366empty)
4367 (n)th line has zero or 4 chars (then with 1 or 2 equal signs - the
4368 original text's lenght wasn'T a multiple of 3)
4369 The line separator has two chars: 0x0d 0x0a
4370
4371AcceptCredentials(sessionID, credentials, 0, FALSE)
4372- sessionID needs to be the same as while generating the key pair
4373- credentials is the base64 encoded PKCS#7 object containing the cert.
4374
4375CRL's and CA certs are not required simply just the client cert. (It seems to
4376me that both are not even checked somehow.) The only format of the base64
4377encoded object I succesfully used was all characters in a very long string
4378without line feeds or carriage returns. (Hey, it doesn't matter, only a
4379computer reads it!)
4380
4381The result should be S_OK. For error handling see the example that comes with
4382certenr3.dll.
4383
4384A note about ASN.1 character encodings. certenr3.dll seems to know only about
43852 of them: UniversalString and PrintableString. First it is definitely wrong
4386for an email address which is IA5STRING (checked by ssleay's ca). Second
4387unfortunately MSIE (at least until version 3.02) can't handle UniversalString
4388correctly - they just blow up you cert store! Therefore ssleay's ca (starting
4389from version 0.8.0) tries to convert the encodings automatically to IA5STRING
4390or TeletexString. The beef is it will work only for the latin-1 (western)
4391charset. Microsoft still has to do abit of homework...
4392
43933.) An example
4394--------------
4395
4396At least you need two steps: generating the key & request and then installing
4397the certificate. A real world CA would have some more steps involved, eg.
4398accepting some license. Note that both scripts shown below are just
4399experimental state without any warrenty!
4400
4401First how to generate a request. Note that we can't use a static page because
4402of the sessionID. I generate it from system time plus pid and hope it is
4403unique enough. Your are free to feed it through md5 to get more impressive
4404ID's ;-) Then the intended text is read in with sed which inserts the
4405sessionID.
4406
4407-----BEGIN ms-enroll.cgi-----
4408#!/bin/sh
4409SESSION_ID=`date '+%y%m%d%H%M%S'`$$
4410echo Content-type: text/html
4411echo
4412sed s/template_for_sessId/$SESSION_ID/ <<EOF
4413<HTML><HEAD>
4414<TITLE>Certificate Enrollment Test Page</TITLE>
4415</HEAD><BODY>
4416
4417<OBJECT
4418 classid="clsid:33BEC9E0-F78F-11cf-B782-00C04FD7BF43"
4419 codebase=certenr3.dll
4420 id=certHelper
4421 >
4422</OBJECT>
4423
4424<CENTER>
4425<H2>enrollment for a personal cert</H2>
4426<BR><HR WIDTH=50%><BR><P>
4427<FORM NAME="MSIE_Enrollment" ACTION="ms-gencert.cgi" ENCTYPE=x-www-form-
4428encoded METHOD=POST>
4429<TABLE>
4430 <TR><TD>Country</TD><TD><INPUT NAME="Country" VALUE=""></TD></TR>
4431 <TR><TD>State</TD><TD><INPUT NAME="StateOrProvince" VALUE=""></TD></TR>
4432 <TR><TD>Location</TD><TD><INPUT NAME="Location" VALUE=""></TD></TR>
4433 <TR><TD>Organization</TD><TD><INPUT NAME="Organization"
4434VALUE=""></TD></TR>
4435 <TR><TD>Organizational Unit</TD>
4436 <TD><INPUT NAME="OrganizationalUnit" VALUE=""></TD></TR>
4437 <TR><TD>Name</TD><TD><INPUT NAME="CommonName" VALUE=""></TD></TR>
4438 <TR><TD>eMail Address</TD>
4439 <TD><INPUT NAME="EmailAddress" VALUE=""></TD></TR>
4440 <TR><TD></TD>
4441 <TD><INPUT TYPE="BUTTON" NAME="submit" VALUE="Beantragen"></TD></TR>
4442</TABLE>
4443 <INPUT TYPE="hidden" NAME="SessionId" VALUE="template_for_sessId">
4444 <INPUT TYPE="hidden" NAME="Request" VALUE="">
4445</FORM>
4446<BR><HR WIDTH=50%><BR><P>
4447</CENTER>
4448
4449<SCRIPT LANGUAGE=VBS>
4450 Dim DN
4451
4452 Sub Submit_OnClick
4453 Dim TheForm
4454 Set TheForm = Document.MSIE_Enrollment
4455 sessionId = TheForm.SessionId.value
4456 reqHardware = FALSE
4457 C = TheForm.Country.value
4458 SP = TheForm.StateOrProvince.value
4459 L = TheForm.Location.value
4460 O = TheForm.Organization.value
4461 OU = TheForm.OrganizationalUnit.value
4462 CN = TheForm.CommonName.value
4463 Email = TheForm.EmailAddress.value
4464 szPurpose = "ClientAuth"
4465 doAcceptanceUINow = FALSE
4466 doOnline = TRUE
4467
4468 DN = ""
4469
4470 Call Add_RDN("C", C)
4471 Call Add_RDN("S", SP)
4472 Call Add_RDN("L", L)
4473 Call Add_RDN("O", O)
4474 Call Add_RDN("OU", OU)
4475 Call Add_RDN("CN", CN)
4476 Call Add_RDN("1.2.840.113549.1.9.1", Email)
4477 ' rsadsi
4478 ' pkcs
4479 ' pkcs9
4480 ' eMailAddress
4481 On Error Resume Next
4482 sz10 = certHelper.GenerateKeyPair(sessionId, _
4483 FALSE, DN, 0, ClientAuth, FASLE, TRUE, 1)_
4484 theError = Err.Number
4485 On Error Goto 0
4486 if (sz10 = Empty OR theError <> 0) Then
4487 sz = "The error '" & Hex(theError) & "' occurred." & chr(13) & _
4488 chr(10) & "Your credentials could not be generated."
4489 result = MsgBox(sz, 0, "Credentials Enrollment")
4490 Exit Sub
4491 else
4492 TheForm.Request.value = sz10
4493 TheForm.Submit
4494 end if
4495 End Sub
4496
4497 Sub Add_RDN(sn, value)
4498 if (value <> "") then
4499 if (DN <> "") then
4500 DN = DN & "; "
4501 end if
4502 DN = DN & sn & "=" & value
4503 end if
4504 End Sub
4505</SCRIPT>
4506</BODY>
4507</HTML>
4508EOF
4509-----END ms-enroll.cgi-----
4510
4511Second, how to extract the request and feed the certificate back? We need to
4512"normalize" the base64 encoding of the PKCS#10 format which means
4513regenerating the lines and wrapping with BEGIN and END line. This is done by
4514gawk. The request is taken by ca the normal way. Then the cert needs to be
4515packed into a PKCS#7 structure (note: the use of a CRL is necessary for
4516crl2pkcs7 as of version 0.6.6. Starting with 0.8.0 it it might probably be
4517ommited). Finally we need to format the PKCS#7 object and generate the HTML
4518text. I use two templates to have a clearer script.
4519
45201st note: postit2 is slightly modified from a program I found at ncsa's ftp
4521site. Grab it from http://www.easterngraphics.com/certs/IX9704/postit2.c. You
4522need utils.c from there too.
4523
45242nd note: I'm note quite sure wether the gawk script really handles all
4525possible inputs for the request right! Today I don't use this construction
4526anymore myself.
4527
45283d note: the cert must be of version 3! This could be done with the nsComment
4529line in ssleay.cnf...
4530
4531------BEGIN ms-gencert.cgi-----
4532#!/bin/sh
4533FILE="/tmp/"`date '+%y%m%d%H%M%S'-`$$
4534rm -f "$FILE".*
4535
4536HOME=`pwd`; export HOME # as ssleay.cnf insists on having such an env var
4537cd /usr/local/ssl #where demoCA (as named in ssleay.conf) is located
4538
4539postit2 -s " " -i 0x0d > "$FILE".inp # process the FORM vars
4540
4541SESSION_ID=`gawk '$1 == "SessionId" { print $2; exit }' "$FILE".inp`
4542
4543gawk \
4544 'BEGIN { \
4545 OFS = ""; \
4546 print "-----BEGIN CERTIFICATE REQUEST-----"; \
4547 req_seen=0 \
4548 } \
4549 $1 == "Request" { \
4550 req_seen=1; \
4551 if (length($2) == 72) print($2); \
4552 lastline=$2; \
4553 next; \
4554 } \
4555 { \
4556 if (req_seen == 1) { \
4557 if (length($1) >= 72) print($1); \
4558 else if (length(lastline) < 72) { \
4559 req_seen=0; \
4560 print (lastline,$1); \
4561 } \
4562 lastline=$1; \
4563 } \
4564 } \
4565 END { \
4566 print "-----END CERTIFICATE REQUEST-----"; \
4567 }' > "$FILE".pem < "$FILE".inp
4568
4569ssleay ca -batch -in "$FILE".pem -key passwd -out "$FILE".out
4570ssleay crl2pkcs7 -certfile "$FILE".out -out "$FILE".pkcs7 -in demoCA/crl.pem
4571
4572sed s/template_for_sessId/$SESSION_ID/ <ms-enroll2a.html >"$FILE".cert
4573/usr/local/bin/gawk \
4574 'BEGIN { \
4575 OFS = ""; \
4576 dq = sprintf("%c",34); \
4577 } \
4578 $0 ~ "PKCS7" { next; } \
4579 { \
4580 print dq$0dq" & _"; \
4581 }' <"$FILE".pkcs7 >> "$FILE".cert
4582cat ms-enroll2b.html >>"$FILE".cert
4583
4584echo Content-type: text/html
4585echo Content-length: `wc -c "$FILE".cert`
4586echo
4587cat "$FILE".cert
4588rm -f "$FILE".*
4589-----END ms-gencert.cgi-----
4590
4591----BEGIN ms-enroll2a.html----
4592<HTML><HEAD><TITLE>Certificate Acceptance Test Page</TITLE></HEAD><BODY>
4593
4594<OBJECT
4595 classid="clsid:33BEC9E0-F78F-11cf-B782-00C04FD7BF43"
4596 codebase=certenr3.dll
4597 id=certHelper
4598 >
4599</OBJECT>
4600
4601<CENTER>
4602<H2>Your personal certificate</H2>
4603<BR><HR WIDTH=50%><BR><P>
4604Press the button!
4605<P><INPUT TYPE=BUTTON VALUE="Nimm mich!" NAME="InstallCert">
4606</CENTER>
4607<BR><HR WIDTH=50%><BR>
4608
4609<SCRIPT LANGUAGE=VBS>
4610 Sub InstallCert_OnClick
4611
4612 sessionId = "template_for_sessId"
4613credentials = "" & _
4614----END ms-enroll2a.html----
4615
4616----BEGIN ms-enroll2b.html----
4617""
4618 On Error Resume Next
4619 result = certHelper.AcceptCredentials(sessionId, credentials, 0,
4620FALSE)
4621 if (IsEmpty(result)) Then
4622 sz = "The error '" & Err.Number & "' occurred." & chr(13) &
4623chr(10) & "This Digital ID could not be registered."
4624 msgOut = MsgBox(sz, 0, "Credentials Registration Error")
4625 navigate "error.html"
4626 else
4627 sz = "Digital ID successfully registered."
4628 msgOut = MsgBox(sz, 0, "Credentials Registration")
4629 navigate "success.html"
4630 end if
4631 Exit Sub
4632 End Sub
4633</SCRIPT>
4634</BODY>
4635</HTML>
4636----END ms-enroll2b.html----
4637
46384.) What do do with the cert?
4639-----------------------------
4640
4641The cert is visible (without restarting MSIE) under the following menu:
4642View->Options->Security->Personal certs. You can examine it's contents at
4643least partially.
4644
4645To use it for client authentication you need to use SSL3.0 (fortunately
4646SSLeay supports it with 0.8.0). Furthermore MSIE is told to only supports a
4647kind of automatic selection of certs (I personally wasn't able to test it
4648myself). But there is a requirement that the issuer of the server cert and
4649the issuer of the client cert needs to be the same (according to a developer
4650from MS). Which means: you need may more then one cert to talk to all
4651servers...
4652
4653I'm sure we will get a bit more experience after ApacheSSL is available for
4654SSLeay 0.8.8.
4655
4656
4657I hope you enjoyed reading and that in future questions on this topic will
4658rarely appear on ssl-users@moncom.com ;-)
4659
4660Ilmenau, 9th of June 1997
4661Holger Reif <reif@prakinf.tu-ilmenau.de>
4662--
4663read you later - Holger Reif
4664---------------------------------------- Signaturprojekt Deutsche Einheit
4665TU Ilmenau - Informatik - Telematik (Verdamp lang her)
4666Holger.Reif@PrakInf.TU-Ilmenau.DE Alt wie ein Baum werden, um ueber
4667http://Remus.PrakInf.TU-Ilmenau.DE/Reif/ alle 7 Bruecken gehen zu koennen
4668
4669
4670==== ns-ca.doc ========================================================
4671
4672The following documentation was supplied by Jeff Barber, who provided the
4673patch to the CA program to add this functionality.
4674
4675eric
4676--
4677Jeff Barber Email: jeffb@issl.atl.hp.com
4678
4679Hewlett Packard Phone: (404) 648-9503
4680Internet and System Security Lab Fax: (404) 648-9516
4681
4682 oo
4683---------------------cut /\ here for ns-ca.doc ------------------------------
4684
4685This document briefly describes how to use SSLeay to implement a
4686certificate authority capable of dynamically serving up client
4687certificates for version 3.0 beta 5 (and presumably later) versions of
4688the Netscape Navigator. Before describing how this is done, it's
4689important to understand a little about how the browser implements its
4690client certificate support. This is documented in some detail in the
4691URLs based at <URL:http://home.netscape.com/eng/security/certs.html>.
4692Here's a brief overview:
4693
4694- The Navigator supports a new HTML tag "KEYGEN" which will cause
4695 the browser to generate an RSA key pair when you submit a form
4696 containing the tag. The public key, along with an optional
4697 challenge (supposedly provided for use in certificate revocation
4698 but I don't use it) is signed, DER-encoded, base-64 encoded
4699 and sent to the web server as the value of the variable
4700 whose NAME is provided in the KEYGEN tag. The private key is
4701 stored by the browser in a local key database.
4702
4703 This "Signed Public Key And Challenge" (SPKAC) arrives formatted
4704 into 64 character lines (which are of course URL-encoded when
4705 sent via HTTP -- i.e. spaces, newlines and most punctuatation are
4706 encoded as "%HH" where HH is the hex equivalent of the ASCII code).
4707 Note that the SPKAC does not contain the other usual attributes
4708 of a certificate request, especially the subject name fields.
4709 These must be otherwise encoded in the form for submission along
4710 with the SPKAC.
4711
4712- Either immediately (in response to this form submission), or at
4713 some later date (a real CA will probably verify your identity in
4714 some way before issuing the certificate), a web server can send a
4715 certificate based on the public key and other attributes back to
4716 the browser by encoding it in DER (the binary form) and sending it
4717 to the browser as MIME type:
4718 "Content-type: application/x-x509-user-cert"
4719
4720 The browser uses the public key encoded in the certificate to
4721 associate the certificate with the appropriate private key in
4722 its local key database. Now, the certificate is "installed".
4723
4724- When a server wants to require authentication based on client
4725 certificates, it uses the right signals via the SSL protocol to
4726 trigger the Navigator to ask you which certificate you want to
4727 send. Whether the certificate is accepted is dependent on CA
4728 certificates and so forth installed in the server and is beyond
4729 the scope of this document.
4730
4731
4732Now, here's how the SSLeay package can be used to provide client
4733certficates:
4734
4735- You prepare a file for input to the SSLeay ca application.
4736 The file contains a number of "name = value" pairs that identify
4737 the subject. The names here are the same subject name component
4738 identifiers used in the CA section of the lib/ssleay.conf file,
4739 such as "emailAddress", "commonName" "organizationName" and so
4740 forth. Both the long version and the short version (e.g. "Email",
4741 "CN", "O") can be used.
4742
4743 One more name is supported: this one is "SPKAC". Its value
4744 is simply the value of the base-64 encoded SPKAC sent by the
4745 browser (with all the newlines and other space charaters
4746 removed -- and newline escapes are NOT supported).
4747
4748 [ As of SSLeay 0.6.4, multiple lines are supported.
4749 Put a \ at the end of each line and it will be joined with the
4750 previous line with the '\n' removed - eay ]
4751
4752 Here's a sample input file:
4753
4754C = US
4755SP = Georgia
4756O = Some Organization, Inc.
4757OU = Netscape Compatibility Group
4758CN = John X. Doe
4759Email = jxdoe@someorg.com
4760SPKAC = MIG0MGAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAwmk6FMJ4uAVIYbcvIOx5+bDGTfvL8X5gE+R67ccMk6rCSGbVQz2cetyQtnI+VIs0NwdD6wjuSuVtVFbLoHonowIDAQABFgAwDQYJKoZIhvcNAQEEBQADQQBFZDUWFl6BJdomtN1Bi53mwijy1rRgJ4YirF15yBEDM3DjAQkKXHYOIX+qpz4KXKnl6EYxTnGSFL5wWt8X2iyx
4761
4762- You execute the ca command (either from a CGI program run out of
4763 the web server, or as a later manual task) giving it the above
4764 file as input. For example, if the file were named /tmp/cert.req,
4765 you'd run:
4766 $SSLDIR/bin/ca -spkac /tmp/cert.req -out /tmp/cert
4767
4768 The output is in DER format (binary) if a -out argument is
4769 provided, as above; otherwise, it's in the PEM format (base-64
4770 encoded DER). Also, the "-batch" switch is implied by the
4771 "-spkac" so you don't get asked whether to complete the signing
4772 (probably it shouldn't work this way but I was only interested
4773 in hacking together an online CA that could be used for issuing
4774 test certificates).
4775
4776 The "-spkac" capability doesn't support multiple files (I think).
4777
4778 Any CHALLENGE provided in the SPKAC is simply ignored.
4779
4780 The interactions between the identification fields you provide
4781 and those identified in your lib/ssleay.conf are the same as if
4782 you did an ordinary "ca -in infile -out outfile" -- that is, if
4783 something is marked as required in the ssleay.conf file and it
4784 isn't found in the -spkac file, the certificate won't be issued.
4785
4786- Now, you pick up the output from /tmp/cert and pass it back to
4787 the Navigator prepending the Content-type string described earlier.
4788
4789- In order to run the ca command out of a CGI program, you must
4790 provide a password to decrypt the CA's private key. You can
4791 do this by using "echo MyKeyPassword | $SSLDIR/bin/ca ..."
4792 I think there's a way to not encrypt the key file in the first
4793 place, but I didn't see how to do that, so I made a small change
4794 to the library that allows the password to be accepted from a pipe.
4795 Either way is UTTERLY INSECURE and a real CA would never do that.
4796
4797 [ You can use the 'ssleay rsa' command to remove the password
4798 from the private key, or you can use the '-key' option to the
4799 ca command to specify the decryption key on the command line
4800 or use the -nodes option when generating the key.
4801 ca will try to clear the command line version of the password
4802 but for quite a few operating systems, this is not possible.
4803 - eric ]
4804
4805So, what do you have to do to make use of this stuff to create an online
4806demo CA capability with SSLeay?
4807
48081 Create an HTML form for your users. The form should contain
4809 fields for all of the required or optional fields in ssleay.conf.
4810 The form must contain a KEYGEN tag somewhere with at least a NAME
4811 attribute.
4812
48132 Create a CGI program to process the form input submitted by the
4814 browser. The CGI program must URL-decode the variables and create
4815 the file described above, containing subject identification info
4816 as well as the SPKAC block. It should then run the the ca program
4817 with the -spkac option. If it works (check the exit status),
4818 return the new certificate with the appropriate MIME type. If not,
4819 return the output of the ca command with MIME type "text/plain".
4820
48213 Set up your web server to accept connections signed by your demo
4822 CA. This probably involves obtaining the PEM-encoded CA certificate
4823 (ordinarily in $SSLDIR/CA/cacert.pem) and installing it into a
4824 server database. See your server manual for instructions.
4825
4826
4827==== obj.doc ========================================================
4828
4829The Object library.
4830
4831As part of my Crypto library, I found I required a method of identifying various
4832objects. These objects normally had 3 different values associated with
4833them, a short text name, a long (or lower case) text name, and an
4834ASN.1 Object Identifier (which is a sequence of numbers).
4835This library contains a static list of objects and functions to lookup
4836according to one type and to return the other types.
4837
4838To use these routines, 'Object.h' needs to be included.
4839
4840For each supported object, #define entries are defined as follows
4841#define SN_Algorithm "Algorithm"
4842#define LN_algorithm "algorithm"
4843#define NID_algorithm 38
4844#define OBJ_algorithm 1L,3L,14L,3L,2L
4845
4846SN_ stands for short name.
4847LN_ stands for either long name or lowercase name.
4848NID_ stands for Numeric ID. I each object has a unique NID and this
4849 should be used internally to identify objects.
4850OBJ_ stands for ASN.1 Object Identifier or ASN1_OBJECT as defined in the
4851 ASN1 routines. These values are used in ASN1 encoding.
4852
4853The following functions are to be used to return pointers into a static
4854definition of these types. What this means is "don't try to free() any
4855pointers returned from these functions.
4856
4857ASN1_OBJECT *OBJ_nid2obj(
4858int n);
4859 Return the ASN1_OBJECT that corresponds to a NID of n.
4860
4861char *OBJ_nid2ln(
4862int n);
4863 Return the long/lower case name of the object represented by the
4864 NID of n.
4865
4866char *OBJ_nid2sn(
4867int n);
4868 Return the short name for the object represented by the NID of n.
4869
4870ASN1_OBJECT *OBJ_dup(
4871ASN1_OBJECT *o);
4872 Duplicate and return a new ASN1_OBJECT that is the same as the
4873 passed parameter.
4874
4875int OBJ_obj2nid(
4876ASN1_OBJECT *o);
4877 Given ASN1_OBJECT o, return the NID that corresponds.
4878
4879int OBJ_ln2nid(
4880char *s);
4881 Given the long/lower case name 's', return the NID of the object.
4882
4883int OBJ_sn2nid(
4884char *s);
4885 Given the short name 's', return the NID of the object.
4886
4887char *OBJ_bsearch(
4888char *key,
4889char *base,
4890int num,
4891int size,
4892int (*cmp)());
4893 Since I have come across a few platforms that do not have the
4894 bsearch() function, OBJ_bsearch is my version of that function.
4895 Feel free to use this function, but you may as well just use the
4896 normal system bsearch(3) if it is present. This version also
4897 has tolerance of being passed NULL pointers.
4898
4899==== keys ===========================================================
4900
4901EVP_PKEY_DSA
4902EVP_PKEY_DSA2
4903EVP_PKEY_DSA3
4904EVP_PKEY_DSA4
4905
4906EVP_PKEY_RSA
4907EVP_PKEY_RSA2
4908
4909valid DSA pkey types
4910 NID_dsa
4911 NID_dsaWithSHA
4912 NID_dsaWithSHA1
4913 NID_dsaWithSHA1_2
4914
4915valid RSA pkey types
4916 NID_rsaEncryption
4917 NID_rsa
4918
4919NID_dsaWithSHA NID_dsaWithSHA DSA SHA
4920NID_dsa NID_dsaWithSHA1 DSA SHA1
4921NID_md2 NID_md2WithRSAEncryption RSA-pkcs1 MD2
4922NID_md5 NID_md5WithRSAEncryption RSA-pkcs1 MD5
4923NID_mdc2 NID_mdc2WithRSA RSA-none MDC2
4924NID_ripemd160 NID_ripemd160WithRSA RSA-pkcs1 RIPEMD160
4925NID_sha NID_shaWithRSAEncryption RSA-pkcs1 SHA
4926NID_sha1 NID_sha1WithRSAEncryption RSA-pkcs1 SHA1
4927
4928==== rand.doc ========================================================
4929
4930My Random number library.
4931
4932These routines can be used to generate pseudo random numbers and can be
4933used to 'seed' the pseudo random number generator (RNG). The RNG make no
4934effort to reproduce the same random number stream with each execution.
4935Various other routines in the SSLeay library 'seed' the RNG when suitable
4936'random' input data is available. Read the section at the end for details
4937on the design of the RNG.
4938
4939void RAND_bytes(
4940unsigned char *buf,
4941int num);
4942 This routine puts 'num' random bytes into 'buf'. One should make
4943 sure RAND_seed() has been called before using this routine.
4944
4945void RAND_seed(
4946unsigned char *buf,
4947int num);
4948 This routine adds more 'seed' data the RNG state. 'num' bytes
4949 are added to the RNG state, they are taken from 'buf'. This
4950 routine can be called with sensitive data such as user entered
4951 passwords. This sensitive data is in no way recoverable from
4952 the RAND library routines or state. Try to pass as much data
4953 from 'random' sources as possible into the RNG via this function.
4954 Also strongly consider using the RAND_load_file() and
4955 RAND_write_file() routines.
4956
4957void RAND_cleanup();
4958 When a program has finished with the RAND library, if it so
4959 desires, it can 'zero' all RNG state.
4960
4961The following 3 routines are convenience routines that can be used to
4962'save' and 'restore' data from/to the RNG and it's state.
4963Since the more 'random' data that is feed as seed data the better, why not
4964keep it around between executions of the program? Of course the
4965application should pass more 'random' data in via RAND_seed() and
4966make sure no-one can read the 'random' data file.
4967
4968char *RAND_file_name(
4969char *buf,
4970int size);
4971 This routine returns a 'default' name for the location of a 'rand'
4972 file. The 'rand' file should keep a sequence of random bytes used
4973 to initialise the RNG. The filename is put in 'buf'. Buf is 'size'
4974 bytes long. Buf is returned if things go well, if they do not,
4975 NULL is returned. The 'rand' file name is generated in the
4976 following way. First, if there is a 'RANDFILE' environment
4977 variable, it is returned. Second, if there is a 'HOME' environment
4978 variable, $HOME/.rand is returned. Third, NULL is returned. NULL
4979 is also returned if a buf would overflow.
4980
4981int RAND_load_file(
4982char *file,
4983long number);
4984 This function 'adds' the 'file' into the RNG state. It does this by
4985 doing a RAND_seed() on the value returned from a stat() system call
4986 on the file and if 'number' is non-zero, upto 'number' bytes read
4987 from the file. The number of bytes passed to RAND_seed() is returned.
4988
4989int RAND_write_file(
4990char *file),
4991 RAND_write_file() writes N random bytes to the file 'file', where
4992 N is the size of the internal RND state (currently 1k).
4993 This is a suitable method of saving RNG state for reloading via
4994 RAND_load_file().
4995
4996What follows is a description of this RNG and a description of the rational
4997behind it's design.
4998
4999It should be noted that this RNG is intended to be used to generate
5000'random' keys for various ciphers including generation of DH and RSA keys.
5001
5002It should also be noted that I have just created a system that I am happy with.
5003It may be overkill but that does not worry me. I have not spent that much
5004time on this algorithm so if there are glaring errors, please let me know.
5005Speed has not been a consideration in the design of these routines.
5006
5007First up I will state the things I believe I need for a good RNG.
50081) A good hashing algorithm to mix things up and to convert the RNG 'state'
5009 to random numbers.
50102) An initial source of random 'state'.
50113) The state should be very large. If the RNG is being used to generate
5012 4096 bit RSA keys, 2 2048 bit random strings are required (at a minimum).
5013 If your RNG state only has 128 bits, you are obviously limiting the
5014 search space to 128 bits, not 2048. I'm probably getting a little
5015 carried away on this last point but it does indicate that it may not be
5016 a bad idea to keep quite a lot of RNG state. It should be easier to
5017 break a cipher than guess the RNG seed data.
50184) Any RNG seed data should influence all subsequent random numbers
5019 generated. This implies that any random seed data entered will have
5020 an influence on all subsequent random numbers generated.
50215) When using data to seed the RNG state, the data used should not be
5022 extractable from the RNG state. I believe this should be a
5023 requirement because one possible source of 'secret' semi random
5024 data would be a private key or a password. This data must
5025 not be disclosed by either subsequent random numbers or a
5026 'core' dump left by a program crash.
50276) Given the same initial 'state', 2 systems should deviate in their RNG state
5028 (and hence the random numbers generated) over time if at all possible.
50297) Given the random number output stream, it should not be possible to determine
5030 the RNG state or the next random number.
5031
5032
5033The algorithm is as follows.
5034
5035There is global state made up of a 1023 byte buffer (the 'state'), a
5036working message digest ('md') and a counter ('count').
5037
5038Whenever seed data is added, it is inserted into the 'state' as
5039follows.
5040 The input is chopped up into units of 16 bytes (or less for
5041 the last block). Each of these blocks is run through the MD5
5042 message digest. The data passed to the MD5 digest is the
5043 current 'md', the same number of bytes from the 'state'
5044 (the location determined by in incremented looping index) as
5045 the current 'block' and the new key data 'block'. The result
5046 of this is kept in 'md' and also xored into the 'state' at the
5047 same locations that were used as input into the MD5.
5048 I believe this system addresses points 1 (MD5), 3 (the 'state'),
5049 4 (via the 'md'), 5 (by the use of MD5 and xor).
5050
5051When bytes are extracted from the RNG, the following process is used.
5052For each group of 8 bytes (or less), we do the following,
5053 Input into MD5, the top 8 bytes from 'md', the byte that are
5054 to be overwritten by the random bytes and bytes from the
5055 'state' (incrementing looping index). From this digest output
5056 (which is kept in 'md'), the top (upto) 8 bytes are
5057 returned to the caller and the bottom (upto) 8 bytes are xored
5058 into the 'state'.
5059 Finally, after we have finished 'generation' random bytes for the
5060 called, 'count' (which is incremented) and 'md' are fed into MD5 and
5061 the results are kept in 'md'.
5062 I believe the above addressed points 1 (use of MD5), 6 (by
5063 hashing into the 'state' the 'old' data from the caller that
5064 is about to be overwritten) and 7 (by not using the 8 bytes
5065 given to the caller to update the 'state', but they are used
5066 to update 'md').
5067
5068So of the points raised, only 2 is not addressed, but sources of
5069random data will always be a problem.
5070
5071
5072==== rc2.doc ========================================================
5073
5074The RC2 library.
5075
5076RC2 is a block cipher that operates on 64bit (8 byte) quantities. It
5077uses variable size key, but 128bit (16 byte) key would normally be considered
5078good. It can be used in all the modes that DES can be used. This
5079library implements the ecb, cbc, cfb64, ofb64 modes.
5080
5081I have implemented this library from an article posted to sci.crypt on
508211-Feb-1996. I personally don't know how far to trust the RC2 cipher.
5083While it is capable of having a key of any size, not much reseach has
5084publically been done on it at this point in time (Apr-1996)
5085since the cipher has only been public for a few months :-)
5086It is of a similar speed to DES and IDEA, so unless it is required for
5087meeting some standard (SSLv2, perhaps S/MIME), it would probably be advisable
5088to stick to IDEA, or for the paranoid, Tripple DES.
5089
5090Mind you, having said all that, I should mention that I just read alot and
5091implement ciphers, I'm a 'babe in the woods' when it comes to evaluating
5092ciphers :-).
5093
5094For all calls that have an 'input' and 'output' variables, they can be the
5095same.
5096
5097This library requires the inclusion of 'rc2.h'.
5098
5099All of the encryption functions take what is called an RC2_KEY as an
5100argument. An RC2_KEY is an expanded form of the RC2 key.
5101For all modes of the RC2 algorithm, the RC2_KEY used for
5102decryption is the same one that was used for encryption.
5103
5104The define RC2_ENCRYPT is passed to specify encryption for the functions
5105that require an encryption/decryption flag. RC2_DECRYPT is passed to
5106specify decryption.
5107
5108Please note that any of the encryption modes specified in my DES library
5109could be used with RC2. I have only implemented ecb, cbc, cfb64 and
5110ofb64 for the following reasons.
5111- ecb is the basic RC2 encryption.
5112- cbc is the normal 'chaining' form for block ciphers.
5113- cfb64 can be used to encrypt single characters, therefore input and output
5114 do not need to be a multiple of 8.
5115- ofb64 is similar to cfb64 but is more like a stream cipher, not as
5116 secure (not cipher feedback) but it does not have an encrypt/decrypt mode.
5117- If you want triple RC2, thats 384 bits of key and you must be totally
5118 obsessed with security. Still, if you want it, it is simple enough to
5119 copy the function from the DES library and change the des_encrypt to
5120 RC2_encrypt; an exercise left for the paranoid reader :-).
5121
5122The functions are as follows:
5123
5124void RC2_set_key(
5125RC2_KEY *ks;
5126int len;
5127unsigned char *key;
5128int bits;
5129 RC2_set_key converts an 'len' byte key into a RC2_KEY.
5130 A 'ks' is an expanded form of the 'key' which is used to
5131 perform actual encryption. It can be regenerated from the RC2 key
5132 so it only needs to be kept when encryption or decryption is about
5133 to occur. Don't save or pass around RC2_KEY's since they
5134 are CPU architecture dependent, 'key's are not. RC2 is an
5135 interesting cipher in that it can be used with a variable length
5136 key. 'len' is the length of 'key' to be used as the key.
5137 A 'len' of 16 is recomended. The 'bits' argument is an
5138 interesting addition which I only found out about in Aug 96.
5139 BSAFE uses this parameter to 'limit' the number of bits used
5140 for the key. To use the 'key' unmodified, set bits to 1024.
5141 This is what old versions of my RC2 library did (SSLeay 0.6.3).
5142 RSAs BSAFE library sets this parameter to be 128 if 128 bit
5143 keys are being used. So to be compatable with BSAFE, set it
5144 to 128, if you don't want to reduce RC2's key length, leave it
5145 at 1024.
5146
5147void RC2_encrypt(
5148unsigned long *data,
5149RC2_KEY *key,
5150int encrypt);
5151 This is the RC2 encryption function that gets called by just about
5152 every other RC2 routine in the library. You should not use this
5153 function except to implement 'modes' of RC2. I say this because the
5154 functions that call this routine do the conversion from 'char *' to
5155 long, and this needs to be done to make sure 'non-aligned' memory
5156 access do not occur.
5157 Data is a pointer to 2 unsigned long's and key is the
5158 RC2_KEY to use. Encryption or decryption is indicated by 'encrypt'.
5159 which can have the values RC2_ENCRYPT or RC2_DECRYPT.
5160
5161void RC2_ecb_encrypt(
5162unsigned char *in,
5163unsigned char *out,
5164RC2_KEY *key,
5165int encrypt);
5166 This is the basic Electronic Code Book form of RC2 (in DES this
5167 mode is called Electronic Code Book so I'm going to use the term
5168 for rc2 as well.
5169 Input is encrypted into output using the key represented by
5170 key. Depending on the encrypt, encryption or
5171 decryption occurs. Input is 8 bytes long and output is 8 bytes.
5172
5173void RC2_cbc_encrypt(
5174unsigned char *in,
5175unsigned char *out,
5176long length,
5177RC2_KEY *ks,
5178unsigned char *ivec,
5179int encrypt);
5180 This routine implements RC2 in Cipher Block Chaining mode.
5181 Input, which should be a multiple of 8 bytes is encrypted
5182 (or decrypted) to output which will also be a multiple of 8 bytes.
5183 The number of bytes is in length (and from what I've said above,
5184 should be a multiple of 8). If length is not a multiple of 8, bad
5185 things will probably happen. ivec is the initialisation vector.
5186 This function updates iv after each call so that it can be passed to
5187 the next call to RC2_cbc_encrypt().
5188
5189void RC2_cfb64_encrypt(
5190unsigned char *in,
5191unsigned char *out,
5192long length,
5193RC2_KEY *schedule,
5194unsigned char *ivec,
5195int *num,
5196int encrypt);
5197 This is one of the more useful functions in this RC2 library, it
5198 implements CFB mode of RC2 with 64bit feedback.
5199 This allows you to encrypt an arbitrary number of bytes,
5200 you do not require 8 byte padding. Each call to this
5201 routine will encrypt the input bytes to output and then update ivec
5202 and num. Num contains 'how far' we are though ivec.
5203 'Encrypt' is used to indicate encryption or decryption.
5204 CFB64 mode operates by using the cipher to generate a stream
5205 of bytes which is used to encrypt the plain text.
5206 The cipher text is then encrypted to generate the next 64 bits to
5207 be xored (incrementally) with the next 64 bits of plain
5208 text. As can be seen from this, to encrypt or decrypt,
5209 the same 'cipher stream' needs to be generated but the way the next
5210 block of data is gathered for encryption is different for
5211 encryption and decryption.
5212
5213void RC2_ofb64_encrypt(
5214unsigned char *in,
5215unsigned char *out,
5216long length,
5217RC2_KEY *schedule,
5218unsigned char *ivec,
5219int *num);
5220 This functions implements OFB mode of RC2 with 64bit feedback.
5221 This allows you to encrypt an arbitrary number of bytes,
5222 you do not require 8 byte padding. Each call to this
5223 routine will encrypt the input bytes to output and then update ivec
5224 and num. Num contains 'how far' we are though ivec.
5225 This is in effect a stream cipher, there is no encryption or
5226 decryption mode.
5227
5228For reading passwords, I suggest using des_read_pw_string() from my DES library.
5229To generate a password from a text string, I suggest using MD5 (or MD2) to
5230produce a 16 byte message digest that can then be passed directly to
5231RC2_set_key().
5232
5233=====
5234For more information about the specific RC2 modes in this library
5235(ecb, cbc, cfb and ofb), read the section entitled 'Modes of DES' from the
5236documentation on my DES library. What is said about DES is directly
5237applicable for RC2.
5238
5239
5240==== rc4.doc ========================================================
5241
5242The RC4 library.
5243RC4 is a stream cipher that operates on a byte stream. It can be used with
5244any length key but I would recommend normally using 16 bytes.
5245
5246This library requires the inclusion of 'rc4.h'.
5247
5248The RC4 encryption function takes what is called an RC4_KEY as an argument.
5249The RC4_KEY is generated by the RC4_set_key function from the key bytes.
5250
5251RC4, being a stream cipher, does not have an encryption or decryption mode.
5252It produces a stream of bytes that the input stream is xor'ed against and
5253so decryption is just a case of 'encrypting' again with the same key.
5254
5255I have only put in one 'mode' for RC4 which is the normal one. This means
5256there is no initialisation vector and there is no feedback of the cipher
5257text into the cipher. This implies that you should not ever use the
5258same key twice if you can help it. If you do, you leave yourself open to
5259known plain text attacks; if you know the plain text and
5260corresponding cipher text in one message, all messages that used the same
5261key can have the cipher text decoded for the corresponding positions in the
5262cipher stream.
5263
5264The main positive feature of RC4 is that it is a very fast cipher; about 4
5265times faster that DES. This makes it ideally suited to protocols where the
5266key is randomly chosen, like SSL.
5267
5268The functions are as follows:
5269
5270void RC4_set_key(
5271RC4_KEY *key;
5272int len;
5273unsigned char *data);
5274 This function initialises the RC4_KEY structure with the key passed
5275 in 'data', which is 'len' bytes long. The key data can be any
5276 length but 16 bytes seems to be a good number.
5277
5278void RC4(
5279RC4_KEY *key;
5280unsigned long len;
5281unsigned char *in;
5282unsigned char *out);
5283 Do the actual RC4 encryption/decryption. Using the 'key', 'len'
5284 bytes are transformed from 'in' to 'out'. As mentioned above,
5285 decryption is the operation as encryption.
5286
5287==== ref.doc ========================================================
5288
5289I have lots more references etc, and will update this list in the future,
529030 Aug 1996 - eay
5291
5292
5293SSL The SSL Protocol - from Netscapes.
5294
5295RC4 Newsgroups: sci.crypt
5296 From: sterndark@netcom.com (David Sterndark)
5297 Subject: RC4 Algorithm revealed.
5298 Message-ID: <sternCvKL4B.Hyy@netcom.com>
5299
5300RC2 Newsgroups: sci.crypt
5301 From: pgut01@cs.auckland.ac.nz (Peter Gutmann)
5302 Subject: Specification for Ron Rivests Cipher No.2
5303 Message-ID: <4fk39f$f70@net.auckland.ac.nz>
5304
5305MD2 RFC1319 The MD2 Message-Digest Algorithm
5306MD5 RFC1321 The MD5 Message-Digest Algorithm
5307
5308X509 Certificates
5309 RFC1421 Privacy Enhancement for Internet Electronic Mail: Part I
5310 RFC1422 Privacy Enhancement for Internet Electronic Mail: Part II
5311 RFC1423 Privacy Enhancement for Internet Electronic Mail: Part III
5312 RFC1424 Privacy Enhancement for Internet Electronic Mail: Part IV
5313
5314RSA and various standard encoding
5315 PKCS#1 RSA Encryption Standard
5316 PKCS#5 Password-Based Encryption Standard
5317 PKCS#7 Cryptographic Message Syntax Standard
5318 A Layman's Guide to a Subset of ASN.1, BER, and DER
5319 An Overview of the PKCS Standards
5320 Some Examples of the PKCS Standards
5321
5322IDEA Chapter 3 The Block Cipher IDEA
5323
5324RSA, prime number generation and bignum algorithms
5325 Introduction To Algorithms,
5326 Thomas Cormen, Charles Leiserson, Ronald Rivest,
5327 Section 29 Arithmetic Circuits
5328 Section 33 Number-Theoretic Algorithms
5329
5330Fast Private Key algorithm
5331 Fast Decipherment Algorithm for RSA Public-Key Cryptosystem
5332 J.-J. Quisquater and C. Couvreur, Electronics Letters,
5333 14th October 1982, Vol. 18 No. 21
5334
5335Prime number generation and bignum algorithms.
5336 PGP-2.3a
5337
5338==== rsa.doc ========================================================
5339
5340The RSA encryption and utility routines.
5341
5342The RSA routines are built on top of a big number library (the BN library).
5343There are support routines in the X509 library for loading and manipulating
5344the various objects in the RSA library. When errors are returned, read
5345about the ERR library for how to access the error codes.
5346
5347All RSA encryption is done according to the PKCS-1 standard which is
5348compatible with PEM and RSAref. This means that any values being encrypted
5349must be less than the size of the modulus in bytes, minus 10, bytes long.
5350
5351This library uses RAND_bytes()() for it's random data, make sure to feed
5352RAND_seed() with lots of interesting and varied data before using these
5353routines.
5354
5355The RSA library has one specific data type, the RSA structure.
5356It is composed of 8 BIGNUM variables (see the BN library for details) and
5357can hold either a private RSA key or a public RSA key.
5358Some RSA libraries have different structures for public and private keys, I
5359don't. For my libraries, a public key is determined by the fact that the
5360RSA->d value is NULL. These routines will operate on any size RSA keys.
5361While I'm sure 4096 bit keys are very very secure, they take a lot longer
5362to process that 1024 bit keys :-).
5363
5364The function in the RSA library are as follows.
5365
5366RSA *RSA_new();
5367 This function creates a new RSA object. The sub-fields of the RSA
5368 type are also malloced so you should always use this routine to
5369 create RSA variables.
5370
5371void RSA_free(
5372RSA *rsa);
5373 This function 'frees' an RSA structure. This routine should always
5374 be used to free the RSA structure since it will also 'free' any
5375 sub-fields of the RSA type that need freeing.
5376
5377int RSA_size(
5378RSA *rsa);
5379 This function returns the size of the RSA modulus in bytes. Why do
5380 I need this you may ask, well the reason is that when you encrypt
5381 with RSA, the output string will be the size of the RSA modulus.
5382 So the output for the RSA_encrypt and the input for the RSA_decrypt
5383 routines need to be RSA_size() bytes long, because this is how many
5384 bytes are expected.
5385
5386For the following 4 RSA encryption routines, it should be noted that
5387RSA_private_decrypt() should be used on the output from
5388RSA_public_encrypt() and RSA_public_decrypt() should be used on
5389the output from RSA_private_encrypt().
5390
5391int RSA_public_encrypt(
5392int from_len;
5393unsigned char *from
5394unsigned char *to
5395RSA *rsa);
5396 This function implements RSA public encryption, the rsa variable
5397 should be a public key (but can be a private key). 'from_len'
5398 bytes taken from 'from' and encrypted and put into 'to'. 'to' needs
5399 to be at least RSA_size(rsa) bytes long. The number of bytes
5400 written into 'to' is returned. -1 is returned on an error. The
5401 operation performed is
5402 to = from^rsa->e mod rsa->n.
5403
5404int RSA_private_encrypt(
5405int from_len;
5406unsigned char *from
5407unsigned char *to
5408RSA *rsa);
5409 This function implements RSA private encryption, the rsa variable
5410 should be a private key. 'from_len' bytes taken from
5411 'from' and encrypted and put into 'to'. 'to' needs
5412 to be at least RSA_size(rsa) bytes long. The number of bytes
5413 written into 'to' is returned. -1 is returned on an error. The
5414 operation performed is
5415 to = from^rsa->d mod rsa->n.
5416
5417int RSA_public_decrypt(
5418int from_len;
5419unsigned char *from
5420unsigned char *to
5421RSA *rsa);
5422 This function implements RSA public decryption, the rsa variable
5423 should be a public key (but can be a private key). 'from_len'
5424 bytes are taken from 'from' and decrypted. The decrypted data is
5425 put into 'to'. The number of bytes encrypted is returned. -1 is
5426 returned to indicate an error. The operation performed is
5427 to = from^rsa->e mod rsa->n.
5428
5429int RSA_private_decrypt(
5430int from_len;
5431unsigned char *from
5432unsigned char *to
5433RSA *rsa);
5434 This function implements RSA private decryption, the rsa variable
5435 should be a private key. 'from_len' bytes are taken
5436 from 'from' and decrypted. The decrypted data is
5437 put into 'to'. The number of bytes encrypted is returned. -1 is
5438 returned to indicate an error. The operation performed is
5439 to = from^rsa->d mod rsa->n.
5440
5441int RSA_mod_exp(
5442BIGNUM *n;
5443BIGNUM *p;
5444RSA *rsa);
5445 Normally you will never use this routine.
5446 This is really an internal function which is called by
5447 RSA_private_encrypt() and RSA_private_decrypt(). It performs
5448 n=n^p mod rsa->n except that it uses the 5 extra variables in the
5449 RSA structure to make this more efficient.
5450
5451RSA *RSA_generate_key(
5452int bits;
5453unsigned long e;
5454void (*callback)();
5455char *cb_arg;
5456 This routine is used to generate RSA private keys. It takes
5457 quite a period of time to run and should only be used to
5458 generate initial private keys that should then be stored
5459 for later use. The passed callback function
5460 will be called periodically so that feedback can be given
5461 as to how this function is progressing.
5462 'bits' is the length desired for the modulus, so it would be 1024
5463 to generate a 1024 bit private key.
5464 'e' is the value to use for the public exponent 'e'. Traditionally
5465 it is set to either 3 or 0x10001.
5466 The callback function (if not NULL) is called in the following
5467 situations.
5468 when we have generated a suspected prime number to test,
5469 callback(0,num1++,cb_arg). When it passes a prime number test,
5470 callback(1,num2++,cb_arg). When it is rejected as one of
5471 the 2 primes required due to gcd(prime,e value) != 0,
5472 callback(2,num3++,cb_arg). When finally accepted as one
5473 of the 2 primes, callback(3,num4++,cb_arg).
5474
5475
5476==== rsaref.doc ========================================================
5477
5478This package can be compiled to use the RSAref library.
5479This library is not allowed outside of the USA but inside the USA it is
5480claimed by RSA to be the only RSA public key library that can be used
5481besides BSAFE..
5482
5483There are 2 files, rsaref/rsaref.c and rsaref/rsaref.h that contain the glue
5484code to use RSAref. These files were written by looking at the PGP
5485source code and seeing which routines it used to access RSAref.
5486I have also been sent by some-one a copy of the RSAref header file that
5487contains the library error codes.
5488
5489[ Jun 1996 update - I have recently gotten hold of RSAref 2.0 from
5490 South Africa and have been doing some performace tests. ]
5491
5492They have now been tested against the recently announced RSAEURO
5493library.
5494
5495There are 2 ways to use SSLeay and RSAref. First, to build so that
5496the programs must be linked with RSAref, add '-DRSAref' to CFLAG in the top
5497level makefile and -lrsaref (or where ever you are keeping RSAref) to
5498EX_LIBS.
5499
5500To build a makefile via util/mk1mf.pl to do this, use the 'rsaref' option.
5501
5502The second method is to build as per normal and link applications with
5503the RSAglue library. The correct library order would be
5504cc -o cmd cmd.o -lssl -lRSAglue -lcrypto -lrsaref -ldes
5505The RSAglue library is built in the rsa directory and is NOT
5506automatically installed.
5507
5508Be warned that the RSAEURO library, that is claimed to be compatible
5509with RSAref contains a different value for the maximum number of bits
5510supported. This changes structure sizes and so if you are using
5511RSAEURO, change the value of RSAref_MAX_BITS in rsa/rsaref.h
5512
5513
5514==== s_mult.doc ========================================================
5515
5516s_mult is a test program I hacked up on a Sunday for testing non-blocking
5517IO. It has a select loop at it's centre that handles multiple readers
5518and writers.
5519
5520Try the following command
5521ssleay s_mult -echo -nbio -ssl -v
5522echo - sends any sent text back to the sender
5523nbio - turns on non-blocking IO
5524ssl - accept SSL connections, default is normal text
5525v - print lots
5526 type Q<cr> to quit
5527
5528In another window, run the following
5529ssleay s_client -pause </etc/termcap
5530
5531The pause option puts in a 1 second pause in each read(2)/write(2) call
5532so the other end will have read()s fail.
5533
5534==== session.doc ========================================================
5535
5536I have just checked over and re-worked the session stuff.
5537The following brief example will ignore all setup information to do with
5538authentication.
5539
5540Things operate as follows.
5541
5542The SSL environment has a 'context', a SSL_CTX structure. This holds the
5543cached SSL_SESSIONS (which can be reused) and the certificate lookup
5544information. Each SSL structure needs to be associated with a SSL_CTX.
5545Normally only one SSL_CTX structure is needed per program.
5546
5547SSL_CTX *SSL_CTX_new(void );
5548void SSL_CTX_free(SSL_CTX *);
5549These 2 functions create and destroy SSL_CTX structures
5550
5551The SSL_CTX has a session_cache_mode which is by default,
5552in SSL_SESS_CACHE_SERVER mode. What this means is that the library
5553will automatically add new session-id's to the cache apon sucsessful
5554SSL_accept() calls.
5555If SSL_SESS_CACHE_CLIENT is set, then client certificates are also added
5556to the cache.
5557SSL_set_session_cache_mode(ctx,mode) will set the 'mode' and
5558SSL_get_session_cache_mode(ctx) will get the cache 'mode'.
5559The modes can be
5560SSL_SESS_CACHE_OFF - no caching
5561SSL_SESS_CACHE_CLIENT - only SSL_connect()
5562SSL_SESS_CACHE_SERVER - only SSL_accept()
5563SSL_SESS_NO_CACHE_BOTH - Either SSL_accept() or SSL_connect().
5564If SSL_SESS_CACHE_NO_AUTO_CLEAR is set, old timed out sessions are
5565not automatically removed each 255, SSL_connect()s or SSL_accept()s.
5566
5567By default, apon every 255 successful SSL_connect() or SSL_accept()s,
5568the cache is flush. Please note that this could be expensive on
5569a heavily loaded SSL server, in which case, turn this off and
5570clear the cache of old entries 'manually' (with one of the functions
5571listed below) every few hours. Perhaps I should up this number, it is hard
5572to say. Remember, the '255' new calls is just a mechanims to get called
5573every now and then, in theory at most 255 new session-id's will have been
5574added but if 100 are added every minute, you would still have
5575500 in the cache before any would start being flushed (assuming a 3 minute
5576timeout)..
5577
5578int SSL_CTX_sess_hits(SSL_CTX *ctx);
5579int SSL_CTX_sess_misses(SSL_CTX *ctx);
5580int SSL_CTX_sess_timeouts(SSL_CTX *ctx);
5581These 3 functions return statistics about the SSL_CTX. These 3 are the
5582number of session id reuses. hits is the number of reuses, misses are the
5583number of lookups that failed, and timeouts is the number of cached
5584entries ignored because they had timeouted.
5585
5586ctx->new_session_cb is a function pointer to a function of type
5587int new_session_callback(SSL *ssl,SSL_SESSION *new);
5588This function, if set in the SSL_CTX structure is called whenever a new
5589SSL_SESSION is added to the cache. If the callback returns non-zero, it
5590means that the application will have to do a SSL_SESSION_free()
5591on the structure (this is
5592to do with the cache keeping the reference counts correct, without the
5593application needing to know about it.
5594The 'active' parameter is the current SSL session for which this connection
5595was created.
5596
5597void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx,int (*cb)());
5598to set the callback,
5599int (*cb)() SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)
5600to get the callback.
5601
5602If the 'get session' callback is set, when a session id is looked up and
5603it is not in the session-id cache, this callback is called. The callback is
5604of the form
5605SSL_SESSION *get_session_callback(unsigned char *sess_id,int sess_id_len,
5606 int *copy);
5607
5608The get_session_callback is intended to return null if no session id is found.
5609The reference count on the SSL_SESSION in incremented by the SSL library,
5610if copy is 1. Otherwise, the reference count is not modified.
5611
5612void SSL_CTX_sess_set_get_cb(ctx,cb) sets the callback and
5613int (*cb)()SSL_CTX_sess_get_get_cb(ctx) returns the callback.
5614
5615These callbacks are basically indended to be used by processes to
5616send their session-id's to other processes. I currently have not implemented
5617non-blocking semantics for these callbacks, it is upto the appication
5618to make the callbacks effiecent if they require blocking (perhaps
5619by 'saving' them and then 'posting them' when control returns from
5620the SSL_accept().
5621
5622LHASH *SSL_CTX_sessions(SSL_CTX *ctx)
5623This returns the session cache. The lhash strucutre can be accessed for
5624statistics about the cache.
5625
5626void lh_stats(LHASH *lh, FILE *out);
5627void lh_node_stats(LHASH *lh, FILE *out);
5628void lh_node_usage_stats(LHASH *lh, FILE *out);
5629
5630can be used to print details about it's activity and current state.
5631You can also delve directly into the lhash structure for 14 different
5632counters that are kept against the structure. When I wrote the lhash library,
5633I was interested in gathering statistics :-).
5634Have a read of doc/lhash.doc in the SSLeay distribution area for more details
5635on the lhash library.
5636
5637Now as mentioned ealier, when a SSL is created, it needs a SSL_CTX.
5638SSL * SSL_new(SSL_CTX *);
5639
5640This stores a session. A session is secret information shared between 2
5641SSL contexts. It will only be created if both ends of the connection have
5642authenticated their peer to their satisfaction. It basically contains
5643the information required to use a particular secret key cipher.
5644
5645To retrieve the SSL_CTX being used by a SSL,
5646SSL_CTX *SSL_get_SSL_CTX(SSL *s);
5647
5648Now when a SSL session is established between to programs, the 'session'
5649information that is cached in the SSL_CTX can me manipulated by the
5650following functions.
5651int SSL_set_session(SSL *s, SSL_SESSION *session);
5652This will set the SSL_SESSION to use for the next SSL_connect(). If you use
5653this function on an already 'open' established SSL connection, 'bad things
5654will happen'. This function is meaning-less when used on a ssl strucutre
5655that is just about to be used in a SSL_accept() call since the
5656SSL_accept() will either create a new session or retrieve one from the
5657cache.
5658
5659SSL_SESSION *SSL_get_session(SSL *s);
5660This will return the SSL_SESSION for the current SSL, NULL if there is
5661no session associated with the SSL structure.
5662
5663The SSL sessions are kept in the SSL_CTX in a hash table, to remove a
5664session
5665void SSL_CTX_remove_session(SSL_CTX *,SSL_SESSION *c);
5666and to add one
5667int SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c);
5668SSL_CTX_add_session() returns 1 if the session was already in the cache (so it
5669was not added).
5670Whenever a new session is created via SSL_connect()/SSL_accept(),
5671they are automatically added to the cache, depending on the session_cache_mode
5672settings. SSL_set_session()
5673does not add it to the cache. Just call SSL_CTX_add_session() if you do want the
5674session added. For a 'client' this would not normally be the case.
5675SSL_CTX_add_session() is not normally ever used, except for doing 'evil' things
5676which the next 2 funtions help you do.
5677
5678int i2d_SSL_SESSION(SSL_SESSION *in,unsigned char **pp);
5679SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a,unsigned char **pp,long length);
5680These 2 functions are in the standard ASN1 library form and can be used to
5681load and save to a byte format, the SSL_SESSION structure.
5682With these functions, you can save and read these structures to a files or
5683arbitary byte string.
5684The PEM_write_SSL_SESSION(fp,x) and PEM_read_SSL_SESSION(fp,x,cb) will
5685write to a file pointer in base64 encoding.
5686
5687What you can do with this, is pass session information between separate
5688processes. Please note, that you will probably also need to modify the
5689timeout information on the SSL_SESSIONs.
5690
5691long SSL_get_time(SSL_SESSION *s)
5692will return the 'time' that the session
5693was loaded. The timeout is relative to this time. This information is
5694saved when the SSL_SESSION is converted to binarary but it is stored
5695in as a unix long, which is rather OS dependant, but easy to convert back.
5696
5697long SSL_set_time(SSL_SESSION *s,long t) will set the above mentioned time.
5698The time value is just the value returned from time(3), and should really
5699be defined by be to be time_t.
5700
5701long SSL_get_timeout(SSL_SESSION *s);
5702long SSL_set_timeout(SSL_SESSION *s,long t);
5703These 2 retrieve and set the timeout which is just a number of secconds
5704from the 'SSL_get_time()' value. When this time period has elapesed,
5705the session will no longer be in the cache (well it will actually be removed
5706the next time it is attempted to be retrieved, so you could 'bump'
5707the timeout so it remains valid).
5708The 'time' and 'timeout' are set on a session when it is created, not reset
5709each time it is reused. If you did wish to 'bump it', just after establishing
5710a connection, do a
5711SSL_set_time(ssl,time(NULL));
5712
5713You can also use
5714SSL_CTX_set_timeout(SSL_CTX *ctx,unsigned long t) and
5715SSL_CTX_get_timeout(SSL_CTX *ctx) to manipulate the default timeouts for
5716all SSL connections created against a SSL_CTX. If you set a timeout in
5717an SSL_CTX, all new SSL's created will inherit the timeout. It can be over
5718written by the SSL_set_timeout(SSL *s,unsigned long t) function call.
5719If you 'set' the timeout back to 0, the system default will be used.
5720
5721SSL_SESSION *SSL_SESSION_new();
5722void SSL_SESSION_free(SSL_SESSION *ses);
5723These 2 functions are used to create and dispose of SSL_SESSION functions.
5724You should not ever normally need to use them unless you are using
5725i2d_SSL_SESSION() and/or d2i_SSL_SESSION(). If you 'load' a SSL_SESSION
5726via d2i_SSL_SESSION(), you will need to SSL_SESSION_free() it.
5727Both SSL_set_session() and SSL_CTX_add_session() will 'take copies' of the
5728structure (via reference counts) when it is passed to them.
5729
5730SSL_CTX_flush_sessions(ctx,time);
5731The first function will clear all sessions from the cache, which have expired
5732relative to 'time' (which could just be time(NULL)).
5733
5734SSL_CTX_flush_sessions(ctx,0);
5735This is a special case that clears everything.
5736
5737As a final comment, a 'session' is not enough to establish a new
5738connection. If a session has timed out, a certificate and private key
5739need to have been associated with the SSL structure.
5740SSL_copy_session_id(SSL *to,SSL *from); will copy not only the session
5741strucutre but also the private key and certificate associated with
5742'from'.
5743
5744EXAMPLES.
5745
5746So lets play at being a wierd SSL server.
5747
5748/* setup a context */
5749ctx=SSL_CTX_new();
5750
5751/* Lets load some session from binary into the cache, why one would do
5752 * this is not toally clear, but passing between programs does make sense
5753 * Perhaps you are using 4096 bit keys and are happy to keep them
5754 * valid for a week, to avoid the RSA overhead of 15 seconds, I'm not toally
5755 * sure, perhaps this is a process called from an SSL inetd and this is being
5756 * passed to the application. */
5757session=d2i_SSL_SESSION(....)
5758SSL_CTX_add_session(ctx,session);
5759
5760/* Lets even add a session from a file */
5761session=PEM_read_SSL_SESSION(....)
5762SSL_CTX_add_session(ctx,session);
5763
5764/* create a new SSL structure */
5765ssl=SSL_new(ctx);
5766
5767/* At this point we want to be able to 'create' new session if
5768 * required, so we need a certificate and RSAkey. */
5769SSL_use_RSAPrivateKey_file(ssl,...)
5770SSL_use_certificate_file(ssl,...)
5771
5772/* Now since we are a server, it make little sence to load a session against
5773 * the ssl strucutre since a SSL_accept() will either create a new session or
5774 * grab an existing one from the cache. */
5775
5776/* grab a socket descriptor */
5777fd=accept(...);
5778
5779/* associated it with the ssl strucutre */
5780SSL_set_fd(ssl,fd);
5781
5782SSL_accept(ssl); /* 'do' SSL using out cert and RSA key */
5783
5784/* Lets print out the session details or lets save it to a file,
5785 * perhaps with a secret key cipher, so that we can pass it to the FBI
5786 * when they want to decode the session :-). While we have RSA
5787 * this does not matter much but when I do SSLv3, this will allow a mechanism
5788 * for the server/client to record the information needed to decode
5789 * the traffic that went over the wire, even when using Diffie-Hellman */
5790PEM_write_SSL_SESSION(SSL_get_session(ssl),stdout,....)
5791
5792Lets 'connect' back to the caller using the same session id.
5793
5794ssl2=SSL_new(ctx);
5795fd2=connect(them);
5796SSL_set_fd(ssl2,fd2);
5797SSL_set_session(ssl2,SSL_get_session(ssl));
5798SSL_connect(ssl2);
5799
5800/* what the hell, lets accept no more connections using this session */
5801SSL_CTX_remove_session(SSL_get_SSL_CTX(ssl),SSL_get_session(ssl));
5802
5803/* we could have just as easily used ssl2 since they both are using the
5804 * same session.
5805 * You will note that both ssl and ssl2 are still using the session, and
5806 * the SSL_SESSION structure will be free()ed when both ssl and ssl2
5807 * finish using the session. Also note that you could continue to initiate
5808 * connections using this session by doing SSL_get_session(ssl) to get the
5809 * existing session, but SSL_accept() will not be able to find it to
5810 * use for incoming connections.
5811 * Of corse, the session will timeout at the far end and it will no
5812 * longer be accepted after a while. The time and timeout are ignored except
5813 * by SSL_accept(). */
5814
5815/* Since we have had our server running for 10 weeks, and memory is getting
5816 * short, perhaps we should clear the session cache to remove those
5817 * 100000 session entries that have expired. Some may consider this
5818 * a memory leak :-) */
5819
5820SSL_CTX_flush_sessions(ctx,time(NULL));
5821
5822/* Ok, after a bit more time we wish to flush all sessions from the cache
5823 * so that all new connections will be authenticated and incure the
5824 * public key operation overhead */
5825
5826SSL_CTX_flush_sessions(ctx,0);
5827
5828/* As a final note, to copy everything to do with a SSL, use */
5829SSL_copy_session_id(SSL *to,SSL *from);
5830/* as this also copies the certificate and RSA key so new session can
5831 * be established using the same details */
5832
5833
5834==== sha.doc ========================================================
5835
5836The SHA (Secure Hash Algorithm) library.
5837SHA is a message digest algorithm that can be used to condense an arbitrary
5838length message down to a 20 byte hash. The functions all need to be passed
5839a SHA_CTX which is used to hold the SHA context during multiple SHA_Update()
5840function calls. The normal method of use for this library is as follows
5841This library contains both SHA and SHA-1 digest algorithms. SHA-1 is
5842an update to SHA (which should really be called SHA-0 now) which
5843tweaks the algorithm slightly. The SHA-1 algorithm is used by simply
5844using SHA1_Init(), SHA1_Update(), SHA1_Final() and SHA1() instead of the
5845SHA*() calls
5846
5847SHA_Init(...);
5848SHA_Update(...);
5849...
5850SHA_Update(...);
5851SHA_Final(...);
5852
5853This library requires the inclusion of 'sha.h'.
5854
5855The functions are as follows:
5856
5857void SHA_Init(
5858SHA_CTX *c);
5859 This function needs to be called to initiate a SHA_CTX structure for
5860 use.
5861
5862void SHA_Update(
5863SHA_CTX *c;
5864unsigned char *data;
5865unsigned long len);
5866 This updates the message digest context being generated with 'len'
5867 bytes from the 'data' pointer. The number of bytes can be any
5868 length.
5869
5870void SHA_Final(
5871unsigned char *md;
5872SHA_CTX *c;
5873 This function is called when a message digest of the data digested
5874 with SHA_Update() is wanted. The message digest is put in the 'md'
5875 array and is SHA_DIGEST_LENGTH (20) bytes long.
5876
5877unsigned char *SHA(
5878unsigned char *d;
5879unsigned long n;
5880unsigned char *md;
5881 This function performs a SHA_Init(), followed by a SHA_Update()
5882 followed by a SHA_Final() (using a local SHA_CTX).
5883 The resulting digest is put into 'md' if it is not NULL.
5884 Regardless of the value of 'md', the message
5885 digest is returned from the function. If 'md' was NULL, the message
5886 digest returned is being stored in a static structure.
5887
5888
5889==== speed.doc ========================================================
5890
5891To get an idea of the performance of this library, use
5892ssleay speed
5893
5894perl util/sp-diff.pl file1 file2
5895
5896will print out the relative differences between the 2 files which are
5897expected to be the output from the speed program.
5898
5899The performace of the library is very dependant on the Compiler
5900quality and various flags used to build.
5901
5902---
5903
5904These are some numbers I did comparing RSAref and SSLeay on a Pentium 100.
5905[ These numbers are all out of date, as of SSL - 0.6.1 the RSA
5906operations are about 2 times faster, so check the version number ]
5907
5908RSA performance.
5909
5910SSLeay 0.6.0
5911Pentium 100, 32meg, Windows NT Workstation 3.51
5912linux - gcc v 2.7.0 -O3 -fomit-frame-pointer -m486
5913and
5914Windows NT - Windows NT 3.51 - Visual C++ 4.1 - 586 code + 32bit assember
5915Windows 3.1 - Windows NT 3.51 - Visual C++ 1.52c - 286 code + 32bit assember
5916NT Dos Shell- Windows NT 3.51 - Visual C++ 1.52c - 286 code + 16bit assember
5917
5918Times are how long it takes to do an RSA private key operation.
5919
5920 512bits 1024bits
5921-------------------------------
5922SSLeay NT dll 0.042s 0.202s see above
5923SSLeay linux 0.046s 0.218s Assember inner loops (normal build)
5924SSLeay linux 0.067s 0.380s Pure C code with BN_LLONG defined
5925SSLeay W3.1 dll 0.108s 0.478s see above
5926SSLeay linux 0.109s 0.713s C without BN_LLONG.
5927RSAref2.0 linux 0.149s 0.936s
5928SSLeay MS-DOS 0.197s 1.049s see above
5929
5930486DX66, 32meg, Windows NT Server 3.51
5931 512bits 1024bits
5932-------------------------------
5933SSLeay NT dll 0.084s 0.495s <- SSLeay 0.6.3
5934SSLeay NT dll 0.154s 0.882s
5935SSLeay W3.1 dll 0.335s 1.538s
5936SSLeay MS-DOS 0.490s 2.790s
5937
5938What I find cute is that I'm still faster than RSAref when using standard C,
5939without using the 'long long' data type :-), %35 faster for 512bit and we
5940scale up to 3.2 times faster for the 'default linux' build. I should mention
5941that people should 'try' to use either x86-lnx.s (elf), x86-lnxa.s or
5942x86-sol.s for any x86 based unix they are building on. The only problems
5943with be with syntax but the performance gain is quite large, especially for
5944servers. The code is very simple, you just need to modify the 'header'.
5945
5946The message is, if you are stuck using RSAref, the RSA performance will be
5947bad. Considering the code was compiled for a pentium, the 486DX66 number
5948would indicate 'Use RSAref and turn you Pentium 100 into a 486DX66' :-).
5949[ As of verson 0.6.1, it would be correct to say 'turn you pentium 100
5950 into a 486DX33' :-) ]
5951
5952I won't tell people if the DLL's are using RSAref or my stuff if no-one
5953asks :-).
5954
5955eric
5956
5957PS while I know I could speed things up further, I will probably not do
5958 so due to the effort involved. I did do some timings on the
5959 SSLeay bignum format -> RSAref number format conversion that occurs
5960 each time RSAref is used by SSLeay, and the numbers are trivial.
5961 0.00012s a call for 512bit vs 0.149s for the time spent in the function.
5962 0.00018s for 1024bit vs 0.938s. Insignificant.
5963 So the 'way to go', to support faster RSA libraries, if people are keen,
5964 is to write 'glue' code in a similar way that I do for RSAref and send it
5965 to me :-).
5966 My base library still has the advantage of being able to operate on
5967 any size numbers, and is not that far from the performance from the
5968 leaders in the field. (-%30?)
5969 [ Well as of 0.6.1 I am now the leader in the filed on x86 (we at
5970 least very close :-) ]
5971
5972 I suppose I should also mention some other numbers RSAref numbers, again
5973 on my Pentium.
5974 DES CBC EDE-DES MD5
5975 RSAref linux 830k/s 302k/s 4390k/s
5976 SSLeay linux 855k/s 319k/s 10025k/s
5977 SSLeay NT 1158k/s 410k/s 10470k/s
5978 SSLeay w31 378k/s 143k/s 2383k/s (fully 16bit)
5979
5980 Got to admit that Visual C++ 4.[01] is a damn fine compiler :-)
5981--
5982Eric Young | BOOL is tri-state according to Bill Gates.
5983AARNet: eay@cryptsoft.com | RTFM Win32 GetMessage().
5984
5985
5986
5987
5988==== ssl-ciph.doc ========================================================
5989
5990This is a quick high level summery of how things work now.
5991
5992Each SSLv2 and SSLv3 cipher is composed of 4 major attributes plus a few extra
5993minor ones.
5994
5995They are 'The key exchange algorithm', which is RSA for SSLv2 but can also
5996be Diffle-Hellman for SSLv3.
5997
5998An 'Authenticion algorithm', which can be RSA, Diffle-Helman, DSS or
5999none.
6000
6001The cipher
6002
6003The MAC digest.
6004
6005A cipher can also be an export cipher and is either an SSLv2 or a
6006SSLv3 ciphers.
6007
6008To specify which ciphers to use, one can either specify all the ciphers,
6009one at a time, or use 'aliases' to specify the preference and order for
6010the ciphers.
6011
6012There are a large number of aliases, but the most importaint are
6013kRSA, kDHr, kDHd and kEDH for key exchange types.
6014
6015aRSA, aDSS, aNULL and aDH for authentication
6016DES, 3DES, RC4, RC2, IDEA and eNULL for ciphers
6017MD5, SHA0 and SHA1 digests
6018
6019Now where this becomes interesting is that these can be put together to
6020specify the order and ciphers you wish to use.
6021
6022To speed this up there are also aliases for certian groups of ciphers.
6023The main ones are
6024SSLv2 - all SSLv2 ciphers
6025SSLv3 - all SSLv3 ciphers
6026EXP - all export ciphers
6027LOW - all low strngth ciphers (no export ciphers, normally single DES)
6028MEDIUM - 128 bit encryption
6029HIGH - Triple DES
6030
6031These aliases can be joined in a : separated list which specifies to
6032add ciphers, move them to the current location and delete them.
6033
6034A simpler way to look at all of this is to use the 'ssleay ciphers -v' command.
6035The default library cipher spec is
6036!ADH:RC4+RSA:HIGH:MEDIUM:LOW:EXP:+SSLv2:+EXP
6037which means, first, remove from consideration any ciphers that do not
6038authenticate. Next up, use ciphers using RC4 and RSA. Next include the HIGH,
6039MEDIUM and the LOW security ciphers. Finish up by adding all the export
6040ciphers on the end, then 'pull' all the SSLv2 and export ciphers to
6041the end of the list.
6042
6043The results are
6044$ ssleay ciphers -v '!ADH:RC4+RSA:HIGH:MEDIUM:LOW:EXP:+SSLv2:+EXP'
6045
6046RC4-SHA SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1
6047RC4-MD5 SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5
6048EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1
6049EDH-DSS-DES-CBC3-SHA SSLv3 Kx=DH Au=DSS Enc=3DES(168) Mac=SHA1
6050DES-CBC3-SHA SSLv3 Kx=RSA Au=RSA Enc=3DES(168) Mac=SHA1
6051IDEA-CBC-MD5 SSLv3 Kx=RSA Au=RSA Enc=IDEA(128) Mac=SHA1
6052EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH Au=RSA Enc=DES(56) Mac=SHA1
6053EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH Au=DSS Enc=DES(56) Mac=SHA1
6054DES-CBC-SHA SSLv3 Kx=RSA Au=RSA Enc=DES(56) Mac=SHA1
6055DES-CBC3-MD5 SSLv2 Kx=RSA Au=RSA Enc=3DES(168) Mac=MD5
6056DES-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=DES(56) Mac=MD5
6057IDEA-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=IDEA(128) Mac=MD5
6058RC2-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC2(128) Mac=MD5
6059RC4-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5
6060EXP-EDH-RSA-DES-CBC SSLv3 Kx=DH(512) Au=RSA Enc=DES(40) Mac=SHA1 export
6061EXP-EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH(512) Au=DSS Enc=DES(40) Mac=SHA1 export
6062EXP-DES-CBC-SHA SSLv3 Kx=RSA(512) Au=RSA Enc=DES(40) Mac=SHA1 export
6063EXP-RC2-CBC-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export
6064EXP-RC4-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
6065EXP-RC2-CBC-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export
6066EXP-RC4-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
6067
6068I would recoment people use the 'ssleay ciphers -v "text"'
6069command to check what they are going to use.
6070
6071Anyway, I'm falling asleep here so I'll do some more tomorrow.
6072
6073eric
6074
6075==== ssl.doc ========================================================
6076
6077SSL_CTX_sessions(SSL_CTX *ctx) - the session-id hash table.
6078
6079/* Session-id cache stats */
6080SSL_CTX_sess_number
6081SSL_CTX_sess_connect
6082SSL_CTX_sess_connect_good
6083SSL_CTX_sess_accept
6084SSL_CTX_sess_accept_good
6085SSL_CTX_sess_hits
6086SSL_CTX_sess_cb_hits
6087SSL_CTX_sess_misses
6088SSL_CTX_sess_timeouts
6089
6090/* Session-id application notification callbacks */
6091SSL_CTX_sess_set_new_cb
6092SSL_CTX_sess_get_new_cb
6093SSL_CTX_sess_set_get_cb
6094SSL_CTX_sess_get_get_cb
6095
6096/* Session-id cache operation mode */
6097SSL_CTX_set_session_cache_mode
6098SSL_CTX_get_session_cache_mode
6099
6100/* Set default timeout values to use. */
6101SSL_CTX_set_timeout
6102SSL_CTX_get_timeout
6103
6104/* Global SSL initalisation informational callback */
6105SSL_CTX_set_info_callback
6106SSL_CTX_get_info_callback
6107SSL_set_info_callback
6108SSL_get_info_callback
6109
6110/* If the SSL_accept/SSL_connect returned with -1, these indicate when
6111 * we should re-call *.
6112SSL_want
6113SSL_want_nothing
6114SSL_want_read
6115SSL_want_write
6116SSL_want_x509_lookup
6117
6118/* Where we are in SSL initalisation, used in non-blocking, perhaps
6119 * have a look at ssl/bio_ssl.c */
6120SSL_state
6121SSL_is_init_finished
6122SSL_in_init
6123SSL_in_connect_init
6124SSL_in_accept_init
6125
6126/* Used to set the 'inital' state so SSL_in_connect_init and SSL_in_accept_init
6127 * can be used to work out which function to call. */
6128SSL_set_connect_state
6129SSL_set_accept_state
6130
6131/* Where to look for certificates for authentication */
6132SSL_set_default_verify_paths /* calles SSL_load_verify_locations */
6133SSL_load_verify_locations
6134
6135/* get info from an established connection */
6136SSL_get_session
6137SSL_get_certificate
6138SSL_get_SSL_CTX
6139
6140SSL_CTX_new
6141SSL_CTX_free
6142SSL_new
6143SSL_clear
6144SSL_free
6145
6146SSL_CTX_set_cipher_list
6147SSL_get_cipher
6148SSL_set_cipher_list
6149SSL_get_cipher_list
6150SSL_get_shared_ciphers
6151
6152SSL_accept
6153SSL_connect
6154SSL_read
6155SSL_write
6156
6157SSL_debug
6158
6159SSL_get_read_ahead
6160SSL_set_read_ahead
6161SSL_set_verify
6162
6163SSL_pending
6164
6165SSL_set_fd
6166SSL_set_rfd
6167SSL_set_wfd
6168SSL_set_bio
6169SSL_get_fd
6170SSL_get_rbio
6171SSL_get_wbio
6172
6173SSL_use_RSAPrivateKey
6174SSL_use_RSAPrivateKey_ASN1
6175SSL_use_RSAPrivateKey_file
6176SSL_use_PrivateKey
6177SSL_use_PrivateKey_ASN1
6178SSL_use_PrivateKey_file
6179SSL_use_certificate
6180SSL_use_certificate_ASN1
6181SSL_use_certificate_file
6182
6183ERR_load_SSL_strings
6184SSL_load_error_strings
6185
6186/* human readable version of the 'state' of the SSL connection. */
6187SSL_state_string
6188SSL_state_string_long
6189/* These 2 report what kind of IO operation the library was trying to
6190 * perform last. Probably not very usefull. */
6191SSL_rstate_string
6192SSL_rstate_string_long
6193
6194SSL_get_peer_certificate
6195
6196SSL_SESSION_new
6197SSL_SESSION_print_fp
6198SSL_SESSION_print
6199SSL_SESSION_free
6200i2d_SSL_SESSION
6201d2i_SSL_SESSION
6202
6203SSL_get_time
6204SSL_set_time
6205SSL_get_timeout
6206SSL_set_timeout
6207SSL_copy_session_id
6208SSL_set_session
6209SSL_CTX_add_session
6210SSL_CTX_remove_session
6211SSL_CTX_flush_sessions
6212
6213BIO_f_ssl
6214
6215/* used to hold information as to why a certificate verification failed */
6216SSL_set_verify_result
6217SSL_get_verify_result
6218
6219/* can be used by the application to associate data with an SSL structure.
6220 * It needs to be 'free()ed' by the application */
6221SSL_set_app_data
6222SSL_get_app_data
6223
6224/* The following all set values that are kept in the SSL_CTX but
6225 * are used as the default values when an SSL session is created.
6226 * They are over writen by the relevent SSL_xxxx functions */
6227
6228/* SSL_set_verify */
6229void SSL_CTX_set_default_verify
6230
6231/* This callback, if set, totaly overrides the normal SSLeay verification
6232 * functions and should return 1 on sucesss and 0 on failure */
6233void SSL_CTX_set_cert_verify_callback
6234
6235/* The following are the same as the equivilent SSL_xxx functions.
6236 * Only one copy of this information is kept and if a particular
6237 * SSL structure has a local override, it is totally separate structure.
6238 */
6239int SSL_CTX_use_RSAPrivateKey
6240int SSL_CTX_use_RSAPrivateKey_ASN1
6241int SSL_CTX_use_RSAPrivateKey_file
6242int SSL_CTX_use_PrivateKey
6243int SSL_CTX_use_PrivateKey_ASN1
6244int SSL_CTX_use_PrivateKey_file
6245int SSL_CTX_use_certificate
6246int SSL_CTX_use_certificate_ASN1
6247int SSL_CTX_use_certificate_file
6248
6249
6250==== ssl_ctx.doc ========================================================
6251
6252This is now a bit dated, quite a few of the SSL_ functions could be
6253SSL_CTX_ functions. I will update this in the future. 30 Aug 1996
6254
6255From eay@orb.mincom.oz.au Mon Dec 11 21:37:08 1995
6256Received: by orb.mincom.oz.au id AA00696
6257 (5.65c/IDA-1.4.4 for eay); Mon, 11 Dec 1995 11:37:08 +1000
6258Date: Mon, 11 Dec 1995 11:37:08 +1000 (EST)
6259From: Eric Young <eay@mincom.oz.au>
6260X-Sender: eay@orb
6261To: sameer <sameer@c2.org>
6262Cc: Eric Young <eay@mincom.oz.au>
6263Subject: Re: PEM_readX509 oesn't seem to be working
6264In-Reply-To: <199512110102.RAA12521@infinity.c2.org>
6265Message-Id: <Pine.SOL.3.91.951211112115.28608D-100000@orb>
6266Mime-Version: 1.0
6267Content-Type: TEXT/PLAIN; charset=US-ASCII
6268Status: RO
6269X-Status:
6270
6271On Sun, 10 Dec 1995, sameer wrote:
6272> OK, that's solved. I've found out that it is saying "no
6273> certificate set" in SSL_accept because s->conn == NULL
6274> so there is some place I need to initialize s->conn that I am
6275> not initializing it.
6276
6277The full order of things for a server should be.
6278
6279ctx=SSL_CTX_new();
6280
6281/* The next line should not really be using ctx->cert but I'll leave it
6282 * this way right now... I don't want a X509_ routine to know about an SSL
6283 * structure, there should be an SSL_load_verify_locations... hmm, I may
6284 * add it tonight.
6285 */
6286X509_load_verify_locations(ctx->cert,CAfile,CApath);
6287
6288/* Ok now for each new connection we do the following */
6289con=SSL_new(ctx);
6290SSL_set_fd(con,s);
6291SSL_set_verify(con,verify,verify_callback);
6292
6293/* set the certificate and private key to use. */
6294SSL_use_certificate_ASN1(con,X509_certificate);
6295SSL_use_RSAPrivateKey_ASN1(con,RSA_private_key);
6296
6297SSL_accept(con);
6298
6299SSL_read(con)/SSL_write(con);
6300
6301There is a bit more than that but that is basically the structure.
6302
6303Create a context and specify where to lookup certificates.
6304
6305foreach connection
6306 {
6307 create a SSL structure
6308 set the certificate and private key
6309 do a SSL_accept
6310
6311 we should now be ok
6312 }
6313
6314eric
6315--
6316Eric Young | Signature removed since it was generating
6317AARNet: eay@mincom.oz.au | more followups than the message contents :-)
6318
6319
6320
6321==== ssleay.doc ========================================================
6322
6323SSLeay: a cryptographic kitchen sink.
6324
63251st December 1995
6326Way back at the start of April 1995, I was looking for a mindless
6327programming project. A friend of mine (Tim Hudson) said "why don't you do SSL,
6328it has DES encryption in it and I would not mind using it in a SSL telnet".
6329While it was true I had written a DES library in previous years, litle
6330did I know what an expansive task SSL would turn into.
6331
6332First of all, the SSL protocol contains DES encryption. Well and good. My
6333DES library was fast and portable. It also contained the RSA's RC4 stream
6334cipher. Again, not a problem, some-one had just posted to sci.crypt
6335something that was claimed to be RC4. It also contained IDEA, I had the
6336specifications, not a problem to implement. MD5, an RFC, trivial, at most
6337I could spend a week or so trying to see if I could speed up the
6338implementation. All in all a nice set of ciphers.
6339Then the first 'expantion of the scope', RSA public key
6340encryption. Since I did not knowing a thing about public key encryption
6341or number theory, this appeared quite a daunting task. Just writing a
6342big number library would be problomatic in itself, let alone making it fast.
6343At this point the scope of 'implementing SSL' expands eponentialy.
6344First of all, the RSA private keys were being kept in ASN.1 format.
6345Thankfully the RSA PKCS series of documents explains this format. So I now
6346needed to be able to encode and decode arbitary ASN.1 objects. The Public
6347keys were embeded in X509 certificates. Hmm... these are not only
6348ASN.1 objects but they make up a heirachy of authentication. To
6349authenticate a X509 certificate one needs to retrieve it's issuers
6350certificate etc etc. Hmm..., so I also need to implement some kind
6351of certificate management software. I would also have to implement
6352software to authenticate certificates. At this point the support code made
6353the SSL part of my library look quite small.
6354Around this time, the first version of SSLeay was released.
6355
6356Ah, but here was the problem, I was not happy with the code so far. As may
6357have become obvious, I had been treating all of this as a learning
6358exersize, so I have completely written the library myself. As such, due
6359to the way it had grown like a fungus, much of the library was not
6360'elagent' or neat. There were global and static variables all over the
6361place, the SSL part did not even handle non-blocking IO.
6362The Great rewrite began.
6363
6364As of this point in time, the 'Great rewrite' has almost finished. So what
6365follows is an approximate list of what is actually SSLeay 0.5.0
6366
6367/********* This needs to be updated for 0.6.0+ *************/
6368
6369---
6370The library contains the following routines. Please note that most of these
6371functions are not specfic for SSL or any other particular cipher
6372implementation. I have tried to make all the routines as general purpose
6373as possible. So you should not think of this library as an SSL
6374implemtation, but rather as a library of cryptographic functions
6375that also contains SSL. I refer to each of these function groupings as
6376libraries since they are often capable of functioning as independant
6377libraries
6378
6379First up, the general ciphers and message digests supported by the library.
6380
6381MD2 rfc???, a standard 'by parts' interface to this algorithm.
6382MD5 rfc???, the same type of interface as for the MD2 library except a
6383 different algorithm.
6384SHA THe Secure Hash Algorithm. Again the same type of interface as
6385 MD2/MD5 except the digest is 20 bytes.
6386SHA1 The 'revised' version of SHA. Just about identical to SHA except
6387 for one tweak of an inner loop.
6388DES This is my libdes library that has been floating around for the last
6389 few years. It has been enhanced for no other reason than completeness.
6390 It now supports ecb, cbc, cfb, ofb, cfb64, ofb64 in normal mode and
6391 triple DES modes of ecb, cbc, cfb64 and ofb64. cfb64 and ofb64 are
6392 functional interfaces to the 64 bit modes of cfb and ofb used in
6393 such a way thay they function as single character interfaces.
6394RC4 The RSA Inc. stream cipher.
6395RC2 The RSA Inc. block cipher.
6396IDEA An implmentation of the IDEA cipher, the library supports ecb, cbc,
6397 cfb64 and ofb64 modes of operation.
6398
6399Now all the above mentioned ciphers and digests libraries support high
6400speed, minimal 'crap in the way' type interfaces. For fastest and
6401lowest level access, these routines should be used directly.
6402
6403Now there was also the matter of public key crypto systems. These are
6404based on large integer arithmatic.
6405
6406BN This is my large integer library. It supports all the normal
6407 arithmentic operations. It uses malloc extensivly and as such has
6408 no limits of the size of the numbers being manipulated. If you
6409 wish to use 4000 bit RSA moduli, these routines will handle it.
6410 This library also contains routines to 'generate' prime numbers and
6411 to test for primality. The RSA and DH libraries sit on top of this
6412 library. As of this point in time, I don't support SHA, but
6413 when I do add it, it will just sit on top of the routines contained
6414 in this library.
6415RSA This implements the RSA public key algorithm. It also contains
6416 routines that will generate a new private/public key pair.
6417 All the RSA functions conform to the PKCS#1 standard.
6418DH This is an implementation of the
6419 Diffie-Hellman protocol. There are all the require routines for
6420 the protocol, plus extra routines that can be used to generate a
6421 strong prime for use with a specified generator. While this last
6422 routine is not generally required by applications implementing DH,
6423 It is present for completeness and because I thing it is much
6424 better to be able to 'generate' your own 'magic' numbers as oposed
6425 to using numbers suplied by others. I conform to the PKCS#3
6426 standard where required.
6427
6428You may have noticed the preceeding section mentions the 'generation' of
6429prime numbers. Now this requries the use of 'random numbers'.
6430
6431RAND This psuedo-random number library is based on MD5 at it's core
6432 and a large internal state (2k bytes). Once you have entered enough
6433 seed data into this random number algorithm I don't feel
6434 you will ever need to worry about it generating predictable output.
6435 Due to the way I am writing a portable library, I have left the
6436 issue of how to get good initial random seed data upto the
6437 application but I do have support routines for saving and loading a
6438 persistant random number state for use between program runs.
6439
6440Now to make all these ciphers easier to use, a higher level
6441interface was required. In this form, the same function would be used to
6442encrypt 'by parts', via any one of the above mentioned ciphers.
6443
6444EVP The Digital EnVeloPe library is quite large. At it's core are
6445 function to perform encryption and decryption by parts while using
6446 an initial parameter to specify which of the 17 different ciphers
6447 or 4 different message digests to use. On top of these are implmented
6448 the digital signature functions, sign, verify, seal and open.
6449 Base64 encoding of binary data is also done in this library.
6450
6451PEM rfc???? describe the format for Privacy Enhanced eMail.
6452 As part of this standard, methods of encoding digital enveloped
6453 data is an ascii format are defined. As such, I use a form of these
6454 to encode enveloped data. While at this point in time full support
6455 for PEM has not been built into the library, a minimal subset of
6456 the secret key and Base64 encoding is present. These reoutines are
6457 mostly used to Ascii encode binary data with a 'type' associated
6458 with it and perhaps details of private key encryption used to
6459 encrypt the data.
6460
6461PKCS7 This is another Digital Envelope encoding standard which uses ASN.1
6462 to encode the data. At this point in time, while there are some
6463 routines to encode and decode this binary format, full support is
6464 not present.
6465
6466As Mentioned, above, there are several different ways to encode
6467data structures.
6468
6469ASN1 This library is more a set of primatives used to encode the packing
6470 and unpacking of data structures. It is used by the X509
6471 certificate standard and by the PKCS standards which are used by
6472 this library. It also contains routines for duplicating and signing
6473 the structures asocisated with X509.
6474
6475X509 The X509 library contains routines for packing and unpacking,
6476 verifying and just about every thing else you would want to do with
6477 X509 certificates.
6478
6479PKCS7 PKCS-7 is a standard for encoding digital envelope data
6480 structures. At this point in time the routines will load and save
6481 DER forms of these structees. They need to be re-worked to support
6482 the BER form which is the normal way PKCS-7 is encoded. If the
6483 previous 2 sentances don't make much sense, don't worry, this
6484 library is not used by this version of SSLeay anyway.
6485
6486OBJ ASN.1 uses 'object identifiers' to identify objects. A set of
6487 functions were requred to translate from ASN.1 to an intenger, to a
6488 character string. This library provieds these translations
6489
6490Now I mentioned an X509 library. X509 specified a hieachy of certificates
6491which needs to be traversed to authenticate particular certificates.
6492
6493METH This library is used to push 'methods' of retrieving certificates
6494 into the library. There are some supplied 'methods' with SSLeay
6495 but applications can add new methods if they so desire.
6496 This library has not been finished and is not being used in this
6497 version.
6498
6499Now all the above are required for use in the initial point of this project.
6500
6501SSL The SSL protocol. This is a full implmentation of SSL v 2. It
6502 support both server and client authentication. SSL v 3 support
6503 will be added when the SSL v 3 specification is released in it's
6504 final form.
6505
6506Now quite a few of the above mentioned libraries rely on a few 'complex'
6507data structures. For each of these I have a library.
6508
6509Lhash This is a hash table library which is used extensivly.
6510
6511STACK An implemetation of a Stack data structure.
6512
6513BUF A simple character array structure that also support a function to
6514 check that the array is greater that a certain size, if it is not,
6515 it is realloced so that is it.
6516
6517TXT_DB A simple memory based text file data base. The application can specify
6518 unique indexes that will be enforced at update time.
6519
6520CONF Most of the programs written for this library require a configuration
6521 file. Instead of letting programs constantly re-implment this
6522 subsystem, the CONF library provides a consistant and flexable
6523 interface to not only configuration files but also environment
6524 variables.
6525
6526But what about when something goes wrong?
6527The one advantage (and perhaps disadvantage) of all of these
6528functions being in one library was the ability to implement a
6529single error reporting system.
6530
6531ERR This library is used to report errors. The error system records
6532 library number, function number (in the library) and reason
6533 number. Multiple errors can be reported so that an 'error' trace
6534 is created. The errors can be printed in numeric or textual form.
6535
6536
6537==== ssluse.doc ========================================================
6538
6539We have an SSL_CTX which contains global information for lots of
6540SSL connections. The session-id cache and the certificate verificate cache.
6541It also contains default values for use when certificates are used.
6542
6543SSL_CTX
6544 default cipher list
6545 session-id cache
6546 certificate cache
6547 default session-id timeout period
6548 New session-id callback
6549 Required session-id callback
6550 session-id stats
6551 Informational callback
6552 Callback that is set, overrides the SSLeay X509 certificate
6553 verification
6554 The default Certificate/Private Key pair
6555 Default read ahead mode.
6556 Default verify mode and verify callback. These are not used
6557 if the over ride callback mentioned above is used.
6558
6559Each SSL can have the following defined for it before a connection is made.
6560
6561Certificate
6562Private key
6563Ciphers to use
6564Certificate verify mode and callback
6565IO object to use in the comunication.
6566Some 'read-ahead' mode information.
6567A previous session-id to re-use.
6568
6569A connection is made by using SSL_connect or SSL_accept.
6570When non-blocking IO is being used, there are functions that can be used
6571to determin where and why the SSL_connect or SSL_accept did not complete.
6572This information can be used to recall the functions when the 'error'
6573condition has dissapeared.
6574
6575After the connection has been made, information can be retrived about the
6576SSL session and the session-id values that have been decided apon.
6577The 'peer' certificate can be retrieved.
6578
6579The session-id values include
6580'start time'
6581'timeout length'
6582
6583
6584
6585==== stack.doc ========================================================
6586
6587The stack data structure is used to store an ordered list of objects.
6588It is basically misnamed to call it a stack but it can function that way
6589and that is what I originally used it for. Due to the way element
6590pointers are kept in a malloc()ed array, the most efficient way to use this
6591structure is to add and delete elements from the end via sk_pop() and
6592sk_push(). If you wish to do 'lookups' sk_find() is quite efficient since
6593it will sort the stack (if required) and then do a binary search to lookup
6594the requested item. This sorting occurs automatically so just sk_push()
6595elements on the stack and don't worry about the order. Do remember that if
6596you do a sk_find(), the order of the elements will change.
6597
6598You should never need to 'touch' this structure directly.
6599typedef struct stack_st
6600 {
6601 unsigned int num;
6602 char **data;
6603 int sorted;
6604
6605 unsigned int num_alloc;
6606 int (*comp)();
6607 } STACK;
6608
6609'num' holds the number of elements in the stack, 'data' is the array of
6610elements. 'sorted' is 1 is the list has been sorted, 0 if not.
6611
6612num_alloc is the number of 'nodes' allocated in 'data'. When num becomes
6613larger than num_alloc, data is realloced to a larger size.
6614If 'comp' is set, it is a function that is used to compare 2 of the items
6615in the stack. The function should return -1, 0 or 1, depending on the
6616ordering.
6617
6618#define sk_num(sk) ((sk)->num)
6619#define sk_value(sk,n) ((sk)->data[n])
6620
6621These 2 macros should be used to access the number of elements in the
6622'stack' and to access a pointer to one of the values.
6623
6624STACK *sk_new(int (*c)());
6625 This creates a new stack. If 'c', the comparison function, is not
6626specified, the various functions that operate on a sorted 'stack' will not
6627work (sk_find()). NULL is returned on failure.
6628
6629void sk_free(STACK *);
6630 This function free()'s a stack structure. The elements in the
6631stack will not be freed so one should 'pop' and free all elements from the
6632stack before calling this function or call sk_pop_free() instead.
6633
6634void sk_pop_free(STACK *st; void (*func)());
6635 This function calls 'func' for each element on the stack, passing
6636the element as the argument. sk_free() is then called to free the 'stack'
6637structure.
6638
6639int sk_insert(STACK *sk,char *data,int where);
6640 This function inserts 'data' into stack 'sk' at location 'where'.
6641If 'where' is larger that the number of elements in the stack, the element
6642is put at the end. This function tends to be used by other 'stack'
6643functions. Returns 0 on failure, otherwise the number of elements in the
6644new stack.
6645
6646char *sk_delete(STACK *st,int loc);
6647 Remove the item a location 'loc' from the stack and returns it.
6648Returns NULL if the 'loc' is out of range.
6649
6650char *sk_delete_ptr(STACK *st, char *p);
6651 If the data item pointed to by 'p' is in the stack, it is deleted
6652from the stack and returned. NULL is returned if the element is not in the
6653stack.
6654
6655int sk_find(STACK *st,char *data);
6656 Returns the location that contains a value that is equal to
6657the 'data' item. If the comparison function was not set, this function
6658does a linear search. This function actually qsort()s the stack if it is not
6659in order and then uses bsearch() to do the initial search. If the
6660search fails,, -1 is returned. For mutliple items with the same
6661value, the index of the first in the array is returned.
6662
6663int sk_push(STACK *st,char *data);
6664 Append 'data' to the stack. 0 is returned if there is a failure
6665(due to a malloc failure), else 1. This is
6666sk_insert(st,data,sk_num(st));
6667
6668int sk_unshift(STACK *st,char *data);
6669 Prepend 'data' to the front (location 0) of the stack. This is
6670sk_insert(st,data,0);
6671
6672char *sk_shift(STACK *st);
6673 Return and delete from the stack the first element in the stack.
6674This is sk_delete(st,0);
6675
6676char *sk_pop(STACK *st);
6677 Return and delete the last element on the stack. This is
6678sk_delete(st,sk_num(sk)-1);
6679
6680void sk_zero(STACK *st);
6681 Removes all items from the stack. It does not 'free'
6682pointers but is a quick way to clear a 'stack of references'.
6683
6684==== threads.doc ========================================================
6685
6686How to compile SSLeay for multi-threading.
6687
6688Well basically it is quite simple, set the compiler flags and build.
6689I have only really done much testing under Solaris and Windows NT.
6690If you library supports localtime_r() and gmtime_r() add,
6691-DTHREADS to the makefile parameters. You can probably survive with out
6692this define unless you are going to have multiple threads generating
6693certificates at once. It will not affect the SSL side of things.
6694
6695The approach I have taken to doing locking is to make the application provide
6696callbacks to perform locking and so that the SSLeay library can distinguish
6697between threads (for the error state).
6698
6699To have a look at an example program, 'cd mt; vi mttest.c'.
6700To build under solaris, sh solaris.sh, for Windows NT or Windows 95,
6701win32.bat
6702
6703This will build mttest which will fire up 10 threads that talk SSL
6704to each other 10 times.
6705To enable everything to work, the application needs to call
6706
6707CRYPTO_set_id_callback(id_function);
6708CRYPTO_set_locking_callback(locking_function);
6709
6710before any multithreading is started.
6711id_function does not need to be defined under Windows NT or 95, the
6712correct function will be called if it is not. Under unix, getpid()
6713is call if the id_callback is not defined, for solaris this is wrong
6714(since threads id's are not pid's) but under IRIX it is correct
6715(threads are just processes sharing the data segement).
6716
6717The locking_callback is used to perform locking by the SSLeay library.
6718eg.
6719
6720void solaris_locking_callback(mode,type,file,line)
6721int mode;
6722int type;
6723char *file;
6724int line;
6725 {
6726 if (mode & CRYPTO_LOCK)
6727 mutex_lock(&(lock_cs[type]));
6728 else
6729 mutex_unlock(&(lock_cs[type]));
6730 }
6731
6732Now in this case I have used mutexes instead of read/write locks, since they
6733are faster and there are not many read locks in SSLeay, you may as well
6734always use write locks. file and line are __FILE__ and __LINE__ from
6735the compile and can be usefull when debugging.
6736
6737Now as you can see, 'type' can be one of a range of values, these values are
6738defined in crypto/crypto.h
6739CRYPTO_get_lock_name(type) will return a text version of what the lock is.
6740There are CRYPTO_NUM_LOCKS locks required, so under solaris, the setup
6741for multi-threading can be
6742
6743static mutex_t lock_cs[CRYPTO_NUM_LOCKS];
6744
6745void thread_setup()
6746 {
6747 int i;
6748
6749 for (i=0; i<CRYPTO_NUM_LOCKS; i++)
6750 mutex_init(&(lock_cs[i]),USYNC_THREAD,NULL);
6751 CRYPTO_set_id_callback((unsigned long (*)())solaris_thread_id);
6752 CRYPTO_set_locking_callback((void (*)())solaris_locking_callback);
6753 }
6754
6755As a final note, under Windows NT or Windows 95, you have to be careful
6756not to mix the various threaded, unthreaded and debug libraries.
6757Normally if they are mixed incorrectly, mttest will crash just after printing
6758out some usage statistics at the end. This is because the
6759different system libraries use different malloc routines and if
6760data is malloc()ed inside crypt32.dll or ssl32.dll and then free()ed by a
6761different library malloc, things get very confused.
6762
6763The default SSLeay DLL builds use /MD, so if you use this on your
6764application, things will work as expected. If you use /MDd,
6765you will probably have to rebuild SSLeay using this flag.
6766I should modify util/mk1mf.pl so it does all this correctly, but
6767this has not been done yet.
6768
6769One last warning. Because locking overheads are actually quite large, the
6770statistics collected against the SSL_CTX for successfull connections etc
6771are not locked when updated. This does make it possible for these
6772values to be slightly lower than they should be, if you are
6773running multithreaded on a multi-processor box, but this does not really
6774matter much.
6775
6776
6777==== txt_db.doc ========================================================
6778
6779TXT_DB, a simple text based in memory database.
6780
6781It holds rows of ascii data, for which the only special character is '\0'.
6782The rows can be of an unlimited length.
6783
6784==== why.doc ========================================================
6785
6786This file is more of a note for other people who wish to understand why
6787the build environment is the way it is :-).
6788
6789The include files 'depend' as follows.
6790Each of
6791crypto/*/*.c includes crypto/cryptlib.h
6792ssl/*.c include ssl/ssl_locl.h
6793apps/*.c include apps/apps.h
6794crypto/cryptlib.h, ssl/ssl_locl.h and apps/apps.h
6795all include e_os.h which contains OS/environment specific information.
6796If you need to add something todo with a particular environment,
6797add it to this file. It is worth remembering that quite a few libraries,
6798like lhash, des, md, sha etc etc do not include crypto/cryptlib.h. This
6799is because these libraries should be 'independantly compilable' and so I
6800try to keep them this way.
6801e_os.h is not so much a part of SSLeay, as the placing in one spot all the
6802evil OS dependant muck.
6803
6804I wanted to automate as many things as possible. This includes
6805error number generation. A
6806make errors
6807will scan the source files for error codes, append them to the correct
6808header files, and generate the functions to print the text version
6809of the error numbers. So don't even think about adding error numbers by
6810hand, put them in the form
6811XXXerr(XXXX_F_XXXX,YYYY_R_YYYY);
6812on line and it will be automatically picked up my a make errors.
6813
6814In a similar vein, programs to be added into ssleay in the apps directory
6815just need to have an entry added to E_EXE in makefile.ssl and
6816everthing will work as expected. Don't edit progs.h by hand.
6817
6818make links re-generates the symbolic links that are used. The reason why
6819I keep everything in its own directory, and don't put all the
6820test programs and header files in 'test' and 'include' is because I want
6821to keep the 'sub-libraries' independant. I still 'pull' out
6822indervidual libraries for use in specific projects where the code is
6823required. I have used the 'lhash' library in just about every software
6824project I have worked on :-).
6825
6826make depend generates dependancies and
6827make dclean removes them.
6828
6829You will notice that I use perl quite a bit when I could be using 'sed'.
6830The reason I decided to do this was to just stick to one 'extra' program.
6831For Windows NT, I have perl and no sed.
6832
6833The util/mk1mf.pl program can be used to generate a single makefile.
6834I use this because makefiles under Microsoft are horrific.
6835Each C compiler seems to have different linker formats, which have
6836to be used because the retarted C compilers explode when you do
6837cl -o file *.o.
6838
6839Now some would argue that I should just use the single makefile. I don't
6840like it during develoment for 2 reasons. First, the actuall make
6841command takes a long time. For my current setup, if I'm in
6842crypto/bn and I type make, only the crypto/bn directory gets rebuilt,
6843which is nice when you are modifying prototypes in bn.h which
6844half the SSLeay depends on. The second is that to add a new souce file
6845I just plonk it in at the required spot in the local makefile. This
6846then alows me to keep things local, I don't need to modify a 'global'
6847tables (the make for unix, the make for NT, the make for w31...).
6848When I am ripping apart a library structure, it is nice to only
6849have to worry about one directory :-).
6850
6851Having said all this, for the hell of it I put together 2 files that
6852#include all the souce code (generated by doing a ls */*.o after a build).
6853crypto.c takes only 30 seconds to build under NT and 2 minutes under linux
6854for my pentium100. Much faster that the normal build :-).
6855Again, the problem is that when using libraries, every program linked
6856to libcrypto.a would suddenly get 330k of library when it may only need
68571k. This technique does look like a nice way to do shared libraries though.
6858
6859Oh yes, as a final note, to 'build' a distribution, I just type
6860make dist.
6861This cleans and packages everything. The directory needs to be called
6862SSLeay since the make does a 'cd ..' and renames and tars things up.
6863
6864==== req.1 ========================================================
6865
6866The 'req' command is used to manipulate and deal with pkcs#10
6867certificate requests.
6868
6869It's default mode of operation is to load a certificate and then
6870write it out again.
6871
6872By default the 'req' is read from stdin in 'PEM' format.
6873The -inform option can be used to specify 'pem' format or 'der'
6874format. PEM format is the base64 encoding of the DER format.
6875
6876By default 'req' then writes the request back out. -outform can be used
6877to indicate the desired output format, be it 'pem' or 'der'.
6878
6879To specify an input file, use the '-in' option and the '-out' option
6880can be used to specify the output file.
6881
6882If you wish to perform a command and not output the certificate
6883request afterwards, use the '-noout' option.
6884
6885When a certificate is loaded, it can be printed in a human readable
6886ascii format via the '-text' option.
6887
6888To check that the signature on a certificate request is correct, use
6889the '-verify' option to make sure that the private key contained in the
6890certificate request corresponds to the signature.
6891
6892Besides the default mode, there is also the 'generate a certificate
6893request' mode. There are several flags that trigger this mode.
6894
6895-new will generate a new RSA key (if required) and then prompts
6896the user for details for the certificate request.
6897-newkey has an argument that is the number of bits to make the new
6898key. This function also triggers '-new'.
6899
6900The '-new' option can have a key to use specified instead of having to
6901load one, '-key' is used to specify the file containg the key.
6902-keyform can be used to specify the format of the key. Only
6903'pem' and 'der' formats are supported, later, 'netscape' format may be added.
6904
6905Finally there is the '-x509' options which makes req output a self
6906signed x509 certificate instead of a certificate request.
6907
6908Now as you may have noticed, there are lots of default options that
6909cannot be specified via the command line. They are held in a 'template'
6910or 'configuration file'. The -config option specifies which configuration
6911file to use. See conf.doc for details on the syntax of this file.
6912
6913The req command uses the 'req' section of the config file.
6914
6915---
6916# The following variables are defined. For this example I will populate
6917# the various values
6918[ req ]
6919default_bits = 512 # default number of bits to use.
6920default_keyfile = testkey.pem # Where to write the generated keyfile
6921 # if not specified.
6922distinguished_name= req_dn # The section that contains the
6923 # information about which 'object' we
6924 # want to put in the DN.
6925attributes = req_attr # The objects we want for the
6926 # attributes field.
6927encrypt_rsa_key = no # Should we encrypt newly generated
6928 # keys. I strongly recommend 'yes'.
6929
6930# The distinguished name section. For the following entries, the
6931# object names must exist in the SSLeay header file objects.h. If they
6932# do not, they will be silently ignored. The entries have the following
6933# format.
6934# <object_name> => string to prompt with
6935# <object_name>_default => default value for people
6936# <object_name>_value => Automatically use this value for this field.
6937# <object_name>_min => minimum number of characters for data (def. 0)
6938# <object_name>_max => maximum number of characters for data (def. inf.)
6939# All of these entries are optional except for the first one.
6940[ req_dn ]
6941countryName = Country Name (2 letter code)
6942countryName_default = AU
6943
6944stateOrProvinceName = State or Province Name (full name)
6945stateOrProvinceName_default = Queensland
6946
6947localityName = Locality Name (eg, city)
6948
6949organizationName = Organization Name (eg, company)
6950organizationName_default = Mincom Pty Ltd
6951
6952organizationalUnitName = Organizational Unit Name (eg, section)
6953organizationalUnitName_default = MTR
6954
6955commonName = Common Name (eg, YOUR name)
6956commonName_max = 64
6957
6958emailAddress = Email Address
6959emailAddress_max = 40
6960
6961# The next section is the attributes section. This is exactly the
6962# same as for the previous section except that the resulting objects are
6963# put in the attributes field.
6964[ req_attr ]
6965challengePassword = A challenge password
6966challengePassword_min = 4
6967challengePassword_max = 20
6968
6969unstructuredName = An optional company name
6970
6971----
6972Also note that the order that attributes appear in this file is the
6973order they will be put into the distinguished name.
6974
6975Once this request has been generated, it can be sent to a CA for
6976certifying.
6977
6978----
6979A few quick examples....
6980
6981To generate a new request and a new key
6982req -new
6983
6984To generate a new request and a 1058 bit key
6985req -newkey 1058
6986
6987To generate a new request using a pre-existing key
6988req -new -key key.pem
6989
6990To generate a self signed x509 certificate from a certificate
6991request using a supplied key, and we want to see the text form of the
6992output certificate (which we will put in the file selfSign.pem
6993req -x509 -in req.pem -key key.pem -text -out selfSign.pem
6994
6995Verify that the signature is correct on a certificate request.
6996req -verify -in req.pem
6997
6998Verify that the signature was made using a specified public key.
6999req -verify -in req.pem -key key.pem
7000
7001Print the contents of a certificate request
7002req -text -in req.pem
7003
7004==== danger ========================================================
7005
7006If you specify a SSLv2 cipher, and the mode is SSLv23 and the server
7007can talk SSLv3, it will claim there is no cipher since you should be
7008using SSLv3.
7009
7010When tracing debug stuff, remember BIO_s_socket() is different to
7011BIO_s_connect().
7012
7013BSD/OS assember is not working
7014
diff --git a/src/lib/libssl/src/doc/ssluse.doc b/src/lib/libssl/src/doc/ssluse.doc
deleted file mode 100644
index 2e3a26cbf3..0000000000
--- a/src/lib/libssl/src/doc/ssluse.doc
+++ /dev/null
@@ -1,45 +0,0 @@
1We have an SSL_CTX which contains global information for lots of
2SSL connections. The session-id cache and the certificate verificate cache.
3It also contains default values for use when certificates are used.
4
5SSL_CTX
6 default cipher list
7 session-id cache
8 certificate cache
9 default session-id timeout period
10 New session-id callback
11 Required session-id callback
12 session-id stats
13 Informational callback
14 Callback that is set, overrides the SSLeay X509 certificate
15 verification
16 The default Certificate/Private Key pair
17 Default read ahead mode.
18 Default verify mode and verify callback. These are not used
19 if the over ride callback mentioned above is used.
20
21Each SSL can have the following defined for it before a connection is made.
22
23Certificate
24Private key
25Ciphers to use
26Certificate verify mode and callback
27IO object to use in the comunication.
28Some 'read-ahead' mode information.
29A previous session-id to re-use.
30
31A connection is made by using SSL_connect or SSL_accept.
32When non-blocking IO is being used, there are functions that can be used
33to determin where and why the SSL_connect or SSL_accept did not complete.
34This information can be used to recall the functions when the 'error'
35condition has dissapeared.
36
37After the connection has been made, information can be retrived about the
38SSL session and the session-id values that have been decided apon.
39The 'peer' certificate can be retrieved.
40
41The session-id values include
42'start time'
43'timeout length'
44
45
diff --git a/src/lib/libssl/src/doc/stack.doc b/src/lib/libssl/src/doc/stack.doc
deleted file mode 100644
index 7c20b1b664..0000000000
--- a/src/lib/libssl/src/doc/stack.doc
+++ /dev/null
@@ -1,96 +0,0 @@
1The stack data structure is used to store an ordered list of objects.
2It is basically misnamed to call it a stack but it can function that way
3and that is what I originally used it for. Due to the way element
4pointers are kept in a malloc()ed array, the most efficient way to use this
5structure is to add and delete elements from the end via sk_pop() and
6sk_push(). If you wish to do 'lookups' sk_find() is quite efficient since
7it will sort the stack (if required) and then do a binary search to lookup
8the requested item. This sorting occurs automatically so just sk_push()
9elements on the stack and don't worry about the order. Do remember that if
10you do a sk_find(), the order of the elements will change.
11
12You should never need to 'touch' this structure directly.
13typedef struct stack_st
14 {
15 unsigned int num;
16 char **data;
17 int sorted;
18
19 unsigned int num_alloc;
20 int (*comp)();
21 } STACK;
22
23'num' holds the number of elements in the stack, 'data' is the array of
24elements. 'sorted' is 1 is the list has been sorted, 0 if not.
25
26num_alloc is the number of 'nodes' allocated in 'data'. When num becomes
27larger than num_alloc, data is realloced to a larger size.
28If 'comp' is set, it is a function that is used to compare 2 of the items
29in the stack. The function should return -1, 0 or 1, depending on the
30ordering.
31
32#define sk_num(sk) ((sk)->num)
33#define sk_value(sk,n) ((sk)->data[n])
34
35These 2 macros should be used to access the number of elements in the
36'stack' and to access a pointer to one of the values.
37
38STACK *sk_new(int (*c)());
39 This creates a new stack. If 'c', the comparison function, is not
40specified, the various functions that operate on a sorted 'stack' will not
41work (sk_find()). NULL is returned on failure.
42
43void sk_free(STACK *);
44 This function free()'s a stack structure. The elements in the
45stack will not be freed so one should 'pop' and free all elements from the
46stack before calling this function or call sk_pop_free() instead.
47
48void sk_pop_free(STACK *st; void (*func)());
49 This function calls 'func' for each element on the stack, passing
50the element as the argument. sk_free() is then called to free the 'stack'
51structure.
52
53int sk_insert(STACK *sk,char *data,int where);
54 This function inserts 'data' into stack 'sk' at location 'where'.
55If 'where' is larger that the number of elements in the stack, the element
56is put at the end. This function tends to be used by other 'stack'
57functions. Returns 0 on failure, otherwise the number of elements in the
58new stack.
59
60char *sk_delete(STACK *st,int loc);
61 Remove the item a location 'loc' from the stack and returns it.
62Returns NULL if the 'loc' is out of range.
63
64char *sk_delete_ptr(STACK *st, char *p);
65 If the data item pointed to by 'p' is in the stack, it is deleted
66from the stack and returned. NULL is returned if the element is not in the
67stack.
68
69int sk_find(STACK *st,char *data);
70 Returns the location that contains a value that is equal to
71the 'data' item. If the comparison function was not set, this function
72does a linear search. This function actually qsort()s the stack if it is not
73in order and then uses bsearch() to do the initial search. If the
74search fails,, -1 is returned. For mutliple items with the same
75value, the index of the first in the array is returned.
76
77int sk_push(STACK *st,char *data);
78 Append 'data' to the stack. 0 is returned if there is a failure
79(due to a malloc failure), else 1. This is
80sk_insert(st,data,sk_num(st));
81
82int sk_unshift(STACK *st,char *data);
83 Prepend 'data' to the front (location 0) of the stack. This is
84sk_insert(st,data,0);
85
86char *sk_shift(STACK *st);
87 Return and delete from the stack the first element in the stack.
88This is sk_delete(st,0);
89
90char *sk_pop(STACK *st);
91 Return and delete the last element on the stack. This is
92sk_delete(st,sk_num(sk)-1);
93
94void sk_zero(STACK *st);
95 Removes all items from the stack. It does not 'free'
96pointers but is a quick way to clear a 'stack of references'.
diff --git a/src/lib/libssl/src/doc/threads.doc b/src/lib/libssl/src/doc/threads.doc
deleted file mode 100644
index 251061e896..0000000000
--- a/src/lib/libssl/src/doc/threads.doc
+++ /dev/null
@@ -1,90 +0,0 @@
1How to compile SSLeay for multi-threading.
2
3Well basically it is quite simple, set the compiler flags and build.
4I have only really done much testing under Solaris and Windows NT.
5If you library supports localtime_r() and gmtime_r() add,
6-DTHREADS to the makefile parameters. You can probably survive with out
7this define unless you are going to have multiple threads generating
8certificates at once. It will not affect the SSL side of things.
9
10The approach I have taken to doing locking is to make the application provide
11callbacks to perform locking and so that the SSLeay library can distinguish
12between threads (for the error state).
13
14To have a look at an example program, 'cd mt; vi mttest.c'.
15To build under solaris, sh solaris.sh, for Windows NT or Windows 95,
16win32.bat
17
18This will build mttest which will fire up 10 threads that talk SSL
19to each other 10 times.
20To enable everything to work, the application needs to call
21
22CRYPTO_set_id_callback(id_function);
23CRYPTO_set_locking_callback(locking_function);
24
25before any multithreading is started.
26id_function does not need to be defined under Windows NT or 95, the
27correct function will be called if it is not. Under unix, getpid()
28is call if the id_callback is not defined, for solaris this is wrong
29(since threads id's are not pid's) but under IRIX it is correct
30(threads are just processes sharing the data segement).
31
32The locking_callback is used to perform locking by the SSLeay library.
33eg.
34
35void solaris_locking_callback(mode,type,file,line)
36int mode;
37int type;
38char *file;
39int line;
40 {
41 if (mode & CRYPTO_LOCK)
42 mutex_lock(&(lock_cs[type]));
43 else
44 mutex_unlock(&(lock_cs[type]));
45 }
46
47Now in this case I have used mutexes instead of read/write locks, since they
48are faster and there are not many read locks in SSLeay, you may as well
49always use write locks. file and line are __FILE__ and __LINE__ from
50the compile and can be usefull when debugging.
51
52Now as you can see, 'type' can be one of a range of values, these values are
53defined in crypto/crypto.h
54CRYPTO_get_lock_name(type) will return a text version of what the lock is.
55There are CRYPTO_NUM_LOCKS locks required, so under solaris, the setup
56for multi-threading can be
57
58static mutex_t lock_cs[CRYPTO_NUM_LOCKS];
59
60void thread_setup()
61 {
62 int i;
63
64 for (i=0; i<CRYPTO_NUM_LOCKS; i++)
65 mutex_init(&(lock_cs[i]),USYNC_THREAD,NULL);
66 CRYPTO_set_id_callback((unsigned long (*)())solaris_thread_id);
67 CRYPTO_set_locking_callback((void (*)())solaris_locking_callback);
68 }
69
70As a final note, under Windows NT or Windows 95, you have to be careful
71not to mix the various threaded, unthreaded and debug libraries.
72Normally if they are mixed incorrectly, mttest will crash just after printing
73out some usage statistics at the end. This is because the
74different system libraries use different malloc routines and if
75data is malloc()ed inside crypt32.dll or ssl32.dll and then free()ed by a
76different library malloc, things get very confused.
77
78The default SSLeay DLL builds use /MD, so if you use this on your
79application, things will work as expected. If you use /MDd,
80you will probably have to rebuild SSLeay using this flag.
81I should modify util/mk1mf.pl so it does all this correctly, but
82this has not been done yet.
83
84One last warning. Because locking overheads are actually quite large, the
85statistics collected against the SSL_CTX for successfull connections etc
86are not locked when updated. This does make it possible for these
87values to be slightly lower than they should be, if you are
88running multithreaded on a multi-processor box, but this does not really
89matter much.
90
diff --git a/src/lib/libssl/src/doc/txt_db.doc b/src/lib/libssl/src/doc/txt_db.doc
deleted file mode 100644
index 3a5b0d50a1..0000000000
--- a/src/lib/libssl/src/doc/txt_db.doc
+++ /dev/null
@@ -1,4 +0,0 @@
1TXT_DB, a simple text based in memory database.
2
3It holds rows of ascii data, for which the only special character is '\0'.
4The rows can be of an unlimited length.
diff --git a/src/lib/libssl/src/doc/verify b/src/lib/libssl/src/doc/verify
deleted file mode 100644
index b78d96159d..0000000000
--- a/src/lib/libssl/src/doc/verify
+++ /dev/null
@@ -1,22 +0,0 @@
1X509_verify_cert_chain(
2 CERT_STORE *cert_store,
3 STACK /* X509 */ *certs,
4 int *verify_result,
5 int (*verify_error_callback)()
6 char *argument_to_callback, /* SSL */
7
8app_verify_callback(
9 char *app_verify_arg, /* from SSL_CTX */
10 STACK /* X509 */ *certs,
11 int *verify_result,
12 int (*verify_error_callback)()
13 SSL *s,
14
15int X509_verify_cert(
16 CERT_STORE *cert_store,
17 X509 *x509,
18 int *verify_result,
19 int (*verify_error_callback)(),
20 char *arg,
21
22
diff --git a/src/lib/libssl/src/doc/why.doc b/src/lib/libssl/src/doc/why.doc
deleted file mode 100644
index a1ac84bd27..0000000000
--- a/src/lib/libssl/src/doc/why.doc
+++ /dev/null
@@ -1,79 +0,0 @@
1This file is more of a note for other people who wish to understand why
2the build environment is the way it is :-).
3
4The include files 'depend' as follows.
5Each of
6crypto/*/*.c includes crypto/cryptlib.h
7ssl/*.c include ssl/ssl_locl.h
8apps/*.c include apps/apps.h
9crypto/cryptlib.h, ssl/ssl_locl.h and apps/apps.h
10all include e_os.h which contains OS/environment specific information.
11If you need to add something todo with a particular environment,
12add it to this file. It is worth remembering that quite a few libraries,
13like lhash, des, md, sha etc etc do not include crypto/cryptlib.h. This
14is because these libraries should be 'independantly compilable' and so I
15try to keep them this way.
16e_os.h is not so much a part of SSLeay, as the placing in one spot all the
17evil OS dependant muck.
18
19I wanted to automate as many things as possible. This includes
20error number generation. A
21make errors
22will scan the source files for error codes, append them to the correct
23header files, and generate the functions to print the text version
24of the error numbers. So don't even think about adding error numbers by
25hand, put them in the form
26XXXerr(XXXX_F_XXXX,YYYY_R_YYYY);
27on line and it will be automatically picked up my a make errors.
28
29In a similar vein, programs to be added into ssleay in the apps directory
30just need to have an entry added to E_EXE in makefile.ssl and
31everthing will work as expected. Don't edit progs.h by hand.
32
33make links re-generates the symbolic links that are used. The reason why
34I keep everything in its own directory, and don't put all the
35test programs and header files in 'test' and 'include' is because I want
36to keep the 'sub-libraries' independant. I still 'pull' out
37indervidual libraries for use in specific projects where the code is
38required. I have used the 'lhash' library in just about every software
39project I have worked on :-).
40
41make depend generates dependancies and
42make dclean removes them.
43
44You will notice that I use perl quite a bit when I could be using 'sed'.
45The reason I decided to do this was to just stick to one 'extra' program.
46For Windows NT, I have perl and no sed.
47
48The util/mk1mf.pl program can be used to generate a single makefile.
49I use this because makefiles under Microsoft are horrific.
50Each C compiler seems to have different linker formats, which have
51to be used because the retarted C compilers explode when you do
52cl -o file *.o.
53
54Now some would argue that I should just use the single makefile. I don't
55like it during develoment for 2 reasons. First, the actuall make
56command takes a long time. For my current setup, if I'm in
57crypto/bn and I type make, only the crypto/bn directory gets rebuilt,
58which is nice when you are modifying prototypes in bn.h which
59half the SSLeay depends on. The second is that to add a new souce file
60I just plonk it in at the required spot in the local makefile. This
61then alows me to keep things local, I don't need to modify a 'global'
62tables (the make for unix, the make for NT, the make for w31...).
63When I am ripping apart a library structure, it is nice to only
64have to worry about one directory :-).
65
66Having said all this, for the hell of it I put together 2 files that
67#include all the souce code (generated by doing a ls */*.o after a build).
68crypto.c takes only 30 seconds to build under NT and 2 minutes under linux
69for my pentium100. Much faster that the normal build :-).
70Again, the problem is that when using libraries, every program linked
71to libcrypto.a would suddenly get 330k of library when it may only need
721k. This technique does look like a nice way to do shared libraries though.
73
74Oh yes, as a final note, to 'build' a distribution, I just type
75make dist.
76This cleans and packages everything. The directory needs to be called
77SSLeay since the make does a 'cd ..' and renames and tars things up.
78
79