diff options
author | djm <> | 2005-04-29 05:39:33 +0000 |
---|---|---|
committer | djm <> | 2005-04-29 05:39:33 +0000 |
commit | 68edd00d9258df93b1366c71ac124e0cadf7bc08 (patch) | |
tree | 3ce4ae2a9747bbc11aed1f95f9bbea92c41f8683 /src/lib/libcrypto | |
parent | f396ed0f5ce0af56bfde2e75e15cf1f52924c779 (diff) | |
download | openbsd-68edd00d9258df93b1366c71ac124e0cadf7bc08.tar.gz openbsd-68edd00d9258df93b1366c71ac124e0cadf7bc08.tar.bz2 openbsd-68edd00d9258df93b1366c71ac124e0cadf7bc08.zip |
resolve conflicts
Diffstat (limited to 'src/lib/libcrypto')
199 files changed, 2880 insertions, 765 deletions
diff --git a/src/lib/libcrypto/aes/aes.h b/src/lib/libcrypto/aes/aes.h index da067f4a8f..8a3ea0b883 100644 --- a/src/lib/libcrypto/aes/aes.h +++ b/src/lib/libcrypto/aes/aes.h | |||
@@ -52,6 +52,8 @@ | |||
52 | #ifndef HEADER_AES_H | 52 | #ifndef HEADER_AES_H |
53 | #define HEADER_AES_H | 53 | #define HEADER_AES_H |
54 | 54 | ||
55 | #include <openssl/e_os2.h> | ||
56 | |||
55 | #ifdef OPENSSL_NO_AES | 57 | #ifdef OPENSSL_NO_AES |
56 | #error AES is disabled. | 58 | #error AES is disabled. |
57 | #endif | 59 | #endif |
@@ -64,6 +66,10 @@ | |||
64 | #define AES_MAXNR 14 | 66 | #define AES_MAXNR 14 |
65 | #define AES_BLOCK_SIZE 16 | 67 | #define AES_BLOCK_SIZE 16 |
66 | 68 | ||
69 | #if defined(OPENSSL_FIPS) | ||
70 | #define FIPS_AES_SIZE_T int | ||
71 | #endif | ||
72 | |||
67 | #ifdef __cplusplus | 73 | #ifdef __cplusplus |
68 | extern "C" { | 74 | extern "C" { |
69 | #endif | 75 | #endif |
@@ -95,6 +101,15 @@ void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, | |||
95 | void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, | 101 | void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, |
96 | const unsigned long length, const AES_KEY *key, | 102 | const unsigned long length, const AES_KEY *key, |
97 | unsigned char *ivec, int *num, const int enc); | 103 | unsigned char *ivec, int *num, const int enc); |
104 | void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, | ||
105 | const unsigned long length, const AES_KEY *key, | ||
106 | unsigned char *ivec, int *num, const int enc); | ||
107 | void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, | ||
108 | const unsigned long length, const AES_KEY *key, | ||
109 | unsigned char *ivec, int *num, const int enc); | ||
110 | void AES_cfbr_encrypt_block(const unsigned char *in,unsigned char *out, | ||
111 | const int nbits,const AES_KEY *key, | ||
112 | unsigned char *ivec,const int enc); | ||
98 | void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, | 113 | void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, |
99 | const unsigned long length, const AES_KEY *key, | 114 | const unsigned long length, const AES_KEY *key, |
100 | unsigned char *ivec, int *num); | 115 | unsigned char *ivec, int *num); |
diff --git a/src/lib/libcrypto/aes/aes_cbc.c b/src/lib/libcrypto/aes/aes_cbc.c index 1222a21002..d2ba6bcdb4 100644 --- a/src/lib/libcrypto/aes/aes_cbc.c +++ b/src/lib/libcrypto/aes/aes_cbc.c | |||
@@ -66,6 +66,7 @@ void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, | |||
66 | unsigned long n; | 66 | unsigned long n; |
67 | unsigned long len = length; | 67 | unsigned long len = length; |
68 | unsigned char tmp[AES_BLOCK_SIZE]; | 68 | unsigned char tmp[AES_BLOCK_SIZE]; |
69 | const unsigned char *iv = ivec; | ||
69 | 70 | ||
70 | assert(in && out && key && ivec); | 71 | assert(in && out && key && ivec); |
71 | assert((AES_ENCRYPT == enc)||(AES_DECRYPT == enc)); | 72 | assert((AES_ENCRYPT == enc)||(AES_DECRYPT == enc)); |
@@ -73,22 +74,39 @@ void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, | |||
73 | if (AES_ENCRYPT == enc) { | 74 | if (AES_ENCRYPT == enc) { |
74 | while (len >= AES_BLOCK_SIZE) { | 75 | while (len >= AES_BLOCK_SIZE) { |
75 | for(n=0; n < AES_BLOCK_SIZE; ++n) | 76 | for(n=0; n < AES_BLOCK_SIZE; ++n) |
76 | tmp[n] = in[n] ^ ivec[n]; | 77 | out[n] = in[n] ^ iv[n]; |
77 | AES_encrypt(tmp, out, key); | 78 | AES_encrypt(out, out, key); |
78 | memcpy(ivec, out, AES_BLOCK_SIZE); | 79 | iv = out; |
79 | len -= AES_BLOCK_SIZE; | 80 | len -= AES_BLOCK_SIZE; |
80 | in += AES_BLOCK_SIZE; | 81 | in += AES_BLOCK_SIZE; |
81 | out += AES_BLOCK_SIZE; | 82 | out += AES_BLOCK_SIZE; |
82 | } | 83 | } |
83 | if (len) { | 84 | if (len) { |
84 | for(n=0; n < len; ++n) | 85 | for(n=0; n < len; ++n) |
85 | tmp[n] = in[n] ^ ivec[n]; | 86 | out[n] = in[n] ^ iv[n]; |
86 | for(n=len; n < AES_BLOCK_SIZE; ++n) | 87 | for(n=len; n < AES_BLOCK_SIZE; ++n) |
87 | tmp[n] = ivec[n]; | 88 | out[n] = iv[n]; |
88 | AES_encrypt(tmp, tmp, key); | 89 | AES_encrypt(out, out, key); |
89 | memcpy(out, tmp, AES_BLOCK_SIZE); | 90 | iv = out; |
90 | memcpy(ivec, tmp, AES_BLOCK_SIZE); | 91 | } |
91 | } | 92 | memcpy(ivec,iv,AES_BLOCK_SIZE); |
93 | } else if (in != out) { | ||
94 | while (len >= AES_BLOCK_SIZE) { | ||
95 | AES_decrypt(in, out, key); | ||
96 | for(n=0; n < AES_BLOCK_SIZE; ++n) | ||
97 | out[n] ^= iv[n]; | ||
98 | iv = in; | ||
99 | len -= AES_BLOCK_SIZE; | ||
100 | in += AES_BLOCK_SIZE; | ||
101 | out += AES_BLOCK_SIZE; | ||
102 | } | ||
103 | if (len) { | ||
104 | AES_decrypt(in,tmp,key); | ||
105 | for(n=0; n < len; ++n) | ||
106 | out[n] = tmp[n] ^ iv[n]; | ||
107 | iv = in; | ||
108 | } | ||
109 | memcpy(ivec,iv,AES_BLOCK_SIZE); | ||
92 | } else { | 110 | } else { |
93 | while (len >= AES_BLOCK_SIZE) { | 111 | while (len >= AES_BLOCK_SIZE) { |
94 | memcpy(tmp, in, AES_BLOCK_SIZE); | 112 | memcpy(tmp, in, AES_BLOCK_SIZE); |
@@ -102,10 +120,12 @@ void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, | |||
102 | } | 120 | } |
103 | if (len) { | 121 | if (len) { |
104 | memcpy(tmp, in, AES_BLOCK_SIZE); | 122 | memcpy(tmp, in, AES_BLOCK_SIZE); |
105 | AES_decrypt(tmp, tmp, key); | 123 | AES_decrypt(tmp, out, key); |
106 | for(n=0; n < len; ++n) | 124 | for(n=0; n < len; ++n) |
107 | out[n] = tmp[n] ^ ivec[n]; | 125 | out[n] ^= ivec[n]; |
126 | for(n=len; n < AES_BLOCK_SIZE; ++n) | ||
127 | out[n] = tmp[n]; | ||
108 | memcpy(ivec, tmp, AES_BLOCK_SIZE); | 128 | memcpy(ivec, tmp, AES_BLOCK_SIZE); |
109 | } | 129 | } |
110 | } | 130 | } |
111 | } | 131 | } |
diff --git a/src/lib/libcrypto/aes/aes_cfb.c b/src/lib/libcrypto/aes/aes_cfb.c index 9b569dda90..49f0411010 100644 --- a/src/lib/libcrypto/aes/aes_cfb.c +++ b/src/lib/libcrypto/aes/aes_cfb.c | |||
@@ -114,6 +114,7 @@ | |||
114 | 114 | ||
115 | #include <openssl/aes.h> | 115 | #include <openssl/aes.h> |
116 | #include "aes_locl.h" | 116 | #include "aes_locl.h" |
117 | #include "e_os.h" | ||
117 | 118 | ||
118 | /* The input and output encrypted as though 128bit cfb mode is being | 119 | /* The input and output encrypted as though 128bit cfb mode is being |
119 | * used. The extra state information to record how much of the | 120 | * used. The extra state information to record how much of the |
@@ -155,3 +156,70 @@ void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, | |||
155 | *num=n; | 156 | *num=n; |
156 | } | 157 | } |
157 | 158 | ||
159 | /* This expects a single block of size nbits for both in and out. Note that | ||
160 | it corrupts any extra bits in the last byte of out */ | ||
161 | void AES_cfbr_encrypt_block(const unsigned char *in,unsigned char *out, | ||
162 | const int nbits,const AES_KEY *key, | ||
163 | unsigned char *ivec,const int enc) | ||
164 | { | ||
165 | int n,rem,num; | ||
166 | unsigned char ovec[AES_BLOCK_SIZE*2]; | ||
167 | |||
168 | if (nbits<=0 || nbits>128) return; | ||
169 | |||
170 | /* fill in the first half of the new IV with the current IV */ | ||
171 | memcpy(ovec,ivec,AES_BLOCK_SIZE); | ||
172 | /* construct the new IV */ | ||
173 | AES_encrypt(ivec,ivec,key); | ||
174 | num = (nbits+7)/8; | ||
175 | if (enc) /* encrypt the input */ | ||
176 | for(n=0 ; n < num ; ++n) | ||
177 | out[n] = (ovec[AES_BLOCK_SIZE+n] = in[n] ^ ivec[n]); | ||
178 | else /* decrypt the input */ | ||
179 | for(n=0 ; n < num ; ++n) | ||
180 | out[n] = (ovec[AES_BLOCK_SIZE+n] = in[n]) ^ ivec[n]; | ||
181 | /* shift ovec left... */ | ||
182 | rem = nbits%8; | ||
183 | num = nbits/8; | ||
184 | if(rem==0) | ||
185 | memcpy(ivec,ovec+num,AES_BLOCK_SIZE); | ||
186 | else | ||
187 | for(n=0 ; n < AES_BLOCK_SIZE ; ++n) | ||
188 | ivec[n] = ovec[n+num]<<rem | ovec[n+num+1]>>(8-rem); | ||
189 | |||
190 | /* it is not necessary to cleanse ovec, since the IV is not secret */ | ||
191 | } | ||
192 | |||
193 | /* N.B. This expects the input to be packed, MS bit first */ | ||
194 | void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, | ||
195 | const unsigned long length, const AES_KEY *key, | ||
196 | unsigned char *ivec, int *num, const int enc) | ||
197 | { | ||
198 | unsigned int n; | ||
199 | unsigned char c[1],d[1]; | ||
200 | |||
201 | assert(in && out && key && ivec && num); | ||
202 | assert(*num == 0); | ||
203 | |||
204 | memset(out,0,(length+7)/8); | ||
205 | for(n=0 ; n < length ; ++n) | ||
206 | { | ||
207 | c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0; | ||
208 | AES_cfbr_encrypt_block(c,d,1,key,ivec,enc); | ||
209 | out[n/8]=(out[n/8]&~(1 << (7-n%8)))|((d[0]&0x80) >> (n%8)); | ||
210 | } | ||
211 | } | ||
212 | |||
213 | void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, | ||
214 | const unsigned long length, const AES_KEY *key, | ||
215 | unsigned char *ivec, int *num, const int enc) | ||
216 | { | ||
217 | unsigned int n; | ||
218 | |||
219 | assert(in && out && key && ivec && num); | ||
220 | assert(*num == 0); | ||
221 | |||
222 | for(n=0 ; n < length ; ++n) | ||
223 | AES_cfbr_encrypt_block(&in[n],&out[n],8,key,ivec,enc); | ||
224 | } | ||
225 | |||
diff --git a/src/lib/libcrypto/aes/aes_core.c b/src/lib/libcrypto/aes/aes_core.c index 2f41a825f8..ed566a8123 100644 --- a/src/lib/libcrypto/aes/aes_core.c +++ b/src/lib/libcrypto/aes/aes_core.c | |||
@@ -37,8 +37,11 @@ | |||
37 | 37 | ||
38 | #include <stdlib.h> | 38 | #include <stdlib.h> |
39 | #include <openssl/aes.h> | 39 | #include <openssl/aes.h> |
40 | #include <openssl/fips.h> | ||
40 | #include "aes_locl.h" | 41 | #include "aes_locl.h" |
41 | 42 | ||
43 | #ifndef OPENSSL_FIPS | ||
44 | |||
42 | /* | 45 | /* |
43 | Te0[x] = S [x].[02, 01, 01, 03]; | 46 | Te0[x] = S [x].[02, 01, 01, 03]; |
44 | Te1[x] = S [x].[03, 02, 01, 01]; | 47 | Te1[x] = S [x].[03, 02, 01, 01]; |
@@ -1255,3 +1258,4 @@ void AES_decrypt(const unsigned char *in, unsigned char *out, | |||
1255 | PUTU32(out + 12, s3); | 1258 | PUTU32(out + 12, s3); |
1256 | } | 1259 | } |
1257 | 1260 | ||
1261 | #endif /* ndef OPENSSL_FIPS */ | ||
diff --git a/src/lib/libcrypto/aes/aes_ctr.c b/src/lib/libcrypto/aes/aes_ctr.c index 79e1c18f19..f36982be1e 100644 --- a/src/lib/libcrypto/aes/aes_ctr.c +++ b/src/lib/libcrypto/aes/aes_ctr.c | |||
@@ -59,7 +59,7 @@ | |||
59 | #include <openssl/aes.h> | 59 | #include <openssl/aes.h> |
60 | #include "aes_locl.h" | 60 | #include "aes_locl.h" |
61 | 61 | ||
62 | /* NOTE: CTR mode is big-endian. The rest of the AES code | 62 | /* NOTE: the IV/counter CTR mode is big-endian. The rest of the AES code |
63 | * is endian-neutral. */ | 63 | * is endian-neutral. */ |
64 | 64 | ||
65 | /* increment counter (128-bit int) by 1 */ | 65 | /* increment counter (128-bit int) by 1 */ |
@@ -67,61 +67,36 @@ static void AES_ctr128_inc(unsigned char *counter) { | |||
67 | unsigned long c; | 67 | unsigned long c; |
68 | 68 | ||
69 | /* Grab bottom dword of counter and increment */ | 69 | /* Grab bottom dword of counter and increment */ |
70 | #ifdef L_ENDIAN | ||
71 | c = GETU32(counter + 0); | ||
72 | c++; | ||
73 | PUTU32(counter + 0, c); | ||
74 | #else | ||
75 | c = GETU32(counter + 12); | 70 | c = GETU32(counter + 12); |
76 | c++; | 71 | c++; c &= 0xFFFFFFFF; |
77 | PUTU32(counter + 12, c); | 72 | PUTU32(counter + 12, c); |
78 | #endif | ||
79 | 73 | ||
80 | /* if no overflow, we're done */ | 74 | /* if no overflow, we're done */ |
81 | if (c) | 75 | if (c) |
82 | return; | 76 | return; |
83 | 77 | ||
84 | /* Grab 1st dword of counter and increment */ | 78 | /* Grab 1st dword of counter and increment */ |
85 | #ifdef L_ENDIAN | ||
86 | c = GETU32(counter + 4); | ||
87 | c++; | ||
88 | PUTU32(counter + 4, c); | ||
89 | #else | ||
90 | c = GETU32(counter + 8); | 79 | c = GETU32(counter + 8); |
91 | c++; | 80 | c++; c &= 0xFFFFFFFF; |
92 | PUTU32(counter + 8, c); | 81 | PUTU32(counter + 8, c); |
93 | #endif | ||
94 | 82 | ||
95 | /* if no overflow, we're done */ | 83 | /* if no overflow, we're done */ |
96 | if (c) | 84 | if (c) |
97 | return; | 85 | return; |
98 | 86 | ||
99 | /* Grab 2nd dword of counter and increment */ | 87 | /* Grab 2nd dword of counter and increment */ |
100 | #ifdef L_ENDIAN | ||
101 | c = GETU32(counter + 8); | ||
102 | c++; | ||
103 | PUTU32(counter + 8, c); | ||
104 | #else | ||
105 | c = GETU32(counter + 4); | 88 | c = GETU32(counter + 4); |
106 | c++; | 89 | c++; c &= 0xFFFFFFFF; |
107 | PUTU32(counter + 4, c); | 90 | PUTU32(counter + 4, c); |
108 | #endif | ||
109 | 91 | ||
110 | /* if no overflow, we're done */ | 92 | /* if no overflow, we're done */ |
111 | if (c) | 93 | if (c) |
112 | return; | 94 | return; |
113 | 95 | ||
114 | /* Grab top dword of counter and increment */ | 96 | /* Grab top dword of counter and increment */ |
115 | #ifdef L_ENDIAN | ||
116 | c = GETU32(counter + 12); | ||
117 | c++; | ||
118 | PUTU32(counter + 12, c); | ||
119 | #else | ||
120 | c = GETU32(counter + 0); | 97 | c = GETU32(counter + 0); |
121 | c++; | 98 | c++; c &= 0xFFFFFFFF; |
122 | PUTU32(counter + 0, c); | 99 | PUTU32(counter + 0, c); |
123 | #endif | ||
124 | |||
125 | } | 100 | } |
126 | 101 | ||
127 | /* The input encrypted as though 128bit counter mode is being | 102 | /* The input encrypted as though 128bit counter mode is being |
diff --git a/src/lib/libcrypto/aes/aes_locl.h b/src/lib/libcrypto/aes/aes_locl.h index f290946058..4184729e34 100644 --- a/src/lib/libcrypto/aes/aes_locl.h +++ b/src/lib/libcrypto/aes/aes_locl.h | |||
@@ -62,7 +62,7 @@ | |||
62 | #include <stdlib.h> | 62 | #include <stdlib.h> |
63 | #include <string.h> | 63 | #include <string.h> |
64 | 64 | ||
65 | #if defined(_MSC_VER) && !defined(OPENSSL_SYS_WINCE) | 65 | #if defined(_MSC_VER) && !defined(_M_IA64) && !defined(OPENSSL_SYS_WINCE) |
66 | # define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00) | 66 | # define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00) |
67 | # define GETU32(p) SWAP(*((u32 *)(p))) | 67 | # define GETU32(p) SWAP(*((u32 *)(p))) |
68 | # define PUTU32(ct, st) { *((u32 *)(ct)) = SWAP((st)); } | 68 | # define PUTU32(ct, st) { *((u32 *)(ct)) = SWAP((st)); } |
diff --git a/src/lib/libcrypto/asn1/a_bitstr.c b/src/lib/libcrypto/asn1/a_bitstr.c index f4ea96cd54..b81bf4fc81 100644 --- a/src/lib/libcrypto/asn1/a_bitstr.c +++ b/src/lib/libcrypto/asn1/a_bitstr.c | |||
@@ -194,8 +194,12 @@ int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value) | |||
194 | c=(unsigned char *)OPENSSL_realloc_clean(a->data, | 194 | c=(unsigned char *)OPENSSL_realloc_clean(a->data, |
195 | a->length, | 195 | a->length, |
196 | w+1); | 196 | w+1); |
197 | if (c == NULL) return(0); | 197 | if (c == NULL) |
198 | if (w+1-a->length > 0) memset(c+a->length, 0, w+1-a->length); | 198 | { |
199 | ASN1err(ASN1_F_ASN1_BIT_STRING_SET_BIT,ERR_R_MALLOC_FAILURE); | ||
200 | return 0; | ||
201 | } | ||
202 | if (w+1-a->length > 0) memset(c+a->length, 0, w+1-a->length); | ||
199 | a->data=c; | 203 | a->data=c; |
200 | a->length=w+1; | 204 | a->length=w+1; |
201 | } | 205 | } |
diff --git a/src/lib/libcrypto/asn1/a_digest.c b/src/lib/libcrypto/asn1/a_digest.c index 4931e222a0..7182e9fa5d 100644 --- a/src/lib/libcrypto/asn1/a_digest.c +++ b/src/lib/libcrypto/asn1/a_digest.c | |||
@@ -65,6 +65,7 @@ | |||
65 | # include <sys/types.h> | 65 | # include <sys/types.h> |
66 | #endif | 66 | #endif |
67 | 67 | ||
68 | #include <openssl/err.h> | ||
68 | #include <openssl/evp.h> | 69 | #include <openssl/evp.h> |
69 | #include <openssl/buffer.h> | 70 | #include <openssl/buffer.h> |
70 | #include <openssl/x509.h> | 71 | #include <openssl/x509.h> |
@@ -78,7 +79,11 @@ int ASN1_digest(int (*i2d)(), const EVP_MD *type, char *data, | |||
78 | unsigned char *str,*p; | 79 | unsigned char *str,*p; |
79 | 80 | ||
80 | i=i2d(data,NULL); | 81 | i=i2d(data,NULL); |
81 | if ((str=(unsigned char *)OPENSSL_malloc(i)) == NULL) return(0); | 82 | if ((str=(unsigned char *)OPENSSL_malloc(i)) == NULL) |
83 | { | ||
84 | ASN1err(ASN1_F_ASN1_DIGEST,ERR_R_MALLOC_FAILURE); | ||
85 | return(0); | ||
86 | } | ||
82 | p=str; | 87 | p=str; |
83 | i2d(data,&p); | 88 | i2d(data,&p); |
84 | 89 | ||
diff --git a/src/lib/libcrypto/asn1/a_enum.c b/src/lib/libcrypto/asn1/a_enum.c index ad8f0ffd1a..03ede68d1c 100644 --- a/src/lib/libcrypto/asn1/a_enum.c +++ b/src/lib/libcrypto/asn1/a_enum.c | |||
@@ -156,7 +156,7 @@ ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai) | |||
156 | unsigned char *new_data=OPENSSL_realloc(ret->data, len+4); | 156 | unsigned char *new_data=OPENSSL_realloc(ret->data, len+4); |
157 | if (!new_data) | 157 | if (!new_data) |
158 | { | 158 | { |
159 | ASN1err(ASN1_F_BN_TO_ASN1_INTEGER,ERR_R_MALLOC_FAILURE); | 159 | ASN1err(ASN1_F_BN_TO_ASN1_ENUMERATED,ERR_R_MALLOC_FAILURE); |
160 | goto err; | 160 | goto err; |
161 | } | 161 | } |
162 | ret->data=new_data; | 162 | ret->data=new_data; |
diff --git a/src/lib/libcrypto/asn1/a_gentm.c b/src/lib/libcrypto/asn1/a_gentm.c index 8581007868..0dfd576211 100644 --- a/src/lib/libcrypto/asn1/a_gentm.c +++ b/src/lib/libcrypto/asn1/a_gentm.c | |||
@@ -192,8 +192,9 @@ int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, char *str) | |||
192 | { | 192 | { |
193 | if (s != NULL) | 193 | if (s != NULL) |
194 | { | 194 | { |
195 | ASN1_STRING_set((ASN1_STRING *)s, | 195 | if (!ASN1_STRING_set((ASN1_STRING *)s, |
196 | (unsigned char *)str,t.length); | 196 | (unsigned char *)str,t.length)) |
197 | return 0; | ||
197 | s->type=V_ASN1_GENERALIZEDTIME; | 198 | s->type=V_ASN1_GENERALIZEDTIME; |
198 | } | 199 | } |
199 | return(1); | 200 | return(1); |
@@ -223,7 +224,12 @@ ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, | |||
223 | if ((p == NULL) || ((size_t)s->length < len)) | 224 | if ((p == NULL) || ((size_t)s->length < len)) |
224 | { | 225 | { |
225 | p=OPENSSL_malloc(len); | 226 | p=OPENSSL_malloc(len); |
226 | if (p == NULL) return(NULL); | 227 | if (p == NULL) |
228 | { | ||
229 | ASN1err(ASN1_F_ASN1_GENERALIZEDTIME_SET, | ||
230 | ERR_R_MALLOC_FAILURE); | ||
231 | return(NULL); | ||
232 | } | ||
227 | if (s->data != NULL) | 233 | if (s->data != NULL) |
228 | OPENSSL_free(s->data); | 234 | OPENSSL_free(s->data); |
229 | s->data=(unsigned char *)p; | 235 | s->data=(unsigned char *)p; |
diff --git a/src/lib/libcrypto/asn1/a_int.c b/src/lib/libcrypto/asn1/a_int.c index edb243c021..21cc64bb23 100644 --- a/src/lib/libcrypto/asn1/a_int.c +++ b/src/lib/libcrypto/asn1/a_int.c | |||
@@ -64,7 +64,26 @@ ASN1_INTEGER *ASN1_INTEGER_dup(ASN1_INTEGER *x) | |||
64 | { return M_ASN1_INTEGER_dup(x);} | 64 | { return M_ASN1_INTEGER_dup(x);} |
65 | 65 | ||
66 | int ASN1_INTEGER_cmp(ASN1_INTEGER *x, ASN1_INTEGER *y) | 66 | int ASN1_INTEGER_cmp(ASN1_INTEGER *x, ASN1_INTEGER *y) |
67 | { return M_ASN1_INTEGER_cmp(x,y);} | 67 | { |
68 | int neg, ret; | ||
69 | /* Compare signs */ | ||
70 | neg = x->type & V_ASN1_NEG; | ||
71 | if (neg != (y->type & V_ASN1_NEG)) | ||
72 | { | ||
73 | if (neg) | ||
74 | return -1; | ||
75 | else | ||
76 | return 1; | ||
77 | } | ||
78 | |||
79 | ret = ASN1_STRING_cmp(x, y); | ||
80 | |||
81 | if (neg) | ||
82 | return -ret; | ||
83 | else | ||
84 | return ret; | ||
85 | } | ||
86 | |||
68 | 87 | ||
69 | /* | 88 | /* |
70 | * This converts an ASN1 INTEGER into its content encoding. | 89 | * This converts an ASN1 INTEGER into its content encoding. |
diff --git a/src/lib/libcrypto/asn1/a_print.c b/src/lib/libcrypto/asn1/a_print.c index 8035513f04..d18e772320 100644 --- a/src/lib/libcrypto/asn1/a_print.c +++ b/src/lib/libcrypto/asn1/a_print.c | |||
@@ -60,7 +60,7 @@ | |||
60 | #include "cryptlib.h" | 60 | #include "cryptlib.h" |
61 | #include <openssl/asn1.h> | 61 | #include <openssl/asn1.h> |
62 | 62 | ||
63 | int ASN1_PRINTABLE_type(unsigned char *s, int len) | 63 | int ASN1_PRINTABLE_type(const unsigned char *s, int len) |
64 | { | 64 | { |
65 | int c; | 65 | int c; |
66 | int ia5=0; | 66 | int ia5=0; |
diff --git a/src/lib/libcrypto/asn1/a_set.c b/src/lib/libcrypto/asn1/a_set.c index 0f839822ff..e24061c545 100644 --- a/src/lib/libcrypto/asn1/a_set.c +++ b/src/lib/libcrypto/asn1/a_set.c | |||
@@ -118,8 +118,13 @@ int i2d_ASN1_SET(STACK *a, unsigned char **pp, int (*func)(), int ex_tag, | |||
118 | } | 118 | } |
119 | 119 | ||
120 | pStart = p; /* Catch the beg of Setblobs*/ | 120 | pStart = p; /* Catch the beg of Setblobs*/ |
121 | if (!(rgSetBlob = (MYBLOB *)OPENSSL_malloc( sk_num(a) * sizeof(MYBLOB)))) return 0; /* In this array | 121 | /* In this array we will store the SET blobs */ |
122 | we will store the SET blobs */ | 122 | rgSetBlob = (MYBLOB *)OPENSSL_malloc(sk_num(a) * sizeof(MYBLOB)); |
123 | if (rgSetBlob == NULL) | ||
124 | { | ||
125 | ASN1err(ASN1_F_I2D_ASN1_SET,ERR_R_MALLOC_FAILURE); | ||
126 | return(0); | ||
127 | } | ||
123 | 128 | ||
124 | for (i=0; i<sk_num(a); i++) | 129 | for (i=0; i<sk_num(a); i++) |
125 | { | 130 | { |
@@ -135,7 +140,11 @@ SetBlob | |||
135 | /* Now we have to sort the blobs. I am using a simple algo. | 140 | /* Now we have to sort the blobs. I am using a simple algo. |
136 | *Sort ptrs *Copy to temp-mem *Copy from temp-mem to user-mem*/ | 141 | *Sort ptrs *Copy to temp-mem *Copy from temp-mem to user-mem*/ |
137 | qsort( rgSetBlob, sk_num(a), sizeof(MYBLOB), SetBlobCmp); | 142 | qsort( rgSetBlob, sk_num(a), sizeof(MYBLOB), SetBlobCmp); |
138 | if (!(pTempMem = OPENSSL_malloc(totSize))) return 0; | 143 | if (!(pTempMem = OPENSSL_malloc(totSize))) |
144 | { | ||
145 | ASN1err(ASN1_F_I2D_ASN1_SET,ERR_R_MALLOC_FAILURE); | ||
146 | return(0); | ||
147 | } | ||
139 | 148 | ||
140 | /* Copy to temp mem */ | 149 | /* Copy to temp mem */ |
141 | p = pTempMem; | 150 | p = pTempMem; |
@@ -160,7 +169,13 @@ STACK *d2i_ASN1_SET(STACK **a, unsigned char **pp, long length, | |||
160 | STACK *ret=NULL; | 169 | STACK *ret=NULL; |
161 | 170 | ||
162 | if ((a == NULL) || ((*a) == NULL)) | 171 | if ((a == NULL) || ((*a) == NULL)) |
163 | { if ((ret=sk_new_null()) == NULL) goto err; } | 172 | { |
173 | if ((ret=sk_new_null()) == NULL) | ||
174 | { | ||
175 | ASN1err(ASN1_F_D2I_ASN1_SET,ERR_R_MALLOC_FAILURE); | ||
176 | goto err; | ||
177 | } | ||
178 | } | ||
164 | else | 179 | else |
165 | ret=(*a); | 180 | ret=(*a); |
166 | 181 | ||
diff --git a/src/lib/libcrypto/asn1/a_strex.c b/src/lib/libcrypto/asn1/a_strex.c index bde666a6ff..a07122ba47 100644 --- a/src/lib/libcrypto/asn1/a_strex.c +++ b/src/lib/libcrypto/asn1/a_strex.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * project 2000. | 3 | * project 2000. |
4 | */ | 4 | */ |
5 | /* ==================================================================== | 5 | /* ==================================================================== |
6 | * Copyright (c) 2000 The OpenSSL Project. All rights reserved. | 6 | * Copyright (c) 2000-2004 The OpenSSL Project. All rights reserved. |
7 | * | 7 | * |
8 | * Redistribution and use in source and binary forms, with or without | 8 | * Redistribution and use in source and binary forms, with or without |
9 | * modification, are permitted provided that the following conditions | 9 | * modification, are permitted provided that the following conditions |
@@ -553,7 +553,12 @@ int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in) | |||
553 | if((type < 0) || (type > 30)) return -1; | 553 | if((type < 0) || (type > 30)) return -1; |
554 | mbflag = tag2nbyte[type]; | 554 | mbflag = tag2nbyte[type]; |
555 | if(mbflag == -1) return -1; | 555 | if(mbflag == -1) return -1; |
556 | mbflag |= MBSTRING_FLAG; | 556 | if (mbflag == 0) |
557 | mbflag = MBSTRING_UTF8; | ||
558 | else if (mbflag == 4) | ||
559 | mbflag = MBSTRING_UNIV; | ||
560 | else | ||
561 | mbflag |= MBSTRING_FLAG; | ||
557 | stmp.data = NULL; | 562 | stmp.data = NULL; |
558 | ret = ASN1_mbstring_copy(&str, in->data, in->length, mbflag, B_ASN1_UTF8STRING); | 563 | ret = ASN1_mbstring_copy(&str, in->data, in->length, mbflag, B_ASN1_UTF8STRING); |
559 | if(ret < 0) return ret; | 564 | if(ret < 0) return ret; |
diff --git a/src/lib/libcrypto/asn1/a_type.c b/src/lib/libcrypto/asn1/a_type.c index fe3fcd40b0..2292d49b93 100644 --- a/src/lib/libcrypto/asn1/a_type.c +++ b/src/lib/libcrypto/asn1/a_type.c | |||
@@ -71,7 +71,10 @@ int ASN1_TYPE_get(ASN1_TYPE *a) | |||
71 | void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value) | 71 | void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value) |
72 | { | 72 | { |
73 | if (a->value.ptr != NULL) | 73 | if (a->value.ptr != NULL) |
74 | ASN1_primitive_free((ASN1_VALUE **)&a, NULL); | 74 | { |
75 | ASN1_TYPE **tmp_a = &a; | ||
76 | ASN1_primitive_free((ASN1_VALUE **)tmp_a, NULL); | ||
77 | } | ||
75 | a->type=type; | 78 | a->type=type; |
76 | a->value.ptr=value; | 79 | a->value.ptr=value; |
77 | } | 80 | } |
diff --git a/src/lib/libcrypto/asn1/a_utctm.c b/src/lib/libcrypto/asn1/a_utctm.c index 999852dae5..7b25fed331 100644 --- a/src/lib/libcrypto/asn1/a_utctm.c +++ b/src/lib/libcrypto/asn1/a_utctm.c | |||
@@ -173,8 +173,9 @@ int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, char *str) | |||
173 | { | 173 | { |
174 | if (s != NULL) | 174 | if (s != NULL) |
175 | { | 175 | { |
176 | ASN1_STRING_set((ASN1_STRING *)s, | 176 | if (!ASN1_STRING_set((ASN1_STRING *)s, |
177 | (unsigned char *)str,t.length); | 177 | (unsigned char *)str,t.length)) |
178 | return 0; | ||
178 | s->type = V_ASN1_UTCTIME; | 179 | s->type = V_ASN1_UTCTIME; |
179 | } | 180 | } |
180 | return(1); | 181 | return(1); |
@@ -203,7 +204,11 @@ ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t) | |||
203 | if ((p == NULL) || ((size_t)s->length < len)) | 204 | if ((p == NULL) || ((size_t)s->length < len)) |
204 | { | 205 | { |
205 | p=OPENSSL_malloc(len); | 206 | p=OPENSSL_malloc(len); |
206 | if (p == NULL) return(NULL); | 207 | if (p == NULL) |
208 | { | ||
209 | ASN1err(ASN1_F_ASN1_UTCTIME_SET,ERR_R_MALLOC_FAILURE); | ||
210 | return(NULL); | ||
211 | } | ||
207 | if (s->data != NULL) | 212 | if (s->data != NULL) |
208 | OPENSSL_free(s->data); | 213 | OPENSSL_free(s->data); |
209 | s->data=(unsigned char *)p; | 214 | s->data=(unsigned char *)p; |
diff --git a/src/lib/libcrypto/asn1/a_verify.c b/src/lib/libcrypto/asn1/a_verify.c index da2a0a6d69..18ef0acf00 100644 --- a/src/lib/libcrypto/asn1/a_verify.c +++ b/src/lib/libcrypto/asn1/a_verify.c | |||
@@ -142,6 +142,13 @@ int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a, ASN1_BIT_STRING *signat | |||
142 | goto err; | 142 | goto err; |
143 | } | 143 | } |
144 | 144 | ||
145 | if (!EVP_VerifyInit_ex(&ctx,type, NULL)) | ||
146 | { | ||
147 | ASN1err(ASN1_F_ASN1_VERIFY,ERR_R_EVP_LIB); | ||
148 | ret=0; | ||
149 | goto err; | ||
150 | } | ||
151 | |||
145 | inl = ASN1_item_i2d(asn, &buf_in, it); | 152 | inl = ASN1_item_i2d(asn, &buf_in, it); |
146 | 153 | ||
147 | if (buf_in == NULL) | 154 | if (buf_in == NULL) |
@@ -150,7 +157,6 @@ int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a, ASN1_BIT_STRING *signat | |||
150 | goto err; | 157 | goto err; |
151 | } | 158 | } |
152 | 159 | ||
153 | EVP_VerifyInit_ex(&ctx,type, NULL); | ||
154 | EVP_VerifyUpdate(&ctx,(unsigned char *)buf_in,inl); | 160 | EVP_VerifyUpdate(&ctx,(unsigned char *)buf_in,inl); |
155 | 161 | ||
156 | OPENSSL_cleanse(buf_in,(unsigned int)inl); | 162 | OPENSSL_cleanse(buf_in,(unsigned int)inl); |
diff --git a/src/lib/libcrypto/asn1/asn1.h b/src/lib/libcrypto/asn1/asn1.h index 3414509f1b..ceaeb4cbe3 100644 --- a/src/lib/libcrypto/asn1/asn1.h +++ b/src/lib/libcrypto/asn1/asn1.h | |||
@@ -829,7 +829,7 @@ BIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai,BIGNUM *bn); | |||
829 | 829 | ||
830 | /* General */ | 830 | /* General */ |
831 | /* given a string, return the correct type, max is the maximum length */ | 831 | /* given a string, return the correct type, max is the maximum length */ |
832 | int ASN1_PRINTABLE_type(unsigned char *s, int max); | 832 | int ASN1_PRINTABLE_type(const unsigned char *s, int max); |
833 | 833 | ||
834 | int i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass); | 834 | int i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass); |
835 | ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, unsigned char **pp, | 835 | ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, unsigned char **pp, |
@@ -950,16 +950,19 @@ void ERR_load_ASN1_strings(void); | |||
950 | #define ASN1_F_A2I_ASN1_ENUMERATED 101 | 950 | #define ASN1_F_A2I_ASN1_ENUMERATED 101 |
951 | #define ASN1_F_A2I_ASN1_INTEGER 102 | 951 | #define ASN1_F_A2I_ASN1_INTEGER 102 |
952 | #define ASN1_F_A2I_ASN1_STRING 103 | 952 | #define ASN1_F_A2I_ASN1_STRING 103 |
953 | #define ASN1_F_ASN1_BIT_STRING_SET_BIT 176 | ||
953 | #define ASN1_F_ASN1_CHECK_TLEN 104 | 954 | #define ASN1_F_ASN1_CHECK_TLEN 104 |
954 | #define ASN1_F_ASN1_COLLATE_PRIMITIVE 105 | 955 | #define ASN1_F_ASN1_COLLATE_PRIMITIVE 105 |
955 | #define ASN1_F_ASN1_COLLECT 106 | 956 | #define ASN1_F_ASN1_COLLECT 106 |
956 | #define ASN1_F_ASN1_D2I_BIO 107 | 957 | #define ASN1_F_ASN1_D2I_BIO 107 |
957 | #define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 | 958 | #define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 |
958 | #define ASN1_F_ASN1_D2I_FP 109 | 959 | #define ASN1_F_ASN1_D2I_FP 109 |
960 | #define ASN1_F_ASN1_DIGEST 177 | ||
959 | #define ASN1_F_ASN1_DO_ADB 110 | 961 | #define ASN1_F_ASN1_DO_ADB 110 |
960 | #define ASN1_F_ASN1_DUP 111 | 962 | #define ASN1_F_ASN1_DUP 111 |
961 | #define ASN1_F_ASN1_ENUMERATED_SET 112 | 963 | #define ASN1_F_ASN1_ENUMERATED_SET 112 |
962 | #define ASN1_F_ASN1_ENUMERATED_TO_BN 113 | 964 | #define ASN1_F_ASN1_ENUMERATED_TO_BN 113 |
965 | #define ASN1_F_ASN1_GENERALIZEDTIME_SET 178 | ||
963 | #define ASN1_F_ASN1_GET_OBJECT 114 | 966 | #define ASN1_F_ASN1_GET_OBJECT 114 |
964 | #define ASN1_F_ASN1_HEADER_NEW 115 | 967 | #define ASN1_F_ASN1_HEADER_NEW 115 |
965 | #define ASN1_F_ASN1_I2D_BIO 116 | 968 | #define ASN1_F_ASN1_I2D_BIO 116 |
@@ -975,6 +978,7 @@ void ERR_load_ASN1_strings(void); | |||
975 | #define ASN1_F_ASN1_SEQ_PACK 126 | 978 | #define ASN1_F_ASN1_SEQ_PACK 126 |
976 | #define ASN1_F_ASN1_SEQ_UNPACK 127 | 979 | #define ASN1_F_ASN1_SEQ_UNPACK 127 |
977 | #define ASN1_F_ASN1_SIGN 128 | 980 | #define ASN1_F_ASN1_SIGN 128 |
981 | #define ASN1_F_ASN1_STRING_SET 179 | ||
978 | #define ASN1_F_ASN1_STRING_TABLE_ADD 129 | 982 | #define ASN1_F_ASN1_STRING_TABLE_ADD 129 |
979 | #define ASN1_F_ASN1_STRING_TYPE_NEW 130 | 983 | #define ASN1_F_ASN1_STRING_TYPE_NEW 130 |
980 | #define ASN1_F_ASN1_TEMPLATE_D2I 131 | 984 | #define ASN1_F_ASN1_TEMPLATE_D2I 131 |
@@ -984,6 +988,7 @@ void ERR_load_ASN1_strings(void); | |||
984 | #define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 | 988 | #define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 |
985 | #define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 | 989 | #define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 |
986 | #define ASN1_F_ASN1_UNPACK_STRING 136 | 990 | #define ASN1_F_ASN1_UNPACK_STRING 136 |
991 | #define ASN1_F_ASN1_UTCTIME_SET 180 | ||
987 | #define ASN1_F_ASN1_VERIFY 137 | 992 | #define ASN1_F_ASN1_VERIFY 137 |
988 | #define ASN1_F_BN_TO_ASN1_ENUMERATED 138 | 993 | #define ASN1_F_BN_TO_ASN1_ENUMERATED 138 |
989 | #define ASN1_F_BN_TO_ASN1_INTEGER 139 | 994 | #define ASN1_F_BN_TO_ASN1_INTEGER 139 |
@@ -1007,6 +1012,7 @@ void ERR_load_ASN1_strings(void); | |||
1007 | #define ASN1_F_D2I_X509_CINF 157 | 1012 | #define ASN1_F_D2I_X509_CINF 157 |
1008 | #define ASN1_F_D2I_X509_NAME 158 | 1013 | #define ASN1_F_D2I_X509_NAME 158 |
1009 | #define ASN1_F_D2I_X509_PKEY 159 | 1014 | #define ASN1_F_D2I_X509_PKEY 159 |
1015 | #define ASN1_F_I2D_ASN1_SET 181 | ||
1010 | #define ASN1_F_I2D_ASN1_TIME 160 | 1016 | #define ASN1_F_I2D_ASN1_TIME 160 |
1011 | #define ASN1_F_I2D_DSA_PUBKEY 161 | 1017 | #define ASN1_F_I2D_DSA_PUBKEY 161 |
1012 | #define ASN1_F_I2D_NETSCAPE_RSA 162 | 1018 | #define ASN1_F_I2D_NETSCAPE_RSA 162 |
diff --git a/src/lib/libcrypto/asn1/asn1_err.c b/src/lib/libcrypto/asn1/asn1_err.c index 094ec06fda..3b57c8fbae 100644 --- a/src/lib/libcrypto/asn1/asn1_err.c +++ b/src/lib/libcrypto/asn1/asn1_err.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* crypto/asn1/asn1_err.c */ | 1 | /* crypto/asn1/asn1_err.c */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright (c) 1999-2002 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. |
4 | * | 4 | * |
5 | * Redistribution and use in source and binary forms, with or without | 5 | * Redistribution and use in source and binary forms, with or without |
6 | * modification, are permitted provided that the following conditions | 6 | * modification, are permitted provided that the following conditions |
@@ -70,16 +70,19 @@ static ERR_STRING_DATA ASN1_str_functs[]= | |||
70 | {ERR_PACK(0,ASN1_F_A2I_ASN1_ENUMERATED,0), "a2i_ASN1_ENUMERATED"}, | 70 | {ERR_PACK(0,ASN1_F_A2I_ASN1_ENUMERATED,0), "a2i_ASN1_ENUMERATED"}, |
71 | {ERR_PACK(0,ASN1_F_A2I_ASN1_INTEGER,0), "a2i_ASN1_INTEGER"}, | 71 | {ERR_PACK(0,ASN1_F_A2I_ASN1_INTEGER,0), "a2i_ASN1_INTEGER"}, |
72 | {ERR_PACK(0,ASN1_F_A2I_ASN1_STRING,0), "a2i_ASN1_STRING"}, | 72 | {ERR_PACK(0,ASN1_F_A2I_ASN1_STRING,0), "a2i_ASN1_STRING"}, |
73 | {ERR_PACK(0,ASN1_F_ASN1_BIT_STRING_SET_BIT,0), "ASN1_BIT_STRING_set_bit"}, | ||
73 | {ERR_PACK(0,ASN1_F_ASN1_CHECK_TLEN,0), "ASN1_CHECK_TLEN"}, | 74 | {ERR_PACK(0,ASN1_F_ASN1_CHECK_TLEN,0), "ASN1_CHECK_TLEN"}, |
74 | {ERR_PACK(0,ASN1_F_ASN1_COLLATE_PRIMITIVE,0), "ASN1_COLLATE_PRIMITIVE"}, | 75 | {ERR_PACK(0,ASN1_F_ASN1_COLLATE_PRIMITIVE,0), "ASN1_COLLATE_PRIMITIVE"}, |
75 | {ERR_PACK(0,ASN1_F_ASN1_COLLECT,0), "ASN1_COLLECT"}, | 76 | {ERR_PACK(0,ASN1_F_ASN1_COLLECT,0), "ASN1_COLLECT"}, |
76 | {ERR_PACK(0,ASN1_F_ASN1_D2I_BIO,0), "ASN1_d2i_bio"}, | 77 | {ERR_PACK(0,ASN1_F_ASN1_D2I_BIO,0), "ASN1_d2i_bio"}, |
77 | {ERR_PACK(0,ASN1_F_ASN1_D2I_EX_PRIMITIVE,0), "ASN1_D2I_EX_PRIMITIVE"}, | 78 | {ERR_PACK(0,ASN1_F_ASN1_D2I_EX_PRIMITIVE,0), "ASN1_D2I_EX_PRIMITIVE"}, |
78 | {ERR_PACK(0,ASN1_F_ASN1_D2I_FP,0), "ASN1_d2i_fp"}, | 79 | {ERR_PACK(0,ASN1_F_ASN1_D2I_FP,0), "ASN1_d2i_fp"}, |
80 | {ERR_PACK(0,ASN1_F_ASN1_DIGEST,0), "ASN1_digest"}, | ||
79 | {ERR_PACK(0,ASN1_F_ASN1_DO_ADB,0), "ASN1_DO_ADB"}, | 81 | {ERR_PACK(0,ASN1_F_ASN1_DO_ADB,0), "ASN1_DO_ADB"}, |
80 | {ERR_PACK(0,ASN1_F_ASN1_DUP,0), "ASN1_dup"}, | 82 | {ERR_PACK(0,ASN1_F_ASN1_DUP,0), "ASN1_dup"}, |
81 | {ERR_PACK(0,ASN1_F_ASN1_ENUMERATED_SET,0), "ASN1_ENUMERATED_set"}, | 83 | {ERR_PACK(0,ASN1_F_ASN1_ENUMERATED_SET,0), "ASN1_ENUMERATED_set"}, |
82 | {ERR_PACK(0,ASN1_F_ASN1_ENUMERATED_TO_BN,0), "ASN1_ENUMERATED_to_BN"}, | 84 | {ERR_PACK(0,ASN1_F_ASN1_ENUMERATED_TO_BN,0), "ASN1_ENUMERATED_to_BN"}, |
85 | {ERR_PACK(0,ASN1_F_ASN1_GENERALIZEDTIME_SET,0), "ASN1_GENERALIZEDTIME_set"}, | ||
83 | {ERR_PACK(0,ASN1_F_ASN1_GET_OBJECT,0), "ASN1_get_object"}, | 86 | {ERR_PACK(0,ASN1_F_ASN1_GET_OBJECT,0), "ASN1_get_object"}, |
84 | {ERR_PACK(0,ASN1_F_ASN1_HEADER_NEW,0), "ASN1_HEADER_new"}, | 87 | {ERR_PACK(0,ASN1_F_ASN1_HEADER_NEW,0), "ASN1_HEADER_new"}, |
85 | {ERR_PACK(0,ASN1_F_ASN1_I2D_BIO,0), "ASN1_i2d_bio"}, | 88 | {ERR_PACK(0,ASN1_F_ASN1_I2D_BIO,0), "ASN1_i2d_bio"}, |
@@ -95,6 +98,7 @@ static ERR_STRING_DATA ASN1_str_functs[]= | |||
95 | {ERR_PACK(0,ASN1_F_ASN1_SEQ_PACK,0), "ASN1_seq_pack"}, | 98 | {ERR_PACK(0,ASN1_F_ASN1_SEQ_PACK,0), "ASN1_seq_pack"}, |
96 | {ERR_PACK(0,ASN1_F_ASN1_SEQ_UNPACK,0), "ASN1_seq_unpack"}, | 99 | {ERR_PACK(0,ASN1_F_ASN1_SEQ_UNPACK,0), "ASN1_seq_unpack"}, |
97 | {ERR_PACK(0,ASN1_F_ASN1_SIGN,0), "ASN1_sign"}, | 100 | {ERR_PACK(0,ASN1_F_ASN1_SIGN,0), "ASN1_sign"}, |
101 | {ERR_PACK(0,ASN1_F_ASN1_STRING_SET,0), "ASN1_STRING_set"}, | ||
98 | {ERR_PACK(0,ASN1_F_ASN1_STRING_TABLE_ADD,0), "ASN1_STRING_TABLE_add"}, | 102 | {ERR_PACK(0,ASN1_F_ASN1_STRING_TABLE_ADD,0), "ASN1_STRING_TABLE_add"}, |
99 | {ERR_PACK(0,ASN1_F_ASN1_STRING_TYPE_NEW,0), "ASN1_STRING_type_new"}, | 103 | {ERR_PACK(0,ASN1_F_ASN1_STRING_TYPE_NEW,0), "ASN1_STRING_type_new"}, |
100 | {ERR_PACK(0,ASN1_F_ASN1_TEMPLATE_D2I,0), "ASN1_TEMPLATE_D2I"}, | 104 | {ERR_PACK(0,ASN1_F_ASN1_TEMPLATE_D2I,0), "ASN1_TEMPLATE_D2I"}, |
@@ -104,6 +108,7 @@ static ERR_STRING_DATA ASN1_str_functs[]= | |||
104 | {ERR_PACK(0,ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING,0), "ASN1_TYPE_get_int_octetstring"}, | 108 | {ERR_PACK(0,ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING,0), "ASN1_TYPE_get_int_octetstring"}, |
105 | {ERR_PACK(0,ASN1_F_ASN1_TYPE_GET_OCTETSTRING,0), "ASN1_TYPE_get_octetstring"}, | 109 | {ERR_PACK(0,ASN1_F_ASN1_TYPE_GET_OCTETSTRING,0), "ASN1_TYPE_get_octetstring"}, |
106 | {ERR_PACK(0,ASN1_F_ASN1_UNPACK_STRING,0), "ASN1_unpack_string"}, | 110 | {ERR_PACK(0,ASN1_F_ASN1_UNPACK_STRING,0), "ASN1_unpack_string"}, |
111 | {ERR_PACK(0,ASN1_F_ASN1_UTCTIME_SET,0), "ASN1_UTCTIME_set"}, | ||
107 | {ERR_PACK(0,ASN1_F_ASN1_VERIFY,0), "ASN1_verify"}, | 112 | {ERR_PACK(0,ASN1_F_ASN1_VERIFY,0), "ASN1_verify"}, |
108 | {ERR_PACK(0,ASN1_F_BN_TO_ASN1_ENUMERATED,0), "BN_to_ASN1_ENUMERATED"}, | 113 | {ERR_PACK(0,ASN1_F_BN_TO_ASN1_ENUMERATED,0), "BN_to_ASN1_ENUMERATED"}, |
109 | {ERR_PACK(0,ASN1_F_BN_TO_ASN1_INTEGER,0), "BN_to_ASN1_INTEGER"}, | 114 | {ERR_PACK(0,ASN1_F_BN_TO_ASN1_INTEGER,0), "BN_to_ASN1_INTEGER"}, |
@@ -127,6 +132,7 @@ static ERR_STRING_DATA ASN1_str_functs[]= | |||
127 | {ERR_PACK(0,ASN1_F_D2I_X509_CINF,0), "D2I_X509_CINF"}, | 132 | {ERR_PACK(0,ASN1_F_D2I_X509_CINF,0), "D2I_X509_CINF"}, |
128 | {ERR_PACK(0,ASN1_F_D2I_X509_NAME,0), "D2I_X509_NAME"}, | 133 | {ERR_PACK(0,ASN1_F_D2I_X509_NAME,0), "D2I_X509_NAME"}, |
129 | {ERR_PACK(0,ASN1_F_D2I_X509_PKEY,0), "d2i_X509_PKEY"}, | 134 | {ERR_PACK(0,ASN1_F_D2I_X509_PKEY,0), "d2i_X509_PKEY"}, |
135 | {ERR_PACK(0,ASN1_F_I2D_ASN1_SET,0), "i2d_ASN1_SET"}, | ||
130 | {ERR_PACK(0,ASN1_F_I2D_ASN1_TIME,0), "I2D_ASN1_TIME"}, | 136 | {ERR_PACK(0,ASN1_F_I2D_ASN1_TIME,0), "I2D_ASN1_TIME"}, |
131 | {ERR_PACK(0,ASN1_F_I2D_DSA_PUBKEY,0), "i2d_DSA_PUBKEY"}, | 137 | {ERR_PACK(0,ASN1_F_I2D_DSA_PUBKEY,0), "i2d_DSA_PUBKEY"}, |
132 | {ERR_PACK(0,ASN1_F_I2D_NETSCAPE_RSA,0), "i2d_Netscape_RSA"}, | 138 | {ERR_PACK(0,ASN1_F_I2D_NETSCAPE_RSA,0), "i2d_Netscape_RSA"}, |
diff --git a/src/lib/libcrypto/asn1/asn1_lib.c b/src/lib/libcrypto/asn1/asn1_lib.c index a74f1368d3..97b9b35f4b 100644 --- a/src/lib/libcrypto/asn1/asn1_lib.c +++ b/src/lib/libcrypto/asn1/asn1_lib.c | |||
@@ -349,6 +349,7 @@ int ASN1_STRING_set(ASN1_STRING *str, const void *_data, int len) | |||
349 | 349 | ||
350 | if (str->data == NULL) | 350 | if (str->data == NULL) |
351 | { | 351 | { |
352 | ASN1err(ASN1_F_ASN1_STRING_SET,ERR_R_MALLOC_FAILURE); | ||
352 | str->data=c; | 353 | str->data=c; |
353 | return(0); | 354 | return(0); |
354 | } | 355 | } |
diff --git a/src/lib/libcrypto/asn1/evp_asn1.c b/src/lib/libcrypto/asn1/evp_asn1.c index 3506005a71..f92ce6cb5d 100644 --- a/src/lib/libcrypto/asn1/evp_asn1.c +++ b/src/lib/libcrypto/asn1/evp_asn1.c | |||
@@ -115,7 +115,11 @@ int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, unsigned char *data, | |||
115 | 115 | ||
116 | if ((osp=ASN1_STRING_new()) == NULL) return(0); | 116 | if ((osp=ASN1_STRING_new()) == NULL) return(0); |
117 | /* Grow the 'string' */ | 117 | /* Grow the 'string' */ |
118 | ASN1_STRING_set(osp,NULL,size); | 118 | if (!ASN1_STRING_set(osp,NULL,size)) |
119 | { | ||
120 | ASN1_STRING_free(osp); | ||
121 | return(0); | ||
122 | } | ||
119 | 123 | ||
120 | M_ASN1_STRING_length_set(osp, size); | 124 | M_ASN1_STRING_length_set(osp, size); |
121 | p=M_ASN1_STRING_data(osp); | 125 | p=M_ASN1_STRING_data(osp); |
diff --git a/src/lib/libcrypto/asn1/p5_pbe.c b/src/lib/libcrypto/asn1/p5_pbe.c index 891150638e..ec788267e0 100644 --- a/src/lib/libcrypto/asn1/p5_pbe.c +++ b/src/lib/libcrypto/asn1/p5_pbe.c | |||
@@ -76,47 +76,55 @@ IMPLEMENT_ASN1_FUNCTIONS(PBEPARAM) | |||
76 | X509_ALGOR *PKCS5_pbe_set(int alg, int iter, unsigned char *salt, | 76 | X509_ALGOR *PKCS5_pbe_set(int alg, int iter, unsigned char *salt, |
77 | int saltlen) | 77 | int saltlen) |
78 | { | 78 | { |
79 | PBEPARAM *pbe; | 79 | PBEPARAM *pbe=NULL; |
80 | ASN1_OBJECT *al; | 80 | ASN1_OBJECT *al; |
81 | X509_ALGOR *algor; | 81 | X509_ALGOR *algor; |
82 | ASN1_TYPE *astype; | 82 | ASN1_TYPE *astype=NULL; |
83 | 83 | ||
84 | if (!(pbe = PBEPARAM_new ())) { | 84 | if (!(pbe = PBEPARAM_new ())) { |
85 | ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE); | 85 | ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE); |
86 | return NULL; | 86 | goto err; |
87 | } | 87 | } |
88 | if(iter <= 0) iter = PKCS5_DEFAULT_ITER; | 88 | if(iter <= 0) iter = PKCS5_DEFAULT_ITER; |
89 | ASN1_INTEGER_set (pbe->iter, iter); | 89 | if (!ASN1_INTEGER_set(pbe->iter, iter)) { |
90 | ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE); | ||
91 | goto err; | ||
92 | } | ||
90 | if (!saltlen) saltlen = PKCS5_SALT_LEN; | 93 | if (!saltlen) saltlen = PKCS5_SALT_LEN; |
91 | if (!(pbe->salt->data = OPENSSL_malloc (saltlen))) { | 94 | if (!(pbe->salt->data = OPENSSL_malloc (saltlen))) { |
92 | ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE); | 95 | ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE); |
93 | return NULL; | 96 | goto err; |
94 | } | 97 | } |
95 | pbe->salt->length = saltlen; | 98 | pbe->salt->length = saltlen; |
96 | if (salt) memcpy (pbe->salt->data, salt, saltlen); | 99 | if (salt) memcpy (pbe->salt->data, salt, saltlen); |
97 | else if (RAND_pseudo_bytes (pbe->salt->data, saltlen) < 0) | 100 | else if (RAND_pseudo_bytes (pbe->salt->data, saltlen) < 0) |
98 | return NULL; | 101 | goto err; |
99 | 102 | ||
100 | if (!(astype = ASN1_TYPE_new())) { | 103 | if (!(astype = ASN1_TYPE_new())) { |
101 | ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE); | 104 | ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE); |
102 | return NULL; | 105 | goto err; |
103 | } | 106 | } |
104 | 107 | ||
105 | astype->type = V_ASN1_SEQUENCE; | 108 | astype->type = V_ASN1_SEQUENCE; |
106 | if(!ASN1_pack_string(pbe, i2d_PBEPARAM, &astype->value.sequence)) { | 109 | if(!ASN1_pack_string(pbe, i2d_PBEPARAM, &astype->value.sequence)) { |
107 | ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE); | 110 | ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE); |
108 | return NULL; | 111 | goto err; |
109 | } | 112 | } |
110 | PBEPARAM_free (pbe); | 113 | PBEPARAM_free (pbe); |
114 | pbe = NULL; | ||
111 | 115 | ||
112 | al = OBJ_nid2obj(alg); /* never need to free al */ | 116 | al = OBJ_nid2obj(alg); /* never need to free al */ |
113 | if (!(algor = X509_ALGOR_new())) { | 117 | if (!(algor = X509_ALGOR_new())) { |
114 | ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE); | 118 | ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE); |
115 | return NULL; | 119 | goto err; |
116 | } | 120 | } |
117 | ASN1_OBJECT_free(algor->algorithm); | 121 | ASN1_OBJECT_free(algor->algorithm); |
118 | algor->algorithm = al; | 122 | algor->algorithm = al; |
119 | algor->parameter = astype; | 123 | algor->parameter = astype; |
120 | 124 | ||
121 | return (algor); | 125 | return (algor); |
126 | err: | ||
127 | if (pbe != NULL) PBEPARAM_free(pbe); | ||
128 | if (astype != NULL) ASN1_TYPE_free(astype); | ||
129 | return NULL; | ||
122 | } | 130 | } |
diff --git a/src/lib/libcrypto/asn1/p5_pbev2.c b/src/lib/libcrypto/asn1/p5_pbev2.c index 91e1c8987d..e0dc0ec4ee 100644 --- a/src/lib/libcrypto/asn1/p5_pbev2.c +++ b/src/lib/libcrypto/asn1/p5_pbev2.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* p5_pbev2.c */ | 1 | /* p5_pbev2.c */ |
2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999-2004. |
4 | */ | 4 | */ |
5 | /* ==================================================================== | 5 | /* ==================================================================== |
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | 6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. |
@@ -113,7 +113,8 @@ X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, | |||
113 | if(!(scheme->parameter = ASN1_TYPE_new())) goto merr; | 113 | if(!(scheme->parameter = ASN1_TYPE_new())) goto merr; |
114 | 114 | ||
115 | /* Create random IV */ | 115 | /* Create random IV */ |
116 | if (RAND_pseudo_bytes(iv, EVP_CIPHER_iv_length(cipher)) < 0) | 116 | if (EVP_CIPHER_iv_length(cipher) && |
117 | RAND_pseudo_bytes(iv, EVP_CIPHER_iv_length(cipher)) < 0) | ||
117 | goto err; | 118 | goto err; |
118 | 119 | ||
119 | EVP_CIPHER_CTX_init(&ctx); | 120 | EVP_CIPHER_CTX_init(&ctx); |
@@ -123,6 +124,7 @@ X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, | |||
123 | if(EVP_CIPHER_param_to_asn1(&ctx, scheme->parameter) < 0) { | 124 | if(EVP_CIPHER_param_to_asn1(&ctx, scheme->parameter) < 0) { |
124 | ASN1err(ASN1_F_PKCS5_PBE2_SET, | 125 | ASN1err(ASN1_F_PKCS5_PBE2_SET, |
125 | ASN1_R_ERROR_SETTING_CIPHER_PARAMS); | 126 | ASN1_R_ERROR_SETTING_CIPHER_PARAMS); |
127 | EVP_CIPHER_CTX_cleanup(&ctx); | ||
126 | goto err; | 128 | goto err; |
127 | } | 129 | } |
128 | EVP_CIPHER_CTX_cleanup(&ctx); | 130 | EVP_CIPHER_CTX_cleanup(&ctx); |
diff --git a/src/lib/libcrypto/asn1/t_bitst.c b/src/lib/libcrypto/asn1/t_bitst.c index 8ee789f082..397332d9b8 100644 --- a/src/lib/libcrypto/asn1/t_bitst.c +++ b/src/lib/libcrypto/asn1/t_bitst.c | |||
@@ -84,7 +84,10 @@ int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, char *name, int value, | |||
84 | int bitnum; | 84 | int bitnum; |
85 | bitnum = ASN1_BIT_STRING_num_asc(name, tbl); | 85 | bitnum = ASN1_BIT_STRING_num_asc(name, tbl); |
86 | if(bitnum < 0) return 0; | 86 | if(bitnum < 0) return 0; |
87 | if(bs) ASN1_BIT_STRING_set_bit(bs, bitnum, value); | 87 | if(bs) { |
88 | if(!ASN1_BIT_STRING_set_bit(bs, bitnum, value)) | ||
89 | return 0; | ||
90 | } | ||
88 | return 1; | 91 | return 1; |
89 | } | 92 | } |
90 | 93 | ||
diff --git a/src/lib/libcrypto/asn1/x_crl.c b/src/lib/libcrypto/asn1/x_crl.c index 11fce96825..b99f8fc522 100644 --- a/src/lib/libcrypto/asn1/x_crl.c +++ b/src/lib/libcrypto/asn1/x_crl.c | |||
@@ -63,8 +63,6 @@ | |||
63 | 63 | ||
64 | static int X509_REVOKED_cmp(const X509_REVOKED * const *a, | 64 | static int X509_REVOKED_cmp(const X509_REVOKED * const *a, |
65 | const X509_REVOKED * const *b); | 65 | const X509_REVOKED * const *b); |
66 | static int X509_REVOKED_seq_cmp(const X509_REVOKED * const *a, | ||
67 | const X509_REVOKED * const *b); | ||
68 | 66 | ||
69 | ASN1_SEQUENCE(X509_REVOKED) = { | 67 | ASN1_SEQUENCE(X509_REVOKED) = { |
70 | ASN1_SIMPLE(X509_REVOKED,serialNumber, ASN1_INTEGER), | 68 | ASN1_SIMPLE(X509_REVOKED,serialNumber, ASN1_INTEGER), |
@@ -72,43 +70,28 @@ ASN1_SEQUENCE(X509_REVOKED) = { | |||
72 | ASN1_SEQUENCE_OF_OPT(X509_REVOKED,extensions, X509_EXTENSION) | 70 | ASN1_SEQUENCE_OF_OPT(X509_REVOKED,extensions, X509_EXTENSION) |
73 | } ASN1_SEQUENCE_END(X509_REVOKED) | 71 | } ASN1_SEQUENCE_END(X509_REVOKED) |
74 | 72 | ||
75 | /* The X509_CRL_INFO structure needs a bit of customisation. This is actually | 73 | /* The X509_CRL_INFO structure needs a bit of customisation. |
76 | * mirroring the old behaviour: its purpose is to allow the use of | 74 | * Since we cache the original encoding the signature wont be affected by |
77 | * sk_X509_REVOKED_find to lookup revoked certificates. Unfortunately | 75 | * reordering of the revoked field. |
78 | * this will zap the original order and the signature so we keep a copy | ||
79 | * of the original positions and reorder appropriately before encoding. | ||
80 | * | ||
81 | * Might want to see if there's a better way of doing this later... | ||
82 | */ | 76 | */ |
83 | static int crl_inf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it) | 77 | static int crl_inf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it) |
84 | { | 78 | { |
85 | X509_CRL_INFO *a = (X509_CRL_INFO *)*pval; | 79 | X509_CRL_INFO *a = (X509_CRL_INFO *)*pval; |
86 | int i; | ||
87 | int (*old_cmp)(const X509_REVOKED * const *, | ||
88 | const X509_REVOKED * const *); | ||
89 | 80 | ||
90 | if(!a || !a->revoked) return 1; | 81 | if(!a || !a->revoked) return 1; |
91 | switch(operation) { | 82 | switch(operation) { |
92 | 83 | /* Just set cmp function here. We don't sort because that | |
93 | /* Save original order */ | 84 | * would affect the output of X509_CRL_print(). |
85 | */ | ||
94 | case ASN1_OP_D2I_POST: | 86 | case ASN1_OP_D2I_POST: |
95 | for (i=0; i<sk_X509_REVOKED_num(a->revoked); i++) | ||
96 | sk_X509_REVOKED_value(a->revoked,i)->sequence=i; | ||
97 | sk_X509_REVOKED_set_cmp_func(a->revoked,X509_REVOKED_cmp); | 87 | sk_X509_REVOKED_set_cmp_func(a->revoked,X509_REVOKED_cmp); |
98 | break; | 88 | break; |
99 | |||
100 | /* Restore original order */ | ||
101 | case ASN1_OP_I2D_PRE: | ||
102 | old_cmp=sk_X509_REVOKED_set_cmp_func(a->revoked,X509_REVOKED_seq_cmp); | ||
103 | sk_X509_REVOKED_sort(a->revoked); | ||
104 | sk_X509_REVOKED_set_cmp_func(a->revoked,old_cmp); | ||
105 | break; | ||
106 | } | 89 | } |
107 | return 1; | 90 | return 1; |
108 | } | 91 | } |
109 | 92 | ||
110 | 93 | ||
111 | ASN1_SEQUENCE_cb(X509_CRL_INFO, crl_inf_cb) = { | 94 | ASN1_SEQUENCE_enc(X509_CRL_INFO, enc, crl_inf_cb) = { |
112 | ASN1_OPT(X509_CRL_INFO, version, ASN1_INTEGER), | 95 | ASN1_OPT(X509_CRL_INFO, version, ASN1_INTEGER), |
113 | ASN1_SIMPLE(X509_CRL_INFO, sig_alg, X509_ALGOR), | 96 | ASN1_SIMPLE(X509_CRL_INFO, sig_alg, X509_ALGOR), |
114 | ASN1_SIMPLE(X509_CRL_INFO, issuer, X509_NAME), | 97 | ASN1_SIMPLE(X509_CRL_INFO, issuer, X509_NAME), |
@@ -116,7 +99,7 @@ ASN1_SEQUENCE_cb(X509_CRL_INFO, crl_inf_cb) = { | |||
116 | ASN1_OPT(X509_CRL_INFO, nextUpdate, ASN1_TIME), | 99 | ASN1_OPT(X509_CRL_INFO, nextUpdate, ASN1_TIME), |
117 | ASN1_SEQUENCE_OF_OPT(X509_CRL_INFO, revoked, X509_REVOKED), | 100 | ASN1_SEQUENCE_OF_OPT(X509_CRL_INFO, revoked, X509_REVOKED), |
118 | ASN1_EXP_SEQUENCE_OF_OPT(X509_CRL_INFO, extensions, X509_EXTENSION, 0) | 101 | ASN1_EXP_SEQUENCE_OF_OPT(X509_CRL_INFO, extensions, X509_EXTENSION, 0) |
119 | } ASN1_SEQUENCE_END_cb(X509_CRL_INFO, X509_CRL_INFO) | 102 | } ASN1_SEQUENCE_END_enc(X509_CRL_INFO, X509_CRL_INFO) |
120 | 103 | ||
121 | ASN1_SEQUENCE_ref(X509_CRL, 0, CRYPTO_LOCK_X509_CRL) = { | 104 | ASN1_SEQUENCE_ref(X509_CRL, 0, CRYPTO_LOCK_X509_CRL) = { |
122 | ASN1_SIMPLE(X509_CRL, crl, X509_CRL_INFO), | 105 | ASN1_SIMPLE(X509_CRL, crl, X509_CRL_INFO), |
@@ -137,12 +120,6 @@ static int X509_REVOKED_cmp(const X509_REVOKED * const *a, | |||
137 | (ASN1_STRING *)(*b)->serialNumber)); | 120 | (ASN1_STRING *)(*b)->serialNumber)); |
138 | } | 121 | } |
139 | 122 | ||
140 | static int X509_REVOKED_seq_cmp(const X509_REVOKED * const *a, | ||
141 | const X509_REVOKED * const *b) | ||
142 | { | ||
143 | return((*a)->sequence-(*b)->sequence); | ||
144 | } | ||
145 | |||
146 | int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev) | 123 | int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev) |
147 | { | 124 | { |
148 | X509_CRL_INFO *inf; | 125 | X509_CRL_INFO *inf; |
@@ -153,6 +130,7 @@ int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev) | |||
153 | ASN1err(ASN1_F_X509_CRL_ADD0_REVOKED, ERR_R_MALLOC_FAILURE); | 130 | ASN1err(ASN1_F_X509_CRL_ADD0_REVOKED, ERR_R_MALLOC_FAILURE); |
154 | return 0; | 131 | return 0; |
155 | } | 132 | } |
133 | inf->enc.modified = 1; | ||
156 | return 1; | 134 | return 1; |
157 | } | 135 | } |
158 | 136 | ||
diff --git a/src/lib/libcrypto/asn1/x_name.c b/src/lib/libcrypto/asn1/x_name.c index caece0f158..31f3377b64 100644 --- a/src/lib/libcrypto/asn1/x_name.c +++ b/src/lib/libcrypto/asn1/x_name.c | |||
@@ -160,21 +160,22 @@ static int x509_name_ex_d2i(ASN1_VALUE **val, unsigned char **in, long len, cons | |||
160 | int tag, int aclass, char opt, ASN1_TLC *ctx) | 160 | int tag, int aclass, char opt, ASN1_TLC *ctx) |
161 | { | 161 | { |
162 | unsigned char *p = *in, *q; | 162 | unsigned char *p = *in, *q; |
163 | STACK *intname = NULL; | 163 | STACK *intname = NULL, **intname_pp = &intname; |
164 | int i, j, ret; | 164 | int i, j, ret; |
165 | X509_NAME *nm = NULL; | 165 | X509_NAME *nm = NULL, **nm_pp = &nm; |
166 | STACK_OF(X509_NAME_ENTRY) *entries; | 166 | STACK_OF(X509_NAME_ENTRY) *entries; |
167 | X509_NAME_ENTRY *entry; | 167 | X509_NAME_ENTRY *entry; |
168 | q = p; | 168 | q = p; |
169 | 169 | ||
170 | /* Get internal representation of Name */ | 170 | /* Get internal representation of Name */ |
171 | ret = ASN1_item_ex_d2i((ASN1_VALUE **)&intname, &p, len, ASN1_ITEM_rptr(X509_NAME_INTERNAL), | 171 | ret = ASN1_item_ex_d2i((ASN1_VALUE **)intname_pp, |
172 | tag, aclass, opt, ctx); | 172 | &p, len, ASN1_ITEM_rptr(X509_NAME_INTERNAL), |
173 | tag, aclass, opt, ctx); | ||
173 | 174 | ||
174 | if(ret <= 0) return ret; | 175 | if(ret <= 0) return ret; |
175 | 176 | ||
176 | if(*val) x509_name_ex_free(val, NULL); | 177 | if(*val) x509_name_ex_free(val, NULL); |
177 | if(!x509_name_ex_new((ASN1_VALUE **)&nm, NULL)) goto err; | 178 | if(!x509_name_ex_new((ASN1_VALUE **)nm_pp, NULL)) goto err; |
178 | /* We've decoded it: now cache encoding */ | 179 | /* We've decoded it: now cache encoding */ |
179 | if(!BUF_MEM_grow(nm->bytes, p - q)) goto err; | 180 | if(!BUF_MEM_grow(nm->bytes, p - q)) goto err; |
180 | memcpy(nm->bytes->data, q, p - q); | 181 | memcpy(nm->bytes->data, q, p - q); |
@@ -218,7 +219,7 @@ static int x509_name_ex_i2d(ASN1_VALUE **val, unsigned char **out, const ASN1_IT | |||
218 | 219 | ||
219 | static int x509_name_encode(X509_NAME *a) | 220 | static int x509_name_encode(X509_NAME *a) |
220 | { | 221 | { |
221 | STACK *intname = NULL; | 222 | STACK *intname = NULL, **intname_pp = &intname; |
222 | int len; | 223 | int len; |
223 | unsigned char *p; | 224 | unsigned char *p; |
224 | STACK_OF(X509_NAME_ENTRY) *entries = NULL; | 225 | STACK_OF(X509_NAME_ENTRY) *entries = NULL; |
@@ -236,10 +237,12 @@ static int x509_name_encode(X509_NAME *a) | |||
236 | } | 237 | } |
237 | if(!sk_X509_NAME_ENTRY_push(entries, entry)) goto memerr; | 238 | if(!sk_X509_NAME_ENTRY_push(entries, entry)) goto memerr; |
238 | } | 239 | } |
239 | len = ASN1_item_ex_i2d((ASN1_VALUE **)&intname, NULL, ASN1_ITEM_rptr(X509_NAME_INTERNAL), -1, -1); | 240 | len = ASN1_item_ex_i2d((ASN1_VALUE **)intname_pp, NULL, |
241 | ASN1_ITEM_rptr(X509_NAME_INTERNAL), -1, -1); | ||
240 | if (!BUF_MEM_grow(a->bytes,len)) goto memerr; | 242 | if (!BUF_MEM_grow(a->bytes,len)) goto memerr; |
241 | p=(unsigned char *)a->bytes->data; | 243 | p=(unsigned char *)a->bytes->data; |
242 | ASN1_item_ex_i2d((ASN1_VALUE **)&intname, &p, ASN1_ITEM_rptr(X509_NAME_INTERNAL), -1, -1); | 244 | ASN1_item_ex_i2d((ASN1_VALUE **)intname_pp, |
245 | &p, ASN1_ITEM_rptr(X509_NAME_INTERNAL), -1, -1); | ||
243 | sk_pop_free(intname, sk_internal_free); | 246 | sk_pop_free(intname, sk_internal_free); |
244 | a->modified = 0; | 247 | a->modified = 0; |
245 | return len; | 248 | return len; |
diff --git a/src/lib/libcrypto/asn1/x_pubkey.c b/src/lib/libcrypto/asn1/x_pubkey.c index d958540120..7d6d71af88 100644 --- a/src/lib/libcrypto/asn1/x_pubkey.c +++ b/src/lib/libcrypto/asn1/x_pubkey.c | |||
@@ -80,8 +80,7 @@ IMPLEMENT_ASN1_FUNCTIONS(X509_PUBKEY) | |||
80 | 80 | ||
81 | int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) | 81 | int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) |
82 | { | 82 | { |
83 | int ok=0; | 83 | X509_PUBKEY *pk=NULL; |
84 | X509_PUBKEY *pk; | ||
85 | X509_ALGOR *a; | 84 | X509_ALGOR *a; |
86 | ASN1_OBJECT *o; | 85 | ASN1_OBJECT *o; |
87 | unsigned char *s,*p = NULL; | 86 | unsigned char *s,*p = NULL; |
@@ -104,7 +103,11 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) | |||
104 | (a->parameter->type != V_ASN1_NULL)) | 103 | (a->parameter->type != V_ASN1_NULL)) |
105 | { | 104 | { |
106 | ASN1_TYPE_free(a->parameter); | 105 | ASN1_TYPE_free(a->parameter); |
107 | a->parameter=ASN1_TYPE_new(); | 106 | if (!(a->parameter=ASN1_TYPE_new())) |
107 | { | ||
108 | X509err(X509_F_X509_PUBKEY_SET,ERR_R_MALLOC_FAILURE); | ||
109 | goto err; | ||
110 | } | ||
108 | a->parameter->type=V_ASN1_NULL; | 111 | a->parameter->type=V_ASN1_NULL; |
109 | } | 112 | } |
110 | } | 113 | } |
@@ -118,14 +121,34 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) | |||
118 | dsa=pkey->pkey.dsa; | 121 | dsa=pkey->pkey.dsa; |
119 | dsa->write_params=0; | 122 | dsa->write_params=0; |
120 | ASN1_TYPE_free(a->parameter); | 123 | ASN1_TYPE_free(a->parameter); |
121 | i=i2d_DSAparams(dsa,NULL); | 124 | if ((i=i2d_DSAparams(dsa,NULL)) <= 0) |
122 | if ((p=(unsigned char *)OPENSSL_malloc(i)) == NULL) goto err; | 125 | goto err; |
126 | if (!(p=(unsigned char *)OPENSSL_malloc(i))) | ||
127 | { | ||
128 | X509err(X509_F_X509_PUBKEY_SET,ERR_R_MALLOC_FAILURE); | ||
129 | goto err; | ||
130 | } | ||
123 | pp=p; | 131 | pp=p; |
124 | i2d_DSAparams(dsa,&pp); | 132 | i2d_DSAparams(dsa,&pp); |
125 | a->parameter=ASN1_TYPE_new(); | 133 | if (!(a->parameter=ASN1_TYPE_new())) |
134 | { | ||
135 | OPENSSL_free(p); | ||
136 | X509err(X509_F_X509_PUBKEY_SET,ERR_R_MALLOC_FAILURE); | ||
137 | goto err; | ||
138 | } | ||
126 | a->parameter->type=V_ASN1_SEQUENCE; | 139 | a->parameter->type=V_ASN1_SEQUENCE; |
127 | a->parameter->value.sequence=ASN1_STRING_new(); | 140 | if (!(a->parameter->value.sequence=ASN1_STRING_new())) |
128 | ASN1_STRING_set(a->parameter->value.sequence,p,i); | 141 | { |
142 | OPENSSL_free(p); | ||
143 | X509err(X509_F_X509_PUBKEY_SET,ERR_R_MALLOC_FAILURE); | ||
144 | goto err; | ||
145 | } | ||
146 | if (!ASN1_STRING_set(a->parameter->value.sequence,p,i)) | ||
147 | { | ||
148 | OPENSSL_free(p); | ||
149 | X509err(X509_F_X509_PUBKEY_SET,ERR_R_MALLOC_FAILURE); | ||
150 | goto err; | ||
151 | } | ||
129 | OPENSSL_free(p); | 152 | OPENSSL_free(p); |
130 | } | 153 | } |
131 | else | 154 | else |
@@ -143,7 +166,11 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) | |||
143 | } | 166 | } |
144 | p=s; | 167 | p=s; |
145 | i2d_PublicKey(pkey,&p); | 168 | i2d_PublicKey(pkey,&p); |
146 | if (!M_ASN1_BIT_STRING_set(pk->public_key,s,i)) goto err; | 169 | if (!M_ASN1_BIT_STRING_set(pk->public_key,s,i)) |
170 | { | ||
171 | X509err(X509_F_X509_PUBKEY_SET,ERR_R_MALLOC_FAILURE); | ||
172 | goto err; | ||
173 | } | ||
147 | /* Set number of unused bits to zero */ | 174 | /* Set number of unused bits to zero */ |
148 | pk->public_key->flags&= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07); | 175 | pk->public_key->flags&= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07); |
149 | pk->public_key->flags|=ASN1_STRING_FLAG_BITS_LEFT; | 176 | pk->public_key->flags|=ASN1_STRING_FLAG_BITS_LEFT; |
@@ -159,12 +186,11 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) | |||
159 | X509_PUBKEY_free(*x); | 186 | X509_PUBKEY_free(*x); |
160 | 187 | ||
161 | *x=pk; | 188 | *x=pk; |
162 | pk=NULL; | ||
163 | 189 | ||
164 | ok=1; | 190 | return 1; |
165 | err: | 191 | err: |
166 | if (pk != NULL) X509_PUBKEY_free(pk); | 192 | if (pk != NULL) X509_PUBKEY_free(pk); |
167 | return(ok); | 193 | return 0; |
168 | } | 194 | } |
169 | 195 | ||
170 | EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key) | 196 | EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key) |
diff --git a/src/lib/libcrypto/bf/bf_skey.c b/src/lib/libcrypto/bf/bf_skey.c index 3673cdee6e..fc5bebefce 100644 --- a/src/lib/libcrypto/bf/bf_skey.c +++ b/src/lib/libcrypto/bf/bf_skey.c | |||
@@ -58,11 +58,12 @@ | |||
58 | 58 | ||
59 | #include <stdio.h> | 59 | #include <stdio.h> |
60 | #include <string.h> | 60 | #include <string.h> |
61 | #include <openssl/crypto.h> | ||
61 | #include <openssl/blowfish.h> | 62 | #include <openssl/blowfish.h> |
62 | #include "bf_locl.h" | 63 | #include "bf_locl.h" |
63 | #include "bf_pi.h" | 64 | #include "bf_pi.h" |
64 | 65 | ||
65 | void BF_set_key(BF_KEY *key, int len, const unsigned char *data) | 66 | FIPS_NON_FIPS_VCIPHER_Init(BF) |
66 | { | 67 | { |
67 | int i; | 68 | int i; |
68 | BF_LONG *p,ri,in[2]; | 69 | BF_LONG *p,ri,in[2]; |
diff --git a/src/lib/libcrypto/bf/blowfish.h b/src/lib/libcrypto/bf/blowfish.h index cd49e85ab2..b4d8774961 100644 --- a/src/lib/libcrypto/bf/blowfish.h +++ b/src/lib/libcrypto/bf/blowfish.h | |||
@@ -104,7 +104,10 @@ typedef struct bf_key_st | |||
104 | BF_LONG S[4*256]; | 104 | BF_LONG S[4*256]; |
105 | } BF_KEY; | 105 | } BF_KEY; |
106 | 106 | ||
107 | 107 | ||
108 | #ifdef OPENSSL_FIPS | ||
109 | void private_BF_set_key(BF_KEY *key, int len, const unsigned char *data); | ||
110 | #endif | ||
108 | void BF_set_key(BF_KEY *key, int len, const unsigned char *data); | 111 | void BF_set_key(BF_KEY *key, int len, const unsigned char *data); |
109 | 112 | ||
110 | void BF_encrypt(BF_LONG *data,const BF_KEY *key); | 113 | void BF_encrypt(BF_LONG *data,const BF_KEY *key); |
diff --git a/src/lib/libcrypto/bio/b_print.c b/src/lib/libcrypto/bio/b_print.c index 880dc69303..8b753e7ca0 100644 --- a/src/lib/libcrypto/bio/b_print.c +++ b/src/lib/libcrypto/bio/b_print.c | |||
@@ -641,7 +641,7 @@ fmtfp( | |||
641 | multiplying by a factor of 10 */ | 641 | multiplying by a factor of 10 */ |
642 | fracpart = roundv((pow10(max)) * (ufvalue - intpart)); | 642 | fracpart = roundv((pow10(max)) * (ufvalue - intpart)); |
643 | 643 | ||
644 | if (fracpart >= pow10(max)) { | 644 | if (fracpart >= (long)pow10(max)) { |
645 | intpart++; | 645 | intpart++; |
646 | fracpart -= (long)pow10(max); | 646 | fracpart -= (long)pow10(max); |
647 | } | 647 | } |
diff --git a/src/lib/libcrypto/bio/bio.h b/src/lib/libcrypto/bio/bio.h index fbbc16d00c..2eb703830f 100644 --- a/src/lib/libcrypto/bio/bio.h +++ b/src/lib/libcrypto/bio/bio.h | |||
@@ -347,6 +347,7 @@ typedef struct bio_f_buffer_ctx_struct | |||
347 | #define BIO_C_NWRITE0 145 | 347 | #define BIO_C_NWRITE0 145 |
348 | #define BIO_C_NWRITE 146 | 348 | #define BIO_C_NWRITE 146 |
349 | #define BIO_C_RESET_READ_REQUEST 147 | 349 | #define BIO_C_RESET_READ_REQUEST 147 |
350 | #define BIO_C_SET_MD_CTX 148 | ||
350 | 351 | ||
351 | 352 | ||
352 | #define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg) | 353 | #define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg) |
diff --git a/src/lib/libcrypto/bio/bss_file.c b/src/lib/libcrypto/bio/bss_file.c index 9cdf159f82..8034ac93f9 100644 --- a/src/lib/libcrypto/bio/bss_file.c +++ b/src/lib/libcrypto/bio/bss_file.c | |||
@@ -213,13 +213,14 @@ static long MS_CALLBACK file_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
213 | b->shutdown=(int)num&BIO_CLOSE; | 213 | b->shutdown=(int)num&BIO_CLOSE; |
214 | b->ptr=(char *)ptr; | 214 | b->ptr=(char *)ptr; |
215 | b->init=1; | 215 | b->init=1; |
216 | { | ||
216 | #if defined(OPENSSL_SYS_WINDOWS) | 217 | #if defined(OPENSSL_SYS_WINDOWS) |
218 | int fd = fileno((FILE*)ptr); | ||
217 | if (num & BIO_FP_TEXT) | 219 | if (num & BIO_FP_TEXT) |
218 | _setmode(fileno((FILE *)ptr),_O_TEXT); | 220 | _setmode(fd,_O_TEXT); |
219 | else | 221 | else |
220 | _setmode(fileno((FILE *)ptr),_O_BINARY); | 222 | _setmode(fd,_O_BINARY); |
221 | #elif defined(OPENSSL_SYS_MSDOS) | 223 | #elif defined(OPENSSL_SYS_MSDOS) |
222 | { | ||
223 | int fd = fileno((FILE*)ptr); | 224 | int fd = fileno((FILE*)ptr); |
224 | /* Set correct text/binary mode */ | 225 | /* Set correct text/binary mode */ |
225 | if (num & BIO_FP_TEXT) | 226 | if (num & BIO_FP_TEXT) |
@@ -235,13 +236,14 @@ static long MS_CALLBACK file_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
235 | else | 236 | else |
236 | _setmode(fd,_O_BINARY); | 237 | _setmode(fd,_O_BINARY); |
237 | } | 238 | } |
238 | } | ||
239 | #elif defined(OPENSSL_SYS_OS2) | 239 | #elif defined(OPENSSL_SYS_OS2) |
240 | int fd = fileno((FILE*)ptr); | ||
240 | if (num & BIO_FP_TEXT) | 241 | if (num & BIO_FP_TEXT) |
241 | setmode(fileno((FILE *)ptr), O_TEXT); | 242 | setmode(fd, O_TEXT); |
242 | else | 243 | else |
243 | setmode(fileno((FILE *)ptr), O_BINARY); | 244 | setmode(fd, O_BINARY); |
244 | #endif | 245 | #endif |
246 | } | ||
245 | break; | 247 | break; |
246 | case BIO_C_SET_FILENAME: | 248 | case BIO_C_SET_FILENAME: |
247 | file_free(b); | 249 | file_free(b); |
@@ -264,7 +266,7 @@ static long MS_CALLBACK file_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
264 | ret=0; | 266 | ret=0; |
265 | break; | 267 | break; |
266 | } | 268 | } |
267 | #if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_OS2) | 269 | #if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_WIN32_CYGWIN) |
268 | if (!(num & BIO_FP_TEXT)) | 270 | if (!(num & BIO_FP_TEXT)) |
269 | strcat(p,"b"); | 271 | strcat(p,"b"); |
270 | else | 272 | else |
diff --git a/src/lib/libcrypto/bn/asm/ia64.S b/src/lib/libcrypto/bn/asm/ia64.S index 7dfda85566..7b82b820e6 100644 --- a/src/lib/libcrypto/bn/asm/ia64.S +++ b/src/lib/libcrypto/bn/asm/ia64.S | |||
@@ -1,6 +1,6 @@ | |||
1 | .explicit | 1 | .explicit |
2 | .text | 2 | .text |
3 | .ident "ia64.S, Version 2.0" | 3 | .ident "ia64.S, Version 2.1" |
4 | .ident "IA-64 ISA artwork by Andy Polyakov <appro@fy.chalmers.se>" | 4 | .ident "IA-64 ISA artwork by Andy Polyakov <appro@fy.chalmers.se>" |
5 | 5 | ||
6 | // | 6 | // |
@@ -35,7 +35,7 @@ | |||
35 | // What does it mean? You might ratiocinate that the original code | 35 | // What does it mean? You might ratiocinate that the original code |
36 | // should run just faster... Because sum of latencies is smaller... | 36 | // should run just faster... Because sum of latencies is smaller... |
37 | // Wrong! Note that getf latency increased. This means that if a loop is | 37 | // Wrong! Note that getf latency increased. This means that if a loop is |
38 | // scheduled for lower latency (and they are), then it will suffer from | 38 | // scheduled for lower latency (as they were), then it will suffer from |
39 | // stall condition and the code will therefore turn anti-scalable, e.g. | 39 | // stall condition and the code will therefore turn anti-scalable, e.g. |
40 | // original bn_mul_words spun at 5*n or 2.5 times slower than expected | 40 | // original bn_mul_words spun at 5*n or 2.5 times slower than expected |
41 | // on Itanium2! What to do? Reschedule loops for Itanium2? But then | 41 | // on Itanium2! What to do? Reschedule loops for Itanium2? But then |
@@ -145,6 +145,12 @@ | |||
145 | // -Drum=nop.m in command line. | 145 | // -Drum=nop.m in command line. |
146 | // | 146 | // |
147 | 147 | ||
148 | #if defined(_HPUX_SOURCE) && !defined(_LP64) | ||
149 | #define ADDP addp4 | ||
150 | #else | ||
151 | #define ADDP add | ||
152 | #endif | ||
153 | |||
148 | #if 1 | 154 | #if 1 |
149 | // | 155 | // |
150 | // bn_[add|sub]_words routines. | 156 | // bn_[add|sub]_words routines. |
@@ -178,27 +184,12 @@ bn_add_words: | |||
178 | brp.loop.imp .L_bn_add_words_ctop,.L_bn_add_words_cend-16 | 184 | brp.loop.imp .L_bn_add_words_ctop,.L_bn_add_words_cend-16 |
179 | } | 185 | } |
180 | .body | 186 | .body |
181 | { .mib; | 187 | { .mib; ADDP r14=0,r32 // rp |
182 | #if defined(_HPUX_SOURCE) && defined(_ILP32) | ||
183 | addp4 r14=0,r32 // rp | ||
184 | #else | ||
185 | mov r14=r32 // rp | ||
186 | #endif | ||
187 | mov r9=pr };; | 188 | mov r9=pr };; |
188 | { .mii; | 189 | { .mii; ADDP r15=0,r33 // ap |
189 | #if defined(_HPUX_SOURCE) && defined(_ILP32) | ||
190 | addp4 r15=0,r33 // ap | ||
191 | #else | ||
192 | mov r15=r33 // ap | ||
193 | #endif | ||
194 | mov ar.lc=r10 | 190 | mov ar.lc=r10 |
195 | mov ar.ec=6 } | 191 | mov ar.ec=6 } |
196 | { .mib; | 192 | { .mib; ADDP r16=0,r34 // bp |
197 | #if defined(_HPUX_SOURCE) && defined(_ILP32) | ||
198 | addp4 r16=0,r34 // bp | ||
199 | #else | ||
200 | mov r16=r34 // bp | ||
201 | #endif | ||
202 | mov pr.rot=1<<16 };; | 193 | mov pr.rot=1<<16 };; |
203 | 194 | ||
204 | .L_bn_add_words_ctop: | 195 | .L_bn_add_words_ctop: |
@@ -246,27 +237,12 @@ bn_sub_words: | |||
246 | brp.loop.imp .L_bn_sub_words_ctop,.L_bn_sub_words_cend-16 | 237 | brp.loop.imp .L_bn_sub_words_ctop,.L_bn_sub_words_cend-16 |
247 | } | 238 | } |
248 | .body | 239 | .body |
249 | { .mib; | 240 | { .mib; ADDP r14=0,r32 // rp |
250 | #if defined(_HPUX_SOURCE) && defined(_ILP32) | ||
251 | addp4 r14=0,r32 // rp | ||
252 | #else | ||
253 | mov r14=r32 // rp | ||
254 | #endif | ||
255 | mov r9=pr };; | 241 | mov r9=pr };; |
256 | { .mii; | 242 | { .mii; ADDP r15=0,r33 // ap |
257 | #if defined(_HPUX_SOURCE) && defined(_ILP32) | ||
258 | addp4 r15=0,r33 // ap | ||
259 | #else | ||
260 | mov r15=r33 // ap | ||
261 | #endif | ||
262 | mov ar.lc=r10 | 243 | mov ar.lc=r10 |
263 | mov ar.ec=6 } | 244 | mov ar.ec=6 } |
264 | { .mib; | 245 | { .mib; ADDP r16=0,r34 // bp |
265 | #if defined(_HPUX_SOURCE) && defined(_ILP32) | ||
266 | addp4 r16=0,r34 // bp | ||
267 | #else | ||
268 | mov r16=r34 // bp | ||
269 | #endif | ||
270 | mov pr.rot=1<<16 };; | 246 | mov pr.rot=1<<16 };; |
271 | 247 | ||
272 | .L_bn_sub_words_ctop: | 248 | .L_bn_sub_words_ctop: |
@@ -332,16 +308,10 @@ bn_mul_words: | |||
332 | 308 | ||
333 | #ifndef XMA_TEMPTATION | 309 | #ifndef XMA_TEMPTATION |
334 | 310 | ||
335 | { .mii; | 311 | { .mmi; ADDP r14=0,r32 // rp |
336 | #if defined(_HPUX_SOURCE) && defined(_ILP32) | 312 | ADDP r15=0,r33 // ap |
337 | addp4 r14=0,r32 // rp | ||
338 | addp4 r15=0,r33 // ap | ||
339 | #else | ||
340 | mov r14=r32 // rp | ||
341 | mov r15=r33 // ap | ||
342 | #endif | ||
343 | mov ar.lc=r10 } | 313 | mov ar.lc=r10 } |
344 | { .mii; mov r40=0 // serves as r35 at first (p27) | 314 | { .mmi; mov r40=0 // serves as r35 at first (p27) |
345 | mov ar.ec=13 };; | 315 | mov ar.ec=13 };; |
346 | 316 | ||
347 | // This loop spins in 2*(n+12) ticks. It's scheduled for data in Itanium | 317 | // This loop spins in 2*(n+12) ticks. It's scheduled for data in Itanium |
@@ -424,89 +394,64 @@ bn_mul_words: | |||
424 | .global bn_mul_add_words# | 394 | .global bn_mul_add_words# |
425 | .proc bn_mul_add_words# | 395 | .proc bn_mul_add_words# |
426 | .align 64 | 396 | .align 64 |
427 | //.skip 0 // makes the loop split at 64-byte boundary | 397 | .skip 48 // makes the loop body aligned at 64-byte boundary |
428 | bn_mul_add_words: | 398 | bn_mul_add_words: |
429 | .prologue | 399 | .prologue |
430 | .fframe 0 | 400 | .fframe 0 |
431 | .save ar.pfs,r2 | 401 | .save ar.pfs,r2 |
432 | { .mii; alloc r2=ar.pfs,4,12,0,16 | ||
433 | cmp4.le p6,p0=r34,r0 };; | ||
434 | { .mfb; mov r8=r0 // return value | ||
435 | (p6) br.ret.spnt.many b0 };; | ||
436 | |||
437 | .save ar.lc,r3 | 402 | .save ar.lc,r3 |
438 | { .mii; sub r10=r34,r0,1 | 403 | .save pr,r9 |
439 | mov r3=ar.lc | 404 | { .mmi; alloc r2=ar.pfs,4,4,0,8 |
440 | mov r9=pr };; | 405 | cmp4.le p6,p0=r34,r0 |
406 | mov r3=ar.lc };; | ||
407 | { .mib; mov r8=r0 // return value | ||
408 | sub r10=r34,r0,1 | ||
409 | (p6) br.ret.spnt.many b0 };; | ||
441 | 410 | ||
442 | .body | 411 | .body |
443 | { .mib; setf.sig f8=r35 // w | 412 | { .mib; setf.sig f8=r35 // w |
444 | mov pr.rot=0x800001<<16 | 413 | mov r9=pr |
445 | // ------^----- serves as (p50) at first (p27) | ||
446 | brp.loop.imp .L_bn_mul_add_words_ctop,.L_bn_mul_add_words_cend-16 | 414 | brp.loop.imp .L_bn_mul_add_words_ctop,.L_bn_mul_add_words_cend-16 |
447 | } | 415 | } |
448 | { .mii; | 416 | { .mmi; ADDP r14=0,r32 // rp |
449 | #if defined(_HPUX_SOURCE) && defined(_ILP32) | 417 | ADDP r15=0,r33 // ap |
450 | addp4 r14=0,r32 // rp | ||
451 | addp4 r15=0,r33 // ap | ||
452 | #else | ||
453 | mov r14=r32 // rp | ||
454 | mov r15=r33 // ap | ||
455 | #endif | ||
456 | mov ar.lc=r10 } | 418 | mov ar.lc=r10 } |
457 | { .mii; mov r40=0 // serves as r35 at first (p27) | 419 | { .mii; ADDP r16=0,r32 // rp copy |
458 | #if defined(_HPUX_SOURCE) && defined(_ILP32) | 420 | mov pr.rot=0x2001<<16 |
459 | addp4 r18=0,r32 // rp copy | 421 | // ------^----- serves as (p40) at first (p27) |
460 | #else | 422 | mov ar.ec=11 };; |
461 | mov r18=r32 // rp copy | 423 | |
462 | #endif | 424 | // This loop spins in 3*(n+10) ticks on Itanium and in 2*(n+10) on |
463 | mov ar.ec=15 };; | 425 | // Itanium 2. Yes, unlike previous versions it scales:-) Previous |
464 | 426 | // version was peforming *all* additions in IALU and was starving | |
465 | // This loop spins in 3*(n+14) ticks on Itanium and should spin in | 427 | // for those even on Itanium 2. In this version one addition is |
466 | // 2*(n+14) on "wider" IA-64 implementations (to be verified with new | 428 | // moved to FPU and is folded with multiplication. This is at cost |
467 | // µ-architecture manuals as they become available). As usual it's | 429 | // of propogating the result from previous call to this subroutine |
468 | // possible to compress the epilogue, down to 10 in this case, at the | 430 | // to L2 cache... In other words negligible even for shorter keys. |
469 | // cost of scalability. Compressed (and therefore non-scalable) loop | 431 | // *Overall* performance improvement [over previous version] varies |
470 | // running at 3*(n+11) would buy you ~10% on Itanium but take ~35% | 432 | // from 11 to 22 percent depending on key length. |
471 | // from "wider" IA-64 so let it be scalable! Special attention was | ||
472 | // paid for having the loop body split at 64-byte boundary. ld8 is | ||
473 | // scheduled for L1 cache as the data is more than likely there. | ||
474 | // Indeed, bn_mul_words has put it there a moment ago:-) | ||
475 | .L_bn_mul_add_words_ctop: | 433 | .L_bn_mul_add_words_ctop: |
476 | { .mfi; (p25) getf.sig r36=f52 // low | 434 | .pred.rel "mutex",p40,p42 |
477 | (p21) xmpy.lu f48=f37,f8 | 435 | { .mfi; (p23) getf.sig r36=f45 // low |
478 | (p28) cmp.ltu p54,p50=r41,r39 } | 436 | (p20) xma.lu f42=f36,f8,f50 // low |
479 | { .mfi; (p16) ldf8 f32=[r15],8 | 437 | (p40) add r39=r39,r35 } // (p27) |
480 | (p21) xmpy.hu f40=f37,f8 | 438 | { .mfi; (p16) ldf8 f32=[r15],8 // *(ap++) |
481 | (p28) add r45=r45,r41 };; | 439 | (p20) xma.hu f36=f36,f8,f50 // high |
482 | { .mii; (p25) getf.sig r32=f44 // high | 440 | (p42) add r39=r39,r35,1 };; // (p27) |
483 | .pred.rel "mutex",p50,p54 | 441 | { .mmi; (p24) getf.sig r32=f40 // high |
484 | (p50) add r40=r38,r35 // (p27) | 442 | (p16) ldf8 f46=[r16],8 // *(rp1++) |
485 | (p54) add r40=r38,r35,1 } // (p27) | 443 | (p40) cmp.ltu p41,p39=r39,r35 } // (p27) |
486 | { .mfb; (p28) cmp.ltu.unc p60,p0=r45,r41 | 444 | { .mib; (p26) st8 [r14]=r39,8 // *(rp2++) |
487 | (p0) nop.f 0x0 | 445 | (p42) cmp.leu p41,p39=r39,r35 // (p27) |
488 | (p0) nop.b 0x0 } | ||
489 | { .mii; (p27) ld8 r44=[r18],8 | ||
490 | (p62) cmp.eq.or p61,p0=-1,r46 | ||
491 | (p62) add r46=1,r46 } | ||
492 | { .mfb; (p30) st8 [r14]=r47,8 | ||
493 | (p0) nop.f 0x0 | ||
494 | br.ctop.sptk .L_bn_mul_add_words_ctop};; | 446 | br.ctop.sptk .L_bn_mul_add_words_ctop};; |
495 | .L_bn_mul_add_words_cend: | 447 | .L_bn_mul_add_words_cend: |
496 | 448 | ||
497 | { .mii; nop.m 0x0 | 449 | { .mmi; .pred.rel "mutex",p40,p42 |
498 | .pred.rel "mutex",p53,p57 | 450 | (p40) add r8=r35,r0 |
499 | (p53) add r8=r38,r0 | 451 | (p42) add r8=r35,r0,1 |
500 | (p57) add r8=r38,r0,1 } | 452 | mov pr=r9,0x1ffff } |
501 | { .mfb; nop.m 0x0 | 453 | { .mib; rum 1<<5 // clear um.mfh |
502 | nop.f 0x0 | 454 | mov ar.lc=r3 |
503 | nop.b 0x0 };; | ||
504 | { .mii; | ||
505 | (p63) add r8=1,r8 | ||
506 | mov pr=r9,0x1ffff | ||
507 | mov ar.lc=r3 } | ||
508 | { .mfb; rum 1<<5 // clear um.mfh | ||
509 | nop.f 0x0 | ||
510 | br.ret.sptk.many b0 };; | 455 | br.ret.sptk.many b0 };; |
511 | .endp bn_mul_add_words# | 456 | .endp bn_mul_add_words# |
512 | #endif | 457 | #endif |
@@ -527,7 +472,8 @@ bn_sqr_words: | |||
527 | sxt4 r34=r34 };; | 472 | sxt4 r34=r34 };; |
528 | { .mii; cmp.le p6,p0=r34,r0 | 473 | { .mii; cmp.le p6,p0=r34,r0 |
529 | mov r8=r0 } // return value | 474 | mov r8=r0 } // return value |
530 | { .mfb; nop.f 0x0 | 475 | { .mfb; ADDP r32=0,r32 |
476 | nop.f 0x0 | ||
531 | (p6) br.ret.spnt.many b0 };; | 477 | (p6) br.ret.spnt.many b0 };; |
532 | 478 | ||
533 | .save ar.lc,r3 | 479 | .save ar.lc,r3 |
@@ -536,11 +482,7 @@ bn_sqr_words: | |||
536 | mov r9=pr };; | 482 | mov r9=pr };; |
537 | 483 | ||
538 | .body | 484 | .body |
539 | #if defined(_HPUX_SOURCE) && defined(_ILP32) | 485 | { .mib; ADDP r33=0,r33 |
540 | { .mii; addp4 r32=0,r32 | ||
541 | addp4 r33=0,r33 };; | ||
542 | #endif | ||
543 | { .mib; | ||
544 | mov pr.rot=1<<16 | 486 | mov pr.rot=1<<16 |
545 | brp.loop.imp .L_bn_sqr_words_ctop,.L_bn_sqr_words_cend-16 | 487 | brp.loop.imp .L_bn_sqr_words_ctop,.L_bn_sqr_words_cend-16 |
546 | } | 488 | } |
@@ -605,7 +547,7 @@ bn_sqr_comba8: | |||
605 | .prologue | 547 | .prologue |
606 | .fframe 0 | 548 | .fframe 0 |
607 | .save ar.pfs,r2 | 549 | .save ar.pfs,r2 |
608 | #if defined(_HPUX_SOURCE) && defined(_ILP32) | 550 | #if defined(_HPUX_SOURCE) && !defined(_LP64) |
609 | { .mii; alloc r2=ar.pfs,2,1,0,0 | 551 | { .mii; alloc r2=ar.pfs,2,1,0,0 |
610 | addp4 r33=0,r33 | 552 | addp4 r33=0,r33 |
611 | addp4 r32=0,r32 };; | 553 | addp4 r32=0,r32 };; |
@@ -631,6 +573,10 @@ bn_sqr_comba8: | |||
631 | // clause in Itanium µ-architecture manual? Comments are welcomed and | 573 | // clause in Itanium µ-architecture manual? Comments are welcomed and |
632 | // highly appreciated. | 574 | // highly appreciated. |
633 | // | 575 | // |
576 | // On Itanium 2 it takes ~190 ticks. This is because of stalls on | ||
577 | // result from getf.sig. I do nothing about it at this point for | ||
578 | // reasons depicted below. | ||
579 | // | ||
634 | // However! It should be noted that even 160 ticks is darn good result | 580 | // However! It should be noted that even 160 ticks is darn good result |
635 | // as it's over 10 (yes, ten, spelled as t-e-n) times faster than the | 581 | // as it's over 10 (yes, ten, spelled as t-e-n) times faster than the |
636 | // C version (compiled with gcc with inline assembler). I really | 582 | // C version (compiled with gcc with inline assembler). I really |
@@ -673,7 +619,7 @@ bn_mul_comba8: | |||
673 | .prologue | 619 | .prologue |
674 | .fframe 0 | 620 | .fframe 0 |
675 | .save ar.pfs,r2 | 621 | .save ar.pfs,r2 |
676 | #if defined(_HPUX_SOURCE) && defined(_ILP32) | 622 | #if defined(_HPUX_SOURCE) && !defined(_LP64) |
677 | { .mii; alloc r2=ar.pfs,3,0,0,0 | 623 | { .mii; alloc r2=ar.pfs,3,0,0,0 |
678 | addp4 r33=0,r33 | 624 | addp4 r33=0,r33 |
679 | addp4 r34=0,r34 };; | 625 | addp4 r34=0,r34 };; |
@@ -1231,7 +1177,7 @@ bn_sqr_comba4: | |||
1231 | .prologue | 1177 | .prologue |
1232 | .fframe 0 | 1178 | .fframe 0 |
1233 | .save ar.pfs,r2 | 1179 | .save ar.pfs,r2 |
1234 | #if defined(_HPUX_SOURCE) && defined(_ILP32) | 1180 | #if defined(_HPUX_SOURCE) && !defined(_LP64) |
1235 | { .mii; alloc r2=ar.pfs,2,1,0,0 | 1181 | { .mii; alloc r2=ar.pfs,2,1,0,0 |
1236 | addp4 r32=0,r32 | 1182 | addp4 r32=0,r32 |
1237 | addp4 r33=0,r33 };; | 1183 | addp4 r33=0,r33 };; |
@@ -1264,7 +1210,7 @@ bn_mul_comba4: | |||
1264 | .prologue | 1210 | .prologue |
1265 | .fframe 0 | 1211 | .fframe 0 |
1266 | .save ar.pfs,r2 | 1212 | .save ar.pfs,r2 |
1267 | #if defined(_HPUX_SOURCE) && defined(_ILP32) | 1213 | #if defined(_HPUX_SOURCE) && !defined(_LP64) |
1268 | { .mii; alloc r2=ar.pfs,3,0,0,0 | 1214 | { .mii; alloc r2=ar.pfs,3,0,0,0 |
1269 | addp4 r33=0,r33 | 1215 | addp4 r33=0,r33 |
1270 | addp4 r34=0,r34 };; | 1216 | addp4 r34=0,r34 };; |
@@ -1448,8 +1394,8 @@ bn_mul_comba4: | |||
1448 | #define I r21 | 1394 | #define I r21 |
1449 | 1395 | ||
1450 | #if 0 | 1396 | #if 0 |
1451 | // Some preprocessors (most notably HP-UX) apper to be allergic to | 1397 | // Some preprocessors (most notably HP-UX) appear to be allergic to |
1452 | // macros enclosed to parenthesis as these three will be. | 1398 | // macros enclosed to parenthesis [as these three were]. |
1453 | #define cont p16 | 1399 | #define cont p16 |
1454 | #define break p0 // p20 | 1400 | #define break p0 // p20 |
1455 | #define equ p24 | 1401 | #define equ p24 |
@@ -1581,9 +1527,18 @@ bn_div_words: | |||
1581 | // output: f8 = (int)(a/b) | 1527 | // output: f8 = (int)(a/b) |
1582 | // clobbered: f8,f9,f10,f11,pred | 1528 | // clobbered: f8,f9,f10,f11,pred |
1583 | pred=p15 | 1529 | pred=p15 |
1584 | // This procedure is essentially Intel code and therefore is | 1530 | // One can argue that this snippet is copyrighted to Intel |
1585 | // copyrighted to Intel Corporation (I suppose...). It's sligtly | 1531 | // Corporation, as it's essentially identical to one of those |
1586 | // modified for specific needs. | 1532 | // found in "Divide, Square Root and Remainder" section at |
1533 | // http://www.intel.com/software/products/opensource/libraries/num.htm. | ||
1534 | // Yes, I admit that the referred code was used as template, | ||
1535 | // but after I realized that there hardly is any other instruction | ||
1536 | // sequence which would perform this operation. I mean I figure that | ||
1537 | // any independent attempt to implement high-performance division | ||
1538 | // will result in code virtually identical to the Intel code. It | ||
1539 | // should be noted though that below division kernel is 1 cycle | ||
1540 | // faster than Intel one (note commented splits:-), not to mention | ||
1541 | // original prologue (rather lack of one) and epilogue. | ||
1587 | .align 32 | 1542 | .align 32 |
1588 | .skip 16 | 1543 | .skip 16 |
1589 | .L_udiv64_32_b6: | 1544 | .L_udiv64_32_b6: |
diff --git a/src/lib/libcrypto/bn/bn_mont.c b/src/lib/libcrypto/bn/bn_mont.c index c9ebdbaabe..b79b1b60da 100644 --- a/src/lib/libcrypto/bn/bn_mont.c +++ b/src/lib/libcrypto/bn/bn_mont.c | |||
@@ -273,7 +273,7 @@ int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx) | |||
273 | 273 | ||
274 | BN_init(&Ri); | 274 | BN_init(&Ri); |
275 | R= &(mont->RR); /* grab RR as a temp */ | 275 | R= &(mont->RR); /* grab RR as a temp */ |
276 | BN_copy(&(mont->N),mod); /* Set N */ | 276 | if (!BN_copy(&(mont->N),mod)) goto err; /* Set N */ |
277 | mont->N.neg = 0; | 277 | mont->N.neg = 0; |
278 | 278 | ||
279 | #ifdef MONT_WORD | 279 | #ifdef MONT_WORD |
diff --git a/src/lib/libcrypto/bn/bntest.c b/src/lib/libcrypto/bn/bntest.c index 8ef733013d..79d813d85e 100644 --- a/src/lib/libcrypto/bn/bntest.c +++ b/src/lib/libcrypto/bn/bntest.c | |||
@@ -232,7 +232,7 @@ int main(int argc, char *argv[]) | |||
232 | EXIT(0); | 232 | EXIT(0); |
233 | err: | 233 | err: |
234 | BIO_puts(out,"1\n"); /* make sure the Perl script fed by bc notices | 234 | BIO_puts(out,"1\n"); /* make sure the Perl script fed by bc notices |
235 | * the failure, see test_bn in test/Makefile.ssl*/ | 235 | * the failure, see test_bn in test/Makefile */ |
236 | BIO_flush(out); | 236 | BIO_flush(out); |
237 | ERR_load_crypto_strings(); | 237 | ERR_load_crypto_strings(); |
238 | ERR_print_errors_fp(stderr); | 238 | ERR_print_errors_fp(stderr); |
diff --git a/src/lib/libcrypto/cast/c_skey.c b/src/lib/libcrypto/cast/c_skey.c index 76e40005c9..dc4791a8cf 100644 --- a/src/lib/libcrypto/cast/c_skey.c +++ b/src/lib/libcrypto/cast/c_skey.c | |||
@@ -56,7 +56,9 @@ | |||
56 | * [including the GNU Public Licence.] | 56 | * [including the GNU Public Licence.] |
57 | */ | 57 | */ |
58 | 58 | ||
59 | #include <openssl/crypto.h> | ||
59 | #include <openssl/cast.h> | 60 | #include <openssl/cast.h> |
61 | |||
60 | #include "cast_lcl.h" | 62 | #include "cast_lcl.h" |
61 | #include "cast_s.h" | 63 | #include "cast_s.h" |
62 | 64 | ||
@@ -72,7 +74,7 @@ | |||
72 | #define S6 CAST_S_table6 | 74 | #define S6 CAST_S_table6 |
73 | #define S7 CAST_S_table7 | 75 | #define S7 CAST_S_table7 |
74 | 76 | ||
75 | void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data) | 77 | FIPS_NON_FIPS_VCIPHER_Init(CAST) |
76 | { | 78 | { |
77 | CAST_LONG x[16]; | 79 | CAST_LONG x[16]; |
78 | CAST_LONG z[16]; | 80 | CAST_LONG z[16]; |
diff --git a/src/lib/libcrypto/cast/cast.h b/src/lib/libcrypto/cast/cast.h index b28e4e4f3b..9e300178d9 100644 --- a/src/lib/libcrypto/cast/cast.h +++ b/src/lib/libcrypto/cast/cast.h | |||
@@ -81,7 +81,10 @@ typedef struct cast_key_st | |||
81 | int short_key; /* Use reduced rounds for short key */ | 81 | int short_key; /* Use reduced rounds for short key */ |
82 | } CAST_KEY; | 82 | } CAST_KEY; |
83 | 83 | ||
84 | 84 | ||
85 | #ifdef OPENSSL_FIPS | ||
86 | void private_CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); | ||
87 | #endif | ||
85 | void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); | 88 | void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); |
86 | void CAST_ecb_encrypt(const unsigned char *in,unsigned char *out,CAST_KEY *key, | 89 | void CAST_ecb_encrypt(const unsigned char *in,unsigned char *out,CAST_KEY *key, |
87 | int enc); | 90 | int enc); |
diff --git a/src/lib/libcrypto/comp/c_zlib.c b/src/lib/libcrypto/comp/c_zlib.c index 8c0876151a..1bd2850d15 100644 --- a/src/lib/libcrypto/comp/c_zlib.c +++ b/src/lib/libcrypto/comp/c_zlib.c | |||
@@ -3,6 +3,7 @@ | |||
3 | #include <string.h> | 3 | #include <string.h> |
4 | #include <openssl/objects.h> | 4 | #include <openssl/objects.h> |
5 | #include <openssl/comp.h> | 5 | #include <openssl/comp.h> |
6 | #include <openssl/err.h> | ||
6 | 7 | ||
7 | COMP_METHOD *COMP_zlib(void ); | 8 | COMP_METHOD *COMP_zlib(void ); |
8 | 9 | ||
@@ -189,7 +190,17 @@ COMP_METHOD *COMP_zlib(void) | |||
189 | if (!zlib_loaded) | 190 | if (!zlib_loaded) |
190 | { | 191 | { |
191 | #if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32) | 192 | #if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32) |
192 | zlib_dso = DSO_load(NULL, "ZLIB", NULL, 0); | 193 | zlib_dso = DSO_load(NULL, "ZLIB1", NULL, 0); |
194 | if (!zlib_dso) | ||
195 | { | ||
196 | zlib_dso = DSO_load(NULL, "ZLIB", NULL, 0); | ||
197 | if (zlib_dso) | ||
198 | { | ||
199 | /* Clear the errors from the first failed | ||
200 | DSO_load() */ | ||
201 | ERR_clear_error(); | ||
202 | } | ||
203 | } | ||
193 | #else | 204 | #else |
194 | zlib_dso = DSO_load(NULL, "z", NULL, 0); | 205 | zlib_dso = DSO_load(NULL, "z", NULL, 0); |
195 | #endif | 206 | #endif |
diff --git a/src/lib/libcrypto/conf/conf_def.c b/src/lib/libcrypto/conf/conf_def.c index 2e9f52f1fd..b5a876ae68 100644 --- a/src/lib/libcrypto/conf/conf_def.c +++ b/src/lib/libcrypto/conf/conf_def.c | |||
@@ -632,6 +632,11 @@ static int str_copy(CONF *conf, char *section, char **pto, char *from) | |||
632 | BUF_MEM_grow_clean(buf,(strlen(p)+len-(e-from))); | 632 | BUF_MEM_grow_clean(buf,(strlen(p)+len-(e-from))); |
633 | while (*p) | 633 | while (*p) |
634 | buf->data[to++]= *(p++); | 634 | buf->data[to++]= *(p++); |
635 | |||
636 | /* Since we change the pointer 'from', we also have | ||
637 | to change the perceived length of the string it | ||
638 | points at. /RL */ | ||
639 | len -= e-from; | ||
635 | from=e; | 640 | from=e; |
636 | } | 641 | } |
637 | else | 642 | else |
diff --git a/src/lib/libcrypto/cryptlib.c b/src/lib/libcrypto/cryptlib.c index 2924def2bb..fef0afb29f 100644 --- a/src/lib/libcrypto/cryptlib.c +++ b/src/lib/libcrypto/cryptlib.c | |||
@@ -105,7 +105,9 @@ static const char* lock_names[CRYPTO_NUM_LOCKS] = | |||
105 | "engine", | 105 | "engine", |
106 | "ui", | 106 | "ui", |
107 | "hwcrhk", /* This is a HACK which will disappear in 0.9.8 */ | 107 | "hwcrhk", /* This is a HACK which will disappear in 0.9.8 */ |
108 | #if CRYPTO_NUM_LOCKS != 33 | 108 | "fips", |
109 | "fips2", | ||
110 | #if CRYPTO_NUM_LOCKS != 35 | ||
109 | # error "Inconsistency between crypto.h and cryptlib.c" | 111 | # error "Inconsistency between crypto.h and cryptlib.c" |
110 | #endif | 112 | #endif |
111 | }; | 113 | }; |
@@ -478,13 +480,12 @@ const char *CRYPTO_get_lock_name(int type) | |||
478 | return(sk_value(app_locks,type-CRYPTO_NUM_LOCKS)); | 480 | return(sk_value(app_locks,type-CRYPTO_NUM_LOCKS)); |
479 | } | 481 | } |
480 | 482 | ||
481 | #ifdef _DLL | 483 | #if defined(_WIN32) && defined(_WINDLL) |
482 | #ifdef OPENSSL_SYS_WIN32 | ||
483 | 484 | ||
484 | /* All we really need to do is remove the 'error' state when a thread | 485 | /* All we really need to do is remove the 'error' state when a thread |
485 | * detaches */ | 486 | * detaches */ |
486 | 487 | ||
487 | BOOL WINAPI DLLEntryPoint(HINSTANCE hinstDLL, DWORD fdwReason, | 488 | BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, |
488 | LPVOID lpvReserved) | 489 | LPVOID lpvReserved) |
489 | { | 490 | { |
490 | switch(fdwReason) | 491 | switch(fdwReason) |
@@ -503,8 +504,6 @@ BOOL WINAPI DLLEntryPoint(HINSTANCE hinstDLL, DWORD fdwReason, | |||
503 | } | 504 | } |
504 | #endif | 505 | #endif |
505 | 506 | ||
506 | #endif | ||
507 | |||
508 | void OpenSSLDie(const char *file,int line,const char *assertion) | 507 | void OpenSSLDie(const char *file,int line,const char *assertion) |
509 | { | 508 | { |
510 | fprintf(stderr, | 509 | fprintf(stderr, |
@@ -512,3 +511,122 @@ void OpenSSLDie(const char *file,int line,const char *assertion) | |||
512 | file,line,assertion); | 511 | file,line,assertion); |
513 | abort(); | 512 | abort(); |
514 | } | 513 | } |
514 | |||
515 | #ifdef OPENSSL_FIPS | ||
516 | static int fips_started = 0; | ||
517 | static int fips_mode = 0; | ||
518 | static void *fips_rand_check = 0; | ||
519 | static unsigned long fips_thread = 0; | ||
520 | |||
521 | void fips_set_started(void) | ||
522 | { | ||
523 | fips_started = 1; | ||
524 | } | ||
525 | |||
526 | int fips_is_started(void) | ||
527 | { | ||
528 | return fips_started; | ||
529 | } | ||
530 | |||
531 | int fips_is_owning_thread(void) | ||
532 | { | ||
533 | int ret = 0; | ||
534 | |||
535 | if (fips_is_started()) | ||
536 | { | ||
537 | CRYPTO_r_lock(CRYPTO_LOCK_FIPS2); | ||
538 | if (fips_thread != 0 && fips_thread == CRYPTO_thread_id()) | ||
539 | ret = 1; | ||
540 | CRYPTO_r_unlock(CRYPTO_LOCK_FIPS2); | ||
541 | } | ||
542 | return ret; | ||
543 | } | ||
544 | |||
545 | int fips_set_owning_thread(void) | ||
546 | { | ||
547 | int ret = 0; | ||
548 | |||
549 | if (fips_is_started()) | ||
550 | { | ||
551 | CRYPTO_w_lock(CRYPTO_LOCK_FIPS2); | ||
552 | if (fips_thread == 0) | ||
553 | { | ||
554 | fips_thread = CRYPTO_thread_id(); | ||
555 | ret = 1; | ||
556 | } | ||
557 | CRYPTO_w_unlock(CRYPTO_LOCK_FIPS2); | ||
558 | } | ||
559 | return ret; | ||
560 | } | ||
561 | |||
562 | int fips_clear_owning_thread(void) | ||
563 | { | ||
564 | int ret = 0; | ||
565 | |||
566 | if (fips_is_started()) | ||
567 | { | ||
568 | CRYPTO_w_lock(CRYPTO_LOCK_FIPS2); | ||
569 | if (fips_thread == CRYPTO_thread_id()) | ||
570 | { | ||
571 | fips_thread = 0; | ||
572 | ret = 1; | ||
573 | } | ||
574 | CRYPTO_w_unlock(CRYPTO_LOCK_FIPS2); | ||
575 | } | ||
576 | return ret; | ||
577 | } | ||
578 | |||
579 | void fips_set_mode(int onoff) | ||
580 | { | ||
581 | int owning_thread = fips_is_owning_thread(); | ||
582 | |||
583 | if (fips_is_started()) | ||
584 | { | ||
585 | if (!owning_thread) CRYPTO_w_lock(CRYPTO_LOCK_FIPS); | ||
586 | fips_mode = onoff; | ||
587 | if (!owning_thread) CRYPTO_w_unlock(CRYPTO_LOCK_FIPS); | ||
588 | } | ||
589 | } | ||
590 | |||
591 | void fips_set_rand_check(void *rand_check) | ||
592 | { | ||
593 | int owning_thread = fips_is_owning_thread(); | ||
594 | |||
595 | if (fips_is_started()) | ||
596 | { | ||
597 | if (!owning_thread) CRYPTO_w_lock(CRYPTO_LOCK_FIPS); | ||
598 | fips_rand_check = rand_check; | ||
599 | if (!owning_thread) CRYPTO_w_unlock(CRYPTO_LOCK_FIPS); | ||
600 | } | ||
601 | } | ||
602 | |||
603 | int FIPS_mode(void) | ||
604 | { | ||
605 | int ret = 0; | ||
606 | int owning_thread = fips_is_owning_thread(); | ||
607 | |||
608 | if (fips_is_started()) | ||
609 | { | ||
610 | if (!owning_thread) CRYPTO_r_lock(CRYPTO_LOCK_FIPS); | ||
611 | ret = fips_mode; | ||
612 | if (!owning_thread) CRYPTO_r_unlock(CRYPTO_LOCK_FIPS); | ||
613 | } | ||
614 | return ret; | ||
615 | } | ||
616 | |||
617 | void *FIPS_rand_check(void) | ||
618 | { | ||
619 | void *ret = 0; | ||
620 | int owning_thread = fips_is_owning_thread(); | ||
621 | |||
622 | if (fips_is_started()) | ||
623 | { | ||
624 | if (!owning_thread) CRYPTO_r_lock(CRYPTO_LOCK_FIPS); | ||
625 | ret = fips_rand_check; | ||
626 | if (!owning_thread) CRYPTO_r_unlock(CRYPTO_LOCK_FIPS); | ||
627 | } | ||
628 | return ret; | ||
629 | } | ||
630 | |||
631 | #endif /* OPENSSL_FIPS */ | ||
632 | |||
diff --git a/src/lib/libcrypto/crypto-lib.com b/src/lib/libcrypto/crypto-lib.com index 39e78c69e5..c044ce0099 100644 --- a/src/lib/libcrypto/crypto-lib.com +++ b/src/lib/libcrypto/crypto-lib.com | |||
@@ -158,7 +158,7 @@ $! | |||
158 | $ APPS_DES = "DES/DES,CBC3_ENC" | 158 | $ APPS_DES = "DES/DES,CBC3_ENC" |
159 | $ APPS_PKCS7 = "ENC/ENC;DEC/DEC;SIGN/SIGN;VERIFY/VERIFY,EXAMPLE" | 159 | $ APPS_PKCS7 = "ENC/ENC;DEC/DEC;SIGN/SIGN;VERIFY/VERIFY,EXAMPLE" |
160 | $ | 160 | $ |
161 | $ LIB_ = "cryptlib,mem,mem_clr,mem_dbg,cversion,ex_data,tmdiff,cpt_err,ebcdic,uid,o_time" | 161 | $ LIB_ = "cryptlib,mem,mem_clr,mem_dbg,cversion,ex_data,tmdiff,cpt_err,ebcdic,uid,o_time,o_str" |
162 | $ LIB_MD2 = "md2_dgst,md2_one" | 162 | $ LIB_MD2 = "md2_dgst,md2_one" |
163 | $ LIB_MD4 = "md4_dgst,md4_one" | 163 | $ LIB_MD4 = "md4_dgst,md4_one" |
164 | $ LIB_MD5 = "md5_dgst,md5_one" | 164 | $ LIB_MD5 = "md5_dgst,md5_one" |
@@ -247,7 +247,7 @@ $ LIB_X509 = "x509_def,x509_d2,x509_r2x,x509_cmp,"+ - | |||
247 | $ LIB_X509V3 = "v3_bcons,v3_bitst,v3_conf,v3_extku,v3_ia5,v3_lib,"+ - | 247 | $ LIB_X509V3 = "v3_bcons,v3_bitst,v3_conf,v3_extku,v3_ia5,v3_lib,"+ - |
248 | "v3_prn,v3_utl,v3err,v3_genn,v3_alt,v3_skey,v3_akey,v3_pku,"+ - | 248 | "v3_prn,v3_utl,v3err,v3_genn,v3_alt,v3_skey,v3_akey,v3_pku,"+ - |
249 | "v3_int,v3_enum,v3_sxnet,v3_cpols,v3_crld,v3_purp,v3_info,"+ - | 249 | "v3_int,v3_enum,v3_sxnet,v3_cpols,v3_crld,v3_purp,v3_info,"+ - |
250 | "v3_ocsp,v3_akeya" | 250 | "v3_ocsp,v3_akeya,v3_pcia,v3_pci" |
251 | $ LIB_CONF = "conf_err,conf_lib,conf_api,conf_def,conf_mod,conf_mall,conf_sap" | 251 | $ LIB_CONF = "conf_err,conf_lib,conf_api,conf_def,conf_mod,conf_mall,conf_sap" |
252 | $ LIB_TXT_DB = "txt_db" | 252 | $ LIB_TXT_DB = "txt_db" |
253 | $ LIB_PKCS7 = "pk7_asn1,pk7_lib,pkcs7err,pk7_doit,pk7_smime,pk7_attr,"+ - | 253 | $ LIB_PKCS7 = "pk7_asn1,pk7_lib,pkcs7err,pk7_doit,pk7_smime,pk7_attr,"+ - |
@@ -752,8 +752,8 @@ $ WRITE SYS$OUTPUT "" | |||
752 | $ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:" | 752 | $ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:" |
753 | $ WRITE SYS$OUTPUT "" | 753 | $ WRITE SYS$OUTPUT "" |
754 | $ WRITE SYS$OUTPUT " ALL : Just Build Everything." | 754 | $ WRITE SYS$OUTPUT " ALL : Just Build Everything." |
755 | $ WRITE SYS$OUTPUT " LIBRARY : To Compile Just The [.xxx.EXE.SSL]LIBCRYPTO.OLB Library." | 755 | $ WRITE SYS$OUTPUT " LIBRARY : To Compile Just The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library." |
756 | $ WRITE SYS$OUTPUT " APPS : To Compile Just The [.xxx.EXE.SSL]*.EXE Programs." | 756 | $ WRITE SYS$OUTPUT " APPS : To Compile Just The [.xxx.EXE.CRYPTO]*.EXE Programs." |
757 | $ WRITE SYS$OUTPUT "" | 757 | $ WRITE SYS$OUTPUT "" |
758 | $ WRITE SYS$OUTPUT " Where 'xxx' Stands For:" | 758 | $ WRITE SYS$OUTPUT " Where 'xxx' Stands For:" |
759 | $ WRITE SYS$OUTPUT "" | 759 | $ WRITE SYS$OUTPUT "" |
diff --git a/src/lib/libcrypto/crypto.h b/src/lib/libcrypto/crypto.h index 273bc5e3f8..4d1dfac7f1 100644 --- a/src/lib/libcrypto/crypto.h +++ b/src/lib/libcrypto/crypto.h | |||
@@ -128,7 +128,9 @@ extern "C" { | |||
128 | #define CRYPTO_LOCK_ENGINE 30 | 128 | #define CRYPTO_LOCK_ENGINE 30 |
129 | #define CRYPTO_LOCK_UI 31 | 129 | #define CRYPTO_LOCK_UI 31 |
130 | #define CRYPTO_LOCK_HWCRHK 32 /* This is a HACK which will disappear in 0.9.8 */ | 130 | #define CRYPTO_LOCK_HWCRHK 32 /* This is a HACK which will disappear in 0.9.8 */ |
131 | #define CRYPTO_NUM_LOCKS 33 | 131 | #define CRYPTO_LOCK_FIPS 33 |
132 | #define CRYPTO_LOCK_FIPS2 34 | ||
133 | #define CRYPTO_NUM_LOCKS 35 | ||
132 | 134 | ||
133 | #define CRYPTO_LOCK 1 | 135 | #define CRYPTO_LOCK 1 |
134 | #define CRYPTO_UNLOCK 2 | 136 | #define CRYPTO_UNLOCK 2 |
@@ -434,6 +436,63 @@ void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb); | |||
434 | void OpenSSLDie(const char *file,int line,const char *assertion); | 436 | void OpenSSLDie(const char *file,int line,const char *assertion); |
435 | #define OPENSSL_assert(e) ((e) ? (void)0 : OpenSSLDie(__FILE__, __LINE__, #e)) | 437 | #define OPENSSL_assert(e) ((e) ? (void)0 : OpenSSLDie(__FILE__, __LINE__, #e)) |
436 | 438 | ||
439 | #ifdef OPENSSL_FIPS | ||
440 | int FIPS_mode(void); | ||
441 | void *FIPS_rand_check(void); | ||
442 | |||
443 | #define FIPS_ERROR_IGNORED(alg) OpenSSLDie(__FILE__, __LINE__, \ | ||
444 | alg " previous FIPS forbidden algorithm error ignored"); | ||
445 | |||
446 | #define FIPS_BAD_ABORT(alg) OpenSSLDie(__FILE__, __LINE__, \ | ||
447 | #alg " Algorithm forbidden in FIPS mode"); | ||
448 | |||
449 | #ifdef OPENSSL_FIPS_STRICT | ||
450 | #define FIPS_BAD_ALGORITHM(alg) FIPS_BAD_ABORT(alg) | ||
451 | #else | ||
452 | #define FIPS_BAD_ALGORITHM(alg) \ | ||
453 | { \ | ||
454 | FIPSerr(FIPS_F_HASH_FINAL,FIPS_R_NON_FIPS_METHOD); \ | ||
455 | ERR_add_error_data(2, "Algorithm=", #alg); \ | ||
456 | return 0; \ | ||
457 | } | ||
458 | #endif | ||
459 | |||
460 | /* Low level digest API blocking macro */ | ||
461 | |||
462 | #define FIPS_NON_FIPS_MD_Init(alg) \ | ||
463 | int alg##_Init(alg##_CTX *c) \ | ||
464 | { \ | ||
465 | if (FIPS_mode()) \ | ||
466 | FIPS_BAD_ALGORITHM(alg) \ | ||
467 | return private_##alg##_Init(c); \ | ||
468 | } \ | ||
469 | int private_##alg##_Init(alg##_CTX *c) | ||
470 | |||
471 | /* For ciphers the API often varies from cipher to cipher and each needs to | ||
472 | * be treated as a special case. Variable key length ciphers (Blowfish, RC4, | ||
473 | * CAST) however are very similar and can use a blocking macro. | ||
474 | */ | ||
475 | |||
476 | #define FIPS_NON_FIPS_VCIPHER_Init(alg) \ | ||
477 | void alg##_set_key(alg##_KEY *key, int len, const unsigned char *data) \ | ||
478 | { \ | ||
479 | if (FIPS_mode()) \ | ||
480 | FIPS_BAD_ABORT(alg) \ | ||
481 | private_##alg##_set_key(key, len, data); \ | ||
482 | } \ | ||
483 | void private_##alg##_set_key(alg##_KEY *key, int len, \ | ||
484 | const unsigned char *data) | ||
485 | |||
486 | #else | ||
487 | |||
488 | #define FIPS_NON_FIPS_VCIPHER_Init(alg) \ | ||
489 | void alg##_set_key(alg##_KEY *key, int len, const unsigned char *data) | ||
490 | |||
491 | #define FIPS_NON_FIPS_MD_Init(alg) \ | ||
492 | int alg##_Init(alg##_CTX *c) | ||
493 | |||
494 | #endif /* def OPENSSL_FIPS */ | ||
495 | |||
437 | /* BEGIN ERROR CODES */ | 496 | /* BEGIN ERROR CODES */ |
438 | /* The following lines are auto generated by the script mkerr.pl. Any changes | 497 | /* The following lines are auto generated by the script mkerr.pl. Any changes |
439 | * made after this point may be overwritten when the script is next run. | 498 | * made after this point may be overwritten when the script is next run. |
diff --git a/src/lib/libcrypto/des/cfb64ede.c b/src/lib/libcrypto/des/cfb64ede.c index 60c1aa08db..f3c6018528 100644 --- a/src/lib/libcrypto/des/cfb64ede.c +++ b/src/lib/libcrypto/des/cfb64ede.c | |||
@@ -57,6 +57,7 @@ | |||
57 | */ | 57 | */ |
58 | 58 | ||
59 | #include "des_locl.h" | 59 | #include "des_locl.h" |
60 | #include "e_os.h" | ||
60 | 61 | ||
61 | /* The input and output encrypted as though 64bit cfb mode is being | 62 | /* The input and output encrypted as though 64bit cfb mode is being |
62 | * used. The extra state information to record how much of the | 63 | * used. The extra state information to record how much of the |
@@ -140,3 +141,114 @@ void DES_ede2_cfb64_encrypt(unsigned char *in, unsigned char *out, long length, | |||
140 | DES_ede3_cfb64_encrypt(in,out,length,ks1,ks2,ks1,ivec,num,enc); | 141 | DES_ede3_cfb64_encrypt(in,out,length,ks1,ks2,ks1,ivec,num,enc); |
141 | } | 142 | } |
142 | #endif | 143 | #endif |
144 | |||
145 | /* This is compatible with the single key CFB-r for DES, even thought that's | ||
146 | * not what EVP needs. | ||
147 | */ | ||
148 | |||
149 | void DES_ede3_cfb_encrypt(const unsigned char *in,unsigned char *out, | ||
150 | int numbits,long length,DES_key_schedule *ks1, | ||
151 | DES_key_schedule *ks2,DES_key_schedule *ks3, | ||
152 | DES_cblock *ivec,int enc) | ||
153 | { | ||
154 | register DES_LONG d0,d1,v0,v1; | ||
155 | register long l=length; | ||
156 | register int num=numbits,n=(numbits+7)/8,i; | ||
157 | DES_LONG ti[2]; | ||
158 | unsigned char *iv; | ||
159 | unsigned char ovec[16]; | ||
160 | |||
161 | if (num > 64) return; | ||
162 | iv = &(*ivec)[0]; | ||
163 | c2l(iv,v0); | ||
164 | c2l(iv,v1); | ||
165 | if (enc) | ||
166 | { | ||
167 | while (l >= n) | ||
168 | { | ||
169 | l-=n; | ||
170 | ti[0]=v0; | ||
171 | ti[1]=v1; | ||
172 | DES_encrypt3(ti,ks1,ks2,ks3); | ||
173 | c2ln(in,d0,d1,n); | ||
174 | in+=n; | ||
175 | d0^=ti[0]; | ||
176 | d1^=ti[1]; | ||
177 | l2cn(d0,d1,out,n); | ||
178 | out+=n; | ||
179 | /* 30-08-94 - eay - changed because l>>32 and | ||
180 | * l<<32 are bad under gcc :-( */ | ||
181 | if (num == 32) | ||
182 | { v0=v1; v1=d0; } | ||
183 | else if (num == 64) | ||
184 | { v0=d0; v1=d1; } | ||
185 | else | ||
186 | { | ||
187 | iv=&ovec[0]; | ||
188 | l2c(v0,iv); | ||
189 | l2c(v1,iv); | ||
190 | l2c(d0,iv); | ||
191 | l2c(d1,iv); | ||
192 | /* shift ovec left most of the bits... */ | ||
193 | memmove(ovec,ovec+num/8,8+(num%8 ? 1 : 0)); | ||
194 | /* now the remaining bits */ | ||
195 | if(num%8 != 0) | ||
196 | for(i=0 ; i < 8 ; ++i) | ||
197 | { | ||
198 | ovec[i]<<=num%8; | ||
199 | ovec[i]|=ovec[i+1]>>(8-num%8); | ||
200 | } | ||
201 | iv=&ovec[0]; | ||
202 | c2l(iv,v0); | ||
203 | c2l(iv,v1); | ||
204 | } | ||
205 | } | ||
206 | } | ||
207 | else | ||
208 | { | ||
209 | while (l >= n) | ||
210 | { | ||
211 | l-=n; | ||
212 | ti[0]=v0; | ||
213 | ti[1]=v1; | ||
214 | DES_encrypt3(ti,ks1,ks2,ks3); | ||
215 | c2ln(in,d0,d1,n); | ||
216 | in+=n; | ||
217 | /* 30-08-94 - eay - changed because l>>32 and | ||
218 | * l<<32 are bad under gcc :-( */ | ||
219 | if (num == 32) | ||
220 | { v0=v1; v1=d0; } | ||
221 | else if (num == 64) | ||
222 | { v0=d0; v1=d1; } | ||
223 | else | ||
224 | { | ||
225 | iv=&ovec[0]; | ||
226 | l2c(v0,iv); | ||
227 | l2c(v1,iv); | ||
228 | l2c(d0,iv); | ||
229 | l2c(d1,iv); | ||
230 | /* shift ovec left most of the bits... */ | ||
231 | memmove(ovec,ovec+num/8,8+(num%8 ? 1 : 0)); | ||
232 | /* now the remaining bits */ | ||
233 | if(num%8 != 0) | ||
234 | for(i=0 ; i < 8 ; ++i) | ||
235 | { | ||
236 | ovec[i]<<=num%8; | ||
237 | ovec[i]|=ovec[i+1]>>(8-num%8); | ||
238 | } | ||
239 | iv=&ovec[0]; | ||
240 | c2l(iv,v0); | ||
241 | c2l(iv,v1); | ||
242 | } | ||
243 | d0^=ti[0]; | ||
244 | d1^=ti[1]; | ||
245 | l2cn(d0,d1,out,n); | ||
246 | out+=n; | ||
247 | } | ||
248 | } | ||
249 | iv = &(*ivec)[0]; | ||
250 | l2c(v0,iv); | ||
251 | l2c(v1,iv); | ||
252 | v0=v1=d0=d1=ti[0]=ti[1]=0; | ||
253 | } | ||
254 | |||
diff --git a/src/lib/libcrypto/des/des.h b/src/lib/libcrypto/des/des.h index dfe5ff64e4..81bd874edd 100644 --- a/src/lib/libcrypto/des/des.h +++ b/src/lib/libcrypto/des/des.h | |||
@@ -130,7 +130,7 @@ OPENSSL_DECLARE_GLOBAL(int,DES_rw_mode); /* defaults to DES_PCBC_MODE */ | |||
130 | #define DES_rw_mode OPENSSL_GLOBAL_REF(DES_rw_mode) | 130 | #define DES_rw_mode OPENSSL_GLOBAL_REF(DES_rw_mode) |
131 | 131 | ||
132 | const char *DES_options(void); | 132 | const char *DES_options(void); |
133 | void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, | 133 | void DES_ecb3_encrypt(const unsigned char *input, unsigned char *output, |
134 | DES_key_schedule *ks1,DES_key_schedule *ks2, | 134 | DES_key_schedule *ks1,DES_key_schedule *ks2, |
135 | DES_key_schedule *ks3, int enc); | 135 | DES_key_schedule *ks3, int enc); |
136 | DES_LONG DES_cbc_cksum(const unsigned char *input,DES_cblock *output, | 136 | DES_LONG DES_cbc_cksum(const unsigned char *input,DES_cblock *output, |
@@ -189,6 +189,10 @@ void DES_ede3_cfb64_encrypt(const unsigned char *in,unsigned char *out, | |||
189 | long length,DES_key_schedule *ks1, | 189 | long length,DES_key_schedule *ks1, |
190 | DES_key_schedule *ks2,DES_key_schedule *ks3, | 190 | DES_key_schedule *ks2,DES_key_schedule *ks3, |
191 | DES_cblock *ivec,int *num,int enc); | 191 | DES_cblock *ivec,int *num,int enc); |
192 | void DES_ede3_cfb_encrypt(const unsigned char *in,unsigned char *out, | ||
193 | int numbits,long length,DES_key_schedule *ks1, | ||
194 | DES_key_schedule *ks2,DES_key_schedule *ks3, | ||
195 | DES_cblock *ivec,int enc); | ||
192 | void DES_ede3_ofb64_encrypt(const unsigned char *in,unsigned char *out, | 196 | void DES_ede3_ofb64_encrypt(const unsigned char *in,unsigned char *out, |
193 | long length,DES_key_schedule *ks1, | 197 | long length,DES_key_schedule *ks1, |
194 | DES_key_schedule *ks2,DES_key_schedule *ks3, | 198 | DES_key_schedule *ks2,DES_key_schedule *ks3, |
diff --git a/src/lib/libcrypto/des/des_enc.c b/src/lib/libcrypto/des/des_enc.c index 4f09804c44..6a49ec4a55 100644 --- a/src/lib/libcrypto/des/des_enc.c +++ b/src/lib/libcrypto/des/des_enc.c | |||
@@ -58,7 +58,9 @@ | |||
58 | 58 | ||
59 | #include "des_locl.h" | 59 | #include "des_locl.h" |
60 | 60 | ||
61 | #ifndef OPENSSL_FIPS | ||
61 | #ifndef OPENBSD_DES_ASM | 62 | #ifndef OPENBSD_DES_ASM |
63 | |||
62 | void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc) | 64 | void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc) |
63 | { | 65 | { |
64 | register DES_LONG l,r,t,u; | 66 | register DES_LONG l,r,t,u; |
@@ -289,8 +291,12 @@ void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, | |||
289 | data[1]=r; | 291 | data[1]=r; |
290 | } | 292 | } |
291 | 293 | ||
294 | #endif /* ndef OPENSSL_FIPS */ | ||
295 | |||
292 | #ifndef DES_DEFAULT_OPTIONS | 296 | #ifndef DES_DEFAULT_OPTIONS |
293 | 297 | ||
298 | #if !defined(OPENSSL_FIPS_DES_ASM) | ||
299 | |||
294 | #undef CBC_ENC_C__DONT_UPDATE_IV | 300 | #undef CBC_ENC_C__DONT_UPDATE_IV |
295 | #include "ncbc_enc.c" /* DES_ncbc_encrypt */ | 301 | #include "ncbc_enc.c" /* DES_ncbc_encrypt */ |
296 | 302 | ||
@@ -406,4 +412,6 @@ void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output, | |||
406 | tin[0]=tin[1]=0; | 412 | tin[0]=tin[1]=0; |
407 | } | 413 | } |
408 | 414 | ||
415 | #endif /* !defined(OPENSSL_FIPS_DES_ASM) */ | ||
416 | |||
409 | #endif /* DES_DEFAULT_OPTIONS */ | 417 | #endif /* DES_DEFAULT_OPTIONS */ |
diff --git a/src/lib/libcrypto/des/des_old.c b/src/lib/libcrypto/des/des_old.c index 7e4cd7180d..88e9802aad 100644 --- a/src/lib/libcrypto/des/des_old.c +++ b/src/lib/libcrypto/des/des_old.c | |||
@@ -84,7 +84,7 @@ void _ossl_old_des_ecb3_encrypt(_ossl_old_des_cblock *input,_ossl_old_des_cblock | |||
84 | des_key_schedule ks1,des_key_schedule ks2, | 84 | des_key_schedule ks1,des_key_schedule ks2, |
85 | des_key_schedule ks3, int enc) | 85 | des_key_schedule ks3, int enc) |
86 | { | 86 | { |
87 | DES_ecb3_encrypt((const_DES_cblock *)input, output, | 87 | DES_ecb3_encrypt((const unsigned char *)input, (unsigned char *)output, |
88 | (DES_key_schedule *)ks1, (DES_key_schedule *)ks2, | 88 | (DES_key_schedule *)ks1, (DES_key_schedule *)ks2, |
89 | (DES_key_schedule *)ks3, enc); | 89 | (DES_key_schedule *)ks3, enc); |
90 | } | 90 | } |
diff --git a/src/lib/libcrypto/des/destest.c b/src/lib/libcrypto/des/destest.c index 3983ac8e5f..e3e9d77f14 100644 --- a/src/lib/libcrypto/des/destest.c +++ b/src/lib/libcrypto/des/destest.c | |||
@@ -439,8 +439,8 @@ int main(int argc, char *argv[]) | |||
439 | memcpy(in,plain_data[i],8); | 439 | memcpy(in,plain_data[i],8); |
440 | memset(out,0,8); | 440 | memset(out,0,8); |
441 | memset(outin,0,8); | 441 | memset(outin,0,8); |
442 | des_ecb2_encrypt(&in,&out,ks,ks2,DES_ENCRYPT); | 442 | des_ecb2_encrypt(in,out,ks,ks2,DES_ENCRYPT); |
443 | des_ecb2_encrypt(&out,&outin,ks,ks2,DES_DECRYPT); | 443 | des_ecb2_encrypt(out,outin,ks,ks2,DES_DECRYPT); |
444 | 444 | ||
445 | if (memcmp(out,cipher_ecb2[i],8) != 0) | 445 | if (memcmp(out,cipher_ecb2[i],8) != 0) |
446 | { | 446 | { |
diff --git a/src/lib/libcrypto/des/ecb3_enc.c b/src/lib/libcrypto/des/ecb3_enc.c index c3437bc606..fa0c9c4d4f 100644 --- a/src/lib/libcrypto/des/ecb3_enc.c +++ b/src/lib/libcrypto/des/ecb3_enc.c | |||
@@ -58,15 +58,13 @@ | |||
58 | 58 | ||
59 | #include "des_locl.h" | 59 | #include "des_locl.h" |
60 | 60 | ||
61 | void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, | 61 | void DES_ecb3_encrypt(const unsigned char *in, unsigned char *out, |
62 | DES_key_schedule *ks1, DES_key_schedule *ks2, | 62 | DES_key_schedule *ks1, DES_key_schedule *ks2, |
63 | DES_key_schedule *ks3, | 63 | DES_key_schedule *ks3, |
64 | int enc) | 64 | int enc) |
65 | { | 65 | { |
66 | register DES_LONG l0,l1; | 66 | register DES_LONG l0,l1; |
67 | DES_LONG ll[2]; | 67 | DES_LONG ll[2]; |
68 | const unsigned char *in = &(*input)[0]; | ||
69 | unsigned char *out = &(*output)[0]; | ||
70 | 68 | ||
71 | c2l(in,l0); | 69 | c2l(in,l0); |
72 | c2l(in,l1); | 70 | c2l(in,l1); |
diff --git a/src/lib/libcrypto/des/set_key.c b/src/lib/libcrypto/des/set_key.c index 143008ed9c..8881d46a7a 100644 --- a/src/lib/libcrypto/des/set_key.c +++ b/src/lib/libcrypto/des/set_key.c | |||
@@ -65,6 +65,8 @@ | |||
65 | */ | 65 | */ |
66 | #include "des_locl.h" | 66 | #include "des_locl.h" |
67 | 67 | ||
68 | #ifndef OPENSSL_FIPS | ||
69 | |||
68 | OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key); /* defaults to false */ | 70 | OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key); /* defaults to false */ |
69 | 71 | ||
70 | static const unsigned char odd_parity[256]={ | 72 | static const unsigned char odd_parity[256]={ |
@@ -405,3 +407,5 @@ void des_fixup_key_parity(des_cblock *key) | |||
405 | des_set_odd_parity(key); | 407 | des_set_odd_parity(key); |
406 | } | 408 | } |
407 | */ | 409 | */ |
410 | |||
411 | #endif /* ndef OPENSSL_FIPS */ | ||
diff --git a/src/lib/libcrypto/dh/dh_check.c b/src/lib/libcrypto/dh/dh_check.c index f0373f7d68..a7e9920efb 100644 --- a/src/lib/libcrypto/dh/dh_check.c +++ b/src/lib/libcrypto/dh/dh_check.c | |||
@@ -70,6 +70,8 @@ | |||
70 | * should hold. | 70 | * should hold. |
71 | */ | 71 | */ |
72 | 72 | ||
73 | #ifndef OPENSSL_FIPS | ||
74 | |||
73 | int DH_check(const DH *dh, int *ret) | 75 | int DH_check(const DH *dh, int *ret) |
74 | { | 76 | { |
75 | int ok=0; | 77 | int ok=0; |
@@ -118,3 +120,5 @@ err: | |||
118 | if (q != NULL) BN_free(q); | 120 | if (q != NULL) BN_free(q); |
119 | return(ok); | 121 | return(ok); |
120 | } | 122 | } |
123 | |||
124 | #endif | ||
diff --git a/src/lib/libcrypto/dh/dh_err.c b/src/lib/libcrypto/dh/dh_err.c index d837950aec..c2715044c9 100644 --- a/src/lib/libcrypto/dh/dh_err.c +++ b/src/lib/libcrypto/dh/dh_err.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* crypto/dh/dh_err.c */ | 1 | /* crypto/dh/dh_err.c */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright (c) 1999-2002 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1999-2003 The OpenSSL Project. All rights reserved. |
4 | * | 4 | * |
5 | * Redistribution and use in source and binary forms, with or without | 5 | * Redistribution and use in source and binary forms, with or without |
6 | * modification, are permitted provided that the following conditions | 6 | * modification, are permitted provided that the following conditions |
diff --git a/src/lib/libcrypto/dh/dh_gen.c b/src/lib/libcrypto/dh/dh_gen.c index 06f78b35ab..23777f5a16 100644 --- a/src/lib/libcrypto/dh/dh_gen.c +++ b/src/lib/libcrypto/dh/dh_gen.c | |||
@@ -86,6 +86,9 @@ | |||
86 | * It's just as OK (and in some sense better) to use a generator of the | 86 | * It's just as OK (and in some sense better) to use a generator of the |
87 | * order-q subgroup. | 87 | * order-q subgroup. |
88 | */ | 88 | */ |
89 | |||
90 | #ifndef OPENSSL_FIPS | ||
91 | |||
89 | DH *DH_generate_parameters(int prime_len, int generator, | 92 | DH *DH_generate_parameters(int prime_len, int generator, |
90 | void (*callback)(int,int,void *), void *cb_arg) | 93 | void (*callback)(int,int,void *), void *cb_arg) |
91 | { | 94 | { |
@@ -146,6 +149,7 @@ DH *DH_generate_parameters(int prime_len, int generator, | |||
146 | if (callback != NULL) callback(3,0,cb_arg); | 149 | if (callback != NULL) callback(3,0,cb_arg); |
147 | ret->p=p; | 150 | ret->p=p; |
148 | ret->g=BN_new(); | 151 | ret->g=BN_new(); |
152 | if (ret->g == NULL) goto err; | ||
149 | if (!BN_set_word(ret->g,g)) goto err; | 153 | if (!BN_set_word(ret->g,g)) goto err; |
150 | ok=1; | 154 | ok=1; |
151 | err: | 155 | err: |
@@ -167,3 +171,5 @@ err: | |||
167 | } | 171 | } |
168 | return(ret); | 172 | return(ret); |
169 | } | 173 | } |
174 | |||
175 | #endif | ||
diff --git a/src/lib/libcrypto/dh/dh_key.c b/src/lib/libcrypto/dh/dh_key.c index 77f2f50b51..ff125c2296 100644 --- a/src/lib/libcrypto/dh/dh_key.c +++ b/src/lib/libcrypto/dh/dh_key.c | |||
@@ -62,6 +62,8 @@ | |||
62 | #include <openssl/rand.h> | 62 | #include <openssl/rand.h> |
63 | #include <openssl/dh.h> | 63 | #include <openssl/dh.h> |
64 | 64 | ||
65 | #ifndef OPENSSL_FIPS | ||
66 | |||
65 | static int generate_key(DH *dh); | 67 | static int generate_key(DH *dh); |
66 | static int compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); | 68 | static int compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); |
67 | static int dh_bn_mod_exp(const DH *dh, BIGNUM *r, | 69 | static int dh_bn_mod_exp(const DH *dh, BIGNUM *r, |
@@ -220,3 +222,5 @@ static int dh_finish(DH *dh) | |||
220 | BN_MONT_CTX_free((BN_MONT_CTX *)dh->method_mont_p); | 222 | BN_MONT_CTX_free((BN_MONT_CTX *)dh->method_mont_p); |
221 | return(1); | 223 | return(1); |
222 | } | 224 | } |
225 | |||
226 | #endif | ||
diff --git a/src/lib/libcrypto/doc/ERR_error_string.pod b/src/lib/libcrypto/doc/ERR_error_string.pod index e01beb817a..cdfa7fe1fe 100644 --- a/src/lib/libcrypto/doc/ERR_error_string.pod +++ b/src/lib/libcrypto/doc/ERR_error_string.pod | |||
@@ -11,7 +11,7 @@ error message | |||
11 | #include <openssl/err.h> | 11 | #include <openssl/err.h> |
12 | 12 | ||
13 | char *ERR_error_string(unsigned long e, char *buf); | 13 | char *ERR_error_string(unsigned long e, char *buf); |
14 | char *ERR_error_string_n(unsigned long e, char *buf, size_t len); | 14 | void ERR_error_string_n(unsigned long e, char *buf, size_t len); |
15 | 15 | ||
16 | const char *ERR_lib_error_string(unsigned long e); | 16 | const char *ERR_lib_error_string(unsigned long e); |
17 | const char *ERR_func_error_string(unsigned long e); | 17 | const char *ERR_func_error_string(unsigned long e); |
diff --git a/src/lib/libcrypto/doc/EVP_EncryptInit.pod b/src/lib/libcrypto/doc/EVP_EncryptInit.pod index daf57e5895..40e525dd56 100644 --- a/src/lib/libcrypto/doc/EVP_EncryptInit.pod +++ b/src/lib/libcrypto/doc/EVP_EncryptInit.pod | |||
@@ -479,6 +479,7 @@ General encryption, decryption function example using FILE I/O and RC2 with an | |||
479 | if(!EVP_CipherUpdate(&ctx, outbuf, &outlen, inbuf, inlen)) | 479 | if(!EVP_CipherUpdate(&ctx, outbuf, &outlen, inbuf, inlen)) |
480 | { | 480 | { |
481 | /* Error */ | 481 | /* Error */ |
482 | EVP_CIPHER_CTX_cleanup(&ctx); | ||
482 | return 0; | 483 | return 0; |
483 | } | 484 | } |
484 | fwrite(outbuf, 1, outlen, out); | 485 | fwrite(outbuf, 1, outlen, out); |
@@ -486,6 +487,7 @@ General encryption, decryption function example using FILE I/O and RC2 with an | |||
486 | if(!EVP_CipherFinal_ex(&ctx, outbuf, &outlen)) | 487 | if(!EVP_CipherFinal_ex(&ctx, outbuf, &outlen)) |
487 | { | 488 | { |
488 | /* Error */ | 489 | /* Error */ |
490 | EVP_CIPHER_CTX_cleanup(&ctx); | ||
489 | return 0; | 491 | return 0; |
490 | } | 492 | } |
491 | fwrite(outbuf, 1, outlen, out); | 493 | fwrite(outbuf, 1, outlen, out); |
diff --git a/src/lib/libcrypto/doc/EVP_SealInit.pod b/src/lib/libcrypto/doc/EVP_SealInit.pod index b5e477e294..48a0e29954 100644 --- a/src/lib/libcrypto/doc/EVP_SealInit.pod +++ b/src/lib/libcrypto/doc/EVP_SealInit.pod | |||
@@ -8,8 +8,9 @@ EVP_SealInit, EVP_SealUpdate, EVP_SealFinal - EVP envelope encryption | |||
8 | 8 | ||
9 | #include <openssl/evp.h> | 9 | #include <openssl/evp.h> |
10 | 10 | ||
11 | int EVP_SealInit(EVP_CIPHER_CTX *ctx, EVP_CIPHER *type, unsigned char **ek, | 11 | int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, |
12 | int *ekl, unsigned char *iv,EVP_PKEY **pubk, int npubk); | 12 | unsigned char **ek, int *ekl, unsigned char *iv, |
13 | EVP_PKEY **pubk, int npubk); | ||
13 | int EVP_SealUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, | 14 | int EVP_SealUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, |
14 | int *outl, unsigned char *in, int inl); | 15 | int *outl, unsigned char *in, int inl); |
15 | int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, | 16 | int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, |
diff --git a/src/lib/libcrypto/doc/EVP_SignInit.pod b/src/lib/libcrypto/doc/EVP_SignInit.pod index e65e54ce52..0bace24938 100644 --- a/src/lib/libcrypto/doc/EVP_SignInit.pod +++ b/src/lib/libcrypto/doc/EVP_SignInit.pod | |||
@@ -29,11 +29,10 @@ EVP_SignUpdate() hashes B<cnt> bytes of data at B<d> into the | |||
29 | signature context B<ctx>. This function can be called several times on the | 29 | signature context B<ctx>. This function can be called several times on the |
30 | same B<ctx> to include additional data. | 30 | same B<ctx> to include additional data. |
31 | 31 | ||
32 | EVP_SignFinal() signs the data in B<ctx> using the private key B<pkey> | 32 | EVP_SignFinal() signs the data in B<ctx> using the private key B<pkey> and |
33 | and places the signature in B<sig>. If the B<s> parameter is not NULL | 33 | places the signature in B<sig>. The number of bytes of data written (i.e. the |
34 | then the number of bytes of data written (i.e. the length of the signature) | 34 | length of the signature) will be written to the integer at B<s>, at most |
35 | will be written to the integer at B<s>, at most EVP_PKEY_size(pkey) bytes | 35 | EVP_PKEY_size(pkey) bytes will be written. |
36 | will be written. | ||
37 | 36 | ||
38 | EVP_SignInit() initializes a signing context B<ctx> to use the default | 37 | EVP_SignInit() initializes a signing context B<ctx> to use the default |
39 | implementation of digest B<type>. | 38 | implementation of digest B<type>. |
diff --git a/src/lib/libcrypto/doc/RSA_public_encrypt.pod b/src/lib/libcrypto/doc/RSA_public_encrypt.pod index d53e19d2b7..ab0fe3b2cd 100644 --- a/src/lib/libcrypto/doc/RSA_public_encrypt.pod +++ b/src/lib/libcrypto/doc/RSA_public_encrypt.pod | |||
@@ -47,9 +47,10 @@ Encrypting user data directly with RSA is insecure. | |||
47 | =back | 47 | =back |
48 | 48 | ||
49 | B<flen> must be less than RSA_size(B<rsa>) - 11 for the PKCS #1 v1.5 | 49 | B<flen> must be less than RSA_size(B<rsa>) - 11 for the PKCS #1 v1.5 |
50 | based padding modes, and less than RSA_size(B<rsa>) - 41 for | 50 | based padding modes, less than RSA_size(B<rsa>) - 41 for |
51 | RSA_PKCS1_OAEP_PADDING. The random number generator must be seeded | 51 | RSA_PKCS1_OAEP_PADDING and exactly RSA_size(B<rsa>) for RSA_NO_PADDING. |
52 | prior to calling RSA_public_encrypt(). | 52 | The random number generator must be seeded prior to calling |
53 | RSA_public_encrypt(). | ||
53 | 54 | ||
54 | RSA_private_decrypt() decrypts the B<flen> bytes at B<from> using the | 55 | RSA_private_decrypt() decrypts the B<flen> bytes at B<from> using the |
55 | private key B<rsa> and stores the plaintext in B<to>. B<to> must point | 56 | private key B<rsa> and stores the plaintext in B<to>. B<to> must point |
diff --git a/src/lib/libcrypto/dsa/dsa.h b/src/lib/libcrypto/dsa/dsa.h index 9b3baadf2c..225ff391f9 100644 --- a/src/lib/libcrypto/dsa/dsa.h +++ b/src/lib/libcrypto/dsa/dsa.h | |||
@@ -81,6 +81,10 @@ | |||
81 | 81 | ||
82 | #define DSA_FLAG_CACHE_MONT_P 0x01 | 82 | #define DSA_FLAG_CACHE_MONT_P 0x01 |
83 | 83 | ||
84 | #if defined(OPENSSL_FIPS) | ||
85 | #define FIPS_DSA_SIZE_T int | ||
86 | #endif | ||
87 | |||
84 | #ifdef __cplusplus | 88 | #ifdef __cplusplus |
85 | extern "C" { | 89 | extern "C" { |
86 | #endif | 90 | #endif |
diff --git a/src/lib/libcrypto/dsa/dsa_gen.c b/src/lib/libcrypto/dsa/dsa_gen.c index dc9c249310..e40afeea51 100644 --- a/src/lib/libcrypto/dsa/dsa_gen.c +++ b/src/lib/libcrypto/dsa/dsa_gen.c | |||
@@ -80,6 +80,7 @@ | |||
80 | #include <openssl/rand.h> | 80 | #include <openssl/rand.h> |
81 | #include <openssl/sha.h> | 81 | #include <openssl/sha.h> |
82 | 82 | ||
83 | #ifndef OPENSSL_FIPS | ||
83 | DSA *DSA_generate_parameters(int bits, | 84 | DSA *DSA_generate_parameters(int bits, |
84 | unsigned char *seed_in, int seed_len, | 85 | unsigned char *seed_in, int seed_len, |
85 | int *counter_ret, unsigned long *h_ret, | 86 | int *counter_ret, unsigned long *h_ret, |
@@ -127,8 +128,9 @@ DSA *DSA_generate_parameters(int bits, | |||
127 | c = BN_CTX_get(ctx2); | 128 | c = BN_CTX_get(ctx2); |
128 | p = BN_CTX_get(ctx2); | 129 | p = BN_CTX_get(ctx2); |
129 | test = BN_CTX_get(ctx2); | 130 | test = BN_CTX_get(ctx2); |
131 | if (test == NULL) goto err; | ||
130 | 132 | ||
131 | BN_lshift(test,BN_value_one(),bits-1); | 133 | if (!BN_lshift(test,BN_value_one(),bits-1)) goto err; |
132 | 134 | ||
133 | for (;;) | 135 | for (;;) |
134 | { | 136 | { |
@@ -196,7 +198,7 @@ DSA *DSA_generate_parameters(int bits, | |||
196 | callback(0,counter,cb_arg); | 198 | callback(0,counter,cb_arg); |
197 | 199 | ||
198 | /* step 7 */ | 200 | /* step 7 */ |
199 | BN_zero(W); | 201 | if (!BN_zero(W)) goto err; |
200 | /* now 'buf' contains "SEED + offset - 1" */ | 202 | /* now 'buf' contains "SEED + offset - 1" */ |
201 | for (k=0; k<=n; k++) | 203 | for (k=0; k<=n; k++) |
202 | { | 204 | { |
@@ -212,20 +214,20 @@ DSA *DSA_generate_parameters(int bits, | |||
212 | /* step 8 */ | 214 | /* step 8 */ |
213 | if (!BN_bin2bn(md,SHA_DIGEST_LENGTH,r0)) | 215 | if (!BN_bin2bn(md,SHA_DIGEST_LENGTH,r0)) |
214 | goto err; | 216 | goto err; |
215 | BN_lshift(r0,r0,160*k); | 217 | if (!BN_lshift(r0,r0,160*k)) goto err; |
216 | BN_add(W,W,r0); | 218 | if (!BN_add(W,W,r0)) goto err; |
217 | } | 219 | } |
218 | 220 | ||
219 | /* more of step 8 */ | 221 | /* more of step 8 */ |
220 | BN_mask_bits(W,bits-1); | 222 | if (!BN_mask_bits(W,bits-1)) goto err; |
221 | BN_copy(X,W); /* this should be ok */ | 223 | if (!BN_copy(X,W)) goto err; |
222 | BN_add(X,X,test); /* this should be ok */ | 224 | if (!BN_add(X,X,test)) goto err; |
223 | 225 | ||
224 | /* step 9 */ | 226 | /* step 9 */ |
225 | BN_lshift1(r0,q); | 227 | if (!BN_lshift1(r0,q)) goto err; |
226 | BN_mod(c,X,r0,ctx); | 228 | if (!BN_mod(c,X,r0,ctx)) goto err; |
227 | BN_sub(r0,c,BN_value_one()); | 229 | if (!BN_sub(r0,c,BN_value_one())) goto err; |
228 | BN_sub(p,X,r0); | 230 | if (!BN_sub(p,X,r0)) goto err; |
229 | 231 | ||
230 | /* step 10 */ | 232 | /* step 10 */ |
231 | if (BN_cmp(p,test) >= 0) | 233 | if (BN_cmp(p,test) >= 0) |
@@ -251,18 +253,18 @@ end: | |||
251 | 253 | ||
252 | /* We now need to generate g */ | 254 | /* We now need to generate g */ |
253 | /* Set r0=(p-1)/q */ | 255 | /* Set r0=(p-1)/q */ |
254 | BN_sub(test,p,BN_value_one()); | 256 | if (!BN_sub(test,p,BN_value_one())) goto err; |
255 | BN_div(r0,NULL,test,q,ctx); | 257 | if (!BN_div(r0,NULL,test,q,ctx)) goto err; |
256 | 258 | ||
257 | BN_set_word(test,h); | 259 | if (!BN_set_word(test,h)) goto err; |
258 | BN_MONT_CTX_set(mont,p,ctx); | 260 | if (!BN_MONT_CTX_set(mont,p,ctx)) goto err; |
259 | 261 | ||
260 | for (;;) | 262 | for (;;) |
261 | { | 263 | { |
262 | /* g=test^r0%p */ | 264 | /* g=test^r0%p */ |
263 | BN_mod_exp_mont(g,test,r0,p,ctx,mont); | 265 | if (!BN_mod_exp_mont(g,test,r0,p,ctx,mont)) goto err; |
264 | if (!BN_is_one(g)) break; | 266 | if (!BN_is_one(g)) break; |
265 | BN_add(test,test,BN_value_one()); | 267 | if (!BN_add(test,test,BN_value_one())) goto err; |
266 | h++; | 268 | h++; |
267 | } | 269 | } |
268 | 270 | ||
@@ -279,6 +281,11 @@ err: | |||
279 | ret->p=BN_dup(p); | 281 | ret->p=BN_dup(p); |
280 | ret->q=BN_dup(q); | 282 | ret->q=BN_dup(q); |
281 | ret->g=BN_dup(g); | 283 | ret->g=BN_dup(g); |
284 | if (ret->p == NULL || ret->q == NULL || ret->g == NULL) | ||
285 | { | ||
286 | ok=0; | ||
287 | goto err; | ||
288 | } | ||
282 | if ((m > 1) && (seed_in != NULL)) memcpy(seed_in,seed,20); | 289 | if ((m > 1) && (seed_in != NULL)) memcpy(seed_in,seed,20); |
283 | if (counter_ret != NULL) *counter_ret=counter; | 290 | if (counter_ret != NULL) *counter_ret=counter; |
284 | if (h_ret != NULL) *h_ret=h; | 291 | if (h_ret != NULL) *h_ret=h; |
@@ -293,4 +300,6 @@ err: | |||
293 | if (mont != NULL) BN_MONT_CTX_free(mont); | 300 | if (mont != NULL) BN_MONT_CTX_free(mont); |
294 | return(ok?ret:NULL); | 301 | return(ok?ret:NULL); |
295 | } | 302 | } |
296 | #endif | 303 | #endif /* ndef OPENSSL_FIPS */ |
304 | #endif /* ndef OPENSSL_NO_SHA */ | ||
305 | |||
diff --git a/src/lib/libcrypto/dsa/dsa_key.c b/src/lib/libcrypto/dsa/dsa_key.c index ef87c3e637..30607ca579 100644 --- a/src/lib/libcrypto/dsa/dsa_key.c +++ b/src/lib/libcrypto/dsa/dsa_key.c | |||
@@ -64,6 +64,7 @@ | |||
64 | #include <openssl/dsa.h> | 64 | #include <openssl/dsa.h> |
65 | #include <openssl/rand.h> | 65 | #include <openssl/rand.h> |
66 | 66 | ||
67 | #ifndef OPENSSL_FIPS | ||
67 | int DSA_generate_key(DSA *dsa) | 68 | int DSA_generate_key(DSA *dsa) |
68 | { | 69 | { |
69 | int ok=0; | 70 | int ok=0; |
@@ -103,3 +104,4 @@ err: | |||
103 | return(ok); | 104 | return(ok); |
104 | } | 105 | } |
105 | #endif | 106 | #endif |
107 | #endif | ||
diff --git a/src/lib/libcrypto/dsa/dsa_ossl.c b/src/lib/libcrypto/dsa/dsa_ossl.c index b9e7f3ea5c..f1a85afcde 100644 --- a/src/lib/libcrypto/dsa/dsa_ossl.c +++ b/src/lib/libcrypto/dsa/dsa_ossl.c | |||
@@ -65,6 +65,7 @@ | |||
65 | #include <openssl/rand.h> | 65 | #include <openssl/rand.h> |
66 | #include <openssl/asn1.h> | 66 | #include <openssl/asn1.h> |
67 | 67 | ||
68 | #ifndef OPENSSL_FIPS | ||
68 | static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); | 69 | static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); |
69 | static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp); | 70 | static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp); |
70 | static int dsa_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig, | 71 | static int dsa_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig, |
@@ -346,3 +347,4 @@ static int dsa_bn_mod_exp(DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p, | |||
346 | { | 347 | { |
347 | return BN_mod_exp_mont(r, a, p, m, ctx, m_ctx); | 348 | return BN_mod_exp_mont(r, a, p, m, ctx, m_ctx); |
348 | } | 349 | } |
350 | #endif | ||
diff --git a/src/lib/libcrypto/dsa/dsa_sign.c b/src/lib/libcrypto/dsa/dsa_sign.c index 89205026f0..3c9753bac3 100644 --- a/src/lib/libcrypto/dsa/dsa_sign.c +++ b/src/lib/libcrypto/dsa/dsa_sign.c | |||
@@ -64,9 +64,17 @@ | |||
64 | #include <openssl/dsa.h> | 64 | #include <openssl/dsa.h> |
65 | #include <openssl/rand.h> | 65 | #include <openssl/rand.h> |
66 | #include <openssl/asn1.h> | 66 | #include <openssl/asn1.h> |
67 | #ifndef OPENSSL_NO_ENGINE | ||
68 | #include <openssl/engine.h> | ||
69 | #endif | ||
70 | #include <openssl/fips.h> | ||
67 | 71 | ||
68 | DSA_SIG * DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa) | 72 | DSA_SIG * DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa) |
69 | { | 73 | { |
74 | #ifdef OPENSSL_FIPS | ||
75 | if(FIPS_mode() && !FIPS_dsa_check(dsa)) | ||
76 | return NULL; | ||
77 | #endif | ||
70 | return dsa->meth->dsa_do_sign(dgst, dlen, dsa); | 78 | return dsa->meth->dsa_do_sign(dgst, dlen, dsa); |
71 | } | 79 | } |
72 | 80 | ||
@@ -87,6 +95,10 @@ int DSA_sign(int type, const unsigned char *dgst, int dlen, unsigned char *sig, | |||
87 | 95 | ||
88 | int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp) | 96 | int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp) |
89 | { | 97 | { |
98 | #ifdef OPENSSL_FIPS | ||
99 | if(FIPS_mode() && !FIPS_dsa_check(dsa)) | ||
100 | return 0; | ||
101 | #endif | ||
90 | return dsa->meth->dsa_sign_setup(dsa, ctx_in, kinvp, rp); | 102 | return dsa->meth->dsa_sign_setup(dsa, ctx_in, kinvp, rp); |
91 | } | 103 | } |
92 | 104 | ||
diff --git a/src/lib/libcrypto/dsa/dsa_vrf.c b/src/lib/libcrypto/dsa/dsa_vrf.c index c4aeddd056..8ef0c45025 100644 --- a/src/lib/libcrypto/dsa/dsa_vrf.c +++ b/src/lib/libcrypto/dsa/dsa_vrf.c | |||
@@ -65,10 +65,18 @@ | |||
65 | #include <openssl/rand.h> | 65 | #include <openssl/rand.h> |
66 | #include <openssl/asn1.h> | 66 | #include <openssl/asn1.h> |
67 | #include <openssl/asn1_mac.h> | 67 | #include <openssl/asn1_mac.h> |
68 | #ifndef OPENSSL_NO_ENGINE | ||
69 | #include <openssl/engine.h> | ||
70 | #endif | ||
71 | #include <openssl/fips.h> | ||
68 | 72 | ||
69 | int DSA_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig, | 73 | int DSA_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig, |
70 | DSA *dsa) | 74 | DSA *dsa) |
71 | { | 75 | { |
76 | #ifdef OPENSSL_FIPS | ||
77 | if(FIPS_mode() && !FIPS_dsa_check(dsa)) | ||
78 | return -1; | ||
79 | #endif | ||
72 | return dsa->meth->dsa_do_verify(dgst, dgst_len, sig, dsa); | 80 | return dsa->meth->dsa_do_verify(dgst, dgst_len, sig, dsa); |
73 | } | 81 | } |
74 | 82 | ||
diff --git a/src/lib/libcrypto/dso/dso_win32.c b/src/lib/libcrypto/dso/dso_win32.c index 6c30deb250..3fa90eb27c 100644 --- a/src/lib/libcrypto/dso/dso_win32.c +++ b/src/lib/libcrypto/dso/dso_win32.c | |||
@@ -61,7 +61,7 @@ | |||
61 | #include "cryptlib.h" | 61 | #include "cryptlib.h" |
62 | #include <openssl/dso.h> | 62 | #include <openssl/dso.h> |
63 | 63 | ||
64 | #if !defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINCE) | 64 | #if !defined(DSO_WIN32) |
65 | DSO_METHOD *DSO_METHOD_win32(void) | 65 | DSO_METHOD *DSO_METHOD_win32(void) |
66 | { | 66 | { |
67 | return NULL; | 67 | return NULL; |
diff --git a/src/lib/libcrypto/engine/hw_cryptodev.c b/src/lib/libcrypto/engine/hw_cryptodev.c index 0ca442af8a..41184b6786 100644 --- a/src/lib/libcrypto/engine/hw_cryptodev.c +++ b/src/lib/libcrypto/engine/hw_cryptodev.c | |||
@@ -93,7 +93,7 @@ static int open_dev_crypto(void); | |||
93 | static int get_dev_crypto(void); | 93 | static int get_dev_crypto(void); |
94 | static struct dev_crypto_cipher *cipher_nid_to_cryptodev(int nid); | 94 | static struct dev_crypto_cipher *cipher_nid_to_cryptodev(int nid); |
95 | static int get_cryptodev_ciphers(const int **cnids); | 95 | static int get_cryptodev_ciphers(const int **cnids); |
96 | static int get_cryptodev_digests(const int **cnids); | 96 | /*static int get_cryptodev_digests(const int **cnids);*/ |
97 | static int cryptodev_usable_ciphers(const int **nids); | 97 | static int cryptodev_usable_ciphers(const int **nids); |
98 | static int cryptodev_usable_digests(const int **nids); | 98 | static int cryptodev_usable_digests(const int **nids); |
99 | static int cryptodev_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | 99 | static int cryptodev_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
@@ -150,6 +150,7 @@ static struct dev_crypto_cipher ciphers[] = { | |||
150 | { 0, NID_undef, 0, 0, }, | 150 | { 0, NID_undef, 0, 0, }, |
151 | }; | 151 | }; |
152 | 152 | ||
153 | #if 0 /* UNUSED */ | ||
153 | static struct { | 154 | static struct { |
154 | int id; | 155 | int id; |
155 | int nid; | 156 | int nid; |
@@ -162,6 +163,7 @@ static struct { | |||
162 | { CRYPTO_SHA1, NID_undef, }, | 163 | { CRYPTO_SHA1, NID_undef, }, |
163 | { 0, NID_undef, }, | 164 | { 0, NID_undef, }, |
164 | }; | 165 | }; |
166 | #endif | ||
165 | 167 | ||
166 | /* | 168 | /* |
167 | * Return a fd if /dev/crypto seems usable, -1 otherwise. | 169 | * Return a fd if /dev/crypto seems usable, -1 otherwise. |
@@ -297,6 +299,7 @@ get_cryptodev_ciphers(const int **cnids) | |||
297 | * returning them here is harmless, as long as we return NULL | 299 | * returning them here is harmless, as long as we return NULL |
298 | * when asked for a handler in the cryptodev_engine_digests routine | 300 | * when asked for a handler in the cryptodev_engine_digests routine |
299 | */ | 301 | */ |
302 | #if 0 /* UNUSED */ | ||
300 | static int | 303 | static int |
301 | get_cryptodev_digests(const int **cnids) | 304 | get_cryptodev_digests(const int **cnids) |
302 | { | 305 | { |
@@ -326,6 +329,7 @@ get_cryptodev_digests(const int **cnids) | |||
326 | *cnids = NULL; | 329 | *cnids = NULL; |
327 | return (count); | 330 | return (count); |
328 | } | 331 | } |
332 | #endif | ||
329 | 333 | ||
330 | /* | 334 | /* |
331 | * Find the useable ciphers|digests from dev/crypto - this is the first | 335 | * Find the useable ciphers|digests from dev/crypto - this is the first |
@@ -832,7 +836,7 @@ static int | |||
832 | bn2crparam(const BIGNUM *a, struct crparam *crp) | 836 | bn2crparam(const BIGNUM *a, struct crparam *crp) |
833 | { | 837 | { |
834 | int i, j, k; | 838 | int i, j, k; |
835 | ssize_t words, bytes, bits; | 839 | ssize_t bytes, bits; |
836 | u_char *b; | 840 | u_char *b; |
837 | 841 | ||
838 | crp->crp_p = NULL; | 842 | crp->crp_p = NULL; |
diff --git a/src/lib/libcrypto/err/err.c b/src/lib/libcrypto/err/err.c index 792f329600..c78790a54c 100644 --- a/src/lib/libcrypto/err/err.c +++ b/src/lib/libcrypto/err/err.c | |||
@@ -149,6 +149,7 @@ static ERR_STRING_DATA ERR_str_libraries[]= | |||
149 | {ERR_PACK(ERR_LIB_DSO,0,0) ,"DSO support routines"}, | 149 | {ERR_PACK(ERR_LIB_DSO,0,0) ,"DSO support routines"}, |
150 | {ERR_PACK(ERR_LIB_ENGINE,0,0) ,"engine routines"}, | 150 | {ERR_PACK(ERR_LIB_ENGINE,0,0) ,"engine routines"}, |
151 | {ERR_PACK(ERR_LIB_OCSP,0,0) ,"OCSP routines"}, | 151 | {ERR_PACK(ERR_LIB_OCSP,0,0) ,"OCSP routines"}, |
152 | {ERR_PACK(ERR_LIB_FIPS,0,0) ,"FIPS routines"}, | ||
152 | {0,NULL}, | 153 | {0,NULL}, |
153 | }; | 154 | }; |
154 | 155 | ||
@@ -167,6 +168,7 @@ static ERR_STRING_DATA ERR_str_functs[]= | |||
167 | #endif | 168 | #endif |
168 | {ERR_PACK(0,SYS_F_OPENDIR,0), "opendir"}, | 169 | {ERR_PACK(0,SYS_F_OPENDIR,0), "opendir"}, |
169 | {ERR_PACK(0,SYS_F_FREAD,0), "fread"}, | 170 | {ERR_PACK(0,SYS_F_FREAD,0), "fread"}, |
171 | {ERR_PACK(0,SYS_F_GETADDRINFO,0), "getaddrinfo"}, | ||
170 | {0,NULL}, | 172 | {0,NULL}, |
171 | }; | 173 | }; |
172 | 174 | ||
diff --git a/src/lib/libcrypto/err/err.h b/src/lib/libcrypto/err/err.h index 8faa3a7b4f..2efa18866a 100644 --- a/src/lib/libcrypto/err/err.h +++ b/src/lib/libcrypto/err/err.h | |||
@@ -131,6 +131,7 @@ typedef struct err_state_st | |||
131 | #define ERR_LIB_OCSP 39 | 131 | #define ERR_LIB_OCSP 39 |
132 | #define ERR_LIB_UI 40 | 132 | #define ERR_LIB_UI 40 |
133 | #define ERR_LIB_COMP 41 | 133 | #define ERR_LIB_COMP 41 |
134 | #define ERR_LIB_FIPS 42 | ||
134 | 135 | ||
135 | #define ERR_LIB_USER 128 | 136 | #define ERR_LIB_USER 128 |
136 | 137 | ||
@@ -159,6 +160,7 @@ typedef struct err_state_st | |||
159 | #define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),__FILE__,__LINE__) | 160 | #define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),__FILE__,__LINE__) |
160 | #define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),__FILE__,__LINE__) | 161 | #define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),__FILE__,__LINE__) |
161 | #define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),__FILE__,__LINE__) | 162 | #define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),__FILE__,__LINE__) |
163 | #define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),__FILE__,__LINE__) | ||
162 | 164 | ||
163 | /* Borland C seems too stupid to be able to shift and do longs in | 165 | /* Borland C seems too stupid to be able to shift and do longs in |
164 | * the pre-processor :-( */ | 166 | * the pre-processor :-( */ |
@@ -183,6 +185,7 @@ typedef struct err_state_st | |||
183 | #define SYS_F_WSASTARTUP 9 /* Winsock stuff */ | 185 | #define SYS_F_WSASTARTUP 9 /* Winsock stuff */ |
184 | #define SYS_F_OPENDIR 10 | 186 | #define SYS_F_OPENDIR 10 |
185 | #define SYS_F_FREAD 11 | 187 | #define SYS_F_FREAD 11 |
188 | #define SYS_F_GETADDRINFO 12 | ||
186 | 189 | ||
187 | 190 | ||
188 | /* reasons */ | 191 | /* reasons */ |
diff --git a/src/lib/libcrypto/err/err_all.c b/src/lib/libcrypto/err/err_all.c index dc505d9d9d..4dc9300892 100644 --- a/src/lib/libcrypto/err/err_all.c +++ b/src/lib/libcrypto/err/err_all.c | |||
@@ -87,6 +87,7 @@ | |||
87 | #endif | 87 | #endif |
88 | #include <openssl/ocsp.h> | 88 | #include <openssl/ocsp.h> |
89 | #include <openssl/err.h> | 89 | #include <openssl/err.h> |
90 | #include <openssl/fips.h> | ||
90 | 91 | ||
91 | void ERR_load_crypto_strings(void) | 92 | void ERR_load_crypto_strings(void) |
92 | { | 93 | { |
@@ -130,4 +131,7 @@ void ERR_load_crypto_strings(void) | |||
130 | ERR_load_OCSP_strings(); | 131 | ERR_load_OCSP_strings(); |
131 | ERR_load_UI_strings(); | 132 | ERR_load_UI_strings(); |
132 | #endif | 133 | #endif |
134 | #ifdef OPENSSL_FIPS | ||
135 | ERR_load_FIPS_strings(); | ||
136 | #endif | ||
133 | } | 137 | } |
diff --git a/src/lib/libcrypto/err/openssl.ec b/src/lib/libcrypto/err/openssl.ec index 29a69dfdd4..447a7f87ed 100644 --- a/src/lib/libcrypto/err/openssl.ec +++ b/src/lib/libcrypto/err/openssl.ec | |||
@@ -27,6 +27,7 @@ L DSO crypto/dso/dso.h crypto/dso/dso_err.c | |||
27 | L ENGINE crypto/engine/engine.h crypto/engine/eng_err.c | 27 | L ENGINE crypto/engine/engine.h crypto/engine/eng_err.c |
28 | L OCSP crypto/ocsp/ocsp.h crypto/ocsp/ocsp_err.c | 28 | L OCSP crypto/ocsp/ocsp.h crypto/ocsp/ocsp_err.c |
29 | L UI crypto/ui/ui.h crypto/ui/ui_err.c | 29 | L UI crypto/ui/ui.h crypto/ui/ui_err.c |
30 | L FIPS fips/fips.h fips/fips_err.h | ||
30 | 31 | ||
31 | # additional header files to be scanned for function names | 32 | # additional header files to be scanned for function names |
32 | L NONE crypto/x509/x509_vfy.h NONE | 33 | L NONE crypto/x509/x509_vfy.h NONE |
diff --git a/src/lib/libcrypto/evp/bio_md.c b/src/lib/libcrypto/evp/bio_md.c index c632dfb202..f4aa41ac4b 100644 --- a/src/lib/libcrypto/evp/bio_md.c +++ b/src/lib/libcrypto/evp/bio_md.c | |||
@@ -176,10 +176,11 @@ static long md_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
176 | { | 176 | { |
177 | case BIO_CTRL_RESET: | 177 | case BIO_CTRL_RESET: |
178 | if (b->init) | 178 | if (b->init) |
179 | EVP_DigestInit_ex(ctx,ctx->digest, NULL); | 179 | ret = EVP_DigestInit_ex(ctx,ctx->digest, NULL); |
180 | else | 180 | else |
181 | ret=0; | 181 | ret=0; |
182 | ret=BIO_ctrl(b->next_bio,cmd,num,ptr); | 182 | if (ret > 0) |
183 | ret=BIO_ctrl(b->next_bio,cmd,num,ptr); | ||
183 | break; | 184 | break; |
184 | case BIO_C_GET_MD: | 185 | case BIO_C_GET_MD: |
185 | if (b->init) | 186 | if (b->init) |
@@ -191,11 +192,12 @@ static long md_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
191 | ret=0; | 192 | ret=0; |
192 | break; | 193 | break; |
193 | case BIO_C_GET_MD_CTX: | 194 | case BIO_C_GET_MD_CTX: |
195 | pctx=ptr; | ||
196 | *pctx=ctx; | ||
197 | break; | ||
198 | case BIO_C_SET_MD_CTX: | ||
194 | if (b->init) | 199 | if (b->init) |
195 | { | 200 | b->ptr=ptr; |
196 | pctx=ptr; | ||
197 | *pctx=ctx; | ||
198 | } | ||
199 | else | 201 | else |
200 | ret=0; | 202 | ret=0; |
201 | break; | 203 | break; |
@@ -207,8 +209,9 @@ static long md_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
207 | 209 | ||
208 | case BIO_C_SET_MD: | 210 | case BIO_C_SET_MD: |
209 | md=ptr; | 211 | md=ptr; |
210 | EVP_DigestInit_ex(ctx,md, NULL); | 212 | ret = EVP_DigestInit_ex(ctx,md, NULL); |
211 | b->init=1; | 213 | if (ret > 0) |
214 | b->init=1; | ||
212 | break; | 215 | break; |
213 | case BIO_CTRL_DUP: | 216 | case BIO_CTRL_DUP: |
214 | dbio=ptr; | 217 | dbio=ptr; |
diff --git a/src/lib/libcrypto/evp/c_allc.c b/src/lib/libcrypto/evp/c_allc.c index 341a958fd4..fc96812365 100644 --- a/src/lib/libcrypto/evp/c_allc.c +++ b/src/lib/libcrypto/evp/c_allc.c | |||
@@ -67,6 +67,8 @@ void OpenSSL_add_all_ciphers(void) | |||
67 | 67 | ||
68 | #ifndef OPENSSL_NO_DES | 68 | #ifndef OPENSSL_NO_DES |
69 | EVP_add_cipher(EVP_des_cfb()); | 69 | EVP_add_cipher(EVP_des_cfb()); |
70 | EVP_add_cipher(EVP_des_cfb1()); | ||
71 | EVP_add_cipher(EVP_des_cfb8()); | ||
70 | EVP_add_cipher(EVP_des_ede_cfb()); | 72 | EVP_add_cipher(EVP_des_ede_cfb()); |
71 | EVP_add_cipher(EVP_des_ede3_cfb()); | 73 | EVP_add_cipher(EVP_des_ede3_cfb()); |
72 | 74 | ||
@@ -150,6 +152,8 @@ void OpenSSL_add_all_ciphers(void) | |||
150 | EVP_add_cipher(EVP_aes_128_ecb()); | 152 | EVP_add_cipher(EVP_aes_128_ecb()); |
151 | EVP_add_cipher(EVP_aes_128_cbc()); | 153 | EVP_add_cipher(EVP_aes_128_cbc()); |
152 | EVP_add_cipher(EVP_aes_128_cfb()); | 154 | EVP_add_cipher(EVP_aes_128_cfb()); |
155 | EVP_add_cipher(EVP_aes_128_cfb1()); | ||
156 | EVP_add_cipher(EVP_aes_128_cfb8()); | ||
153 | EVP_add_cipher(EVP_aes_128_ofb()); | 157 | EVP_add_cipher(EVP_aes_128_ofb()); |
154 | #if 0 | 158 | #if 0 |
155 | EVP_add_cipher(EVP_aes_128_ctr()); | 159 | EVP_add_cipher(EVP_aes_128_ctr()); |
@@ -159,6 +163,8 @@ void OpenSSL_add_all_ciphers(void) | |||
159 | EVP_add_cipher(EVP_aes_192_ecb()); | 163 | EVP_add_cipher(EVP_aes_192_ecb()); |
160 | EVP_add_cipher(EVP_aes_192_cbc()); | 164 | EVP_add_cipher(EVP_aes_192_cbc()); |
161 | EVP_add_cipher(EVP_aes_192_cfb()); | 165 | EVP_add_cipher(EVP_aes_192_cfb()); |
166 | EVP_add_cipher(EVP_aes_192_cfb1()); | ||
167 | EVP_add_cipher(EVP_aes_192_cfb8()); | ||
162 | EVP_add_cipher(EVP_aes_192_ofb()); | 168 | EVP_add_cipher(EVP_aes_192_ofb()); |
163 | #if 0 | 169 | #if 0 |
164 | EVP_add_cipher(EVP_aes_192_ctr()); | 170 | EVP_add_cipher(EVP_aes_192_ctr()); |
@@ -168,6 +174,8 @@ void OpenSSL_add_all_ciphers(void) | |||
168 | EVP_add_cipher(EVP_aes_256_ecb()); | 174 | EVP_add_cipher(EVP_aes_256_ecb()); |
169 | EVP_add_cipher(EVP_aes_256_cbc()); | 175 | EVP_add_cipher(EVP_aes_256_cbc()); |
170 | EVP_add_cipher(EVP_aes_256_cfb()); | 176 | EVP_add_cipher(EVP_aes_256_cfb()); |
177 | EVP_add_cipher(EVP_aes_256_cfb1()); | ||
178 | EVP_add_cipher(EVP_aes_256_cfb8()); | ||
171 | EVP_add_cipher(EVP_aes_256_ofb()); | 179 | EVP_add_cipher(EVP_aes_256_ofb()); |
172 | #if 0 | 180 | #if 0 |
173 | EVP_add_cipher(EVP_aes_256_ctr()); | 181 | EVP_add_cipher(EVP_aes_256_ctr()); |
diff --git a/src/lib/libcrypto/evp/c_alld.c b/src/lib/libcrypto/evp/c_alld.c index be91cdb037..aae7bf7482 100644 --- a/src/lib/libcrypto/evp/c_alld.c +++ b/src/lib/libcrypto/evp/c_alld.c | |||
@@ -75,7 +75,7 @@ void OpenSSL_add_all_digests(void) | |||
75 | EVP_add_digest_alias(SN_md5,"ssl2-md5"); | 75 | EVP_add_digest_alias(SN_md5,"ssl2-md5"); |
76 | EVP_add_digest_alias(SN_md5,"ssl3-md5"); | 76 | EVP_add_digest_alias(SN_md5,"ssl3-md5"); |
77 | #endif | 77 | #endif |
78 | #ifndef OPENSSL_NO_SHA | 78 | #if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA0) |
79 | EVP_add_digest(EVP_sha()); | 79 | EVP_add_digest(EVP_sha()); |
80 | #ifndef OPENSSL_NO_DSA | 80 | #ifndef OPENSSL_NO_DSA |
81 | EVP_add_digest(EVP_dss()); | 81 | EVP_add_digest(EVP_dss()); |
diff --git a/src/lib/libcrypto/evp/digest.c b/src/lib/libcrypto/evp/digest.c index 0623ddf1f0..f21c63842c 100644 --- a/src/lib/libcrypto/evp/digest.c +++ b/src/lib/libcrypto/evp/digest.c | |||
@@ -137,6 +137,39 @@ int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type) | |||
137 | return EVP_DigestInit_ex(ctx, type, NULL); | 137 | return EVP_DigestInit_ex(ctx, type, NULL); |
138 | } | 138 | } |
139 | 139 | ||
140 | #ifdef OPENSSL_FIPS | ||
141 | |||
142 | /* The purpose of these is to trap programs that attempt to use non FIPS | ||
143 | * algorithms in FIPS mode and ignore the errors. | ||
144 | */ | ||
145 | |||
146 | static int bad_init(EVP_MD_CTX *ctx) | ||
147 | { FIPS_ERROR_IGNORED("Digest init"); return 0;} | ||
148 | |||
149 | static int bad_update(EVP_MD_CTX *ctx,const void *data,unsigned long count) | ||
150 | { FIPS_ERROR_IGNORED("Digest update"); return 0;} | ||
151 | |||
152 | static int bad_final(EVP_MD_CTX *ctx,unsigned char *md) | ||
153 | { FIPS_ERROR_IGNORED("Digest Final"); return 0;} | ||
154 | |||
155 | static const EVP_MD bad_md = | ||
156 | { | ||
157 | 0, | ||
158 | 0, | ||
159 | 0, | ||
160 | 0, | ||
161 | bad_init, | ||
162 | bad_update, | ||
163 | bad_final, | ||
164 | NULL, | ||
165 | NULL, | ||
166 | NULL, | ||
167 | 0, | ||
168 | {0,0,0,0}, | ||
169 | }; | ||
170 | |||
171 | #endif | ||
172 | |||
140 | int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl) | 173 | int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl) |
141 | { | 174 | { |
142 | EVP_MD_CTX_clear_flags(ctx,EVP_MD_CTX_FLAG_CLEANED); | 175 | EVP_MD_CTX_clear_flags(ctx,EVP_MD_CTX_FLAG_CLEANED); |
@@ -195,6 +228,18 @@ int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl) | |||
195 | #endif | 228 | #endif |
196 | if (ctx->digest != type) | 229 | if (ctx->digest != type) |
197 | { | 230 | { |
231 | #ifdef OPENSSL_FIPS | ||
232 | if (FIPS_mode()) | ||
233 | { | ||
234 | if (!(type->flags & EVP_MD_FLAG_FIPS) | ||
235 | && !(ctx->flags & EVP_MD_CTX_FLAG_NON_FIPS_ALLOW)) | ||
236 | { | ||
237 | EVPerr(EVP_F_EVP_DIGESTINIT, EVP_R_DISABLED_FOR_FIPS); | ||
238 | ctx->digest = &bad_md; | ||
239 | return 0; | ||
240 | } | ||
241 | } | ||
242 | #endif | ||
198 | if (ctx->digest && ctx->digest->ctx_size) | 243 | if (ctx->digest && ctx->digest->ctx_size) |
199 | OPENSSL_free(ctx->md_data); | 244 | OPENSSL_free(ctx->md_data); |
200 | ctx->digest=type; | 245 | ctx->digest=type; |
diff --git a/src/lib/libcrypto/evp/e_aes.c b/src/lib/libcrypto/evp/e_aes.c index fe8bcda631..f35036c9d7 100644 --- a/src/lib/libcrypto/evp/e_aes.c +++ b/src/lib/libcrypto/evp/e_aes.c | |||
@@ -67,34 +67,52 @@ typedef struct | |||
67 | 67 | ||
68 | IMPLEMENT_BLOCK_CIPHER(aes_128, ks, AES, EVP_AES_KEY, | 68 | IMPLEMENT_BLOCK_CIPHER(aes_128, ks, AES, EVP_AES_KEY, |
69 | NID_aes_128, 16, 16, 16, 128, | 69 | NID_aes_128, 16, 16, 16, 128, |
70 | 0, aes_init_key, NULL, | 70 | EVP_CIPH_FLAG_FIPS, aes_init_key, NULL, |
71 | EVP_CIPHER_set_asn1_iv, | 71 | EVP_CIPHER_set_asn1_iv, |
72 | EVP_CIPHER_get_asn1_iv, | 72 | EVP_CIPHER_get_asn1_iv, |
73 | NULL) | 73 | NULL) |
74 | IMPLEMENT_BLOCK_CIPHER(aes_192, ks, AES, EVP_AES_KEY, | 74 | IMPLEMENT_BLOCK_CIPHER(aes_192, ks, AES, EVP_AES_KEY, |
75 | NID_aes_192, 16, 24, 16, 128, | 75 | NID_aes_192, 16, 24, 16, 128, |
76 | 0, aes_init_key, NULL, | 76 | EVP_CIPH_FLAG_FIPS, aes_init_key, NULL, |
77 | EVP_CIPHER_set_asn1_iv, | 77 | EVP_CIPHER_set_asn1_iv, |
78 | EVP_CIPHER_get_asn1_iv, | 78 | EVP_CIPHER_get_asn1_iv, |
79 | NULL) | 79 | NULL) |
80 | IMPLEMENT_BLOCK_CIPHER(aes_256, ks, AES, EVP_AES_KEY, | 80 | IMPLEMENT_BLOCK_CIPHER(aes_256, ks, AES, EVP_AES_KEY, |
81 | NID_aes_256, 16, 32, 16, 128, | 81 | NID_aes_256, 16, 32, 16, 128, |
82 | 0, aes_init_key, NULL, | 82 | EVP_CIPH_FLAG_FIPS, aes_init_key, NULL, |
83 | EVP_CIPHER_set_asn1_iv, | 83 | EVP_CIPHER_set_asn1_iv, |
84 | EVP_CIPHER_get_asn1_iv, | 84 | EVP_CIPHER_get_asn1_iv, |
85 | NULL) | 85 | NULL) |
86 | 86 | ||
87 | #define IMPLEMENT_AES_CFBR(ksize,cbits,flags) IMPLEMENT_CFBR(aes,AES,EVP_AES_KEY,ks,ksize,cbits,16,flags) | ||
88 | |||
89 | IMPLEMENT_AES_CFBR(128,1,0) | ||
90 | IMPLEMENT_AES_CFBR(192,1,0) | ||
91 | IMPLEMENT_AES_CFBR(256,1,0) | ||
92 | |||
93 | IMPLEMENT_AES_CFBR(128,8,EVP_CIPH_FLAG_FIPS) | ||
94 | IMPLEMENT_AES_CFBR(192,8,EVP_CIPH_FLAG_FIPS) | ||
95 | IMPLEMENT_AES_CFBR(256,8,EVP_CIPH_FLAG_FIPS) | ||
96 | |||
87 | static int aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, | 97 | static int aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, |
88 | const unsigned char *iv, int enc) { | 98 | const unsigned char *iv, int enc) |
99 | { | ||
100 | int ret; | ||
89 | 101 | ||
90 | if ((ctx->cipher->flags & EVP_CIPH_MODE) == EVP_CIPH_CFB_MODE | 102 | if ((ctx->cipher->flags & EVP_CIPH_MODE) == EVP_CIPH_CFB_MODE |
91 | || (ctx->cipher->flags & EVP_CIPH_MODE) == EVP_CIPH_OFB_MODE | 103 | || (ctx->cipher->flags & EVP_CIPH_MODE) == EVP_CIPH_OFB_MODE |
92 | || enc) | 104 | || enc) |
93 | AES_set_encrypt_key(key, ctx->key_len * 8, ctx->cipher_data); | 105 | ret=AES_set_encrypt_key(key, ctx->key_len * 8, ctx->cipher_data); |
94 | else | 106 | else |
95 | AES_set_decrypt_key(key, ctx->key_len * 8, ctx->cipher_data); | 107 | ret=AES_set_decrypt_key(key, ctx->key_len * 8, ctx->cipher_data); |
108 | |||
109 | if(ret < 0) | ||
110 | { | ||
111 | EVPerr(EVP_F_AES_INIT_KEY,EVP_R_AES_KEY_SETUP_FAILED); | ||
112 | return 0; | ||
113 | } | ||
96 | 114 | ||
97 | return 1; | 115 | return 1; |
98 | } | 116 | } |
99 | 117 | ||
100 | #endif | 118 | #endif |
diff --git a/src/lib/libcrypto/evp/e_des.c b/src/lib/libcrypto/evp/e_des.c index 105266a4b3..46e2899825 100644 --- a/src/lib/libcrypto/evp/e_des.c +++ b/src/lib/libcrypto/evp/e_des.c | |||
@@ -56,9 +56,9 @@ | |||
56 | * [including the GNU Public Licence.] | 56 | * [including the GNU Public Licence.] |
57 | */ | 57 | */ |
58 | 58 | ||
59 | #ifndef OPENSSL_NO_DES | ||
60 | #include <stdio.h> | 59 | #include <stdio.h> |
61 | #include "cryptlib.h" | 60 | #include "cryptlib.h" |
61 | #ifndef OPENSSL_NO_DES | ||
62 | #include <openssl/evp.h> | 62 | #include <openssl/evp.h> |
63 | #include <openssl/objects.h> | 63 | #include <openssl/objects.h> |
64 | #include "evp_locl.h" | 64 | #include "evp_locl.h" |
@@ -92,20 +92,55 @@ static int des_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | |||
92 | return 1; | 92 | return 1; |
93 | } | 93 | } |
94 | 94 | ||
95 | static int des_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | 95 | static int des_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
96 | const unsigned char *in, unsigned int inl) | 96 | const unsigned char *in, unsigned int inl) |
97 | { | 97 | { |
98 | DES_cfb64_encrypt(in, out, (long)inl, ctx->cipher_data, | 98 | DES_cfb64_encrypt(in, out, (long)inl, ctx->cipher_data, |
99 | (DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt); | 99 | (DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt); |
100 | return 1; | 100 | return 1; |
101 | } | 101 | } |
102 | 102 | ||
103 | /* Although we have a CFB-r implementation for DES, it doesn't pack the right | ||
104 | way, so wrap it here */ | ||
105 | static int des_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | ||
106 | const unsigned char *in, unsigned int inl) | ||
107 | { | ||
108 | unsigned int n; | ||
109 | unsigned char c[1],d[1]; | ||
110 | |||
111 | for(n=0 ; n < inl ; ++n) | ||
112 | { | ||
113 | c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0; | ||
114 | DES_cfb_encrypt(c,d,1,1,ctx->cipher_data,(DES_cblock *)ctx->iv, | ||
115 | ctx->encrypt); | ||
116 | out[n/8]=(out[n/8]&~(0x80 >> (n%8)))|((d[0]&0x80) >> (n%8)); | ||
117 | } | ||
118 | return 1; | ||
119 | } | ||
120 | |||
121 | static int des_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | ||
122 | const unsigned char *in, unsigned int inl) | ||
123 | { | ||
124 | DES_cfb_encrypt(in,out,8,inl,ctx->cipher_data,(DES_cblock *)ctx->iv, | ||
125 | ctx->encrypt); | ||
126 | return 1; | ||
127 | } | ||
128 | |||
103 | BLOCK_CIPHER_defs(des, DES_key_schedule, NID_des, 8, 8, 8, 64, | 129 | BLOCK_CIPHER_defs(des, DES_key_schedule, NID_des, 8, 8, 8, 64, |
104 | 0, des_init_key, NULL, | 130 | EVP_CIPH_FLAG_FIPS, des_init_key, NULL, |
105 | EVP_CIPHER_set_asn1_iv, | 131 | EVP_CIPHER_set_asn1_iv, |
106 | EVP_CIPHER_get_asn1_iv, | 132 | EVP_CIPHER_get_asn1_iv, |
107 | NULL) | 133 | NULL) |
108 | 134 | ||
135 | BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,1, | ||
136 | EVP_CIPH_FLAG_FIPS,des_init_key,NULL, | ||
137 | EVP_CIPHER_set_asn1_iv, | ||
138 | EVP_CIPHER_get_asn1_iv,NULL) | ||
139 | |||
140 | BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,8, | ||
141 | EVP_CIPH_FLAG_FIPS,des_init_key,NULL, | ||
142 | EVP_CIPHER_set_asn1_iv, | ||
143 | EVP_CIPHER_get_asn1_iv,NULL) | ||
109 | 144 | ||
110 | static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, | 145 | static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, |
111 | const unsigned char *iv, int enc) | 146 | const unsigned char *iv, int enc) |
diff --git a/src/lib/libcrypto/evp/e_des3.c b/src/lib/libcrypto/evp/e_des3.c index 077860e7b6..677322bf02 100644 --- a/src/lib/libcrypto/evp/e_des3.c +++ b/src/lib/libcrypto/evp/e_des3.c | |||
@@ -56,9 +56,9 @@ | |||
56 | * [including the GNU Public Licence.] | 56 | * [including the GNU Public Licence.] |
57 | */ | 57 | */ |
58 | 58 | ||
59 | #ifndef OPENSSL_NO_DES | ||
60 | #include <stdio.h> | 59 | #include <stdio.h> |
61 | #include "cryptlib.h" | 60 | #include "cryptlib.h" |
61 | #ifndef OPENSSL_NO_DES | ||
62 | #include <openssl/evp.h> | 62 | #include <openssl/evp.h> |
63 | #include <openssl/objects.h> | 63 | #include <openssl/objects.h> |
64 | #include "evp_locl.h" | 64 | #include "evp_locl.h" |
@@ -85,7 +85,7 @@ static int des_ede_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | |||
85 | const unsigned char *in, unsigned int inl) | 85 | const unsigned char *in, unsigned int inl) |
86 | { | 86 | { |
87 | BLOCK_CIPHER_ecb_loop() | 87 | BLOCK_CIPHER_ecb_loop() |
88 | DES_ecb3_encrypt((DES_cblock *)(in + i), (DES_cblock *)(out + i), | 88 | DES_ecb3_encrypt(in + i,out + i, |
89 | &data(ctx)->ks1, &data(ctx)->ks2, | 89 | &data(ctx)->ks1, &data(ctx)->ks2, |
90 | &data(ctx)->ks3, | 90 | &data(ctx)->ks3, |
91 | ctx->encrypt); | 91 | ctx->encrypt); |
@@ -121,7 +121,7 @@ static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | |||
121 | return 1; | 121 | return 1; |
122 | } | 122 | } |
123 | 123 | ||
124 | static int des_ede_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | 124 | static int des_ede_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
125 | const unsigned char *in, unsigned int inl) | 125 | const unsigned char *in, unsigned int inl) |
126 | { | 126 | { |
127 | DES_ede3_cfb64_encrypt(in, out, (long)inl, | 127 | DES_ede3_cfb64_encrypt(in, out, (long)inl, |
@@ -130,23 +130,62 @@ static int des_ede_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | |||
130 | return 1; | 130 | return 1; |
131 | } | 131 | } |
132 | 132 | ||
133 | /* Although we have a CFB-r implementation for 3-DES, it doesn't pack the right | ||
134 | way, so wrap it here */ | ||
135 | static int des_ede3_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | ||
136 | const unsigned char *in, unsigned int inl) | ||
137 | { | ||
138 | unsigned int n; | ||
139 | unsigned char c[1],d[1]; | ||
140 | |||
141 | for(n=0 ; n < inl ; ++n) | ||
142 | { | ||
143 | c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0; | ||
144 | DES_ede3_cfb_encrypt(c,d,1,1, | ||
145 | &data(ctx)->ks1,&data(ctx)->ks2,&data(ctx)->ks3, | ||
146 | (DES_cblock *)ctx->iv,ctx->encrypt); | ||
147 | out[n/8]=(out[n/8]&~(0x80 >> (n%8)))|((d[0]&0x80) >> (n%8)); | ||
148 | } | ||
149 | |||
150 | return 1; | ||
151 | } | ||
152 | |||
153 | static int des_ede3_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | ||
154 | const unsigned char *in, unsigned int inl) | ||
155 | { | ||
156 | DES_ede3_cfb_encrypt(in,out,8,inl, | ||
157 | &data(ctx)->ks1,&data(ctx)->ks2,&data(ctx)->ks3, | ||
158 | (DES_cblock *)ctx->iv,ctx->encrypt); | ||
159 | return 1; | ||
160 | } | ||
161 | |||
133 | BLOCK_CIPHER_defs(des_ede, DES_EDE_KEY, NID_des_ede, 8, 16, 8, 64, | 162 | BLOCK_CIPHER_defs(des_ede, DES_EDE_KEY, NID_des_ede, 8, 16, 8, 64, |
134 | 0, des_ede_init_key, NULL, | 163 | EVP_CIPH_FLAG_FIPS, des_ede_init_key, NULL, |
135 | EVP_CIPHER_set_asn1_iv, | 164 | EVP_CIPHER_set_asn1_iv, |
136 | EVP_CIPHER_get_asn1_iv, | 165 | EVP_CIPHER_get_asn1_iv, |
137 | NULL) | 166 | NULL) |
138 | 167 | ||
139 | #define des_ede3_cfb_cipher des_ede_cfb_cipher | 168 | #define des_ede3_cfb64_cipher des_ede_cfb64_cipher |
140 | #define des_ede3_ofb_cipher des_ede_ofb_cipher | 169 | #define des_ede3_ofb_cipher des_ede_ofb_cipher |
141 | #define des_ede3_cbc_cipher des_ede_cbc_cipher | 170 | #define des_ede3_cbc_cipher des_ede_cbc_cipher |
142 | #define des_ede3_ecb_cipher des_ede_ecb_cipher | 171 | #define des_ede3_ecb_cipher des_ede_ecb_cipher |
143 | 172 | ||
144 | BLOCK_CIPHER_defs(des_ede3, DES_EDE_KEY, NID_des_ede3, 8, 24, 8, 64, | 173 | BLOCK_CIPHER_defs(des_ede3, DES_EDE_KEY, NID_des_ede3, 8, 24, 8, 64, |
145 | 0, des_ede3_init_key, NULL, | 174 | EVP_CIPH_FLAG_FIPS, des_ede3_init_key, NULL, |
146 | EVP_CIPHER_set_asn1_iv, | 175 | EVP_CIPHER_set_asn1_iv, |
147 | EVP_CIPHER_get_asn1_iv, | 176 | EVP_CIPHER_get_asn1_iv, |
148 | NULL) | 177 | NULL) |
149 | 178 | ||
179 | BLOCK_CIPHER_def_cfb(des_ede3,DES_EDE_KEY,NID_des_ede3,24,8,1, | ||
180 | EVP_CIPH_FLAG_FIPS, des_ede3_init_key,NULL, | ||
181 | EVP_CIPHER_set_asn1_iv, | ||
182 | EVP_CIPHER_get_asn1_iv,NULL) | ||
183 | |||
184 | BLOCK_CIPHER_def_cfb(des_ede3,DES_EDE_KEY,NID_des_ede3,24,8,8, | ||
185 | EVP_CIPH_FLAG_FIPS, des_ede3_init_key,NULL, | ||
186 | EVP_CIPHER_set_asn1_iv, | ||
187 | EVP_CIPHER_get_asn1_iv,NULL) | ||
188 | |||
150 | static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, | 189 | static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, |
151 | const unsigned char *iv, int enc) | 190 | const unsigned char *iv, int enc) |
152 | { | 191 | { |
diff --git a/src/lib/libcrypto/evp/e_null.c b/src/lib/libcrypto/evp/e_null.c index 2420d7e5af..a84b0f14b1 100644 --- a/src/lib/libcrypto/evp/e_null.c +++ b/src/lib/libcrypto/evp/e_null.c | |||
@@ -69,7 +69,7 @@ static const EVP_CIPHER n_cipher= | |||
69 | { | 69 | { |
70 | NID_undef, | 70 | NID_undef, |
71 | 1,0,0, | 71 | 1,0,0, |
72 | 0, | 72 | EVP_CIPH_FLAG_FIPS, |
73 | null_init_key, | 73 | null_init_key, |
74 | null_cipher, | 74 | null_cipher, |
75 | NULL, | 75 | NULL, |
diff --git a/src/lib/libcrypto/evp/e_rc4.c b/src/lib/libcrypto/evp/e_rc4.c index d58f507837..8aa70585b9 100644 --- a/src/lib/libcrypto/evp/e_rc4.c +++ b/src/lib/libcrypto/evp/e_rc4.c | |||
@@ -62,6 +62,7 @@ | |||
62 | #include "cryptlib.h" | 62 | #include "cryptlib.h" |
63 | #include <openssl/evp.h> | 63 | #include <openssl/evp.h> |
64 | #include <openssl/objects.h> | 64 | #include <openssl/objects.h> |
65 | #include "evp_locl.h" | ||
65 | #include <openssl/rc4.h> | 66 | #include <openssl/rc4.h> |
66 | 67 | ||
67 | /* FIXME: surely this is available elsewhere? */ | 68 | /* FIXME: surely this is available elsewhere? */ |
diff --git a/src/lib/libcrypto/evp/evp.h b/src/lib/libcrypto/evp/evp.h index f9b48792ce..62d95354ef 100644 --- a/src/lib/libcrypto/evp/evp.h +++ b/src/lib/libcrypto/evp/evp.h | |||
@@ -75,6 +75,10 @@ | |||
75 | #include <openssl/bio.h> | 75 | #include <openssl/bio.h> |
76 | #endif | 76 | #endif |
77 | 77 | ||
78 | #ifdef OPENSSL_FIPS | ||
79 | #include <openssl/fips.h> | ||
80 | #endif | ||
81 | |||
78 | /* | 82 | /* |
79 | #define EVP_RC2_KEY_SIZE 16 | 83 | #define EVP_RC2_KEY_SIZE 16 |
80 | #define EVP_RC4_KEY_SIZE 16 | 84 | #define EVP_RC4_KEY_SIZE 16 |
@@ -236,6 +240,7 @@ struct env_md_st | |||
236 | 240 | ||
237 | #define EVP_MD_FLAG_ONESHOT 0x0001 /* digest can only handle a single | 241 | #define EVP_MD_FLAG_ONESHOT 0x0001 /* digest can only handle a single |
238 | * block */ | 242 | * block */ |
243 | #define EVP_MD_FLAG_FIPS 0x0400 /* Note if suitable for use in FIPS mode */ | ||
239 | 244 | ||
240 | #define EVP_PKEY_NULL_method NULL,NULL,{0,0,0,0} | 245 | #define EVP_PKEY_NULL_method NULL,NULL,{0,0,0,0} |
241 | 246 | ||
@@ -278,6 +283,9 @@ struct env_md_ctx_st | |||
278 | #define EVP_MD_CTX_FLAG_REUSE 0x0004 /* Don't free up ctx->md_data | 283 | #define EVP_MD_CTX_FLAG_REUSE 0x0004 /* Don't free up ctx->md_data |
279 | * in EVP_MD_CTX_cleanup */ | 284 | * in EVP_MD_CTX_cleanup */ |
280 | 285 | ||
286 | #define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008 /* Allow use of non FIPS digest | ||
287 | * in FIPS mode */ | ||
288 | |||
281 | struct evp_cipher_st | 289 | struct evp_cipher_st |
282 | { | 290 | { |
283 | int nid; | 291 | int nid; |
@@ -319,6 +327,10 @@ struct evp_cipher_st | |||
319 | #define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80 | 327 | #define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80 |
320 | /* Don't use standard block padding */ | 328 | /* Don't use standard block padding */ |
321 | #define EVP_CIPH_NO_PADDING 0x100 | 329 | #define EVP_CIPH_NO_PADDING 0x100 |
330 | /* Note if suitable for use in FIPS mode */ | ||
331 | #define EVP_CIPH_FLAG_FIPS 0x400 | ||
332 | /* Allow non FIPS cipher in FIPS mode */ | ||
333 | #define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x800 | ||
322 | 334 | ||
323 | /* ctrl() values */ | 335 | /* ctrl() values */ |
324 | 336 | ||
@@ -425,6 +437,9 @@ typedef int (EVP_PBE_KEYGEN)(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, | |||
425 | #define EVP_CIPHER_CTX_set_app_data(e,d) ((e)->app_data=(char *)(d)) | 437 | #define EVP_CIPHER_CTX_set_app_data(e,d) ((e)->app_data=(char *)(d)) |
426 | #define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) | 438 | #define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) |
427 | #define EVP_CIPHER_CTX_flags(e) ((e)->cipher->flags) | 439 | #define EVP_CIPHER_CTX_flags(e) ((e)->cipher->flags) |
440 | #define EVP_CIPHER_CTX_set_flags(ctx,flgs) ((ctx)->flags|=(flgs)) | ||
441 | #define EVP_CIPHER_CTX_clear_flags(ctx,flgs) ((ctx)->flags&=~(flgs)) | ||
442 | #define EVP_CIPHER_CTX_test_flags(ctx,flgs) ((ctx)->flags&(flgs)) | ||
428 | #define EVP_CIPHER_CTX_mode(e) ((e)->cipher->flags & EVP_CIPH_MODE) | 443 | #define EVP_CIPHER_CTX_mode(e) ((e)->cipher->flags & EVP_CIPH_MODE) |
429 | 444 | ||
430 | #define EVP_ENCODE_LENGTH(l) (((l+2)/3*4)+(l/48+1)*2+80) | 445 | #define EVP_ENCODE_LENGTH(l) (((l+2)/3*4)+(l/48+1)*2+80) |
@@ -446,6 +461,7 @@ void BIO_set_md(BIO *,const EVP_MD *md); | |||
446 | #endif | 461 | #endif |
447 | #define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)mdp) | 462 | #define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)mdp) |
448 | #define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(char *)mdcp) | 463 | #define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(char *)mdcp) |
464 | #define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0,(char *)mdcp) | ||
449 | #define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) | 465 | #define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) |
450 | #define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(char *)c_pp) | 466 | #define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(char *)c_pp) |
451 | 467 | ||
@@ -587,9 +603,20 @@ const EVP_CIPHER *EVP_des_ede(void); | |||
587 | const EVP_CIPHER *EVP_des_ede3(void); | 603 | const EVP_CIPHER *EVP_des_ede3(void); |
588 | const EVP_CIPHER *EVP_des_ede_ecb(void); | 604 | const EVP_CIPHER *EVP_des_ede_ecb(void); |
589 | const EVP_CIPHER *EVP_des_ede3_ecb(void); | 605 | const EVP_CIPHER *EVP_des_ede3_ecb(void); |
590 | const EVP_CIPHER *EVP_des_cfb(void); | 606 | const EVP_CIPHER *EVP_des_cfb64(void); |
591 | const EVP_CIPHER *EVP_des_ede_cfb(void); | 607 | # define EVP_des_cfb EVP_des_cfb64 |
592 | const EVP_CIPHER *EVP_des_ede3_cfb(void); | 608 | const EVP_CIPHER *EVP_des_cfb1(void); |
609 | const EVP_CIPHER *EVP_des_cfb8(void); | ||
610 | const EVP_CIPHER *EVP_des_ede_cfb64(void); | ||
611 | # define EVP_des_ede_cfb EVP_des_ede_cfb64 | ||
612 | #if 0 | ||
613 | const EVP_CIPHER *EVP_des_ede_cfb1(void); | ||
614 | const EVP_CIPHER *EVP_des_ede_cfb8(void); | ||
615 | #endif | ||
616 | const EVP_CIPHER *EVP_des_ede3_cfb64(void); | ||
617 | # define EVP_des_ede3_cfb EVP_des_ede3_cfb64 | ||
618 | const EVP_CIPHER *EVP_des_ede3_cfb1(void); | ||
619 | const EVP_CIPHER *EVP_des_ede3_cfb8(void); | ||
593 | const EVP_CIPHER *EVP_des_ofb(void); | 620 | const EVP_CIPHER *EVP_des_ofb(void); |
594 | const EVP_CIPHER *EVP_des_ede_ofb(void); | 621 | const EVP_CIPHER *EVP_des_ede_ofb(void); |
595 | const EVP_CIPHER *EVP_des_ede3_ofb(void); | 622 | const EVP_CIPHER *EVP_des_ede3_ofb(void); |
@@ -613,7 +640,8 @@ const EVP_CIPHER *EVP_rc4_40(void); | |||
613 | #endif | 640 | #endif |
614 | #ifndef OPENSSL_NO_IDEA | 641 | #ifndef OPENSSL_NO_IDEA |
615 | const EVP_CIPHER *EVP_idea_ecb(void); | 642 | const EVP_CIPHER *EVP_idea_ecb(void); |
616 | const EVP_CIPHER *EVP_idea_cfb(void); | 643 | const EVP_CIPHER *EVP_idea_cfb64(void); |
644 | # define EVP_idea_cfb EVP_idea_cfb64 | ||
617 | const EVP_CIPHER *EVP_idea_ofb(void); | 645 | const EVP_CIPHER *EVP_idea_ofb(void); |
618 | const EVP_CIPHER *EVP_idea_cbc(void); | 646 | const EVP_CIPHER *EVP_idea_cbc(void); |
619 | #endif | 647 | #endif |
@@ -622,45 +650,58 @@ const EVP_CIPHER *EVP_rc2_ecb(void); | |||
622 | const EVP_CIPHER *EVP_rc2_cbc(void); | 650 | const EVP_CIPHER *EVP_rc2_cbc(void); |
623 | const EVP_CIPHER *EVP_rc2_40_cbc(void); | 651 | const EVP_CIPHER *EVP_rc2_40_cbc(void); |
624 | const EVP_CIPHER *EVP_rc2_64_cbc(void); | 652 | const EVP_CIPHER *EVP_rc2_64_cbc(void); |
625 | const EVP_CIPHER *EVP_rc2_cfb(void); | 653 | const EVP_CIPHER *EVP_rc2_cfb64(void); |
654 | # define EVP_rc2_cfb EVP_rc2_cfb64 | ||
626 | const EVP_CIPHER *EVP_rc2_ofb(void); | 655 | const EVP_CIPHER *EVP_rc2_ofb(void); |
627 | #endif | 656 | #endif |
628 | #ifndef OPENSSL_NO_BF | 657 | #ifndef OPENSSL_NO_BF |
629 | const EVP_CIPHER *EVP_bf_ecb(void); | 658 | const EVP_CIPHER *EVP_bf_ecb(void); |
630 | const EVP_CIPHER *EVP_bf_cbc(void); | 659 | const EVP_CIPHER *EVP_bf_cbc(void); |
631 | const EVP_CIPHER *EVP_bf_cfb(void); | 660 | const EVP_CIPHER *EVP_bf_cfb64(void); |
661 | # define EVP_bf_cfb EVP_bf_cfb64 | ||
632 | const EVP_CIPHER *EVP_bf_ofb(void); | 662 | const EVP_CIPHER *EVP_bf_ofb(void); |
633 | #endif | 663 | #endif |
634 | #ifndef OPENSSL_NO_CAST | 664 | #ifndef OPENSSL_NO_CAST |
635 | const EVP_CIPHER *EVP_cast5_ecb(void); | 665 | const EVP_CIPHER *EVP_cast5_ecb(void); |
636 | const EVP_CIPHER *EVP_cast5_cbc(void); | 666 | const EVP_CIPHER *EVP_cast5_cbc(void); |
637 | const EVP_CIPHER *EVP_cast5_cfb(void); | 667 | const EVP_CIPHER *EVP_cast5_cfb64(void); |
668 | # define EVP_cast5_cfb EVP_cast5_cfb64 | ||
638 | const EVP_CIPHER *EVP_cast5_ofb(void); | 669 | const EVP_CIPHER *EVP_cast5_ofb(void); |
639 | #endif | 670 | #endif |
640 | #ifndef OPENSSL_NO_RC5 | 671 | #ifndef OPENSSL_NO_RC5 |
641 | const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void); | 672 | const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void); |
642 | const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void); | 673 | const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void); |
643 | const EVP_CIPHER *EVP_rc5_32_12_16_cfb(void); | 674 | const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void); |
675 | # define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64 | ||
644 | const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void); | 676 | const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void); |
645 | #endif | 677 | #endif |
646 | #ifndef OPENSSL_NO_AES | 678 | #ifndef OPENSSL_NO_AES |
647 | const EVP_CIPHER *EVP_aes_128_ecb(void); | 679 | const EVP_CIPHER *EVP_aes_128_ecb(void); |
648 | const EVP_CIPHER *EVP_aes_128_cbc(void); | 680 | const EVP_CIPHER *EVP_aes_128_cbc(void); |
649 | const EVP_CIPHER *EVP_aes_128_cfb(void); | 681 | const EVP_CIPHER *EVP_aes_128_cfb1(void); |
682 | const EVP_CIPHER *EVP_aes_128_cfb8(void); | ||
683 | const EVP_CIPHER *EVP_aes_128_cfb128(void); | ||
684 | # define EVP_aes_128_cfb EVP_aes_128_cfb128 | ||
650 | const EVP_CIPHER *EVP_aes_128_ofb(void); | 685 | const EVP_CIPHER *EVP_aes_128_ofb(void); |
651 | #if 0 | 686 | #if 0 |
652 | const EVP_CIPHER *EVP_aes_128_ctr(void); | 687 | const EVP_CIPHER *EVP_aes_128_ctr(void); |
653 | #endif | 688 | #endif |
654 | const EVP_CIPHER *EVP_aes_192_ecb(void); | 689 | const EVP_CIPHER *EVP_aes_192_ecb(void); |
655 | const EVP_CIPHER *EVP_aes_192_cbc(void); | 690 | const EVP_CIPHER *EVP_aes_192_cbc(void); |
656 | const EVP_CIPHER *EVP_aes_192_cfb(void); | 691 | const EVP_CIPHER *EVP_aes_192_cfb1(void); |
692 | const EVP_CIPHER *EVP_aes_192_cfb8(void); | ||
693 | const EVP_CIPHER *EVP_aes_192_cfb128(void); | ||
694 | # define EVP_aes_192_cfb EVP_aes_192_cfb128 | ||
657 | const EVP_CIPHER *EVP_aes_192_ofb(void); | 695 | const EVP_CIPHER *EVP_aes_192_ofb(void); |
658 | #if 0 | 696 | #if 0 |
659 | const EVP_CIPHER *EVP_aes_192_ctr(void); | 697 | const EVP_CIPHER *EVP_aes_192_ctr(void); |
660 | #endif | 698 | #endif |
661 | const EVP_CIPHER *EVP_aes_256_ecb(void); | 699 | const EVP_CIPHER *EVP_aes_256_ecb(void); |
662 | const EVP_CIPHER *EVP_aes_256_cbc(void); | 700 | const EVP_CIPHER *EVP_aes_256_cbc(void); |
663 | const EVP_CIPHER *EVP_aes_256_cfb(void); | 701 | const EVP_CIPHER *EVP_aes_256_cfb1(void); |
702 | const EVP_CIPHER *EVP_aes_256_cfb8(void); | ||
703 | const EVP_CIPHER *EVP_aes_256_cfb128(void); | ||
704 | # define EVP_aes_256_cfb EVP_aes_256_cfb128 | ||
664 | const EVP_CIPHER *EVP_aes_256_ofb(void); | 705 | const EVP_CIPHER *EVP_aes_256_ofb(void); |
665 | #if 0 | 706 | #if 0 |
666 | const EVP_CIPHER *EVP_aes_256_ctr(void); | 707 | const EVP_CIPHER *EVP_aes_256_ctr(void); |
@@ -775,13 +816,18 @@ void ERR_load_EVP_strings(void); | |||
775 | /* Error codes for the EVP functions. */ | 816 | /* Error codes for the EVP functions. */ |
776 | 817 | ||
777 | /* Function codes. */ | 818 | /* Function codes. */ |
819 | #define EVP_F_AES_INIT_KEY 129 | ||
778 | #define EVP_F_D2I_PKEY 100 | 820 | #define EVP_F_D2I_PKEY 100 |
821 | #define EVP_F_EVP_ADD_CIPHER 130 | ||
822 | #define EVP_F_EVP_ADD_DIGEST 131 | ||
779 | #define EVP_F_EVP_CIPHERINIT 123 | 823 | #define EVP_F_EVP_CIPHERINIT 123 |
780 | #define EVP_F_EVP_CIPHER_CTX_CTRL 124 | 824 | #define EVP_F_EVP_CIPHER_CTX_CTRL 124 |
781 | #define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 | 825 | #define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 |
782 | #define EVP_F_EVP_DECRYPTFINAL 101 | 826 | #define EVP_F_EVP_DECRYPTFINAL 101 |
783 | #define EVP_F_EVP_DIGESTINIT 128 | 827 | #define EVP_F_EVP_DIGESTINIT 128 |
784 | #define EVP_F_EVP_ENCRYPTFINAL 127 | 828 | #define EVP_F_EVP_ENCRYPTFINAL 127 |
829 | #define EVP_F_EVP_GET_CIPHERBYNAME 132 | ||
830 | #define EVP_F_EVP_GET_DIGESTBYNAME 133 | ||
785 | #define EVP_F_EVP_MD_CTX_COPY 110 | 831 | #define EVP_F_EVP_MD_CTX_COPY 110 |
786 | #define EVP_F_EVP_OPENINIT 102 | 832 | #define EVP_F_EVP_OPENINIT 102 |
787 | #define EVP_F_EVP_PBE_ALG_ADD 115 | 833 | #define EVP_F_EVP_PBE_ALG_ADD 115 |
@@ -805,6 +851,7 @@ void ERR_load_EVP_strings(void); | |||
805 | #define EVP_F_RC5_CTRL 125 | 851 | #define EVP_F_RC5_CTRL 125 |
806 | 852 | ||
807 | /* Reason codes. */ | 853 | /* Reason codes. */ |
854 | #define EVP_R_AES_KEY_SETUP_FAILED 140 | ||
808 | #define EVP_R_BAD_BLOCK_LENGTH 136 | 855 | #define EVP_R_BAD_BLOCK_LENGTH 136 |
809 | #define EVP_R_BAD_DECRYPT 100 | 856 | #define EVP_R_BAD_DECRYPT 100 |
810 | #define EVP_R_BAD_KEY_LENGTH 137 | 857 | #define EVP_R_BAD_KEY_LENGTH 137 |
@@ -816,6 +863,7 @@ void ERR_load_EVP_strings(void); | |||
816 | #define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 | 863 | #define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 |
817 | #define EVP_R_DECODE_ERROR 114 | 864 | #define EVP_R_DECODE_ERROR 114 |
818 | #define EVP_R_DIFFERENT_KEY_TYPES 101 | 865 | #define EVP_R_DIFFERENT_KEY_TYPES 101 |
866 | #define EVP_R_DISABLED_FOR_FIPS 141 | ||
819 | #define EVP_R_ENCODE_ERROR 115 | 867 | #define EVP_R_ENCODE_ERROR 115 |
820 | #define EVP_R_EVP_PBE_CIPHERINIT_ERROR 119 | 868 | #define EVP_R_EVP_PBE_CIPHERINIT_ERROR 119 |
821 | #define EVP_R_EXPECTING_AN_RSA_KEY 127 | 869 | #define EVP_R_EXPECTING_AN_RSA_KEY 127 |
diff --git a/src/lib/libcrypto/evp/evp_enc.c b/src/lib/libcrypto/evp/evp_enc.c index 8ea5aa935d..f549eeb437 100644 --- a/src/lib/libcrypto/evp/evp_enc.c +++ b/src/lib/libcrypto/evp/evp_enc.c | |||
@@ -82,6 +82,48 @@ int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, | |||
82 | return EVP_CipherInit_ex(ctx,cipher,NULL,key,iv,enc); | 82 | return EVP_CipherInit_ex(ctx,cipher,NULL,key,iv,enc); |
83 | } | 83 | } |
84 | 84 | ||
85 | #ifdef OPENSSL_FIPS | ||
86 | |||
87 | /* The purpose of these is to trap programs that attempt to use non FIPS | ||
88 | * algorithms in FIPS mode and ignore the errors. | ||
89 | */ | ||
90 | |||
91 | int bad_init(EVP_CIPHER_CTX *ctx, const unsigned char *key, | ||
92 | const unsigned char *iv, int enc) | ||
93 | { FIPS_ERROR_IGNORED("Cipher init"); return 0;} | ||
94 | |||
95 | int bad_do_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | ||
96 | const unsigned char *in, unsigned int inl) | ||
97 | { FIPS_ERROR_IGNORED("Cipher update"); return 0;} | ||
98 | |||
99 | /* NB: no cleanup because it is allowed after failed init */ | ||
100 | |||
101 | int bad_set_asn1(EVP_CIPHER_CTX *ctx, ASN1_TYPE *typ) | ||
102 | { FIPS_ERROR_IGNORED("Cipher set_asn1"); return 0;} | ||
103 | int bad_get_asn1(EVP_CIPHER_CTX *ctx, ASN1_TYPE *typ) | ||
104 | { FIPS_ERROR_IGNORED("Cipher get_asn1"); return 0;} | ||
105 | int bad_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr) | ||
106 | { FIPS_ERROR_IGNORED("Cipher ctrl"); return 0;} | ||
107 | |||
108 | static const EVP_CIPHER bad_cipher = | ||
109 | { | ||
110 | 0, | ||
111 | 0, | ||
112 | 0, | ||
113 | 0, | ||
114 | 0, | ||
115 | bad_init, | ||
116 | bad_do_cipher, | ||
117 | NULL, | ||
118 | 0, | ||
119 | bad_set_asn1, | ||
120 | bad_get_asn1, | ||
121 | bad_ctrl, | ||
122 | NULL | ||
123 | }; | ||
124 | |||
125 | #endif | ||
126 | |||
85 | int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, | 127 | int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, |
86 | const unsigned char *key, const unsigned char *iv, int enc) | 128 | const unsigned char *key, const unsigned char *iv, int enc) |
87 | { | 129 | { |
@@ -146,7 +188,6 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *imp | |||
146 | else | 188 | else |
147 | ctx->engine = NULL; | 189 | ctx->engine = NULL; |
148 | #endif | 190 | #endif |
149 | |||
150 | ctx->cipher=cipher; | 191 | ctx->cipher=cipher; |
151 | if (ctx->cipher->ctx_size) | 192 | if (ctx->cipher->ctx_size) |
152 | { | 193 | { |
@@ -210,6 +251,24 @@ skip_to_init: | |||
210 | } | 251 | } |
211 | } | 252 | } |
212 | 253 | ||
254 | #ifdef OPENSSL_FIPS | ||
255 | /* After 'key' is set no further parameters changes are permissible. | ||
256 | * So only check for non FIPS enabling at this point. | ||
257 | */ | ||
258 | if (key && FIPS_mode()) | ||
259 | { | ||
260 | if (!(ctx->cipher->flags & EVP_CIPH_FLAG_FIPS) | ||
261 | & !(ctx->flags & EVP_CIPH_FLAG_NON_FIPS_ALLOW)) | ||
262 | { | ||
263 | EVPerr(EVP_F_EVP_CIPHERINIT, EVP_R_DISABLED_FOR_FIPS); | ||
264 | ERR_add_error_data(2, "cipher=", | ||
265 | EVP_CIPHER_name(ctx->cipher)); | ||
266 | ctx->cipher = &bad_cipher; | ||
267 | return 0; | ||
268 | } | ||
269 | } | ||
270 | #endif | ||
271 | |||
213 | if(key || (ctx->cipher->flags & EVP_CIPH_ALWAYS_CALL_INIT)) { | 272 | if(key || (ctx->cipher->flags & EVP_CIPH_ALWAYS_CALL_INIT)) { |
214 | if(!ctx->cipher->init(ctx,key,iv,enc)) return 0; | 273 | if(!ctx->cipher->init(ctx,key,iv,enc)) return 0; |
215 | } | 274 | } |
diff --git a/src/lib/libcrypto/evp/evp_err.c b/src/lib/libcrypto/evp/evp_err.c index 3a23d21c21..40135d0729 100644 --- a/src/lib/libcrypto/evp/evp_err.c +++ b/src/lib/libcrypto/evp/evp_err.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* crypto/evp/evp_err.c */ | 1 | /* crypto/evp/evp_err.c */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. |
4 | * | 4 | * |
5 | * Redistribution and use in source and binary forms, with or without | 5 | * Redistribution and use in source and binary forms, with or without |
6 | * modification, are permitted provided that the following conditions | 6 | * modification, are permitted provided that the following conditions |
@@ -66,13 +66,18 @@ | |||
66 | #ifndef OPENSSL_NO_ERR | 66 | #ifndef OPENSSL_NO_ERR |
67 | static ERR_STRING_DATA EVP_str_functs[]= | 67 | static ERR_STRING_DATA EVP_str_functs[]= |
68 | { | 68 | { |
69 | {ERR_PACK(0,EVP_F_AES_INIT_KEY,0), "AES_INIT_KEY"}, | ||
69 | {ERR_PACK(0,EVP_F_D2I_PKEY,0), "D2I_PKEY"}, | 70 | {ERR_PACK(0,EVP_F_D2I_PKEY,0), "D2I_PKEY"}, |
71 | {ERR_PACK(0,EVP_F_EVP_ADD_CIPHER,0), "EVP_add_cipher"}, | ||
72 | {ERR_PACK(0,EVP_F_EVP_ADD_DIGEST,0), "EVP_add_digest"}, | ||
70 | {ERR_PACK(0,EVP_F_EVP_CIPHERINIT,0), "EVP_CipherInit"}, | 73 | {ERR_PACK(0,EVP_F_EVP_CIPHERINIT,0), "EVP_CipherInit"}, |
71 | {ERR_PACK(0,EVP_F_EVP_CIPHER_CTX_CTRL,0), "EVP_CIPHER_CTX_ctrl"}, | 74 | {ERR_PACK(0,EVP_F_EVP_CIPHER_CTX_CTRL,0), "EVP_CIPHER_CTX_ctrl"}, |
72 | {ERR_PACK(0,EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH,0), "EVP_CIPHER_CTX_set_key_length"}, | 75 | {ERR_PACK(0,EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH,0), "EVP_CIPHER_CTX_set_key_length"}, |
73 | {ERR_PACK(0,EVP_F_EVP_DECRYPTFINAL,0), "EVP_DecryptFinal"}, | 76 | {ERR_PACK(0,EVP_F_EVP_DECRYPTFINAL,0), "EVP_DecryptFinal"}, |
74 | {ERR_PACK(0,EVP_F_EVP_DIGESTINIT,0), "EVP_DigestInit"}, | 77 | {ERR_PACK(0,EVP_F_EVP_DIGESTINIT,0), "EVP_DigestInit"}, |
75 | {ERR_PACK(0,EVP_F_EVP_ENCRYPTFINAL,0), "EVP_EncryptFinal"}, | 78 | {ERR_PACK(0,EVP_F_EVP_ENCRYPTFINAL,0), "EVP_EncryptFinal"}, |
79 | {ERR_PACK(0,EVP_F_EVP_GET_CIPHERBYNAME,0), "EVP_get_cipherbyname"}, | ||
80 | {ERR_PACK(0,EVP_F_EVP_GET_DIGESTBYNAME,0), "EVP_get_digestbyname"}, | ||
76 | {ERR_PACK(0,EVP_F_EVP_MD_CTX_COPY,0), "EVP_MD_CTX_copy"}, | 81 | {ERR_PACK(0,EVP_F_EVP_MD_CTX_COPY,0), "EVP_MD_CTX_copy"}, |
77 | {ERR_PACK(0,EVP_F_EVP_OPENINIT,0), "EVP_OpenInit"}, | 82 | {ERR_PACK(0,EVP_F_EVP_OPENINIT,0), "EVP_OpenInit"}, |
78 | {ERR_PACK(0,EVP_F_EVP_PBE_ALG_ADD,0), "EVP_PBE_alg_add"}, | 83 | {ERR_PACK(0,EVP_F_EVP_PBE_ALG_ADD,0), "EVP_PBE_alg_add"}, |
@@ -99,6 +104,7 @@ static ERR_STRING_DATA EVP_str_functs[]= | |||
99 | 104 | ||
100 | static ERR_STRING_DATA EVP_str_reasons[]= | 105 | static ERR_STRING_DATA EVP_str_reasons[]= |
101 | { | 106 | { |
107 | {EVP_R_AES_KEY_SETUP_FAILED ,"aes key setup failed"}, | ||
102 | {EVP_R_BAD_BLOCK_LENGTH ,"bad block length"}, | 108 | {EVP_R_BAD_BLOCK_LENGTH ,"bad block length"}, |
103 | {EVP_R_BAD_DECRYPT ,"bad decrypt"}, | 109 | {EVP_R_BAD_DECRYPT ,"bad decrypt"}, |
104 | {EVP_R_BAD_KEY_LENGTH ,"bad key length"}, | 110 | {EVP_R_BAD_KEY_LENGTH ,"bad key length"}, |
@@ -110,6 +116,7 @@ static ERR_STRING_DATA EVP_str_reasons[]= | |||
110 | {EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH ,"data not multiple of block length"}, | 116 | {EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH ,"data not multiple of block length"}, |
111 | {EVP_R_DECODE_ERROR ,"decode error"}, | 117 | {EVP_R_DECODE_ERROR ,"decode error"}, |
112 | {EVP_R_DIFFERENT_KEY_TYPES ,"different key types"}, | 118 | {EVP_R_DIFFERENT_KEY_TYPES ,"different key types"}, |
119 | {EVP_R_DISABLED_FOR_FIPS ,"disabled for fips"}, | ||
113 | {EVP_R_ENCODE_ERROR ,"encode error"}, | 120 | {EVP_R_ENCODE_ERROR ,"encode error"}, |
114 | {EVP_R_EVP_PBE_CIPHERINIT_ERROR ,"evp pbe cipherinit error"}, | 121 | {EVP_R_EVP_PBE_CIPHERINIT_ERROR ,"evp pbe cipherinit error"}, |
115 | {EVP_R_EXPECTING_AN_RSA_KEY ,"expecting an rsa key"}, | 122 | {EVP_R_EXPECTING_AN_RSA_KEY ,"expecting an rsa key"}, |
diff --git a/src/lib/libcrypto/evp/evp_lib.c b/src/lib/libcrypto/evp/evp_lib.c index 52a3b287be..a63ba19317 100644 --- a/src/lib/libcrypto/evp/evp_lib.c +++ b/src/lib/libcrypto/evp/evp_lib.c | |||
@@ -68,7 +68,7 @@ int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type) | |||
68 | if (c->cipher->set_asn1_parameters != NULL) | 68 | if (c->cipher->set_asn1_parameters != NULL) |
69 | ret=c->cipher->set_asn1_parameters(c,type); | 69 | ret=c->cipher->set_asn1_parameters(c,type); |
70 | else | 70 | else |
71 | ret=1; | 71 | return -1; |
72 | return(ret); | 72 | return(ret); |
73 | } | 73 | } |
74 | 74 | ||
@@ -79,7 +79,7 @@ int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type) | |||
79 | if (c->cipher->get_asn1_parameters != NULL) | 79 | if (c->cipher->get_asn1_parameters != NULL) |
80 | ret=c->cipher->get_asn1_parameters(c,type); | 80 | ret=c->cipher->get_asn1_parameters(c,type); |
81 | else | 81 | else |
82 | ret=1; | 82 | return -1; |
83 | return(ret); | 83 | return(ret); |
84 | } | 84 | } |
85 | 85 | ||
@@ -133,6 +133,30 @@ int EVP_CIPHER_type(const EVP_CIPHER *ctx) | |||
133 | 133 | ||
134 | return NID_rc4; | 134 | return NID_rc4; |
135 | 135 | ||
136 | case NID_aes_128_cfb128: | ||
137 | case NID_aes_128_cfb8: | ||
138 | case NID_aes_128_cfb1: | ||
139 | |||
140 | return NID_aes_128_cfb128; | ||
141 | |||
142 | case NID_aes_192_cfb128: | ||
143 | case NID_aes_192_cfb8: | ||
144 | case NID_aes_192_cfb1: | ||
145 | |||
146 | return NID_aes_192_cfb128; | ||
147 | |||
148 | case NID_aes_256_cfb128: | ||
149 | case NID_aes_256_cfb8: | ||
150 | case NID_aes_256_cfb1: | ||
151 | |||
152 | return NID_aes_256_cfb128; | ||
153 | |||
154 | case NID_des_cfb64: | ||
155 | case NID_des_cfb8: | ||
156 | case NID_des_cfb1: | ||
157 | |||
158 | return NID_des_cfb64; | ||
159 | |||
136 | default: | 160 | default: |
137 | /* Check it has an OID and it is valid */ | 161 | /* Check it has an OID and it is valid */ |
138 | otmp = OBJ_nid2obj(nid); | 162 | otmp = OBJ_nid2obj(nid); |
diff --git a/src/lib/libcrypto/evp/evp_locl.h b/src/lib/libcrypto/evp/evp_locl.h index 4d81a3bf4c..f8c5343620 100644 --- a/src/lib/libcrypto/evp/evp_locl.h +++ b/src/lib/libcrypto/evp/evp_locl.h | |||
@@ -90,7 +90,7 @@ static int cname##_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const uns | |||
90 | } | 90 | } |
91 | 91 | ||
92 | #define BLOCK_CIPHER_func_cfb(cname, cprefix, cbits, kstruct, ksched) \ | 92 | #define BLOCK_CIPHER_func_cfb(cname, cprefix, cbits, kstruct, ksched) \ |
93 | static int cname##_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl) \ | 93 | static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl) \ |
94 | {\ | 94 | {\ |
95 | cprefix##_cfb##cbits##_encrypt(in, out, (long)inl, &((kstruct *)ctx->cipher_data)->ksched, ctx->iv, &ctx->num, ctx->encrypt);\ | 95 | cprefix##_cfb##cbits##_encrypt(in, out, (long)inl, &((kstruct *)ctx->cipher_data)->ksched, ctx->iv, &ctx->num, ctx->encrypt);\ |
96 | return 1;\ | 96 | return 1;\ |
@@ -127,7 +127,7 @@ BLOCK_CIPHER_def1(cname, cbc, cbc, CBC, kstruct, nid, block_size, key_len, \ | |||
127 | #define BLOCK_CIPHER_def_cfb(cname, kstruct, nid, key_len, \ | 127 | #define BLOCK_CIPHER_def_cfb(cname, kstruct, nid, key_len, \ |
128 | iv_len, cbits, flags, init_key, cleanup, \ | 128 | iv_len, cbits, flags, init_key, cleanup, \ |
129 | set_asn1, get_asn1, ctrl) \ | 129 | set_asn1, get_asn1, ctrl) \ |
130 | BLOCK_CIPHER_def1(cname, cfb##cbits, cfb, CFB, kstruct, nid, 1, \ | 130 | BLOCK_CIPHER_def1(cname, cfb##cbits, cfb##cbits, CFB, kstruct, nid, 1, \ |
131 | key_len, iv_len, flags, init_key, cleanup, set_asn1, \ | 131 | key_len, iv_len, flags, init_key, cleanup, set_asn1, \ |
132 | get_asn1, ctrl) | 132 | get_asn1, ctrl) |
133 | 133 | ||
@@ -225,3 +225,28 @@ const EVP_CIPHER *EVP_##cname##_ecb(void) { return &cname##_ecb; } | |||
225 | get_asn1, ctrl) | 225 | get_asn1, ctrl) |
226 | 226 | ||
227 | #define EVP_C_DATA(kstruct, ctx) ((kstruct *)(ctx)->cipher_data) | 227 | #define EVP_C_DATA(kstruct, ctx) ((kstruct *)(ctx)->cipher_data) |
228 | |||
229 | #define IMPLEMENT_CFBR(cipher,cprefix,kstruct,ksched,keysize,cbits,iv_len,flags) \ | ||
230 | BLOCK_CIPHER_func_cfb(cipher##_##keysize,cprefix,cbits,kstruct,ksched) \ | ||
231 | BLOCK_CIPHER_def_cfb(cipher##_##keysize,kstruct, \ | ||
232 | NID_##cipher##_##keysize, keysize/8, iv_len, cbits, \ | ||
233 | flags, cipher##_init_key, NULL, \ | ||
234 | EVP_CIPHER_set_asn1_iv, \ | ||
235 | EVP_CIPHER_get_asn1_iv, \ | ||
236 | NULL) | ||
237 | |||
238 | #ifdef OPENSSL_FIPS | ||
239 | #define RC2_set_key private_RC2_set_key | ||
240 | #define RC4_set_key private_RC4_set_key | ||
241 | #define CAST_set_key private_CAST_set_key | ||
242 | #define RC5_32_set_key private_RC5_32_set_key | ||
243 | #define BF_set_key private_BF_set_key | ||
244 | #define idea_set_encrypt_key private_idea_set_encrypt_key | ||
245 | |||
246 | #define MD5_Init private_MD5_Init | ||
247 | #define MD4_Init private_MD4_Init | ||
248 | #define MD2_Init private_MD2_Init | ||
249 | #define MDC2_Init private_MDC2_Init | ||
250 | #define SHA_Init private_SHA_Init | ||
251 | |||
252 | #endif | ||
diff --git a/src/lib/libcrypto/evp/evp_pkey.c b/src/lib/libcrypto/evp/evp_pkey.c index eb481ec661..47a69932a5 100644 --- a/src/lib/libcrypto/evp/evp_pkey.c +++ b/src/lib/libcrypto/evp/evp_pkey.c | |||
@@ -235,7 +235,11 @@ PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken) | |||
235 | return NULL; | 235 | return NULL; |
236 | } | 236 | } |
237 | p8->broken = broken; | 237 | p8->broken = broken; |
238 | ASN1_INTEGER_set (p8->version, 0); | 238 | if (!ASN1_INTEGER_set(p8->version, 0)) { |
239 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | ||
240 | PKCS8_PRIV_KEY_INFO_free (p8); | ||
241 | return NULL; | ||
242 | } | ||
239 | if (!(p8->pkeyalg->parameter = ASN1_TYPE_new ())) { | 243 | if (!(p8->pkeyalg->parameter = ASN1_TYPE_new ())) { |
240 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | 244 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); |
241 | PKCS8_PRIV_KEY_INFO_free (p8); | 245 | PKCS8_PRIV_KEY_INFO_free (p8); |
@@ -303,29 +307,35 @@ PKCS8_PRIV_KEY_INFO *PKCS8_set_broken(PKCS8_PRIV_KEY_INFO *p8, int broken) | |||
303 | #ifndef OPENSSL_NO_DSA | 307 | #ifndef OPENSSL_NO_DSA |
304 | static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey) | 308 | static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey) |
305 | { | 309 | { |
306 | ASN1_STRING *params; | 310 | ASN1_STRING *params = NULL; |
307 | ASN1_INTEGER *prkey; | 311 | ASN1_INTEGER *prkey = NULL; |
308 | ASN1_TYPE *ttmp; | 312 | ASN1_TYPE *ttmp = NULL; |
309 | STACK_OF(ASN1_TYPE) *ndsa; | 313 | STACK_OF(ASN1_TYPE) *ndsa = NULL; |
310 | unsigned char *p, *q; | 314 | unsigned char *p = NULL, *q; |
311 | int len; | 315 | int len; |
312 | 316 | ||
313 | p8->pkeyalg->algorithm = OBJ_nid2obj(NID_dsa); | 317 | p8->pkeyalg->algorithm = OBJ_nid2obj(NID_dsa); |
314 | len = i2d_DSAparams (pkey->pkey.dsa, NULL); | 318 | len = i2d_DSAparams (pkey->pkey.dsa, NULL); |
315 | if (!(p = OPENSSL_malloc(len))) { | 319 | if (!(p = OPENSSL_malloc(len))) { |
316 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | 320 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); |
317 | PKCS8_PRIV_KEY_INFO_free (p8); | 321 | goto err; |
318 | return 0; | ||
319 | } | 322 | } |
320 | q = p; | 323 | q = p; |
321 | i2d_DSAparams (pkey->pkey.dsa, &q); | 324 | i2d_DSAparams (pkey->pkey.dsa, &q); |
322 | params = ASN1_STRING_new(); | 325 | if (!(params = ASN1_STRING_new())) { |
323 | ASN1_STRING_set(params, p, len); | 326 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); |
327 | goto err; | ||
328 | } | ||
329 | if (!ASN1_STRING_set(params, p, len)) { | ||
330 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | ||
331 | goto err; | ||
332 | } | ||
324 | OPENSSL_free(p); | 333 | OPENSSL_free(p); |
334 | p = NULL; | ||
325 | /* Get private key into integer */ | 335 | /* Get private key into integer */ |
326 | if (!(prkey = BN_to_ASN1_INTEGER (pkey->pkey.dsa->priv_key, NULL))) { | 336 | if (!(prkey = BN_to_ASN1_INTEGER (pkey->pkey.dsa->priv_key, NULL))) { |
327 | EVPerr(EVP_F_EVP_PKEY2PKCS8,EVP_R_ENCODE_ERROR); | 337 | EVPerr(EVP_F_EVP_PKEY2PKCS8,EVP_R_ENCODE_ERROR); |
328 | return 0; | 338 | goto err; |
329 | } | 339 | } |
330 | 340 | ||
331 | switch(p8->broken) { | 341 | switch(p8->broken) { |
@@ -336,12 +346,13 @@ static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey) | |||
336 | if (!ASN1_pack_string((char *)prkey, i2d_ASN1_INTEGER, | 346 | if (!ASN1_pack_string((char *)prkey, i2d_ASN1_INTEGER, |
337 | &p8->pkey->value.octet_string)) { | 347 | &p8->pkey->value.octet_string)) { |
338 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | 348 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); |
339 | M_ASN1_INTEGER_free (prkey); | 349 | goto err; |
340 | return 0; | ||
341 | } | 350 | } |
342 | 351 | ||
343 | M_ASN1_INTEGER_free (prkey); | 352 | M_ASN1_INTEGER_free (prkey); |
353 | prkey = NULL; | ||
344 | p8->pkeyalg->parameter->value.sequence = params; | 354 | p8->pkeyalg->parameter->value.sequence = params; |
355 | params = NULL; | ||
345 | p8->pkeyalg->parameter->type = V_ASN1_SEQUENCE; | 356 | p8->pkeyalg->parameter->type = V_ASN1_SEQUENCE; |
346 | 357 | ||
347 | break; | 358 | break; |
@@ -349,32 +360,51 @@ static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey) | |||
349 | case PKCS8_NS_DB: | 360 | case PKCS8_NS_DB: |
350 | 361 | ||
351 | p8->pkeyalg->parameter->value.sequence = params; | 362 | p8->pkeyalg->parameter->value.sequence = params; |
363 | params = NULL; | ||
352 | p8->pkeyalg->parameter->type = V_ASN1_SEQUENCE; | 364 | p8->pkeyalg->parameter->type = V_ASN1_SEQUENCE; |
353 | ndsa = sk_ASN1_TYPE_new_null(); | 365 | if (!(ndsa = sk_ASN1_TYPE_new_null())) { |
354 | ttmp = ASN1_TYPE_new(); | 366 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); |
355 | if (!(ttmp->value.integer = BN_to_ASN1_INTEGER (pkey->pkey.dsa->pub_key, NULL))) { | 367 | goto err; |
368 | } | ||
369 | if (!(ttmp = ASN1_TYPE_new())) { | ||
370 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | ||
371 | goto err; | ||
372 | } | ||
373 | if (!(ttmp->value.integer = | ||
374 | BN_to_ASN1_INTEGER(pkey->pkey.dsa->pub_key, NULL))) { | ||
356 | EVPerr(EVP_F_EVP_PKEY2PKCS8,EVP_R_ENCODE_ERROR); | 375 | EVPerr(EVP_F_EVP_PKEY2PKCS8,EVP_R_ENCODE_ERROR); |
357 | PKCS8_PRIV_KEY_INFO_free(p8); | 376 | goto err; |
358 | return 0; | ||
359 | } | 377 | } |
360 | ttmp->type = V_ASN1_INTEGER; | 378 | ttmp->type = V_ASN1_INTEGER; |
361 | sk_ASN1_TYPE_push(ndsa, ttmp); | 379 | if (!sk_ASN1_TYPE_push(ndsa, ttmp)) { |
380 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | ||
381 | goto err; | ||
382 | } | ||
362 | 383 | ||
363 | ttmp = ASN1_TYPE_new(); | 384 | if (!(ttmp = ASN1_TYPE_new())) { |
385 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | ||
386 | goto err; | ||
387 | } | ||
364 | ttmp->value.integer = prkey; | 388 | ttmp->value.integer = prkey; |
389 | prkey = NULL; | ||
365 | ttmp->type = V_ASN1_INTEGER; | 390 | ttmp->type = V_ASN1_INTEGER; |
366 | sk_ASN1_TYPE_push(ndsa, ttmp); | 391 | if (!sk_ASN1_TYPE_push(ndsa, ttmp)) { |
392 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | ||
393 | goto err; | ||
394 | } | ||
395 | ttmp = NULL; | ||
367 | 396 | ||
368 | p8->pkey->value.octet_string = ASN1_OCTET_STRING_new(); | 397 | if (!(p8->pkey->value.octet_string = ASN1_OCTET_STRING_new())) { |
398 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | ||
399 | goto err; | ||
400 | } | ||
369 | 401 | ||
370 | if (!ASN1_seq_pack_ASN1_TYPE(ndsa, i2d_ASN1_TYPE, | 402 | if (!ASN1_seq_pack_ASN1_TYPE(ndsa, i2d_ASN1_TYPE, |
371 | &p8->pkey->value.octet_string->data, | 403 | &p8->pkey->value.octet_string->data, |
372 | &p8->pkey->value.octet_string->length)) { | 404 | &p8->pkey->value.octet_string->length)) { |
373 | 405 | ||
374 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | 406 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); |
375 | sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free); | 407 | goto err; |
376 | M_ASN1_INTEGER_free(prkey); | ||
377 | return 0; | ||
378 | } | 408 | } |
379 | sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free); | 409 | sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free); |
380 | break; | 410 | break; |
@@ -382,31 +412,57 @@ static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey) | |||
382 | case PKCS8_EMBEDDED_PARAM: | 412 | case PKCS8_EMBEDDED_PARAM: |
383 | 413 | ||
384 | p8->pkeyalg->parameter->type = V_ASN1_NULL; | 414 | p8->pkeyalg->parameter->type = V_ASN1_NULL; |
385 | ndsa = sk_ASN1_TYPE_new_null(); | 415 | if (!(ndsa = sk_ASN1_TYPE_new_null())) { |
386 | ttmp = ASN1_TYPE_new(); | 416 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); |
417 | goto err; | ||
418 | } | ||
419 | if (!(ttmp = ASN1_TYPE_new())) { | ||
420 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | ||
421 | goto err; | ||
422 | } | ||
387 | ttmp->value.sequence = params; | 423 | ttmp->value.sequence = params; |
424 | params = NULL; | ||
388 | ttmp->type = V_ASN1_SEQUENCE; | 425 | ttmp->type = V_ASN1_SEQUENCE; |
389 | sk_ASN1_TYPE_push(ndsa, ttmp); | 426 | if (!sk_ASN1_TYPE_push(ndsa, ttmp)) { |
427 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | ||
428 | goto err; | ||
429 | } | ||
390 | 430 | ||
391 | ttmp = ASN1_TYPE_new(); | 431 | if (!(ttmp = ASN1_TYPE_new())) { |
432 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | ||
433 | goto err; | ||
434 | } | ||
392 | ttmp->value.integer = prkey; | 435 | ttmp->value.integer = prkey; |
436 | prkey = NULL; | ||
393 | ttmp->type = V_ASN1_INTEGER; | 437 | ttmp->type = V_ASN1_INTEGER; |
394 | sk_ASN1_TYPE_push(ndsa, ttmp); | 438 | if (!sk_ASN1_TYPE_push(ndsa, ttmp)) { |
439 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | ||
440 | goto err; | ||
441 | } | ||
442 | ttmp = NULL; | ||
395 | 443 | ||
396 | p8->pkey->value.octet_string = ASN1_OCTET_STRING_new(); | 444 | if (!(p8->pkey->value.octet_string = ASN1_OCTET_STRING_new())) { |
445 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | ||
446 | goto err; | ||
447 | } | ||
397 | 448 | ||
398 | if (!ASN1_seq_pack_ASN1_TYPE(ndsa, i2d_ASN1_TYPE, | 449 | if (!ASN1_seq_pack_ASN1_TYPE(ndsa, i2d_ASN1_TYPE, |
399 | &p8->pkey->value.octet_string->data, | 450 | &p8->pkey->value.octet_string->data, |
400 | &p8->pkey->value.octet_string->length)) { | 451 | &p8->pkey->value.octet_string->length)) { |
401 | 452 | ||
402 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); | 453 | EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE); |
403 | sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free); | 454 | goto err; |
404 | M_ASN1_INTEGER_free (prkey); | ||
405 | return 0; | ||
406 | } | 455 | } |
407 | sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free); | 456 | sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free); |
408 | break; | 457 | break; |
409 | } | 458 | } |
410 | return 1; | 459 | return 1; |
460 | err: | ||
461 | if (p != NULL) OPENSSL_free(p); | ||
462 | if (params != NULL) ASN1_STRING_free(params); | ||
463 | if (prkey != NULL) M_ASN1_INTEGER_free(prkey); | ||
464 | if (ttmp != NULL) ASN1_TYPE_free(ttmp); | ||
465 | if (ndsa != NULL) sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free); | ||
466 | return 0; | ||
411 | } | 467 | } |
412 | #endif | 468 | #endif |
diff --git a/src/lib/libcrypto/evp/evp_test.c b/src/lib/libcrypto/evp/evp_test.c index 28460173f7..a624cfd248 100644 --- a/src/lib/libcrypto/evp/evp_test.c +++ b/src/lib/libcrypto/evp/evp_test.c | |||
@@ -136,7 +136,7 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn, | |||
136 | const unsigned char *iv,int in, | 136 | const unsigned char *iv,int in, |
137 | const unsigned char *plaintext,int pn, | 137 | const unsigned char *plaintext,int pn, |
138 | const unsigned char *ciphertext,int cn, | 138 | const unsigned char *ciphertext,int cn, |
139 | int encdec) | 139 | int encdec,int multiplier) |
140 | { | 140 | { |
141 | EVP_CIPHER_CTX ctx; | 141 | EVP_CIPHER_CTX ctx; |
142 | unsigned char out[4096]; | 142 | unsigned char out[4096]; |
@@ -162,22 +162,25 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn, | |||
162 | if(!EVP_EncryptInit_ex(&ctx,c,NULL,key,iv)) | 162 | if(!EVP_EncryptInit_ex(&ctx,c,NULL,key,iv)) |
163 | { | 163 | { |
164 | fprintf(stderr,"EncryptInit failed\n"); | 164 | fprintf(stderr,"EncryptInit failed\n"); |
165 | ERR_print_errors_fp(stderr); | ||
165 | test1_exit(10); | 166 | test1_exit(10); |
166 | } | 167 | } |
167 | EVP_CIPHER_CTX_set_padding(&ctx,0); | 168 | EVP_CIPHER_CTX_set_padding(&ctx,0); |
168 | 169 | ||
169 | if(!EVP_EncryptUpdate(&ctx,out,&outl,plaintext,pn)) | 170 | if(!EVP_EncryptUpdate(&ctx,out,&outl,plaintext,pn*multiplier)) |
170 | { | 171 | { |
171 | fprintf(stderr,"Encrypt failed\n"); | 172 | fprintf(stderr,"Encrypt failed\n"); |
173 | ERR_print_errors_fp(stderr); | ||
172 | test1_exit(6); | 174 | test1_exit(6); |
173 | } | 175 | } |
174 | if(!EVP_EncryptFinal_ex(&ctx,out+outl,&outl2)) | 176 | if(!EVP_EncryptFinal_ex(&ctx,out+outl,&outl2)) |
175 | { | 177 | { |
176 | fprintf(stderr,"EncryptFinal failed\n"); | 178 | fprintf(stderr,"EncryptFinal failed\n"); |
179 | ERR_print_errors_fp(stderr); | ||
177 | test1_exit(7); | 180 | test1_exit(7); |
178 | } | 181 | } |
179 | 182 | ||
180 | if(outl+outl2 != cn) | 183 | if(outl+outl2 != cn*multiplier) |
181 | { | 184 | { |
182 | fprintf(stderr,"Ciphertext length mismatch got %d expected %d\n", | 185 | fprintf(stderr,"Ciphertext length mismatch got %d expected %d\n", |
183 | outl+outl2,cn); | 186 | outl+outl2,cn); |
@@ -198,22 +201,25 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn, | |||
198 | if(!EVP_DecryptInit_ex(&ctx,c,NULL,key,iv)) | 201 | if(!EVP_DecryptInit_ex(&ctx,c,NULL,key,iv)) |
199 | { | 202 | { |
200 | fprintf(stderr,"DecryptInit failed\n"); | 203 | fprintf(stderr,"DecryptInit failed\n"); |
204 | ERR_print_errors_fp(stderr); | ||
201 | test1_exit(11); | 205 | test1_exit(11); |
202 | } | 206 | } |
203 | EVP_CIPHER_CTX_set_padding(&ctx,0); | 207 | EVP_CIPHER_CTX_set_padding(&ctx,0); |
204 | 208 | ||
205 | if(!EVP_DecryptUpdate(&ctx,out,&outl,ciphertext,cn)) | 209 | if(!EVP_DecryptUpdate(&ctx,out,&outl,ciphertext,cn*multiplier)) |
206 | { | 210 | { |
207 | fprintf(stderr,"Decrypt failed\n"); | 211 | fprintf(stderr,"Decrypt failed\n"); |
212 | ERR_print_errors_fp(stderr); | ||
208 | test1_exit(6); | 213 | test1_exit(6); |
209 | } | 214 | } |
210 | if(!EVP_DecryptFinal_ex(&ctx,out+outl,&outl2)) | 215 | if(!EVP_DecryptFinal_ex(&ctx,out+outl,&outl2)) |
211 | { | 216 | { |
212 | fprintf(stderr,"DecryptFinal failed\n"); | 217 | fprintf(stderr,"DecryptFinal failed\n"); |
218 | ERR_print_errors_fp(stderr); | ||
213 | test1_exit(7); | 219 | test1_exit(7); |
214 | } | 220 | } |
215 | 221 | ||
216 | if(outl+outl2 != cn) | 222 | if(outl+outl2 != cn*multiplier) |
217 | { | 223 | { |
218 | fprintf(stderr,"Plaintext length mismatch got %d expected %d\n", | 224 | fprintf(stderr,"Plaintext length mismatch got %d expected %d\n", |
219 | outl+outl2,cn); | 225 | outl+outl2,cn); |
@@ -238,7 +244,7 @@ static int test_cipher(const char *cipher,const unsigned char *key,int kn, | |||
238 | const unsigned char *iv,int in, | 244 | const unsigned char *iv,int in, |
239 | const unsigned char *plaintext,int pn, | 245 | const unsigned char *plaintext,int pn, |
240 | const unsigned char *ciphertext,int cn, | 246 | const unsigned char *ciphertext,int cn, |
241 | int encdec) | 247 | int encdec,int multiplier) |
242 | { | 248 | { |
243 | const EVP_CIPHER *c; | 249 | const EVP_CIPHER *c; |
244 | 250 | ||
@@ -246,7 +252,7 @@ static int test_cipher(const char *cipher,const unsigned char *key,int kn, | |||
246 | if(!c) | 252 | if(!c) |
247 | return 0; | 253 | return 0; |
248 | 254 | ||
249 | test1(c,key,kn,iv,in,plaintext,pn,ciphertext,cn,encdec); | 255 | test1(c,key,kn,iv,in,plaintext,pn,ciphertext,cn,encdec,multiplier); |
250 | 256 | ||
251 | return 1; | 257 | return 1; |
252 | } | 258 | } |
@@ -272,16 +278,19 @@ static int test_digest(const char *digest, | |||
272 | if(!EVP_DigestInit_ex(&ctx,d, NULL)) | 278 | if(!EVP_DigestInit_ex(&ctx,d, NULL)) |
273 | { | 279 | { |
274 | fprintf(stderr,"DigestInit failed\n"); | 280 | fprintf(stderr,"DigestInit failed\n"); |
281 | ERR_print_errors_fp(stderr); | ||
275 | EXIT(100); | 282 | EXIT(100); |
276 | } | 283 | } |
277 | if(!EVP_DigestUpdate(&ctx,plaintext,pn)) | 284 | if(!EVP_DigestUpdate(&ctx,plaintext,pn)) |
278 | { | 285 | { |
279 | fprintf(stderr,"DigestUpdate failed\n"); | 286 | fprintf(stderr,"DigestUpdate failed\n"); |
287 | ERR_print_errors_fp(stderr); | ||
280 | EXIT(101); | 288 | EXIT(101); |
281 | } | 289 | } |
282 | if(!EVP_DigestFinal_ex(&ctx,md,&mdn)) | 290 | if(!EVP_DigestFinal_ex(&ctx,md,&mdn)) |
283 | { | 291 | { |
284 | fprintf(stderr,"DigestFinal failed\n"); | 292 | fprintf(stderr,"DigestFinal failed\n"); |
293 | ERR_print_errors_fp(stderr); | ||
285 | EXIT(101); | 294 | EXIT(101); |
286 | } | 295 | } |
287 | EVP_MD_CTX_cleanup(&ctx); | 296 | EVP_MD_CTX_cleanup(&ctx); |
@@ -359,6 +368,7 @@ int main(int argc,char **argv) | |||
359 | unsigned char *iv,*key,*plaintext,*ciphertext; | 368 | unsigned char *iv,*key,*plaintext,*ciphertext; |
360 | int encdec; | 369 | int encdec; |
361 | int kn,in,pn,cn; | 370 | int kn,in,pn,cn; |
371 | int multiplier=1; | ||
362 | 372 | ||
363 | if(!fgets((char *)line,sizeof line,f)) | 373 | if(!fgets((char *)line,sizeof line,f)) |
364 | break; | 374 | break; |
@@ -383,7 +393,15 @@ int main(int argc,char **argv) | |||
383 | pn=convert(plaintext); | 393 | pn=convert(plaintext); |
384 | cn=convert(ciphertext); | 394 | cn=convert(ciphertext); |
385 | 395 | ||
386 | if(!test_cipher(cipher,key,kn,iv,in,plaintext,pn,ciphertext,cn,encdec) | 396 | if(strchr(cipher,'*')) |
397 | { | ||
398 | p=cipher; | ||
399 | sstrsep(&p,"*"); | ||
400 | multiplier=atoi(sstrsep(&p,"*")); | ||
401 | } | ||
402 | |||
403 | if(!test_cipher(cipher,key,kn,iv,in,plaintext,pn,ciphertext,cn,encdec, | ||
404 | multiplier) | ||
387 | && !test_digest(cipher,plaintext,pn,ciphertext,cn)) | 405 | && !test_digest(cipher,plaintext,pn,ciphertext,cn)) |
388 | { | 406 | { |
389 | fprintf(stderr,"Can't find %s\n",cipher); | 407 | fprintf(stderr,"Can't find %s\n",cipher); |
diff --git a/src/lib/libcrypto/evp/evptests.txt b/src/lib/libcrypto/evp/evptests.txt index 80bd9c7765..dfe91a5bc0 100644 --- a/src/lib/libcrypto/evp/evptests.txt +++ b/src/lib/libcrypto/evp/evptests.txt | |||
@@ -92,7 +92,102 @@ AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:000 | |||
92 | AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:F58C4C04D6E5F1BA779EABFB5F7BFBD6:AE2D8A571E03AC9C9EB76FAC45AF8E51:9CFC4E967EDB808D679F777BC6702C7D | 92 | AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:F58C4C04D6E5F1BA779EABFB5F7BFBD6:AE2D8A571E03AC9C9EB76FAC45AF8E51:9CFC4E967EDB808D679F777BC6702C7D |
93 | AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:9CFC4E967EDB808D679F777BC6702C7D:30C81C46A35CE411E5FBC1191A0A52EF:39F23369A9D9BACFA530E26304231461 | 93 | AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:9CFC4E967EDB808D679F777BC6702C7D:30C81C46A35CE411E5FBC1191A0A52EF:39F23369A9D9BACFA530E26304231461 |
94 | AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:39F23369A9D9BACFA530E26304231461:F69F2445DF4F9B17AD2B417BE66C3710:B2EB05E2C39BE9FCDA6C19078C6A9D1B | 94 | AES-256-CBC:603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:39F23369A9D9BACFA530E26304231461:F69F2445DF4F9B17AD2B417BE66C3710:B2EB05E2C39BE9FCDA6C19078C6A9D1B |
95 | # We don't support CFB{1,8}-AESxxx.{En,De}crypt | 95 | |
96 | # CFB1-AES128.Encrypt | ||
97 | |||
98 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:00:00:1 | ||
99 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:00020406080a0c0e10121416181a1c1e:80:80:1 | ||
100 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:0004080c1014181c2024282c3034383d:80:80:1 | ||
101 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:0008101820283038404850586068707b:00:00:1 | ||
102 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:00102030405060708090a0b0c0d0e0f6:80:80:1 | ||
103 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:0020406080a0c0e10121416181a1c1ed:00:00:1 | ||
104 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:004080c1014181c2024282c3034383da:80:00:1 | ||
105 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:008101820283038404850586068707b4:80:00:1 | ||
106 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:0102030405060708090a0b0c0d0e0f68:80:80:1 | ||
107 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:020406080a0c0e10121416181a1c1ed1:80:00:1 | ||
108 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:04080c1014181c2024282c3034383da2:00:80:1 | ||
109 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:08101820283038404850586068707b45:00:80:1 | ||
110 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:102030405060708090a0b0c0d0e0f68b:00:00:1 | ||
111 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:20406080a0c0e10121416181a1c1ed16:00:00:1 | ||
112 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:4080c1014181c2024282c3034383da2c:00:80:1 | ||
113 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:8101820283038404850586068707b459:80:80:1 | ||
114 | # all of the above packed into one... | ||
115 | # in: 0110 1011 1100 0001 = 6bc1 | ||
116 | # out: 0110 1000 1011 0011 = 68b3 | ||
117 | AES-128-CFB1*8:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:6bc1:68b3:1 | ||
118 | |||
119 | # CFB1-AES128.Decrypt | ||
120 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:00:00:0 | ||
121 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:00020406080a0c0e10121416181a1c1e:80:80:0 | ||
122 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:0004080c1014181c2024282c3034383d:80:80:0 | ||
123 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:0008101820283038404850586068707b:00:00:0 | ||
124 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:00102030405060708090a0b0c0d0e0f6:80:80:0 | ||
125 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:0020406080a0c0e10121416181a1c1ed:00:00:0 | ||
126 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:004080c1014181c2024282c3034383da:80:00:0 | ||
127 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:008101820283038404850586068707b4:80:00:0 | ||
128 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:0102030405060708090a0b0c0d0e0f68:80:80:0 | ||
129 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:020406080a0c0e10121416181a1c1ed1:80:00:0 | ||
130 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:04080c1014181c2024282c3034383da2:00:80:0 | ||
131 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:08101820283038404850586068707b45:00:80:0 | ||
132 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:102030405060708090a0b0c0d0e0f68b:00:00:0 | ||
133 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:20406080a0c0e10121416181a1c1ed16:00:00:0 | ||
134 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:4080c1014181c2024282c3034383da2c:00:80:0 | ||
135 | AES-128-CFB1:2b7e151628aed2a6abf7158809cf4f3c:8101820283038404850586068707b459:80:80:0 | ||
136 | # all of the above packed into one... | ||
137 | # in: 0110 1000 1011 0011 = 68b3 | ||
138 | # out: 0110 1011 1100 0001 = 6bc1 | ||
139 | AES-128-CFB1*8:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:6bc1:68b3:0 | ||
140 | |||
141 | # TODO: CFB1-AES192 and 256 | ||
142 | |||
143 | # CFB8-AES128.Encrypt | ||
144 | |||
145 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:6b:3b:1 | ||
146 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0102030405060708090a0b0c0d0e0f3b:c1:79:1 | ||
147 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:02030405060708090a0b0c0d0e0f3b79:be:42:1 | ||
148 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:030405060708090a0b0c0d0e0f3b7942:e2:4c:1 | ||
149 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0405060708090a0b0c0d0e0f3b79424c:2e:9c:1 | ||
150 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:05060708090a0b0c0d0e0f3b79424c9c:40:0d:1 | ||
151 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:060708090a0b0c0d0e0f3b79424c9c0d:9f:d4:1 | ||
152 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0708090a0b0c0d0e0f3b79424c9c0dd4:96:36:1 | ||
153 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:08090a0b0c0d0e0f3b79424c9c0dd436:e9:ba:1 | ||
154 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:090a0b0c0d0e0f3b79424c9c0dd436ba:3d:ce:1 | ||
155 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0a0b0c0d0e0f3b79424c9c0dd436bace:7e:9e:1 | ||
156 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0b0c0d0e0f3b79424c9c0dd436bace9e:11:0e:1 | ||
157 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0c0d0e0f3b79424c9c0dd436bace9e0e:73:d4:1 | ||
158 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0d0e0f3b79424c9c0dd436bace9e0ed4:93:58:1 | ||
159 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0e0f3b79424c9c0dd436bace9e0ed458:17:6a:1 | ||
160 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0f3b79424c9c0dd436bace9e0ed4586a:2a:4f:1 | ||
161 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:3b79424c9c0dd436bace9e0ed4586a4f:ae:32:1 | ||
162 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:79424c9c0dd436bace9e0ed4586a4f32:2d:b9:1 | ||
163 | # all of the above packed into one | ||
164 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:6bc1bee22e409f96e93d7e117393172aae2d:3b79424c9c0dd436bace9e0ed4586a4f32b9:1 | ||
165 | |||
166 | # CFB8-AES128.Decrypt | ||
167 | |||
168 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:6b:3b:0 | ||
169 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0102030405060708090a0b0c0d0e0f3b:c1:79:0 | ||
170 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:02030405060708090a0b0c0d0e0f3b79:be:42:0 | ||
171 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:030405060708090a0b0c0d0e0f3b7942:e2:4c:0 | ||
172 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0405060708090a0b0c0d0e0f3b79424c:2e:9c:0 | ||
173 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:05060708090a0b0c0d0e0f3b79424c9c:40:0d:0 | ||
174 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:060708090a0b0c0d0e0f3b79424c9c0d:9f:d4:0 | ||
175 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0708090a0b0c0d0e0f3b79424c9c0dd4:96:36:0 | ||
176 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:08090a0b0c0d0e0f3b79424c9c0dd436:e9:ba:0 | ||
177 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:090a0b0c0d0e0f3b79424c9c0dd436ba:3d:ce:0 | ||
178 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0a0b0c0d0e0f3b79424c9c0dd436bace:7e:9e:0 | ||
179 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0b0c0d0e0f3b79424c9c0dd436bace9e:11:0e:0 | ||
180 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0c0d0e0f3b79424c9c0dd436bace9e0e:73:d4:0 | ||
181 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0d0e0f3b79424c9c0dd436bace9e0ed4:93:58:0 | ||
182 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0e0f3b79424c9c0dd436bace9e0ed458:17:6a:0 | ||
183 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:0f3b79424c9c0dd436bace9e0ed4586a:2a:4f:0 | ||
184 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:3b79424c9c0dd436bace9e0ed4586a4f:ae:32:0 | ||
185 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:79424c9c0dd436bace9e0ed4586a4f32:2d:b9:0 | ||
186 | # all of the above packed into one | ||
187 | AES-128-CFB8:2b7e151628aed2a6abf7158809cf4f3c:000102030405060708090a0b0c0d0e0f:6bc1bee22e409f96e93d7e117393172aae2d:3b79424c9c0dd436bace9e0ed4586a4f32b9:0 | ||
188 | |||
189 | # TODO: 192 and 256 bit keys | ||
190 | |||
96 | # For all CFB128 encrypts and decrypts, the transformed sequence is | 191 | # For all CFB128 encrypts and decrypts, the transformed sequence is |
97 | # AES-bits-CFB:key:IV/ciphertext':plaintext:ciphertext:encdec | 192 | # AES-bits-CFB:key:IV/ciphertext':plaintext:ciphertext:encdec |
98 | # CFB128-AES128.Encrypt | 193 | # CFB128-AES128.Encrypt |
@@ -174,6 +269,16 @@ DESX-CBC:0123456789abcdeff1e0d3c2b5a49786fedcba9876543210:fedcba9876543210:37363 | |||
174 | # DES EDE3 CBC tests (from destest) | 269 | # DES EDE3 CBC tests (from destest) |
175 | DES-EDE3-CBC:0123456789abcdeff1e0d3c2b5a49786fedcba9876543210:fedcba9876543210:37363534333231204E6F77206973207468652074696D6520666F722000000000:3FE301C962AC01D02213763C1CBD4CDC799657C064ECF5D41C673812CFDE9675 | 270 | DES-EDE3-CBC:0123456789abcdeff1e0d3c2b5a49786fedcba9876543210:fedcba9876543210:37363534333231204E6F77206973207468652074696D6520666F722000000000:3FE301C962AC01D02213763C1CBD4CDC799657C064ECF5D41C673812CFDE9675 |
176 | 271 | ||
272 | # DES CFB1 from FIPS 81 | ||
273 | # plaintext: 0100 1110 0110 1111 0111 0111 = 4e6f77 | ||
274 | # ciphertext: 1100 1101 0001 1110 1100 1001 = cd1ec9 | ||
275 | |||
276 | DES-CFB1*8:0123456789abcdef:1234567890abcdef:4e6f77:cd1ec9 | ||
277 | |||
278 | # DES CFB8 from FIPS 81 | ||
279 | |||
280 | DES-CFB8:0123456789abcdef:1234567890abcdef:4e6f7720697320746865:f31fda07011462ee187f | ||
281 | |||
177 | # RC4 tests (from rc4test) | 282 | # RC4 tests (from rc4test) |
178 | RC4:0123456789abcdef0123456789abcdef::0123456789abcdef:75b7878099e0c596 | 283 | RC4:0123456789abcdef0123456789abcdef::0123456789abcdef:75b7878099e0c596 |
179 | RC4:0123456789abcdef0123456789abcdef::0000000000000000:7494c2e7104b0879 | 284 | RC4:0123456789abcdef0123456789abcdef::0000000000000000:7494c2e7104b0879 |
diff --git a/src/lib/libcrypto/evp/m_dss.c b/src/lib/libcrypto/evp/m_dss.c index beb8d7fc5c..d393eb3400 100644 --- a/src/lib/libcrypto/evp/m_dss.c +++ b/src/lib/libcrypto/evp/m_dss.c | |||
@@ -77,7 +77,7 @@ static const EVP_MD dsa_md= | |||
77 | NID_dsaWithSHA, | 77 | NID_dsaWithSHA, |
78 | NID_dsaWithSHA, | 78 | NID_dsaWithSHA, |
79 | SHA_DIGEST_LENGTH, | 79 | SHA_DIGEST_LENGTH, |
80 | 0, | 80 | EVP_MD_FLAG_FIPS, |
81 | init, | 81 | init, |
82 | update, | 82 | update, |
83 | final, | 83 | final, |
diff --git a/src/lib/libcrypto/evp/m_md2.c b/src/lib/libcrypto/evp/m_md2.c index 50914c83b3..0df48e5199 100644 --- a/src/lib/libcrypto/evp/m_md2.c +++ b/src/lib/libcrypto/evp/m_md2.c | |||
@@ -60,6 +60,7 @@ | |||
60 | #include <stdio.h> | 60 | #include <stdio.h> |
61 | #include "cryptlib.h" | 61 | #include "cryptlib.h" |
62 | #include <openssl/evp.h> | 62 | #include <openssl/evp.h> |
63 | #include "evp_locl.h" | ||
63 | #include <openssl/objects.h> | 64 | #include <openssl/objects.h> |
64 | #include <openssl/x509.h> | 65 | #include <openssl/x509.h> |
65 | #include <openssl/md2.h> | 66 | #include <openssl/md2.h> |
diff --git a/src/lib/libcrypto/evp/m_md4.c b/src/lib/libcrypto/evp/m_md4.c index e19b663754..0605e4b707 100644 --- a/src/lib/libcrypto/evp/m_md4.c +++ b/src/lib/libcrypto/evp/m_md4.c | |||
@@ -60,6 +60,7 @@ | |||
60 | #include <stdio.h> | 60 | #include <stdio.h> |
61 | #include "cryptlib.h" | 61 | #include "cryptlib.h" |
62 | #include <openssl/evp.h> | 62 | #include <openssl/evp.h> |
63 | #include "evp_locl.h" | ||
63 | #include <openssl/objects.h> | 64 | #include <openssl/objects.h> |
64 | #include <openssl/x509.h> | 65 | #include <openssl/x509.h> |
65 | #include <openssl/md4.h> | 66 | #include <openssl/md4.h> |
diff --git a/src/lib/libcrypto/evp/m_md5.c b/src/lib/libcrypto/evp/m_md5.c index b00a03e048..752615d473 100644 --- a/src/lib/libcrypto/evp/m_md5.c +++ b/src/lib/libcrypto/evp/m_md5.c | |||
@@ -60,6 +60,7 @@ | |||
60 | #include <stdio.h> | 60 | #include <stdio.h> |
61 | #include "cryptlib.h" | 61 | #include "cryptlib.h" |
62 | #include <openssl/evp.h> | 62 | #include <openssl/evp.h> |
63 | #include "evp_locl.h" | ||
63 | #include <openssl/objects.h> | 64 | #include <openssl/objects.h> |
64 | #include <openssl/x509.h> | 65 | #include <openssl/x509.h> |
65 | #include <openssl/md5.h> | 66 | #include <openssl/md5.h> |
diff --git a/src/lib/libcrypto/evp/m_mdc2.c b/src/lib/libcrypto/evp/m_mdc2.c index 9f6467c931..62de1336b8 100644 --- a/src/lib/libcrypto/evp/m_mdc2.c +++ b/src/lib/libcrypto/evp/m_mdc2.c | |||
@@ -60,6 +60,7 @@ | |||
60 | #include <stdio.h> | 60 | #include <stdio.h> |
61 | #include "cryptlib.h" | 61 | #include "cryptlib.h" |
62 | #include <openssl/evp.h> | 62 | #include <openssl/evp.h> |
63 | #include "evp_locl.h" | ||
63 | #include <openssl/objects.h> | 64 | #include <openssl/objects.h> |
64 | #include <openssl/x509.h> | 65 | #include <openssl/x509.h> |
65 | #include <openssl/mdc2.h> | 66 | #include <openssl/mdc2.h> |
diff --git a/src/lib/libcrypto/evp/m_sha.c b/src/lib/libcrypto/evp/m_sha.c index 10697c7ed3..d1785e5f74 100644 --- a/src/lib/libcrypto/evp/m_sha.c +++ b/src/lib/libcrypto/evp/m_sha.c | |||
@@ -56,10 +56,11 @@ | |||
56 | * [including the GNU Public Licence.] | 56 | * [including the GNU Public Licence.] |
57 | */ | 57 | */ |
58 | 58 | ||
59 | #ifndef OPENSSL_NO_SHA | 59 | #if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA0) |
60 | #include <stdio.h> | 60 | #include <stdio.h> |
61 | #include "cryptlib.h" | 61 | #include "cryptlib.h" |
62 | #include <openssl/evp.h> | 62 | #include <openssl/evp.h> |
63 | #include "evp_locl.h" | ||
63 | #include <openssl/objects.h> | 64 | #include <openssl/objects.h> |
64 | #include <openssl/x509.h> | 65 | #include <openssl/x509.h> |
65 | 66 | ||
diff --git a/src/lib/libcrypto/evp/m_sha1.c b/src/lib/libcrypto/evp/m_sha1.c index d6be3502f0..fe4402389a 100644 --- a/src/lib/libcrypto/evp/m_sha1.c +++ b/src/lib/libcrypto/evp/m_sha1.c | |||
@@ -77,7 +77,7 @@ static const EVP_MD sha1_md= | |||
77 | NID_sha1, | 77 | NID_sha1, |
78 | NID_sha1WithRSAEncryption, | 78 | NID_sha1WithRSAEncryption, |
79 | SHA_DIGEST_LENGTH, | 79 | SHA_DIGEST_LENGTH, |
80 | 0, | 80 | EVP_MD_FLAG_FIPS, |
81 | init, | 81 | init, |
82 | update, | 82 | update, |
83 | final, | 83 | final, |
diff --git a/src/lib/libcrypto/evp/names.c b/src/lib/libcrypto/evp/names.c index eb9f4329cd..7712453046 100644 --- a/src/lib/libcrypto/evp/names.c +++ b/src/lib/libcrypto/evp/names.c | |||
@@ -61,6 +61,9 @@ | |||
61 | #include <openssl/evp.h> | 61 | #include <openssl/evp.h> |
62 | #include <openssl/objects.h> | 62 | #include <openssl/objects.h> |
63 | #include <openssl/x509.h> | 63 | #include <openssl/x509.h> |
64 | #ifdef OPENSSL_FIPS | ||
65 | #include <openssl/fips.h> | ||
66 | #endif | ||
64 | 67 | ||
65 | int EVP_add_cipher(const EVP_CIPHER *c) | 68 | int EVP_add_cipher(const EVP_CIPHER *c) |
66 | { | 69 | { |
diff --git a/src/lib/libcrypto/hmac/hmac.c b/src/lib/libcrypto/hmac/hmac.c index 4c91f919d5..06ee80761f 100644 --- a/src/lib/libcrypto/hmac/hmac.c +++ b/src/lib/libcrypto/hmac/hmac.c | |||
@@ -77,6 +77,15 @@ void HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, | |||
77 | 77 | ||
78 | if (key != NULL) | 78 | if (key != NULL) |
79 | { | 79 | { |
80 | #ifdef OPENSSL_FIPS | ||
81 | if (FIPS_mode() && !(md->flags & EVP_MD_FLAG_FIPS) | ||
82 | && (!(ctx->md_ctx.flags & EVP_MD_CTX_FLAG_NON_FIPS_ALLOW) | ||
83 | || !(ctx->i_ctx.flags & EVP_MD_CTX_FLAG_NON_FIPS_ALLOW) | ||
84 | || !(ctx->o_ctx.flags & EVP_MD_CTX_FLAG_NON_FIPS_ALLOW))) | ||
85 | OpenSSLDie(__FILE__,__LINE__, | ||
86 | "HMAC: digest not allowed in FIPS mode"); | ||
87 | #endif | ||
88 | |||
80 | reset=1; | 89 | reset=1; |
81 | j=EVP_MD_block_size(md); | 90 | j=EVP_MD_block_size(md); |
82 | OPENSSL_assert(j <= sizeof ctx->key); | 91 | OPENSSL_assert(j <= sizeof ctx->key); |
@@ -171,3 +180,10 @@ unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, | |||
171 | return(md); | 180 | return(md); |
172 | } | 181 | } |
173 | 182 | ||
183 | void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags) | ||
184 | { | ||
185 | EVP_MD_CTX_set_flags(&ctx->i_ctx, flags); | ||
186 | EVP_MD_CTX_set_flags(&ctx->o_ctx, flags); | ||
187 | EVP_MD_CTX_set_flags(&ctx->md_ctx, flags); | ||
188 | } | ||
189 | |||
diff --git a/src/lib/libcrypto/hmac/hmac.h b/src/lib/libcrypto/hmac/hmac.h index 0364a1fcbd..294ab3b36a 100644 --- a/src/lib/libcrypto/hmac/hmac.h +++ b/src/lib/libcrypto/hmac/hmac.h | |||
@@ -98,6 +98,7 @@ unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, | |||
98 | const unsigned char *d, int n, unsigned char *md, | 98 | const unsigned char *d, int n, unsigned char *md, |
99 | unsigned int *md_len); | 99 | unsigned int *md_len); |
100 | 100 | ||
101 | void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); | ||
101 | 102 | ||
102 | #ifdef __cplusplus | 103 | #ifdef __cplusplus |
103 | } | 104 | } |
diff --git a/src/lib/libcrypto/idea/idea.h b/src/lib/libcrypto/idea/idea.h index 67132414ee..bf41844fd7 100644 --- a/src/lib/libcrypto/idea/idea.h +++ b/src/lib/libcrypto/idea/idea.h | |||
@@ -82,6 +82,10 @@ typedef struct idea_key_st | |||
82 | const char *idea_options(void); | 82 | const char *idea_options(void); |
83 | void idea_ecb_encrypt(const unsigned char *in, unsigned char *out, | 83 | void idea_ecb_encrypt(const unsigned char *in, unsigned char *out, |
84 | IDEA_KEY_SCHEDULE *ks); | 84 | IDEA_KEY_SCHEDULE *ks); |
85 | #ifdef OPENSSL_FIPS | ||
86 | void private_idea_set_encrypt_key(const unsigned char *key, | ||
87 | IDEA_KEY_SCHEDULE *ks); | ||
88 | #endif | ||
85 | void idea_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); | 89 | void idea_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); |
86 | void idea_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk); | 90 | void idea_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk); |
87 | void idea_cbc_encrypt(const unsigned char *in, unsigned char *out, | 91 | void idea_cbc_encrypt(const unsigned char *in, unsigned char *out, |
diff --git a/src/lib/libcrypto/md2/md2.h b/src/lib/libcrypto/md2/md2.h index ad9241455c..d0ef9da08e 100644 --- a/src/lib/libcrypto/md2/md2.h +++ b/src/lib/libcrypto/md2/md2.h | |||
@@ -80,6 +80,9 @@ typedef struct MD2state_st | |||
80 | } MD2_CTX; | 80 | } MD2_CTX; |
81 | 81 | ||
82 | const char *MD2_options(void); | 82 | const char *MD2_options(void); |
83 | #ifdef OPENSSL_FIPS | ||
84 | int private_MD2_Init(MD2_CTX *c); | ||
85 | #endif | ||
83 | int MD2_Init(MD2_CTX *c); | 86 | int MD2_Init(MD2_CTX *c); |
84 | int MD2_Update(MD2_CTX *c, const unsigned char *data, unsigned long len); | 87 | int MD2_Update(MD2_CTX *c, const unsigned char *data, unsigned long len); |
85 | int MD2_Final(unsigned char *md, MD2_CTX *c); | 88 | int MD2_Final(unsigned char *md, MD2_CTX *c); |
diff --git a/src/lib/libcrypto/md2/md2_dgst.c b/src/lib/libcrypto/md2/md2_dgst.c index ecb64f0ec4..8124acd687 100644 --- a/src/lib/libcrypto/md2/md2_dgst.c +++ b/src/lib/libcrypto/md2/md2_dgst.c | |||
@@ -62,6 +62,8 @@ | |||
62 | #include <openssl/md2.h> | 62 | #include <openssl/md2.h> |
63 | #include <openssl/opensslv.h> | 63 | #include <openssl/opensslv.h> |
64 | #include <openssl/crypto.h> | 64 | #include <openssl/crypto.h> |
65 | #include <openssl/fips.h> | ||
66 | #include <openssl/err.h> | ||
65 | 67 | ||
66 | const char *MD2_version="MD2" OPENSSL_VERSION_PTEXT; | 68 | const char *MD2_version="MD2" OPENSSL_VERSION_PTEXT; |
67 | 69 | ||
@@ -116,7 +118,7 @@ const char *MD2_options(void) | |||
116 | return("md2(int)"); | 118 | return("md2(int)"); |
117 | } | 119 | } |
118 | 120 | ||
119 | int MD2_Init(MD2_CTX *c) | 121 | FIPS_NON_FIPS_MD_Init(MD2) |
120 | { | 122 | { |
121 | c->num=0; | 123 | c->num=0; |
122 | memset(c->state,0,sizeof c->state); | 124 | memset(c->state,0,sizeof c->state); |
diff --git a/src/lib/libcrypto/md32_common.h b/src/lib/libcrypto/md32_common.h index 573850b122..733da6acaf 100644 --- a/src/lib/libcrypto/md32_common.h +++ b/src/lib/libcrypto/md32_common.h | |||
@@ -128,6 +128,10 @@ | |||
128 | * <appro@fy.chalmers.se> | 128 | * <appro@fy.chalmers.se> |
129 | */ | 129 | */ |
130 | 130 | ||
131 | #include <openssl/crypto.h> | ||
132 | #include <openssl/fips.h> | ||
133 | #include <openssl/err.h> | ||
134 | |||
131 | #if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN) | 135 | #if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN) |
132 | #error "DATA_ORDER must be defined!" | 136 | #error "DATA_ORDER must be defined!" |
133 | #endif | 137 | #endif |
@@ -207,7 +211,7 @@ | |||
207 | : "cc"); \ | 211 | : "cc"); \ |
208 | ret; \ | 212 | ret; \ |
209 | }) | 213 | }) |
210 | # elif defined(__powerpc) || defined(__ppc) | 214 | # elif defined(__powerpc) || defined(__ppc__) || defined(__powerpc64__) |
211 | # define ROTATE(a,n) ({ register unsigned int ret; \ | 215 | # define ROTATE(a,n) ({ register unsigned int ret; \ |
212 | asm ( \ | 216 | asm ( \ |
213 | "rlwinm %0,%1,%2,0,31" \ | 217 | "rlwinm %0,%1,%2,0,31" \ |
@@ -555,6 +559,14 @@ int HASH_FINAL (unsigned char *md, HASH_CTX *c) | |||
555 | static const unsigned char end[4]={0x80,0x00,0x00,0x00}; | 559 | static const unsigned char end[4]={0x80,0x00,0x00,0x00}; |
556 | const unsigned char *cp=end; | 560 | const unsigned char *cp=end; |
557 | 561 | ||
562 | #if 0 | ||
563 | if(FIPS_mode() && !FIPS_md5_allowed()) | ||
564 | { | ||
565 | FIPSerr(FIPS_F_HASH_FINAL,FIPS_R_NON_FIPS_METHOD); | ||
566 | return 0; | ||
567 | } | ||
568 | #endif | ||
569 | |||
558 | /* c->num should definitly have room for at least one more byte. */ | 570 | /* c->num should definitly have room for at least one more byte. */ |
559 | p=c->data; | 571 | p=c->data; |
560 | i=c->num>>2; | 572 | i=c->num>>2; |
diff --git a/src/lib/libcrypto/md4/md4.h b/src/lib/libcrypto/md4/md4.h index 7a7b23682f..7e761efb62 100644 --- a/src/lib/libcrypto/md4/md4.h +++ b/src/lib/libcrypto/md4/md4.h | |||
@@ -104,6 +104,9 @@ typedef struct MD4state_st | |||
104 | int num; | 104 | int num; |
105 | } MD4_CTX; | 105 | } MD4_CTX; |
106 | 106 | ||
107 | #ifdef OPENSSL_FIPS | ||
108 | int private_MD4_Init(MD4_CTX *c); | ||
109 | #endif | ||
107 | int MD4_Init(MD4_CTX *c); | 110 | int MD4_Init(MD4_CTX *c); |
108 | int MD4_Update(MD4_CTX *c, const void *data, unsigned long len); | 111 | int MD4_Update(MD4_CTX *c, const void *data, unsigned long len); |
109 | int MD4_Final(unsigned char *md, MD4_CTX *c); | 112 | int MD4_Final(unsigned char *md, MD4_CTX *c); |
diff --git a/src/lib/libcrypto/md4/md4_dgst.c b/src/lib/libcrypto/md4/md4_dgst.c index 7afb7185b6..ee7cc72262 100644 --- a/src/lib/libcrypto/md4/md4_dgst.c +++ b/src/lib/libcrypto/md4/md4_dgst.c | |||
@@ -70,7 +70,7 @@ const char *MD4_version="MD4" OPENSSL_VERSION_PTEXT; | |||
70 | #define INIT_DATA_C (unsigned long)0x98badcfeL | 70 | #define INIT_DATA_C (unsigned long)0x98badcfeL |
71 | #define INIT_DATA_D (unsigned long)0x10325476L | 71 | #define INIT_DATA_D (unsigned long)0x10325476L |
72 | 72 | ||
73 | int MD4_Init(MD4_CTX *c) | 73 | FIPS_NON_FIPS_MD_Init(MD4) |
74 | { | 74 | { |
75 | c->A=INIT_DATA_A; | 75 | c->A=INIT_DATA_A; |
76 | c->B=INIT_DATA_B; | 76 | c->B=INIT_DATA_B; |
diff --git a/src/lib/libcrypto/md5/md5.h b/src/lib/libcrypto/md5/md5.h index a252e02115..c663dd1816 100644 --- a/src/lib/libcrypto/md5/md5.h +++ b/src/lib/libcrypto/md5/md5.h | |||
@@ -104,6 +104,9 @@ typedef struct MD5state_st | |||
104 | int num; | 104 | int num; |
105 | } MD5_CTX; | 105 | } MD5_CTX; |
106 | 106 | ||
107 | #ifdef OPENSSL_FIPS | ||
108 | int private_MD5_Init(MD5_CTX *c); | ||
109 | #endif | ||
107 | int MD5_Init(MD5_CTX *c); | 110 | int MD5_Init(MD5_CTX *c); |
108 | int MD5_Update(MD5_CTX *c, const void *data, unsigned long len); | 111 | int MD5_Update(MD5_CTX *c, const void *data, unsigned long len); |
109 | int MD5_Final(unsigned char *md, MD5_CTX *c); | 112 | int MD5_Final(unsigned char *md, MD5_CTX *c); |
diff --git a/src/lib/libcrypto/md5/md5_dgst.c b/src/lib/libcrypto/md5/md5_dgst.c index 9c7abc3697..54b33c6509 100644 --- a/src/lib/libcrypto/md5/md5_dgst.c +++ b/src/lib/libcrypto/md5/md5_dgst.c | |||
@@ -70,7 +70,7 @@ const char *MD5_version="MD5" OPENSSL_VERSION_PTEXT; | |||
70 | #define INIT_DATA_C (unsigned long)0x98badcfeL | 70 | #define INIT_DATA_C (unsigned long)0x98badcfeL |
71 | #define INIT_DATA_D (unsigned long)0x10325476L | 71 | #define INIT_DATA_D (unsigned long)0x10325476L |
72 | 72 | ||
73 | int MD5_Init(MD5_CTX *c) | 73 | FIPS_NON_FIPS_MD_Init(MD5) |
74 | { | 74 | { |
75 | c->A=INIT_DATA_A; | 75 | c->A=INIT_DATA_A; |
76 | c->B=INIT_DATA_B; | 76 | c->B=INIT_DATA_B; |
diff --git a/src/lib/libcrypto/mdc2/Makefile b/src/lib/libcrypto/mdc2/Makefile new file mode 100644 index 0000000000..38c785bf95 --- /dev/null +++ b/src/lib/libcrypto/mdc2/Makefile | |||
@@ -0,0 +1,98 @@ | |||
1 | # | ||
2 | # SSLeay/crypto/mdc2/Makefile | ||
3 | # | ||
4 | |||
5 | DIR= mdc2 | ||
6 | TOP= ../.. | ||
7 | CC= cc | ||
8 | INCLUDES= | ||
9 | CFLAG=-g | ||
10 | INSTALL_PREFIX= | ||
11 | OPENSSLDIR= /usr/local/ssl | ||
12 | INSTALLTOP=/usr/local/ssl | ||
13 | MAKEDEPPROG= makedepend | ||
14 | MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG) | ||
15 | MAKEFILE= Makefile | ||
16 | AR= ar r | ||
17 | |||
18 | CFLAGS= $(INCLUDES) $(CFLAG) | ||
19 | |||
20 | GENERAL=Makefile | ||
21 | TEST= mdc2test.c | ||
22 | APPS= | ||
23 | |||
24 | LIB=$(TOP)/libcrypto.a | ||
25 | LIBSRC=mdc2dgst.c mdc2_one.c | ||
26 | LIBOBJ=mdc2dgst.o mdc2_one.o | ||
27 | |||
28 | SRC= $(LIBSRC) | ||
29 | |||
30 | EXHEADER= mdc2.h | ||
31 | HEADER= $(EXHEADER) | ||
32 | |||
33 | ALL= $(GENERAL) $(SRC) $(HEADER) | ||
34 | |||
35 | top: | ||
36 | (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all) | ||
37 | |||
38 | all: lib | ||
39 | |||
40 | lib: $(LIBOBJ) | ||
41 | $(AR) $(LIB) $(LIBOBJ) | ||
42 | $(RANLIB) $(LIB) || echo Never mind. | ||
43 | @touch lib | ||
44 | |||
45 | files: | ||
46 | $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO | ||
47 | |||
48 | links: | ||
49 | @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER) | ||
50 | @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST) | ||
51 | @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS) | ||
52 | |||
53 | install: | ||
54 | @headerlist="$(EXHEADER)"; for i in $$headerlist ; \ | ||
55 | do \ | ||
56 | (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \ | ||
57 | chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \ | ||
58 | done; | ||
59 | |||
60 | tags: | ||
61 | ctags $(SRC) | ||
62 | |||
63 | tests: | ||
64 | |||
65 | lint: | ||
66 | lint -DLINT $(INCLUDES) $(SRC)>fluff | ||
67 | |||
68 | depend: | ||
69 | $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC) | ||
70 | |||
71 | dclean: | ||
72 | $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new | ||
73 | mv -f Makefile.new $(MAKEFILE) | ||
74 | |||
75 | clean: | ||
76 | rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff | ||
77 | |||
78 | # DO NOT DELETE THIS LINE -- make depend depends on it. | ||
79 | |||
80 | mdc2_one.o: ../../e_os.h ../../include/openssl/bio.h | ||
81 | mdc2_one.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h | ||
82 | mdc2_one.o: ../../include/openssl/des.h ../../include/openssl/des_old.h | ||
83 | mdc2_one.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h | ||
84 | mdc2_one.o: ../../include/openssl/lhash.h ../../include/openssl/mdc2.h | ||
85 | mdc2_one.o: ../../include/openssl/opensslconf.h | ||
86 | mdc2_one.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h | ||
87 | mdc2_one.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h | ||
88 | mdc2_one.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h | ||
89 | mdc2_one.o: ../cryptlib.h mdc2_one.c | ||
90 | mdc2dgst.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h | ||
91 | mdc2dgst.o: ../../include/openssl/des.h ../../include/openssl/des_old.h | ||
92 | mdc2dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h | ||
93 | mdc2dgst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h | ||
94 | mdc2dgst.o: ../../include/openssl/mdc2.h ../../include/openssl/opensslconf.h | ||
95 | mdc2dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h | ||
96 | mdc2dgst.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h | ||
97 | mdc2dgst.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h | ||
98 | mdc2dgst.o: mdc2dgst.c | ||
diff --git a/src/lib/libcrypto/mdc2/mdc2.h b/src/lib/libcrypto/mdc2/mdc2.h index 793a8a0f13..4cba101f37 100644 --- a/src/lib/libcrypto/mdc2/mdc2.h +++ b/src/lib/libcrypto/mdc2/mdc2.h | |||
@@ -80,7 +80,9 @@ typedef struct mdc2_ctx_st | |||
80 | int pad_type; /* either 1 or 2, default 1 */ | 80 | int pad_type; /* either 1 or 2, default 1 */ |
81 | } MDC2_CTX; | 81 | } MDC2_CTX; |
82 | 82 | ||
83 | 83 | #ifdef OPENSSL_FIPS | |
84 | int private_MDC2_Init(MDC2_CTX *c); | ||
85 | #endif | ||
84 | int MDC2_Init(MDC2_CTX *c); | 86 | int MDC2_Init(MDC2_CTX *c); |
85 | int MDC2_Update(MDC2_CTX *c, const unsigned char *data, unsigned long len); | 87 | int MDC2_Update(MDC2_CTX *c, const unsigned char *data, unsigned long len); |
86 | int MDC2_Final(unsigned char *md, MDC2_CTX *c); | 88 | int MDC2_Final(unsigned char *md, MDC2_CTX *c); |
diff --git a/src/lib/libcrypto/o_time.c b/src/lib/libcrypto/o_time.c index 785468131e..e29091d650 100644 --- a/src/lib/libcrypto/o_time.c +++ b/src/lib/libcrypto/o_time.c | |||
@@ -114,16 +114,28 @@ struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result) | |||
114 | return NULL; | 114 | return NULL; |
115 | logvalue[reslen] = '\0'; | 115 | logvalue[reslen] = '\0'; |
116 | 116 | ||
117 | t = *timer; | ||
118 | |||
119 | /* The following is extracted from the DEC C header time.h */ | ||
120 | /* | ||
121 | ** Beginning in OpenVMS Version 7.0 mktime, time, ctime, strftime | ||
122 | ** have two implementations. One implementation is provided | ||
123 | ** for compatibility and deals with time in terms of local time, | ||
124 | ** the other __utc_* deals with time in terms of UTC. | ||
125 | */ | ||
126 | /* We use the same conditions as in said time.h to check if we should | ||
127 | assume that t contains local time (and should therefore be adjusted) | ||
128 | or UTC (and should therefore be left untouched). */ | ||
129 | #if __CRTL_VER < 70000000 || defined _VMS_V6_SOURCE | ||
117 | /* Get the numerical value of the equivalence string */ | 130 | /* Get the numerical value of the equivalence string */ |
118 | status = atoi(logvalue); | 131 | status = atoi(logvalue); |
119 | 132 | ||
120 | /* and use it to move time to GMT */ | 133 | /* and use it to move time to GMT */ |
121 | t = *timer - status; | 134 | t -= status; |
135 | #endif | ||
122 | 136 | ||
123 | /* then convert the result to the time structure */ | 137 | /* then convert the result to the time structure */ |
124 | #ifndef OPENSSL_THREADS | 138 | |
125 | ts=(struct tm *)localtime(&t); | ||
126 | #else | ||
127 | /* Since there was no gmtime_r() to do this stuff for us, | 139 | /* Since there was no gmtime_r() to do this stuff for us, |
128 | we have to do it the hard way. */ | 140 | we have to do it the hard way. */ |
129 | { | 141 | { |
@@ -198,7 +210,6 @@ struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result) | |||
198 | result->tm_isdst = 0; /* There's no way to know... */ | 210 | result->tm_isdst = 0; /* There's no way to know... */ |
199 | 211 | ||
200 | ts = result; | 212 | ts = result; |
201 | #endif | ||
202 | } | 213 | } |
203 | } | 214 | } |
204 | #endif | 215 | #endif |
diff --git a/src/lib/libcrypto/objects/o_names.c b/src/lib/libcrypto/objects/o_names.c index b4453b4a98..28c9370ca3 100644 --- a/src/lib/libcrypto/objects/o_names.c +++ b/src/lib/libcrypto/objects/o_names.c | |||
@@ -2,6 +2,7 @@ | |||
2 | #include <stdlib.h> | 2 | #include <stdlib.h> |
3 | #include <string.h> | 3 | #include <string.h> |
4 | 4 | ||
5 | #include <openssl/err.h> | ||
5 | #include <openssl/lhash.h> | 6 | #include <openssl/lhash.h> |
6 | #include <openssl/objects.h> | 7 | #include <openssl/objects.h> |
7 | #include <openssl/safestack.h> | 8 | #include <openssl/safestack.h> |
@@ -80,7 +81,11 @@ int OBJ_NAME_new_index(unsigned long (*hash_func)(const char *), | |||
80 | MemCheck_off(); | 81 | MemCheck_off(); |
81 | name_funcs = OPENSSL_malloc(sizeof(NAME_FUNCS)); | 82 | name_funcs = OPENSSL_malloc(sizeof(NAME_FUNCS)); |
82 | MemCheck_on(); | 83 | MemCheck_on(); |
83 | if (!name_funcs) return(0); | 84 | if (!name_funcs) |
85 | { | ||
86 | OBJerr(OBJ_F_OBJ_NAME_NEW_INDEX,ERR_R_MALLOC_FAILURE); | ||
87 | return(0); | ||
88 | } | ||
84 | name_funcs->hash_func = lh_strhash; | 89 | name_funcs->hash_func = lh_strhash; |
85 | name_funcs->cmp_func = OPENSSL_strcmp; | 90 | name_funcs->cmp_func = OPENSSL_strcmp; |
86 | name_funcs->free_func = 0; /* NULL is often declared to | 91 | name_funcs->free_func = 0; /* NULL is often declared to |
diff --git a/src/lib/libcrypto/objects/obj_dat.c b/src/lib/libcrypto/objects/obj_dat.c index 4534dc0985..f549d078ef 100644 --- a/src/lib/libcrypto/objects/obj_dat.c +++ b/src/lib/libcrypto/objects/obj_dat.c | |||
@@ -236,13 +236,13 @@ int OBJ_add_object(const ASN1_OBJECT *obj) | |||
236 | if (added == NULL) | 236 | if (added == NULL) |
237 | if (!init_added()) return(0); | 237 | if (!init_added()) return(0); |
238 | if ((o=OBJ_dup(obj)) == NULL) goto err; | 238 | if ((o=OBJ_dup(obj)) == NULL) goto err; |
239 | if (!(ao[ADDED_NID]=(ADDED_OBJ *)OPENSSL_malloc(sizeof(ADDED_OBJ)))) goto err; | 239 | if (!(ao[ADDED_NID]=(ADDED_OBJ *)OPENSSL_malloc(sizeof(ADDED_OBJ)))) goto err2; |
240 | if ((o->length != 0) && (obj->data != NULL)) | 240 | if ((o->length != 0) && (obj->data != NULL)) |
241 | ao[ADDED_DATA]=(ADDED_OBJ *)OPENSSL_malloc(sizeof(ADDED_OBJ)); | 241 | if (!(ao[ADDED_DATA]=(ADDED_OBJ *)OPENSSL_malloc(sizeof(ADDED_OBJ)))) goto err2; |
242 | if (o->sn != NULL) | 242 | if (o->sn != NULL) |
243 | ao[ADDED_SNAME]=(ADDED_OBJ *)OPENSSL_malloc(sizeof(ADDED_OBJ)); | 243 | if (!(ao[ADDED_SNAME]=(ADDED_OBJ *)OPENSSL_malloc(sizeof(ADDED_OBJ)))) goto err2; |
244 | if (o->ln != NULL) | 244 | if (o->ln != NULL) |
245 | ao[ADDED_LNAME]=(ADDED_OBJ *)OPENSSL_malloc(sizeof(ADDED_OBJ)); | 245 | if (!(ao[ADDED_LNAME]=(ADDED_OBJ *)OPENSSL_malloc(sizeof(ADDED_OBJ)))) goto err2; |
246 | 246 | ||
247 | for (i=ADDED_DATA; i<=ADDED_NID; i++) | 247 | for (i=ADDED_DATA; i<=ADDED_NID; i++) |
248 | { | 248 | { |
@@ -260,6 +260,8 @@ int OBJ_add_object(const ASN1_OBJECT *obj) | |||
260 | ASN1_OBJECT_FLAG_DYNAMIC_DATA); | 260 | ASN1_OBJECT_FLAG_DYNAMIC_DATA); |
261 | 261 | ||
262 | return(o->nid); | 262 | return(o->nid); |
263 | err2: | ||
264 | OBJerr(OBJ_F_OBJ_ADD_OBJECT,ERR_R_MALLOC_FAILURE); | ||
263 | err: | 265 | err: |
264 | for (i=ADDED_DATA; i<=ADDED_NID; i++) | 266 | for (i=ADDED_DATA; i<=ADDED_NID; i++) |
265 | if (ao[i] != NULL) OPENSSL_free(ao[i]); | 267 | if (ao[i] != NULL) OPENSSL_free(ao[i]); |
@@ -648,7 +650,7 @@ int OBJ_create(const char *oid, const char *sn, const char *ln) | |||
648 | 650 | ||
649 | if ((buf=(unsigned char *)OPENSSL_malloc(i)) == NULL) | 651 | if ((buf=(unsigned char *)OPENSSL_malloc(i)) == NULL) |
650 | { | 652 | { |
651 | OBJerr(OBJ_F_OBJ_CREATE,OBJ_R_MALLOC_FAILURE); | 653 | OBJerr(OBJ_F_OBJ_CREATE,ERR_R_MALLOC_FAILURE); |
652 | return(0); | 654 | return(0); |
653 | } | 655 | } |
654 | i=a2d_ASN1_OBJECT(buf,i,oid,-1); | 656 | i=a2d_ASN1_OBJECT(buf,i,oid,-1); |
diff --git a/src/lib/libcrypto/objects/obj_err.c b/src/lib/libcrypto/objects/obj_err.c index 80ab6855af..2b5f43e3cc 100644 --- a/src/lib/libcrypto/objects/obj_err.c +++ b/src/lib/libcrypto/objects/obj_err.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* crypto/objects/obj_err.c */ | 1 | /* crypto/objects/obj_err.c */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. |
4 | * | 4 | * |
5 | * Redistribution and use in source and binary forms, with or without | 5 | * Redistribution and use in source and binary forms, with or without |
6 | * modification, are permitted provided that the following conditions | 6 | * modification, are permitted provided that the following conditions |
@@ -66,8 +66,10 @@ | |||
66 | #ifndef OPENSSL_NO_ERR | 66 | #ifndef OPENSSL_NO_ERR |
67 | static ERR_STRING_DATA OBJ_str_functs[]= | 67 | static ERR_STRING_DATA OBJ_str_functs[]= |
68 | { | 68 | { |
69 | {ERR_PACK(0,OBJ_F_OBJ_ADD_OBJECT,0), "OBJ_add_object"}, | ||
69 | {ERR_PACK(0,OBJ_F_OBJ_CREATE,0), "OBJ_create"}, | 70 | {ERR_PACK(0,OBJ_F_OBJ_CREATE,0), "OBJ_create"}, |
70 | {ERR_PACK(0,OBJ_F_OBJ_DUP,0), "OBJ_dup"}, | 71 | {ERR_PACK(0,OBJ_F_OBJ_DUP,0), "OBJ_dup"}, |
72 | {ERR_PACK(0,OBJ_F_OBJ_NAME_NEW_INDEX,0), "OBJ_NAME_new_index"}, | ||
71 | {ERR_PACK(0,OBJ_F_OBJ_NID2LN,0), "OBJ_nid2ln"}, | 73 | {ERR_PACK(0,OBJ_F_OBJ_NID2LN,0), "OBJ_nid2ln"}, |
72 | {ERR_PACK(0,OBJ_F_OBJ_NID2OBJ,0), "OBJ_nid2obj"}, | 74 | {ERR_PACK(0,OBJ_F_OBJ_NID2OBJ,0), "OBJ_nid2obj"}, |
73 | {ERR_PACK(0,OBJ_F_OBJ_NID2SN,0), "OBJ_nid2sn"}, | 75 | {ERR_PACK(0,OBJ_F_OBJ_NID2SN,0), "OBJ_nid2sn"}, |
diff --git a/src/lib/libcrypto/objects/obj_mac.num b/src/lib/libcrypto/objects/obj_mac.num index 9838072b65..0e64a929ba 100644 --- a/src/lib/libcrypto/objects/obj_mac.num +++ b/src/lib/libcrypto/objects/obj_mac.num | |||
@@ -647,3 +647,21 @@ joint_iso_itu_t 646 | |||
647 | international_organizations 647 | 647 | international_organizations 647 |
648 | ms_smartcard_login 648 | 648 | ms_smartcard_login 648 |
649 | ms_upn 649 | 649 | ms_upn 649 |
650 | aes_128_cfb1 650 | ||
651 | aes_192_cfb1 651 | ||
652 | aes_256_cfb1 652 | ||
653 | aes_128_cfb8 653 | ||
654 | aes_192_cfb8 654 | ||
655 | aes_256_cfb8 655 | ||
656 | des_cfb1 656 | ||
657 | des_cfb8 657 | ||
658 | des_ede3_cfb1 658 | ||
659 | des_ede3_cfb8 659 | ||
660 | streetAddress 660 | ||
661 | postalCode 661 | ||
662 | id_ppl 662 | ||
663 | proxyCertInfo 663 | ||
664 | id_ppl_anyLanguage 664 | ||
665 | id_ppl_inheritAll 665 | ||
666 | id_ppl_independent 666 | ||
667 | Independent 667 | ||
diff --git a/src/lib/libcrypto/objects/objects.h b/src/lib/libcrypto/objects/objects.h index de10532813..f859d859b8 100644 --- a/src/lib/libcrypto/objects/objects.h +++ b/src/lib/libcrypto/objects/objects.h | |||
@@ -1026,8 +1026,10 @@ void ERR_load_OBJ_strings(void); | |||
1026 | /* Error codes for the OBJ functions. */ | 1026 | /* Error codes for the OBJ functions. */ |
1027 | 1027 | ||
1028 | /* Function codes. */ | 1028 | /* Function codes. */ |
1029 | #define OBJ_F_OBJ_ADD_OBJECT 105 | ||
1029 | #define OBJ_F_OBJ_CREATE 100 | 1030 | #define OBJ_F_OBJ_CREATE 100 |
1030 | #define OBJ_F_OBJ_DUP 101 | 1031 | #define OBJ_F_OBJ_DUP 101 |
1032 | #define OBJ_F_OBJ_NAME_NEW_INDEX 106 | ||
1031 | #define OBJ_F_OBJ_NID2LN 102 | 1033 | #define OBJ_F_OBJ_NID2LN 102 |
1032 | #define OBJ_F_OBJ_NID2OBJ 103 | 1034 | #define OBJ_F_OBJ_NID2OBJ 103 |
1033 | #define OBJ_F_OBJ_NID2SN 104 | 1035 | #define OBJ_F_OBJ_NID2SN 104 |
diff --git a/src/lib/libcrypto/objects/objects.txt b/src/lib/libcrypto/objects/objects.txt index 3ba11f65cc..50e9031e61 100644 --- a/src/lib/libcrypto/objects/objects.txt +++ b/src/lib/libcrypto/objects/objects.txt | |||
@@ -312,6 +312,7 @@ id-pkix 9 : id-pda | |||
312 | id-pkix 10 : id-aca | 312 | id-pkix 10 : id-aca |
313 | id-pkix 11 : id-qcs | 313 | id-pkix 11 : id-qcs |
314 | id-pkix 12 : id-cct | 314 | id-pkix 12 : id-cct |
315 | id-pkix 21 : id-ppl | ||
315 | id-pkix 48 : id-ad | 316 | id-pkix 48 : id-ad |
316 | 317 | ||
317 | # PKIX Modules | 318 | # PKIX Modules |
@@ -346,6 +347,7 @@ id-pe 9 : sbqp-routerIdentifier | |||
346 | id-pe 10 : ac-proxying | 347 | id-pe 10 : ac-proxying |
347 | !Cname sinfo-access | 348 | !Cname sinfo-access |
348 | id-pe 11 : subjectInfoAccess : Subject Information Access | 349 | id-pe 11 : subjectInfoAccess : Subject Information Access |
350 | id-pe 14 : proxyCertInfo : Proxy Certificate Information | ||
349 | 351 | ||
350 | # PKIX policyQualifiers for Internet policy qualifiers | 352 | # PKIX policyQualifiers for Internet policy qualifiers |
351 | id-qt 1 : id-qt-cps : Policy Qualifier CPS | 353 | id-qt 1 : id-qt-cps : Policy Qualifier CPS |
@@ -461,6 +463,11 @@ id-cct 1 : id-cct-crs | |||
461 | id-cct 2 : id-cct-PKIData | 463 | id-cct 2 : id-cct-PKIData |
462 | id-cct 3 : id-cct-PKIResponse | 464 | id-cct 3 : id-cct-PKIResponse |
463 | 465 | ||
466 | # Predefined Proxy Certificate policy languages | ||
467 | id-ppl 0 : id-ppl-anyLanguage : Any language | ||
468 | id-ppl 1 : id-ppl-inheritAll : Inherit all | ||
469 | id-ppl 2 : id-ppl-independent : Independent | ||
470 | |||
464 | # access descriptors for authority info access extension | 471 | # access descriptors for authority info access extension |
465 | !Cname ad-OCSP | 472 | !Cname ad-OCSP |
466 | id-ad 1 : OCSP : OCSP | 473 | id-ad 1 : OCSP : OCSP |
@@ -536,10 +543,12 @@ X509 5 : : serialNumber | |||
536 | X509 6 : C : countryName | 543 | X509 6 : C : countryName |
537 | X509 7 : L : localityName | 544 | X509 7 : L : localityName |
538 | X509 8 : ST : stateOrProvinceName | 545 | X509 8 : ST : stateOrProvinceName |
546 | X509 9 : : streetAddress | ||
539 | X509 10 : O : organizationName | 547 | X509 10 : O : organizationName |
540 | X509 11 : OU : organizationalUnitName | 548 | X509 11 : OU : organizationalUnitName |
541 | X509 12 : : title | 549 | X509 12 : : title |
542 | X509 13 : : description | 550 | X509 13 : : description |
551 | X509 17 : : postalCode | ||
543 | X509 41 : name : name | 552 | X509 41 : name : name |
544 | X509 42 : GN : givenName | 553 | X509 42 : GN : givenName |
545 | X509 43 : : initials | 554 | X509 43 : : initials |
@@ -681,6 +690,19 @@ aes 43 : AES-256-OFB : aes-256-ofb | |||
681 | !Cname aes-256-cfb128 | 690 | !Cname aes-256-cfb128 |
682 | aes 44 : AES-256-CFB : aes-256-cfb | 691 | aes 44 : AES-256-CFB : aes-256-cfb |
683 | 692 | ||
693 | # There are no OIDs for these modes... | ||
694 | |||
695 | : AES-128-CFB1 : aes-128-cfb1 | ||
696 | : AES-192-CFB1 : aes-192-cfb1 | ||
697 | : AES-256-CFB1 : aes-256-cfb1 | ||
698 | : AES-128-CFB8 : aes-128-cfb8 | ||
699 | : AES-192-CFB8 : aes-192-cfb8 | ||
700 | : AES-256-CFB8 : aes-256-cfb8 | ||
701 | : DES-CFB1 : des-cfb1 | ||
702 | : DES-CFB8 : des-cfb8 | ||
703 | : DES-EDE3-CFB1 : des-ede3-cfb1 | ||
704 | : DES-EDE3-CFB8 : des-ede3-cfb8 | ||
705 | |||
684 | # Hold instruction CRL entry extension | 706 | # Hold instruction CRL entry extension |
685 | !Cname hold-instruction-code | 707 | !Cname hold-instruction-code |
686 | id-ce 23 : holdInstructionCode : Hold Instruction Code | 708 | id-ce 23 : holdInstructionCode : Hold Instruction Code |
diff --git a/src/lib/libcrypto/opensslv.h b/src/lib/libcrypto/opensslv.h index 02f1710fb3..5d5f688edd 100644 --- a/src/lib/libcrypto/opensslv.h +++ b/src/lib/libcrypto/opensslv.h | |||
@@ -25,8 +25,12 @@ | |||
25 | * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for | 25 | * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for |
26 | * major minor fix final patch/beta) | 26 | * major minor fix final patch/beta) |
27 | */ | 27 | */ |
28 | #define OPENSSL_VERSION_NUMBER 0x0090704fL | 28 | #define OPENSSL_VERSION_NUMBER 0x0090707fL |
29 | #define OPENSSL_VERSION_TEXT "OpenSSL 0.9.7d 17 Mar 2004" | 29 | #ifdef OPENSSL_FIPS |
30 | #define OPENSSL_VERSION_TEXT "OpenSSL 0.9.7g-fips 11 Apr 2005" | ||
31 | #else | ||
32 | #define OPENSSL_VERSION_TEXT "OpenSSL 0.9.7g 11 Apr 2005" | ||
33 | #endif | ||
30 | #define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT | 34 | #define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT |
31 | 35 | ||
32 | 36 | ||
diff --git a/src/lib/libcrypto/pem/pem_all.c b/src/lib/libcrypto/pem/pem_all.c index e72b7134ce..07963314c9 100644 --- a/src/lib/libcrypto/pem/pem_all.c +++ b/src/lib/libcrypto/pem/pem_all.c | |||
@@ -64,6 +64,7 @@ | |||
64 | #include <openssl/x509.h> | 64 | #include <openssl/x509.h> |
65 | #include <openssl/pkcs7.h> | 65 | #include <openssl/pkcs7.h> |
66 | #include <openssl/pem.h> | 66 | #include <openssl/pem.h> |
67 | #include <openssl/fips.h> | ||
67 | 68 | ||
68 | #ifndef OPENSSL_NO_RSA | 69 | #ifndef OPENSSL_NO_RSA |
69 | static RSA *pkey_get_rsa(EVP_PKEY *key, RSA **rsa); | 70 | static RSA *pkey_get_rsa(EVP_PKEY *key, RSA **rsa); |
@@ -128,7 +129,49 @@ RSA *PEM_read_RSAPrivateKey(FILE *fp, RSA **rsa, pem_password_cb *cb, | |||
128 | 129 | ||
129 | #endif | 130 | #endif |
130 | 131 | ||
132 | #ifdef OPENSSL_FIPS | ||
133 | |||
134 | int PEM_write_bio_RSAPrivateKey(BIO *bp, RSA *x, const EVP_CIPHER *enc, | ||
135 | unsigned char *kstr, int klen, | ||
136 | pem_password_cb *cb, void *u) | ||
137 | { | ||
138 | EVP_PKEY *k; | ||
139 | int ret; | ||
140 | k = EVP_PKEY_new(); | ||
141 | if (!k) | ||
142 | return 0; | ||
143 | EVP_PKEY_set1_RSA(k, x); | ||
144 | |||
145 | ret = PEM_write_bio_PrivateKey(bp, k, enc, kstr, klen, cb, u); | ||
146 | EVP_PKEY_free(k); | ||
147 | return ret; | ||
148 | } | ||
149 | |||
150 | #ifndef OPENSSL_NO_FP_API | ||
151 | int PEM_write_RSAPrivateKey(FILE *fp, RSA *x, const EVP_CIPHER *enc, | ||
152 | unsigned char *kstr, int klen, | ||
153 | pem_password_cb *cb, void *u) | ||
154 | { | ||
155 | EVP_PKEY *k; | ||
156 | int ret; | ||
157 | k = EVP_PKEY_new(); | ||
158 | if (!k) | ||
159 | return 0; | ||
160 | |||
161 | EVP_PKEY_set1_RSA(k, x); | ||
162 | |||
163 | ret = PEM_write_PrivateKey(fp, k, enc, kstr, klen, cb, u); | ||
164 | EVP_PKEY_free(k); | ||
165 | return ret; | ||
166 | } | ||
167 | #endif | ||
168 | |||
169 | #else | ||
170 | |||
131 | IMPLEMENT_PEM_write_cb(RSAPrivateKey, RSA, PEM_STRING_RSA, RSAPrivateKey) | 171 | IMPLEMENT_PEM_write_cb(RSAPrivateKey, RSA, PEM_STRING_RSA, RSAPrivateKey) |
172 | |||
173 | #endif | ||
174 | |||
132 | IMPLEMENT_PEM_rw(RSAPublicKey, RSA, PEM_STRING_RSA_PUBLIC, RSAPublicKey) | 175 | IMPLEMENT_PEM_rw(RSAPublicKey, RSA, PEM_STRING_RSA_PUBLIC, RSAPublicKey) |
133 | IMPLEMENT_PEM_rw(RSA_PUBKEY, RSA, PEM_STRING_PUBLIC, RSA_PUBKEY) | 176 | IMPLEMENT_PEM_rw(RSA_PUBKEY, RSA, PEM_STRING_PUBLIC, RSA_PUBKEY) |
134 | 177 | ||
@@ -158,7 +201,48 @@ DSA *PEM_read_bio_DSAPrivateKey(BIO *bp, DSA **dsa, pem_password_cb *cb, | |||
158 | return pkey_get_dsa(pktmp, dsa); | 201 | return pkey_get_dsa(pktmp, dsa); |
159 | } | 202 | } |
160 | 203 | ||
204 | |||
205 | #ifdef OPENSSL_FIPS | ||
206 | |||
207 | int PEM_write_bio_DSAPrivateKey(BIO *bp, DSA *x, const EVP_CIPHER *enc, | ||
208 | unsigned char *kstr, int klen, | ||
209 | pem_password_cb *cb, void *u) | ||
210 | { | ||
211 | EVP_PKEY *k; | ||
212 | int ret; | ||
213 | k = EVP_PKEY_new(); | ||
214 | if (!k) | ||
215 | return 0; | ||
216 | EVP_PKEY_set1_DSA(k, x); | ||
217 | |||
218 | ret = PEM_write_bio_PrivateKey(bp, k, enc, kstr, klen, cb, u); | ||
219 | EVP_PKEY_free(k); | ||
220 | return ret; | ||
221 | } | ||
222 | |||
223 | #ifndef OPENSSL_NO_FP_API | ||
224 | int PEM_write_DSAPrivateKey(FILE *fp, DSA *x, const EVP_CIPHER *enc, | ||
225 | unsigned char *kstr, int klen, | ||
226 | pem_password_cb *cb, void *u) | ||
227 | { | ||
228 | EVP_PKEY *k; | ||
229 | int ret; | ||
230 | k = EVP_PKEY_new(); | ||
231 | if (!k) | ||
232 | return 0; | ||
233 | EVP_PKEY_set1_DSA(k, x); | ||
234 | ret = PEM_write_PrivateKey(fp, k, enc, kstr, klen, cb, u); | ||
235 | EVP_PKEY_free(k); | ||
236 | return ret; | ||
237 | } | ||
238 | #endif | ||
239 | |||
240 | #else | ||
241 | |||
161 | IMPLEMENT_PEM_write_cb(DSAPrivateKey, DSA, PEM_STRING_DSA, DSAPrivateKey) | 242 | IMPLEMENT_PEM_write_cb(DSAPrivateKey, DSA, PEM_STRING_DSA, DSAPrivateKey) |
243 | |||
244 | #endif | ||
245 | |||
162 | IMPLEMENT_PEM_rw(DSA_PUBKEY, DSA, PEM_STRING_PUBLIC, DSA_PUBKEY) | 246 | IMPLEMENT_PEM_rw(DSA_PUBKEY, DSA, PEM_STRING_PUBLIC, DSA_PUBKEY) |
163 | 247 | ||
164 | #ifndef OPENSSL_NO_FP_API | 248 | #ifndef OPENSSL_NO_FP_API |
@@ -190,7 +274,42 @@ IMPLEMENT_PEM_rw(DHparams, DH, PEM_STRING_DHPARAMS, DHparams) | |||
190 | * (When reading, parameter PEM_STRING_EVP_PKEY is a wildcard for anything | 274 | * (When reading, parameter PEM_STRING_EVP_PKEY is a wildcard for anything |
191 | * appropriate.) | 275 | * appropriate.) |
192 | */ | 276 | */ |
277 | |||
278 | #ifdef OPENSSL_FIPS | ||
279 | |||
280 | int PEM_write_bio_PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, | ||
281 | unsigned char *kstr, int klen, | ||
282 | pem_password_cb *cb, void *u) | ||
283 | { | ||
284 | if (FIPS_mode()) | ||
285 | return PEM_write_bio_PKCS8PrivateKey(bp, x, enc, | ||
286 | (char *)kstr, klen, cb, u); | ||
287 | else | ||
288 | return PEM_ASN1_write_bio((int (*)())i2d_PrivateKey, | ||
289 | (((x)->type == EVP_PKEY_DSA)?PEM_STRING_DSA:PEM_STRING_RSA), | ||
290 | bp,(char *)x,enc,kstr,klen,cb,u); | ||
291 | } | ||
292 | |||
293 | #ifndef OPENSSL_NO_FP_API | ||
294 | int PEM_write_PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, | ||
295 | unsigned char *kstr, int klen, | ||
296 | pem_password_cb *cb, void *u) | ||
297 | { | ||
298 | if (FIPS_mode()) | ||
299 | return PEM_write_PKCS8PrivateKey(fp, x, enc, | ||
300 | (char *)kstr, klen, cb, u); | ||
301 | else | ||
302 | return PEM_ASN1_write((int (*)())i2d_PrivateKey, | ||
303 | (((x)->type == EVP_PKEY_DSA)?PEM_STRING_DSA:PEM_STRING_RSA), | ||
304 | fp,(char *)x,enc,kstr,klen,cb,u); | ||
305 | } | ||
306 | #endif | ||
307 | |||
308 | #else | ||
309 | |||
193 | IMPLEMENT_PEM_write_cb(PrivateKey, EVP_PKEY, ((x->type == EVP_PKEY_DSA)?PEM_STRING_DSA:PEM_STRING_RSA), PrivateKey) | 310 | IMPLEMENT_PEM_write_cb(PrivateKey, EVP_PKEY, ((x->type == EVP_PKEY_DSA)?PEM_STRING_DSA:PEM_STRING_RSA), PrivateKey) |
194 | 311 | ||
312 | #endif | ||
313 | |||
195 | IMPLEMENT_PEM_rw(PUBKEY, EVP_PKEY, PEM_STRING_PUBLIC, PUBKEY) | 314 | IMPLEMENT_PEM_rw(PUBKEY, EVP_PKEY, PEM_STRING_PUBLIC, PUBKEY) |
196 | 315 | ||
diff --git a/src/lib/libcrypto/pem/pem_lib.c b/src/lib/libcrypto/pem/pem_lib.c index 7785039b99..82815067b3 100644 --- a/src/lib/libcrypto/pem/pem_lib.c +++ b/src/lib/libcrypto/pem/pem_lib.c | |||
@@ -73,7 +73,7 @@ const char *PEM_version="PEM" OPENSSL_VERSION_PTEXT; | |||
73 | 73 | ||
74 | #define MIN_LENGTH 4 | 74 | #define MIN_LENGTH 4 |
75 | 75 | ||
76 | static int load_iv(unsigned char **fromp,unsigned char *to, int num); | 76 | static int load_iv(char **fromp,unsigned char *to, int num); |
77 | static int check_pem(const char *nm, const char *name); | 77 | static int check_pem(const char *nm, const char *name); |
78 | 78 | ||
79 | int PEM_def_callback(char *buf, int num, int w, void *key) | 79 | int PEM_def_callback(char *buf, int num, int w, void *key) |
@@ -301,7 +301,7 @@ int PEM_ASN1_write_bio(int (*i2d)(), const char *name, BIO *bp, char *x, | |||
301 | 301 | ||
302 | if ((dsize=i2d(x,NULL)) < 0) | 302 | if ((dsize=i2d(x,NULL)) < 0) |
303 | { | 303 | { |
304 | PEMerr(PEM_F_PEM_ASN1_WRITE_BIO,ERR_R_MALLOC_FAILURE); | 304 | PEMerr(PEM_F_PEM_ASN1_WRITE_BIO,ERR_R_ASN1_LIB); |
305 | dsize=0; | 305 | dsize=0; |
306 | goto err; | 306 | goto err; |
307 | } | 307 | } |
@@ -432,6 +432,7 @@ int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher) | |||
432 | int o; | 432 | int o; |
433 | const EVP_CIPHER *enc=NULL; | 433 | const EVP_CIPHER *enc=NULL; |
434 | char *p,c; | 434 | char *p,c; |
435 | char **header_pp = &header; | ||
435 | 436 | ||
436 | cipher->cipher=NULL; | 437 | cipher->cipher=NULL; |
437 | if ((header == NULL) || (*header == '\0') || (*header == '\n')) | 438 | if ((header == NULL) || (*header == '\0') || (*header == '\n')) |
@@ -478,15 +479,16 @@ int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher) | |||
478 | PEMerr(PEM_F_PEM_GET_EVP_CIPHER_INFO,PEM_R_UNSUPPORTED_ENCRYPTION); | 479 | PEMerr(PEM_F_PEM_GET_EVP_CIPHER_INFO,PEM_R_UNSUPPORTED_ENCRYPTION); |
479 | return(0); | 480 | return(0); |
480 | } | 481 | } |
481 | if (!load_iv((unsigned char **)&header,&(cipher->iv[0]),enc->iv_len)) return(0); | 482 | if (!load_iv(header_pp,&(cipher->iv[0]),enc->iv_len)) |
483 | return(0); | ||
482 | 484 | ||
483 | return(1); | 485 | return(1); |
484 | } | 486 | } |
485 | 487 | ||
486 | static int load_iv(unsigned char **fromp, unsigned char *to, int num) | 488 | static int load_iv(char **fromp, unsigned char *to, int num) |
487 | { | 489 | { |
488 | int v,i; | 490 | int v,i; |
489 | unsigned char *from; | 491 | char *from; |
490 | 492 | ||
491 | from= *fromp; | 493 | from= *fromp; |
492 | for (i=0; i<num; i++) to[i]=0; | 494 | for (i=0; i<num; i++) to[i]=0; |
@@ -623,6 +625,9 @@ int PEM_read_bio(BIO *bp, char **name, char **header, unsigned char **data, | |||
623 | dataB=BUF_MEM_new(); | 625 | dataB=BUF_MEM_new(); |
624 | if ((nameB == NULL) || (headerB == NULL) || (dataB == NULL)) | 626 | if ((nameB == NULL) || (headerB == NULL) || (dataB == NULL)) |
625 | { | 627 | { |
628 | BUF_MEM_free(nameB); | ||
629 | BUF_MEM_free(headerB); | ||
630 | BUF_MEM_free(dataB); | ||
626 | PEMerr(PEM_F_PEM_READ_BIO,ERR_R_MALLOC_FAILURE); | 631 | PEMerr(PEM_F_PEM_READ_BIO,ERR_R_MALLOC_FAILURE); |
627 | return(0); | 632 | return(0); |
628 | } | 633 | } |
diff --git a/src/lib/libcrypto/pem/pem_pkey.c b/src/lib/libcrypto/pem/pem_pkey.c index f77c949e87..9ecdbd5419 100644 --- a/src/lib/libcrypto/pem/pem_pkey.c +++ b/src/lib/libcrypto/pem/pem_pkey.c | |||
@@ -104,6 +104,7 @@ EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, vo | |||
104 | if (klen <= 0) { | 104 | if (klen <= 0) { |
105 | PEMerr(PEM_F_PEM_ASN1_READ_BIO, | 105 | PEMerr(PEM_F_PEM_ASN1_READ_BIO, |
106 | PEM_R_BAD_PASSWORD_READ); | 106 | PEM_R_BAD_PASSWORD_READ); |
107 | X509_SIG_free(p8); | ||
107 | goto err; | 108 | goto err; |
108 | } | 109 | } |
109 | p8inf = PKCS8_decrypt(p8, psbuf, klen); | 110 | p8inf = PKCS8_decrypt(p8, psbuf, klen); |
diff --git a/src/lib/libcrypto/perlasm/x86asm.pl b/src/lib/libcrypto/perlasm/x86asm.pl index 7c675e3ced..60233f80e8 100644 --- a/src/lib/libcrypto/perlasm/x86asm.pl +++ b/src/lib/libcrypto/perlasm/x86asm.pl | |||
@@ -130,4 +130,6 @@ BSDI - a.out with a very primative version of as. | |||
130 | EOF | 130 | EOF |
131 | } | 131 | } |
132 | 132 | ||
133 | sub main'align() {} # swallow align statements in 0.9.7 context | ||
134 | |||
133 | 1; | 135 | 1; |
diff --git a/src/lib/libcrypto/perlasm/x86ms.pl b/src/lib/libcrypto/perlasm/x86ms.pl index fbb4afb9bd..b6bd744057 100644 --- a/src/lib/libcrypto/perlasm/x86ms.pl +++ b/src/lib/libcrypto/perlasm/x86ms.pl | |||
@@ -160,6 +160,7 @@ sub main'not { &out1("not",@_); } | |||
160 | sub main'call { &out1("call",($_[0]=~/^\$L/?'':'_').$_[0]); } | 160 | sub main'call { &out1("call",($_[0]=~/^\$L/?'':'_').$_[0]); } |
161 | sub main'ret { &out0("ret"); } | 161 | sub main'ret { &out0("ret"); } |
162 | sub main'nop { &out0("nop"); } | 162 | sub main'nop { &out0("nop"); } |
163 | sub main'movz { &out2("movzx",@_); } | ||
163 | 164 | ||
164 | sub out2 | 165 | sub out2 |
165 | { | 166 | { |
diff --git a/src/lib/libcrypto/perlasm/x86nasm.pl b/src/lib/libcrypto/perlasm/x86nasm.pl index 30346af4ea..5009acb4b3 100644 --- a/src/lib/libcrypto/perlasm/x86nasm.pl +++ b/src/lib/libcrypto/perlasm/x86nasm.pl | |||
@@ -86,7 +86,7 @@ sub get_mem | |||
86 | { | 86 | { |
87 | my($size,$addr,$reg1,$reg2,$idx)=@_; | 87 | my($size,$addr,$reg1,$reg2,$idx)=@_; |
88 | my($t,$post); | 88 | my($t,$post); |
89 | my($ret)="["; | 89 | my($ret)="$size ["; |
90 | $addr =~ s/^\s+//; | 90 | $addr =~ s/^\s+//; |
91 | if ($addr =~ /^(.+)\+(.+)$/) | 91 | if ($addr =~ /^(.+)\+(.+)$/) |
92 | { | 92 | { |
@@ -169,6 +169,7 @@ sub main'not { &out1("not",@_); } | |||
169 | sub main'call { &out1("call",($_[0]=~/^\$L/?'':'_').$_[0]); } | 169 | sub main'call { &out1("call",($_[0]=~/^\$L/?'':'_').$_[0]); } |
170 | sub main'ret { &out0("ret"); } | 170 | sub main'ret { &out0("ret"); } |
171 | sub main'nop { &out0("nop"); } | 171 | sub main'nop { &out0("nop"); } |
172 | sub main'movz { &out2("movzx",@_); } | ||
172 | 173 | ||
173 | sub out2 | 174 | sub out2 |
174 | { | 175 | { |
@@ -176,6 +177,11 @@ sub out2 | |||
176 | my($l,$t); | 177 | my($l,$t); |
177 | 178 | ||
178 | push(@out,"\t$name\t"); | 179 | push(@out,"\t$name\t"); |
180 | if ($name eq "lea") | ||
181 | { | ||
182 | $p1 =~ s/^[^\[]*\[/\[/; | ||
183 | $p2 =~ s/^[^\[]*\[/\[/; | ||
184 | } | ||
179 | $t=&conv($p1).","; | 185 | $t=&conv($p1).","; |
180 | $l=length($t); | 186 | $l=length($t); |
181 | push(@out,$t); | 187 | push(@out,$t); |
diff --git a/src/lib/libcrypto/perlasm/x86unix.pl b/src/lib/libcrypto/perlasm/x86unix.pl index 53ad5f4927..9717d18557 100644 --- a/src/lib/libcrypto/perlasm/x86unix.pl +++ b/src/lib/libcrypto/perlasm/x86unix.pl | |||
@@ -143,12 +143,12 @@ sub main'shl { &out2("sall",@_); } | |||
143 | sub main'shr { &out2("shrl",@_); } | 143 | sub main'shr { &out2("shrl",@_); } |
144 | sub main'xor { &out2("xorl",@_); } | 144 | sub main'xor { &out2("xorl",@_); } |
145 | sub main'xorb { &out2("xorb",@_); } | 145 | sub main'xorb { &out2("xorb",@_); } |
146 | sub main'add { &out2("addl",@_); } | 146 | sub main'add { &out2($_[0]=~/%[a-d][lh]/?"addb":"addl",@_); } |
147 | sub main'adc { &out2("adcl",@_); } | 147 | sub main'adc { &out2("adcl",@_); } |
148 | sub main'sub { &out2("subl",@_); } | 148 | sub main'sub { &out2("subl",@_); } |
149 | sub main'rotl { &out2("roll",@_); } | 149 | sub main'rotl { &out2("roll",@_); } |
150 | sub main'rotr { &out2("rorl",@_); } | 150 | sub main'rotr { &out2("rorl",@_); } |
151 | sub main'exch { &out2("xchg",@_); } | 151 | sub main'exch { &out2($_[0]=~/%[a-d][lh]/?"xchgb":"xchgl",@_); } |
152 | sub main'cmp { &out2("cmpl",@_); } | 152 | sub main'cmp { &out2("cmpl",@_); } |
153 | sub main'lea { &out2("leal",@_); } | 153 | sub main'lea { &out2("leal",@_); } |
154 | sub main'mul { &out1("mull",@_); } | 154 | sub main'mul { &out1("mull",@_); } |
@@ -170,7 +170,7 @@ sub main'jc { &out1("jc",@_); } | |||
170 | sub main'jnc { &out1("jnc",@_); } | 170 | sub main'jnc { &out1("jnc",@_); } |
171 | sub main'jno { &out1("jno",@_); } | 171 | sub main'jno { &out1("jno",@_); } |
172 | sub main'dec { &out1("decl",@_); } | 172 | sub main'dec { &out1("decl",@_); } |
173 | sub main'inc { &out1("incl",@_); } | 173 | sub main'inc { &out1($_[0]=~/%[a-d][hl]/?"incb":"incl",@_); } |
174 | sub main'push { &out1("pushl",@_); $stack+=4; } | 174 | sub main'push { &out1("pushl",@_); $stack+=4; } |
175 | sub main'pop { &out1("popl",@_); $stack-=4; } | 175 | sub main'pop { &out1("popl",@_); $stack-=4; } |
176 | sub main'pushf { &out0("pushf"); $stack+=4; } | 176 | sub main'pushf { &out0("pushf"); $stack+=4; } |
@@ -179,6 +179,7 @@ sub main'not { &out1("notl",@_); } | |||
179 | sub main'call { &out1("call",($_[0]=~/^\.L/?'':$under).$_[0]); } | 179 | sub main'call { &out1("call",($_[0]=~/^\.L/?'':$under).$_[0]); } |
180 | sub main'ret { &out0("ret"); } | 180 | sub main'ret { &out0("ret"); } |
181 | sub main'nop { &out0("nop"); } | 181 | sub main'nop { &out0("nop"); } |
182 | sub main'movz { &out2("movzbl",@_); } | ||
182 | 183 | ||
183 | # The bswapl instruction is new for the 486. Emulate if i386. | 184 | # The bswapl instruction is new for the 486. Emulate if i386. |
184 | sub main'bswap | 185 | sub main'bswap |
diff --git a/src/lib/libcrypto/pkcs12/p12_crpt.c b/src/lib/libcrypto/pkcs12/p12_crpt.c index 5e8958612b..003ec7a33e 100644 --- a/src/lib/libcrypto/pkcs12/p12_crpt.c +++ b/src/lib/libcrypto/pkcs12/p12_crpt.c | |||
@@ -88,7 +88,7 @@ int PKCS12_PBE_keyivgen (EVP_CIPHER_CTX *ctx, const char *pass, int passlen, | |||
88 | ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de) | 88 | ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de) |
89 | { | 89 | { |
90 | PBEPARAM *pbe; | 90 | PBEPARAM *pbe; |
91 | int saltlen, iter; | 91 | int saltlen, iter, ret; |
92 | unsigned char *salt, *pbuf; | 92 | unsigned char *salt, *pbuf; |
93 | unsigned char key[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH]; | 93 | unsigned char key[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH]; |
94 | 94 | ||
@@ -117,8 +117,8 @@ int PKCS12_PBE_keyivgen (EVP_CIPHER_CTX *ctx, const char *pass, int passlen, | |||
117 | return 0; | 117 | return 0; |
118 | } | 118 | } |
119 | PBEPARAM_free(pbe); | 119 | PBEPARAM_free(pbe); |
120 | EVP_CipherInit_ex(ctx, cipher, NULL, key, iv, en_de); | 120 | ret = EVP_CipherInit_ex(ctx, cipher, NULL, key, iv, en_de); |
121 | OPENSSL_cleanse(key, EVP_MAX_KEY_LENGTH); | 121 | OPENSSL_cleanse(key, EVP_MAX_KEY_LENGTH); |
122 | OPENSSL_cleanse(iv, EVP_MAX_IV_LENGTH); | 122 | OPENSSL_cleanse(iv, EVP_MAX_IV_LENGTH); |
123 | return 1; | 123 | return ret; |
124 | } | 124 | } |
diff --git a/src/lib/libcrypto/pkcs12/p12_init.c b/src/lib/libcrypto/pkcs12/p12_init.c index eb837a78cf..5276b12669 100644 --- a/src/lib/libcrypto/pkcs12/p12_init.c +++ b/src/lib/libcrypto/pkcs12/p12_init.c | |||
@@ -76,15 +76,17 @@ PKCS12 *PKCS12_init (int mode) | |||
76 | if (!(pkcs12->authsafes->d.data = | 76 | if (!(pkcs12->authsafes->d.data = |
77 | M_ASN1_OCTET_STRING_new())) { | 77 | M_ASN1_OCTET_STRING_new())) { |
78 | PKCS12err(PKCS12_F_PKCS12_INIT,ERR_R_MALLOC_FAILURE); | 78 | PKCS12err(PKCS12_F_PKCS12_INIT,ERR_R_MALLOC_FAILURE); |
79 | return NULL; | 79 | goto err; |
80 | } | 80 | } |
81 | break; | 81 | break; |
82 | default: | 82 | default: |
83 | PKCS12err(PKCS12_F_PKCS12_INIT,PKCS12_R_UNSUPPORTED_PKCS12_MODE); | 83 | PKCS12err(PKCS12_F_PKCS12_INIT, |
84 | PKCS12_free(pkcs12); | 84 | PKCS12_R_UNSUPPORTED_PKCS12_MODE); |
85 | return NULL; | 85 | goto err; |
86 | break; | ||
87 | } | 86 | } |
88 | 87 | ||
89 | return pkcs12; | 88 | return pkcs12; |
89 | err: | ||
90 | if (pkcs12 != NULL) PKCS12_free(pkcs12); | ||
91 | return NULL; | ||
90 | } | 92 | } |
diff --git a/src/lib/libcrypto/pkcs12/p12_kiss.c b/src/lib/libcrypto/pkcs12/p12_kiss.c index 885087ad00..2b31999e11 100644 --- a/src/lib/libcrypto/pkcs12/p12_kiss.c +++ b/src/lib/libcrypto/pkcs12/p12_kiss.c | |||
@@ -249,14 +249,26 @@ static int parse_bag(PKCS12_SAFEBAG *bag, const char *pass, int passlen, | |||
249 | if (M_PKCS12_cert_bag_type(bag) != NID_x509Certificate ) | 249 | if (M_PKCS12_cert_bag_type(bag) != NID_x509Certificate ) |
250 | return 1; | 250 | return 1; |
251 | if (!(x509 = PKCS12_certbag2x509(bag))) return 0; | 251 | if (!(x509 = PKCS12_certbag2x509(bag))) return 0; |
252 | if(ckid) X509_keyid_set1(x509, ckid->data, ckid->length); | 252 | if(ckid) |
253 | { | ||
254 | if (!X509_keyid_set1(x509, ckid->data, ckid->length)) | ||
255 | { | ||
256 | X509_free(x509); | ||
257 | return 0; | ||
258 | } | ||
259 | } | ||
253 | if(fname) { | 260 | if(fname) { |
254 | int len; | 261 | int len, r; |
255 | unsigned char *data; | 262 | unsigned char *data; |
256 | len = ASN1_STRING_to_UTF8(&data, fname); | 263 | len = ASN1_STRING_to_UTF8(&data, fname); |
257 | if(len > 0) { | 264 | if(len > 0) { |
258 | X509_alias_set1(x509, data, len); | 265 | r = X509_alias_set1(x509, data, len); |
259 | OPENSSL_free(data); | 266 | OPENSSL_free(data); |
267 | if (!r) | ||
268 | { | ||
269 | X509_free(x509); | ||
270 | return 0; | ||
271 | } | ||
260 | } | 272 | } |
261 | } | 273 | } |
262 | 274 | ||
diff --git a/src/lib/libcrypto/pkcs12/p12_mutl.c b/src/lib/libcrypto/pkcs12/p12_mutl.c index 0fb67f74b8..4886b9b289 100644 --- a/src/lib/libcrypto/pkcs12/p12_mutl.c +++ b/src/lib/libcrypto/pkcs12/p12_mutl.c | |||
@@ -148,7 +148,10 @@ int PKCS12_setup_mac (PKCS12 *p12, int iter, unsigned char *salt, int saltlen, | |||
148 | PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE); | 148 | PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE); |
149 | return 0; | 149 | return 0; |
150 | } | 150 | } |
151 | ASN1_INTEGER_set(p12->mac->iter, iter); | 151 | if (!ASN1_INTEGER_set(p12->mac->iter, iter)) { |
152 | PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE); | ||
153 | return 0; | ||
154 | } | ||
152 | } | 155 | } |
153 | if (!saltlen) saltlen = PKCS12_SALT_LEN; | 156 | if (!saltlen) saltlen = PKCS12_SALT_LEN; |
154 | p12->mac->salt->length = saltlen; | 157 | p12->mac->salt->length = saltlen; |
diff --git a/src/lib/libcrypto/pkcs7/pk7_attr.c b/src/lib/libcrypto/pkcs7/pk7_attr.c index 5ff5a88b5c..039141027a 100644 --- a/src/lib/libcrypto/pkcs7/pk7_attr.c +++ b/src/lib/libcrypto/pkcs7/pk7_attr.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * project 2001. | 3 | * project 2001. |
4 | */ | 4 | */ |
5 | /* ==================================================================== | 5 | /* ==================================================================== |
6 | * Copyright (c) 2001 The OpenSSL Project. All rights reserved. | 6 | * Copyright (c) 2001-2004 The OpenSSL Project. All rights reserved. |
7 | * | 7 | * |
8 | * Redistribution and use in source and binary forms, with or without | 8 | * Redistribution and use in source and binary forms, with or without |
9 | * modification, are permitted provided that the following conditions | 9 | * modification, are permitted provided that the following conditions |
@@ -94,17 +94,18 @@ int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, STACK_OF(X509_ALGOR) *cap) | |||
94 | } | 94 | } |
95 | 95 | ||
96 | STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si) | 96 | STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si) |
97 | { | 97 | { |
98 | ASN1_TYPE *cap; | 98 | ASN1_TYPE *cap; |
99 | unsigned char *p; | 99 | unsigned char *p; |
100 | cap = PKCS7_get_signed_attribute(si, NID_SMIMECapabilities); | 100 | cap = PKCS7_get_signed_attribute(si, NID_SMIMECapabilities); |
101 | if (!cap) return NULL; | 101 | if (!cap || (cap->type != V_ASN1_SEQUENCE)) |
102 | return NULL; | ||
102 | p = cap->value.sequence->data; | 103 | p = cap->value.sequence->data; |
103 | return d2i_ASN1_SET_OF_X509_ALGOR(NULL, &p, | 104 | return d2i_ASN1_SET_OF_X509_ALGOR(NULL, &p, |
104 | cap->value.sequence->length, | 105 | cap->value.sequence->length, |
105 | d2i_X509_ALGOR, X509_ALGOR_free, | 106 | d2i_X509_ALGOR, X509_ALGOR_free, |
106 | V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL); | 107 | V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL); |
107 | } | 108 | } |
108 | 109 | ||
109 | /* Basic smime-capabilities OID and optional integer arg */ | 110 | /* Basic smime-capabilities OID and optional integer arg */ |
110 | int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg) | 111 | int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg) |
diff --git a/src/lib/libcrypto/pkcs7/pk7_doit.c b/src/lib/libcrypto/pkcs7/pk7_doit.c index b78e22819c..4ac29ae14d 100644 --- a/src/lib/libcrypto/pkcs7/pk7_doit.c +++ b/src/lib/libcrypto/pkcs7/pk7_doit.c | |||
@@ -239,7 +239,13 @@ BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio) | |||
239 | OPENSSL_free(tmp); | 239 | OPENSSL_free(tmp); |
240 | goto err; | 240 | goto err; |
241 | } | 241 | } |
242 | M_ASN1_OCTET_STRING_set(ri->enc_key,tmp,jj); | 242 | if (!M_ASN1_OCTET_STRING_set(ri->enc_key,tmp,jj)) |
243 | { | ||
244 | PKCS7err(PKCS7_F_PKCS7_DATAINIT, | ||
245 | ERR_R_MALLOC_FAILURE); | ||
246 | OPENSSL_free(tmp); | ||
247 | goto err; | ||
248 | } | ||
243 | } | 249 | } |
244 | OPENSSL_free(tmp); | 250 | OPENSSL_free(tmp); |
245 | OPENSSL_cleanse(key, keylen); | 251 | OPENSSL_cleanse(key, keylen); |
@@ -520,12 +526,20 @@ int PKCS7_dataFinal(PKCS7 *p7, BIO *bio) | |||
520 | case NID_pkcs7_signedAndEnveloped: | 526 | case NID_pkcs7_signedAndEnveloped: |
521 | /* XXXXXXXXXXXXXXXX */ | 527 | /* XXXXXXXXXXXXXXXX */ |
522 | si_sk=p7->d.signed_and_enveloped->signer_info; | 528 | si_sk=p7->d.signed_and_enveloped->signer_info; |
523 | os=M_ASN1_OCTET_STRING_new(); | 529 | if (!(os=M_ASN1_OCTET_STRING_new())) |
530 | { | ||
531 | PKCS7err(PKCS7_F_PKCS7_DATASIGN,ERR_R_MALLOC_FAILURE); | ||
532 | goto err; | ||
533 | } | ||
524 | p7->d.signed_and_enveloped->enc_data->enc_data=os; | 534 | p7->d.signed_and_enveloped->enc_data->enc_data=os; |
525 | break; | 535 | break; |
526 | case NID_pkcs7_enveloped: | 536 | case NID_pkcs7_enveloped: |
527 | /* XXXXXXXXXXXXXXXX */ | 537 | /* XXXXXXXXXXXXXXXX */ |
528 | os=M_ASN1_OCTET_STRING_new(); | 538 | if (!(os=M_ASN1_OCTET_STRING_new())) |
539 | { | ||
540 | PKCS7err(PKCS7_F_PKCS7_DATASIGN,ERR_R_MALLOC_FAILURE); | ||
541 | goto err; | ||
542 | } | ||
529 | p7->d.enveloped->enc_data->enc_data=os; | 543 | p7->d.enveloped->enc_data->enc_data=os; |
530 | break; | 544 | break; |
531 | case NID_pkcs7_signed: | 545 | case NID_pkcs7_signed: |
@@ -599,7 +613,12 @@ int PKCS7_dataFinal(PKCS7 *p7, BIO *bio) | |||
599 | if (!PKCS7_get_signed_attribute(si, | 613 | if (!PKCS7_get_signed_attribute(si, |
600 | NID_pkcs9_signingTime)) | 614 | NID_pkcs9_signingTime)) |
601 | { | 615 | { |
602 | sign_time=X509_gmtime_adj(NULL,0); | 616 | if (!(sign_time=X509_gmtime_adj(NULL,0))) |
617 | { | ||
618 | PKCS7err(PKCS7_F_PKCS7_DATASIGN, | ||
619 | ERR_R_MALLOC_FAILURE); | ||
620 | goto err; | ||
621 | } | ||
603 | PKCS7_add_signed_attribute(si, | 622 | PKCS7_add_signed_attribute(si, |
604 | NID_pkcs9_signingTime, | 623 | NID_pkcs9_signingTime, |
605 | V_ASN1_UTCTIME,sign_time); | 624 | V_ASN1_UTCTIME,sign_time); |
@@ -608,8 +627,19 @@ int PKCS7_dataFinal(PKCS7 *p7, BIO *bio) | |||
608 | /* Add digest */ | 627 | /* Add digest */ |
609 | md_tmp=EVP_MD_CTX_md(&ctx_tmp); | 628 | md_tmp=EVP_MD_CTX_md(&ctx_tmp); |
610 | EVP_DigestFinal_ex(&ctx_tmp,md_data,&md_len); | 629 | EVP_DigestFinal_ex(&ctx_tmp,md_data,&md_len); |
611 | digest=M_ASN1_OCTET_STRING_new(); | 630 | if (!(digest=M_ASN1_OCTET_STRING_new())) |
612 | M_ASN1_OCTET_STRING_set(digest,md_data,md_len); | 631 | { |
632 | PKCS7err(PKCS7_F_PKCS7_DATASIGN, | ||
633 | ERR_R_MALLOC_FAILURE); | ||
634 | goto err; | ||
635 | } | ||
636 | if (!M_ASN1_OCTET_STRING_set(digest,md_data, | ||
637 | md_len)) | ||
638 | { | ||
639 | PKCS7err(PKCS7_F_PKCS7_DATASIGN, | ||
640 | ERR_R_MALLOC_FAILURE); | ||
641 | goto err; | ||
642 | } | ||
613 | PKCS7_add_signed_attribute(si, | 643 | PKCS7_add_signed_attribute(si, |
614 | NID_pkcs9_messageDigest, | 644 | NID_pkcs9_messageDigest, |
615 | V_ASN1_OCTET_STRING,digest); | 645 | V_ASN1_OCTET_STRING,digest); |
diff --git a/src/lib/libcrypto/pkcs7/pk7_lib.c b/src/lib/libcrypto/pkcs7/pk7_lib.c index 985b07245c..ee1817c7af 100644 --- a/src/lib/libcrypto/pkcs7/pk7_lib.c +++ b/src/lib/libcrypto/pkcs7/pk7_lib.c | |||
@@ -164,7 +164,12 @@ int PKCS7_set_type(PKCS7 *p7, int type) | |||
164 | p7->type=obj; | 164 | p7->type=obj; |
165 | if ((p7->d.sign=PKCS7_SIGNED_new()) == NULL) | 165 | if ((p7->d.sign=PKCS7_SIGNED_new()) == NULL) |
166 | goto err; | 166 | goto err; |
167 | ASN1_INTEGER_set(p7->d.sign->version,1); | 167 | if (!ASN1_INTEGER_set(p7->d.sign->version,1)) |
168 | { | ||
169 | PKCS7_SIGNED_free(p7->d.sign); | ||
170 | p7->d.sign=NULL; | ||
171 | goto err; | ||
172 | } | ||
168 | break; | 173 | break; |
169 | case NID_pkcs7_data: | 174 | case NID_pkcs7_data: |
170 | p7->type=obj; | 175 | p7->type=obj; |
@@ -176,6 +181,8 @@ int PKCS7_set_type(PKCS7 *p7, int type) | |||
176 | if ((p7->d.signed_and_enveloped=PKCS7_SIGN_ENVELOPE_new()) | 181 | if ((p7->d.signed_and_enveloped=PKCS7_SIGN_ENVELOPE_new()) |
177 | == NULL) goto err; | 182 | == NULL) goto err; |
178 | ASN1_INTEGER_set(p7->d.signed_and_enveloped->version,1); | 183 | ASN1_INTEGER_set(p7->d.signed_and_enveloped->version,1); |
184 | if (!ASN1_INTEGER_set(p7->d.signed_and_enveloped->version,1)) | ||
185 | goto err; | ||
179 | p7->d.signed_and_enveloped->enc_data->content_type | 186 | p7->d.signed_and_enveloped->enc_data->content_type |
180 | = OBJ_nid2obj(NID_pkcs7_data); | 187 | = OBJ_nid2obj(NID_pkcs7_data); |
181 | break; | 188 | break; |
@@ -183,7 +190,8 @@ int PKCS7_set_type(PKCS7 *p7, int type) | |||
183 | p7->type=obj; | 190 | p7->type=obj; |
184 | if ((p7->d.enveloped=PKCS7_ENVELOPE_new()) | 191 | if ((p7->d.enveloped=PKCS7_ENVELOPE_new()) |
185 | == NULL) goto err; | 192 | == NULL) goto err; |
186 | ASN1_INTEGER_set(p7->d.enveloped->version,0); | 193 | if (!ASN1_INTEGER_set(p7->d.enveloped->version,0)) |
194 | goto err; | ||
187 | p7->d.enveloped->enc_data->content_type | 195 | p7->d.enveloped->enc_data->content_type |
188 | = OBJ_nid2obj(NID_pkcs7_data); | 196 | = OBJ_nid2obj(NID_pkcs7_data); |
189 | break; | 197 | break; |
@@ -191,7 +199,8 @@ int PKCS7_set_type(PKCS7 *p7, int type) | |||
191 | p7->type=obj; | 199 | p7->type=obj; |
192 | if ((p7->d.encrypted=PKCS7_ENCRYPT_new()) | 200 | if ((p7->d.encrypted=PKCS7_ENCRYPT_new()) |
193 | == NULL) goto err; | 201 | == NULL) goto err; |
194 | ASN1_INTEGER_set(p7->d.encrypted->version,0); | 202 | if (!ASN1_INTEGER_set(p7->d.encrypted->version,0)) |
203 | goto err; | ||
195 | p7->d.encrypted->enc_data->content_type | 204 | p7->d.encrypted->enc_data->content_type |
196 | = OBJ_nid2obj(NID_pkcs7_data); | 205 | = OBJ_nid2obj(NID_pkcs7_data); |
197 | break; | 206 | break; |
@@ -318,15 +327,18 @@ int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, | |||
318 | if (pkey->type == EVP_PKEY_DSA) is_dsa = 1; | 327 | if (pkey->type == EVP_PKEY_DSA) is_dsa = 1; |
319 | else is_dsa = 0; | 328 | else is_dsa = 0; |
320 | /* We now need to add another PKCS7_SIGNER_INFO entry */ | 329 | /* We now need to add another PKCS7_SIGNER_INFO entry */ |
321 | ASN1_INTEGER_set(p7i->version,1); | 330 | if (!ASN1_INTEGER_set(p7i->version,1)) |
322 | X509_NAME_set(&p7i->issuer_and_serial->issuer, | 331 | goto err; |
323 | X509_get_issuer_name(x509)); | 332 | if (!X509_NAME_set(&p7i->issuer_and_serial->issuer, |
333 | X509_get_issuer_name(x509))) | ||
334 | goto err; | ||
324 | 335 | ||
325 | /* because ASN1_INTEGER_set is used to set a 'long' we will do | 336 | /* because ASN1_INTEGER_set is used to set a 'long' we will do |
326 | * things the ugly way. */ | 337 | * things the ugly way. */ |
327 | M_ASN1_INTEGER_free(p7i->issuer_and_serial->serial); | 338 | M_ASN1_INTEGER_free(p7i->issuer_and_serial->serial); |
328 | p7i->issuer_and_serial->serial= | 339 | if (!(p7i->issuer_and_serial->serial= |
329 | M_ASN1_INTEGER_dup(X509_get_serialNumber(x509)); | 340 | M_ASN1_INTEGER_dup(X509_get_serialNumber(x509)))) |
341 | goto err; | ||
330 | 342 | ||
331 | /* lets keep the pkey around for a while */ | 343 | /* lets keep the pkey around for a while */ |
332 | CRYPTO_add(&pkey->references,1,CRYPTO_LOCK_EVP_PKEY); | 344 | CRYPTO_add(&pkey->references,1,CRYPTO_LOCK_EVP_PKEY); |
@@ -423,16 +435,20 @@ int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri) | |||
423 | 435 | ||
424 | int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509) | 436 | int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509) |
425 | { | 437 | { |
426 | ASN1_INTEGER_set(p7i->version,0); | 438 | if (!ASN1_INTEGER_set(p7i->version,0)) |
427 | X509_NAME_set(&p7i->issuer_and_serial->issuer, | 439 | return 0; |
428 | X509_get_issuer_name(x509)); | 440 | if (!X509_NAME_set(&p7i->issuer_and_serial->issuer, |
441 | X509_get_issuer_name(x509))) | ||
442 | return 0; | ||
429 | 443 | ||
430 | M_ASN1_INTEGER_free(p7i->issuer_and_serial->serial); | 444 | M_ASN1_INTEGER_free(p7i->issuer_and_serial->serial); |
431 | p7i->issuer_and_serial->serial= | 445 | if (!(p7i->issuer_and_serial->serial= |
432 | M_ASN1_INTEGER_dup(X509_get_serialNumber(x509)); | 446 | M_ASN1_INTEGER_dup(X509_get_serialNumber(x509)))) |
447 | return 0; | ||
433 | 448 | ||
434 | X509_ALGOR_free(p7i->key_enc_algor); | 449 | X509_ALGOR_free(p7i->key_enc_algor); |
435 | p7i->key_enc_algor= X509_ALGOR_dup(x509->cert_info->key->algor); | 450 | if (!(p7i->key_enc_algor= X509_ALGOR_dup(x509->cert_info->key->algor))) |
451 | return 0; | ||
436 | 452 | ||
437 | CRYPTO_add(&x509->references,1,CRYPTO_LOCK_X509); | 453 | CRYPTO_add(&x509->references,1,CRYPTO_LOCK_X509); |
438 | p7i->cert=x509; | 454 | p7i->cert=x509; |
diff --git a/src/lib/libcrypto/pkcs7/pk7_smime.c b/src/lib/libcrypto/pkcs7/pk7_smime.c index 6e5735de11..a852b49235 100644 --- a/src/lib/libcrypto/pkcs7/pk7_smime.c +++ b/src/lib/libcrypto/pkcs7/pk7_smime.c | |||
@@ -155,7 +155,7 @@ int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, | |||
155 | char buf[4096]; | 155 | char buf[4096]; |
156 | int i, j=0, k, ret = 0; | 156 | int i, j=0, k, ret = 0; |
157 | BIO *p7bio; | 157 | BIO *p7bio; |
158 | BIO *tmpout; | 158 | BIO *tmpin, *tmpout; |
159 | 159 | ||
160 | if(!p7) { | 160 | if(!p7) { |
161 | PKCS7err(PKCS7_F_PKCS7_VERIFY,PKCS7_R_INVALID_NULL_POINTER); | 161 | PKCS7err(PKCS7_F_PKCS7_VERIFY,PKCS7_R_INVALID_NULL_POINTER); |
@@ -228,7 +228,30 @@ int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, | |||
228 | /* Check for revocation status here */ | 228 | /* Check for revocation status here */ |
229 | } | 229 | } |
230 | 230 | ||
231 | p7bio=PKCS7_dataInit(p7,indata); | 231 | /* Performance optimization: if the content is a memory BIO then |
232 | * store its contents in a temporary read only memory BIO. This | ||
233 | * avoids potentially large numbers of slow copies of data which will | ||
234 | * occur when reading from a read write memory BIO when signatures | ||
235 | * are calculated. | ||
236 | */ | ||
237 | |||
238 | if (indata && (BIO_method_type(indata) == BIO_TYPE_MEM)) | ||
239 | { | ||
240 | char *ptr; | ||
241 | long len; | ||
242 | len = BIO_get_mem_data(indata, &ptr); | ||
243 | tmpin = BIO_new_mem_buf(ptr, len); | ||
244 | if (tmpin == NULL) | ||
245 | { | ||
246 | PKCS7err(PKCS7_F_PKCS7_VERIFY,ERR_R_MALLOC_FAILURE); | ||
247 | return 0; | ||
248 | } | ||
249 | } | ||
250 | else | ||
251 | tmpin = indata; | ||
252 | |||
253 | |||
254 | p7bio=PKCS7_dataInit(p7,tmpin); | ||
232 | 255 | ||
233 | if(flags & PKCS7_TEXT) { | 256 | if(flags & PKCS7_TEXT) { |
234 | if(!(tmpout = BIO_new(BIO_s_mem()))) { | 257 | if(!(tmpout = BIO_new(BIO_s_mem()))) { |
@@ -270,9 +293,15 @@ int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, | |||
270 | ret = 1; | 293 | ret = 1; |
271 | 294 | ||
272 | err: | 295 | err: |
296 | |||
297 | if (tmpin == indata) | ||
298 | { | ||
299 | if(indata) BIO_pop(p7bio); | ||
300 | BIO_free_all(p7bio); | ||
301 | } | ||
302 | else | ||
303 | BIO_free_all(tmpin); | ||
273 | 304 | ||
274 | if(indata) BIO_pop(p7bio); | ||
275 | BIO_free_all(p7bio); | ||
276 | sk_X509_free(signers); | 305 | sk_X509_free(signers); |
277 | 306 | ||
278 | return ret; | 307 | return ret; |
@@ -296,10 +325,6 @@ STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int flags) | |||
296 | PKCS7err(PKCS7_F_PKCS7_GET0_SIGNERS,PKCS7_R_WRONG_CONTENT_TYPE); | 325 | PKCS7err(PKCS7_F_PKCS7_GET0_SIGNERS,PKCS7_R_WRONG_CONTENT_TYPE); |
297 | return NULL; | 326 | return NULL; |
298 | } | 327 | } |
299 | if(!(signers = sk_X509_new_null())) { | ||
300 | PKCS7err(PKCS7_F_PKCS7_GET0_SIGNERS,ERR_R_MALLOC_FAILURE); | ||
301 | return NULL; | ||
302 | } | ||
303 | 328 | ||
304 | /* Collect all the signers together */ | 329 | /* Collect all the signers together */ |
305 | 330 | ||
@@ -310,6 +335,11 @@ STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int flags) | |||
310 | return 0; | 335 | return 0; |
311 | } | 336 | } |
312 | 337 | ||
338 | if(!(signers = sk_X509_new_null())) { | ||
339 | PKCS7err(PKCS7_F_PKCS7_GET0_SIGNERS,ERR_R_MALLOC_FAILURE); | ||
340 | return NULL; | ||
341 | } | ||
342 | |||
313 | for (i = 0; i < sk_PKCS7_SIGNER_INFO_num(sinfos); i++) | 343 | for (i = 0; i < sk_PKCS7_SIGNER_INFO_num(sinfos); i++) |
314 | { | 344 | { |
315 | si = sk_PKCS7_SIGNER_INFO_value(sinfos, i); | 345 | si = sk_PKCS7_SIGNER_INFO_value(sinfos, i); |
diff --git a/src/lib/libcrypto/rand/md_rand.c b/src/lib/libcrypto/rand/md_rand.c index eeffc0df4c..c84968df88 100644 --- a/src/lib/libcrypto/rand/md_rand.c +++ b/src/lib/libcrypto/rand/md_rand.c | |||
@@ -126,6 +126,7 @@ | |||
126 | 126 | ||
127 | #include <openssl/crypto.h> | 127 | #include <openssl/crypto.h> |
128 | #include <openssl/err.h> | 128 | #include <openssl/err.h> |
129 | #include <openssl/fips.h> | ||
129 | 130 | ||
130 | #ifdef BN_DEBUG | 131 | #ifdef BN_DEBUG |
131 | # define PREDICT | 132 | # define PREDICT |
@@ -332,6 +333,14 @@ static int ssleay_rand_bytes(unsigned char *buf, int num) | |||
332 | #endif | 333 | #endif |
333 | int do_stir_pool = 0; | 334 | int do_stir_pool = 0; |
334 | 335 | ||
336 | #ifdef OPENSSL_FIPS | ||
337 | if(FIPS_mode()) | ||
338 | { | ||
339 | FIPSerr(FIPS_F_SSLEAY_RAND_BYTES,FIPS_R_NON_FIPS_METHOD); | ||
340 | return 0; | ||
341 | } | ||
342 | #endif | ||
343 | |||
335 | #ifdef PREDICT | 344 | #ifdef PREDICT |
336 | if (rand_predictable) | 345 | if (rand_predictable) |
337 | { | 346 | { |
diff --git a/src/lib/libcrypto/rand/rand.h b/src/lib/libcrypto/rand/rand.h index 606382dd21..604df9be6c 100644 --- a/src/lib/libcrypto/rand/rand.h +++ b/src/lib/libcrypto/rand/rand.h | |||
@@ -71,6 +71,10 @@ | |||
71 | extern "C" { | 71 | extern "C" { |
72 | #endif | 72 | #endif |
73 | 73 | ||
74 | #if defined(OPENSSL_FIPS) | ||
75 | #define FIPS_RAND_SIZE_T int | ||
76 | #endif | ||
77 | |||
74 | typedef struct rand_meth_st | 78 | typedef struct rand_meth_st |
75 | { | 79 | { |
76 | void (*seed)(const void *buf, int num); | 80 | void (*seed)(const void *buf, int num); |
@@ -121,11 +125,17 @@ void ERR_load_RAND_strings(void); | |||
121 | /* Error codes for the RAND functions. */ | 125 | /* Error codes for the RAND functions. */ |
122 | 126 | ||
123 | /* Function codes. */ | 127 | /* Function codes. */ |
128 | #define RAND_F_FIPS_RAND_BYTES 102 | ||
124 | #define RAND_F_RAND_GET_RAND_METHOD 101 | 129 | #define RAND_F_RAND_GET_RAND_METHOD 101 |
125 | #define RAND_F_SSLEAY_RAND_BYTES 100 | 130 | #define RAND_F_SSLEAY_RAND_BYTES 100 |
126 | 131 | ||
127 | /* Reason codes. */ | 132 | /* Reason codes. */ |
133 | #define RAND_R_NON_FIPS_METHOD 101 | ||
134 | #define RAND_R_PRNG_ASKING_FOR_TOO_MUCH 105 | ||
135 | #define RAND_R_PRNG_NOT_REKEYED 103 | ||
136 | #define RAND_R_PRNG_NOT_RESEEDED 104 | ||
128 | #define RAND_R_PRNG_NOT_SEEDED 100 | 137 | #define RAND_R_PRNG_NOT_SEEDED 100 |
138 | #define RAND_R_PRNG_STUCK 102 | ||
129 | 139 | ||
130 | #ifdef __cplusplus | 140 | #ifdef __cplusplus |
131 | } | 141 | } |
diff --git a/src/lib/libcrypto/rand/rand_egd.c b/src/lib/libcrypto/rand/rand_egd.c index 6f742900a0..cd666abfcb 100644 --- a/src/lib/libcrypto/rand/rand_egd.c +++ b/src/lib/libcrypto/rand/rand_egd.c | |||
@@ -95,7 +95,7 @@ | |||
95 | * RAND_egd() is a wrapper for RAND_egd_bytes() with numbytes=255. | 95 | * RAND_egd() is a wrapper for RAND_egd_bytes() with numbytes=255. |
96 | */ | 96 | */ |
97 | 97 | ||
98 | #if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_VXWORKS) | 98 | #if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_VOS) |
99 | int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes) | 99 | int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes) |
100 | { | 100 | { |
101 | return(-1); | 101 | return(-1); |
@@ -216,7 +216,9 @@ int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes) | |||
216 | while (numbytes != 1) | 216 | while (numbytes != 1) |
217 | { | 217 | { |
218 | num = read(fd, egdbuf, 1); | 218 | num = read(fd, egdbuf, 1); |
219 | if (num >= 0) | 219 | if (num == 0) |
220 | goto err; /* descriptor closed */ | ||
221 | else if (num > 0) | ||
220 | numbytes += num; | 222 | numbytes += num; |
221 | else | 223 | else |
222 | { | 224 | { |
@@ -246,7 +248,9 @@ int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes) | |||
246 | while (numbytes != egdbuf[0]) | 248 | while (numbytes != egdbuf[0]) |
247 | { | 249 | { |
248 | num = read(fd, retrievebuf + numbytes, egdbuf[0] - numbytes); | 250 | num = read(fd, retrievebuf + numbytes, egdbuf[0] - numbytes); |
249 | if (num >= 0) | 251 | if (num == 0) |
252 | goto err; /* descriptor closed */ | ||
253 | else if (num > 0) | ||
250 | numbytes += num; | 254 | numbytes += num; |
251 | else | 255 | else |
252 | { | 256 | { |
diff --git a/src/lib/libcrypto/rand/rand_err.c b/src/lib/libcrypto/rand/rand_err.c index b77267e213..95574659ac 100644 --- a/src/lib/libcrypto/rand/rand_err.c +++ b/src/lib/libcrypto/rand/rand_err.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* crypto/rand/rand_err.c */ | 1 | /* crypto/rand/rand_err.c */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1999-2003 The OpenSSL Project. All rights reserved. |
4 | * | 4 | * |
5 | * Redistribution and use in source and binary forms, with or without | 5 | * Redistribution and use in source and binary forms, with or without |
6 | * modification, are permitted provided that the following conditions | 6 | * modification, are permitted provided that the following conditions |
@@ -66,6 +66,7 @@ | |||
66 | #ifndef OPENSSL_NO_ERR | 66 | #ifndef OPENSSL_NO_ERR |
67 | static ERR_STRING_DATA RAND_str_functs[]= | 67 | static ERR_STRING_DATA RAND_str_functs[]= |
68 | { | 68 | { |
69 | {ERR_PACK(0,RAND_F_FIPS_RAND_BYTES,0), "FIPS_RAND_BYTES"}, | ||
69 | {ERR_PACK(0,RAND_F_RAND_GET_RAND_METHOD,0), "RAND_get_rand_method"}, | 70 | {ERR_PACK(0,RAND_F_RAND_GET_RAND_METHOD,0), "RAND_get_rand_method"}, |
70 | {ERR_PACK(0,RAND_F_SSLEAY_RAND_BYTES,0), "SSLEAY_RAND_BYTES"}, | 71 | {ERR_PACK(0,RAND_F_SSLEAY_RAND_BYTES,0), "SSLEAY_RAND_BYTES"}, |
71 | {0,NULL} | 72 | {0,NULL} |
@@ -73,7 +74,12 @@ static ERR_STRING_DATA RAND_str_functs[]= | |||
73 | 74 | ||
74 | static ERR_STRING_DATA RAND_str_reasons[]= | 75 | static ERR_STRING_DATA RAND_str_reasons[]= |
75 | { | 76 | { |
77 | {RAND_R_NON_FIPS_METHOD ,"non fips method"}, | ||
78 | {RAND_R_PRNG_ASKING_FOR_TOO_MUCH ,"prng asking for too much"}, | ||
79 | {RAND_R_PRNG_NOT_REKEYED ,"prng not rekeyed"}, | ||
80 | {RAND_R_PRNG_NOT_RESEEDED ,"prng not reseeded"}, | ||
76 | {RAND_R_PRNG_NOT_SEEDED ,"PRNG not seeded"}, | 81 | {RAND_R_PRNG_NOT_SEEDED ,"PRNG not seeded"}, |
82 | {RAND_R_PRNG_STUCK ,"prng stuck"}, | ||
77 | {0,NULL} | 83 | {0,NULL} |
78 | }; | 84 | }; |
79 | 85 | ||
diff --git a/src/lib/libcrypto/rand/rand_lib.c b/src/lib/libcrypto/rand/rand_lib.c index 513e338985..88f1b56d91 100644 --- a/src/lib/libcrypto/rand/rand_lib.c +++ b/src/lib/libcrypto/rand/rand_lib.c | |||
@@ -63,6 +63,8 @@ | |||
63 | #ifndef OPENSSL_NO_ENGINE | 63 | #ifndef OPENSSL_NO_ENGINE |
64 | #include <openssl/engine.h> | 64 | #include <openssl/engine.h> |
65 | #endif | 65 | #endif |
66 | #include <openssl/fips.h> | ||
67 | #include <openssl/fips_rand.h> | ||
66 | 68 | ||
67 | #ifndef OPENSSL_NO_ENGINE | 69 | #ifndef OPENSSL_NO_ENGINE |
68 | /* non-NULL if default_RAND_meth is ENGINE-provided */ | 70 | /* non-NULL if default_RAND_meth is ENGINE-provided */ |
@@ -85,6 +87,16 @@ int RAND_set_rand_method(const RAND_METHOD *meth) | |||
85 | 87 | ||
86 | const RAND_METHOD *RAND_get_rand_method(void) | 88 | const RAND_METHOD *RAND_get_rand_method(void) |
87 | { | 89 | { |
90 | #ifdef OPENSSL_FIPS | ||
91 | if(FIPS_mode() | ||
92 | && default_RAND_meth != FIPS_rand_check()) | ||
93 | { | ||
94 | RANDerr(RAND_F_RAND_GET_RAND_METHOD,RAND_R_NON_FIPS_METHOD); | ||
95 | return 0; | ||
96 | } | ||
97 | #endif | ||
98 | |||
99 | |||
88 | if (!default_RAND_meth) | 100 | if (!default_RAND_meth) |
89 | { | 101 | { |
90 | #ifndef OPENSSL_NO_ENGINE | 102 | #ifndef OPENSSL_NO_ENGINE |
diff --git a/src/lib/libcrypto/rand/rand_unix.c b/src/lib/libcrypto/rand/rand_unix.c index 0599719dd1..9376554fae 100644 --- a/src/lib/libcrypto/rand/rand_unix.c +++ b/src/lib/libcrypto/rand/rand_unix.c | |||
@@ -120,6 +120,7 @@ | |||
120 | #include <sys/types.h> | 120 | #include <sys/types.h> |
121 | #include <sys/time.h> | 121 | #include <sys/time.h> |
122 | #include <sys/times.h> | 122 | #include <sys/times.h> |
123 | #include <sys/stat.h> | ||
123 | #include <fcntl.h> | 124 | #include <fcntl.h> |
124 | #include <unistd.h> | 125 | #include <unistd.h> |
125 | #include <time.h> | 126 | #include <time.h> |
@@ -151,9 +152,9 @@ int RAND_poll(void) | |||
151 | int n = 0; | 152 | int n = 0; |
152 | #endif | 153 | #endif |
153 | #ifdef DEVRANDOM | 154 | #ifdef DEVRANDOM |
154 | static const char *randomfiles[] = { DEVRANDOM, NULL }; | 155 | static const char *randomfiles[] = { DEVRANDOM }; |
155 | const char **randomfile = NULL; | 156 | struct stat randomstats[sizeof(randomfiles)/sizeof(randomfiles[0])]; |
156 | int fd; | 157 | int fd,i; |
157 | #endif | 158 | #endif |
158 | #ifdef DEVRANDOM_EGD | 159 | #ifdef DEVRANDOM_EGD |
159 | static const char *egdsockets[] = { DEVRANDOM_EGD, NULL }; | 160 | static const char *egdsockets[] = { DEVRANDOM_EGD, NULL }; |
@@ -161,26 +162,42 @@ int RAND_poll(void) | |||
161 | #endif | 162 | #endif |
162 | 163 | ||
163 | #ifdef DEVRANDOM | 164 | #ifdef DEVRANDOM |
165 | memset(randomstats,0,sizeof(randomstats)); | ||
164 | /* Use a random entropy pool device. Linux, FreeBSD and OpenBSD | 166 | /* Use a random entropy pool device. Linux, FreeBSD and OpenBSD |
165 | * have this. Use /dev/urandom if you can as /dev/random may block | 167 | * have this. Use /dev/urandom if you can as /dev/random may block |
166 | * if it runs out of random entries. */ | 168 | * if it runs out of random entries. */ |
167 | 169 | ||
168 | for (randomfile = randomfiles; *randomfile && n < ENTROPY_NEEDED; randomfile++) | 170 | for (i=0; i<sizeof(randomfiles)/sizeof(randomfiles[0]) && n < ENTROPY_NEEDED; i++) |
169 | { | 171 | { |
170 | if ((fd = open(*randomfile, O_RDONLY|O_NONBLOCK | 172 | if ((fd = open(randomfiles[i], O_RDONLY |
173 | #ifdef O_NONBLOCK | ||
174 | |O_NONBLOCK | ||
175 | #endif | ||
176 | #ifdef O_BINARY | ||
177 | |O_BINARY | ||
178 | #endif | ||
171 | #ifdef O_NOCTTY /* If it happens to be a TTY (god forbid), do not make it | 179 | #ifdef O_NOCTTY /* If it happens to be a TTY (god forbid), do not make it |
172 | our controlling tty */ | 180 | our controlling tty */ |
173 | |O_NOCTTY | 181 | |O_NOCTTY |
174 | #endif | 182 | #endif |
175 | #ifdef O_NOFOLLOW /* Fail if the file is a symbolic link */ | ||
176 | |O_NOFOLLOW | ||
177 | #endif | ||
178 | )) >= 0) | 183 | )) >= 0) |
179 | { | 184 | { |
180 | struct timeval t = { 0, 10*1000 }; /* Spend 10ms on | 185 | struct timeval t = { 0, 10*1000 }; /* Spend 10ms on |
181 | each file. */ | 186 | each file. */ |
182 | int r; | 187 | int r,j; |
183 | fd_set fset; | 188 | fd_set fset; |
189 | struct stat *st=&randomstats[i]; | ||
190 | |||
191 | /* Avoid using same input... Used to be O_NOFOLLOW | ||
192 | * above, but it's not universally appropriate... */ | ||
193 | if (fstat(fd,st) != 0) { close(fd); continue; } | ||
194 | for (j=0;j<i;j++) | ||
195 | { | ||
196 | if (randomstats[j].st_ino==st->st_ino && | ||
197 | randomstats[j].st_dev==st->st_dev) | ||
198 | break; | ||
199 | } | ||
200 | if (j<i) { close(fd); continue; } | ||
184 | 201 | ||
185 | do | 202 | do |
186 | { | 203 | { |
diff --git a/src/lib/libcrypto/rand/rand_vms.c b/src/lib/libcrypto/rand/rand_vms.c index 29b2d7af0b..1267a3acae 100644 --- a/src/lib/libcrypto/rand/rand_vms.c +++ b/src/lib/libcrypto/rand/rand_vms.c | |||
@@ -101,11 +101,12 @@ int RAND_poll(void) | |||
101 | pitem = item; | 101 | pitem = item; |
102 | 102 | ||
103 | /* Setup */ | 103 | /* Setup */ |
104 | while (pitems_data->length) | 104 | while (pitems_data->length |
105 | && (total_length + pitems_data->length <= 256)) | ||
105 | { | 106 | { |
106 | pitem->length = pitems_data->length; | 107 | pitem->length = pitems_data->length; |
107 | pitem->code = pitems_data->code; | 108 | pitem->code = pitems_data->code; |
108 | pitem->buffer = (long *)data_buffer[total_length]; | 109 | pitem->buffer = (long *)&data_buffer[total_length]; |
109 | pitem->retlen = 0; | 110 | pitem->retlen = 0; |
110 | total_length += pitems_data->length; | 111 | total_length += pitems_data->length; |
111 | pitems_data++; | 112 | pitems_data++; |
diff --git a/src/lib/libcrypto/rand/rand_win.c b/src/lib/libcrypto/rand/rand_win.c index 3584842224..30c69161ef 100644 --- a/src/lib/libcrypto/rand/rand_win.c +++ b/src/lib/libcrypto/rand/rand_win.c | |||
@@ -125,7 +125,7 @@ | |||
125 | * http://developer.intel.com/design/security/rng/redist_license.htm | 125 | * http://developer.intel.com/design/security/rng/redist_license.htm |
126 | */ | 126 | */ |
127 | #define PROV_INTEL_SEC 22 | 127 | #define PROV_INTEL_SEC 22 |
128 | #define INTEL_DEF_PROV TEXT("Intel Hardware Cryptographic Service Provider") | 128 | #define INTEL_DEF_PROV L"Intel Hardware Cryptographic Service Provider" |
129 | 129 | ||
130 | static void readtimer(void); | 130 | static void readtimer(void); |
131 | static void readscreen(void); | 131 | static void readscreen(void); |
@@ -152,7 +152,7 @@ typedef struct tagCURSORINFO | |||
152 | #define CURSOR_SHOWING 0x00000001 | 152 | #define CURSOR_SHOWING 0x00000001 |
153 | #endif /* CURSOR_SHOWING */ | 153 | #endif /* CURSOR_SHOWING */ |
154 | 154 | ||
155 | typedef BOOL (WINAPI *CRYPTACQUIRECONTEXT)(HCRYPTPROV *, LPCTSTR, LPCTSTR, | 155 | typedef BOOL (WINAPI *CRYPTACQUIRECONTEXTW)(HCRYPTPROV *, LPCWSTR, LPCWSTR, |
156 | DWORD, DWORD); | 156 | DWORD, DWORD); |
157 | typedef BOOL (WINAPI *CRYPTGENRANDOM)(HCRYPTPROV, DWORD, BYTE *); | 157 | typedef BOOL (WINAPI *CRYPTGENRANDOM)(HCRYPTPROV, DWORD, BYTE *); |
158 | typedef BOOL (WINAPI *CRYPTRELEASECONTEXT)(HCRYPTPROV, DWORD); | 158 | typedef BOOL (WINAPI *CRYPTRELEASECONTEXT)(HCRYPTPROV, DWORD); |
@@ -194,7 +194,7 @@ int RAND_poll(void) | |||
194 | HWND h; | 194 | HWND h; |
195 | 195 | ||
196 | HMODULE advapi, kernel, user, netapi; | 196 | HMODULE advapi, kernel, user, netapi; |
197 | CRYPTACQUIRECONTEXT acquire = 0; | 197 | CRYPTACQUIRECONTEXTW acquire = 0; |
198 | CRYPTGENRANDOM gen = 0; | 198 | CRYPTGENRANDOM gen = 0; |
199 | CRYPTRELEASECONTEXT release = 0; | 199 | CRYPTRELEASECONTEXT release = 0; |
200 | #if 1 /* There was previously a problem with NETSTATGET. Currently, this | 200 | #if 1 /* There was previously a problem with NETSTATGET. Currently, this |
@@ -213,6 +213,9 @@ int RAND_poll(void) | |||
213 | GetVersionEx( &osverinfo ) ; | 213 | GetVersionEx( &osverinfo ) ; |
214 | 214 | ||
215 | #if defined(OPENSSL_SYS_WINCE) && WCEPLATFORM!=MS_HPC_PRO | 215 | #if defined(OPENSSL_SYS_WINCE) && WCEPLATFORM!=MS_HPC_PRO |
216 | #ifndef CryptAcquireContext | ||
217 | #define CryptAcquireContext CryptAcquireContextW | ||
218 | #endif | ||
216 | /* poll the CryptoAPI PRNG */ | 219 | /* poll the CryptoAPI PRNG */ |
217 | /* The CryptoAPI returns sizeof(buf) bytes of randomness */ | 220 | /* The CryptoAPI returns sizeof(buf) bytes of randomness */ |
218 | if (CryptAcquireContext(&hProvider, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) | 221 | if (CryptAcquireContext(&hProvider, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) |
@@ -223,21 +226,35 @@ int RAND_poll(void) | |||
223 | } | 226 | } |
224 | #endif | 227 | #endif |
225 | 228 | ||
229 | #ifndef OPENSSL_SYS_WINCE | ||
230 | /* | ||
231 | * None of below libraries are present on Windows CE, which is | ||
232 | * why we #ifndef the whole section. This also excuses us from | ||
233 | * handling the GetProcAddress issue. The trouble is that in | ||
234 | * real Win32 API GetProcAddress is available in ANSI flavor | ||
235 | * only. In WinCE on the other hand GetProcAddress is a macro | ||
236 | * most commonly defined as GetProcAddressW, which accepts | ||
237 | * Unicode argument. If we were to call GetProcAddress under | ||
238 | * WinCE, I'd recommend to either redefine GetProcAddress as | ||
239 | * GetProcAddressA (there seem to be one in common CE spec) or | ||
240 | * implement own shim routine, which would accept ANSI argument | ||
241 | * and expand it to Unicode. | ||
242 | */ | ||
243 | |||
226 | /* load functions dynamically - not available on all systems */ | 244 | /* load functions dynamically - not available on all systems */ |
227 | advapi = LoadLibrary(TEXT("ADVAPI32.DLL")); | 245 | advapi = LoadLibrary(TEXT("ADVAPI32.DLL")); |
228 | kernel = LoadLibrary(TEXT("KERNEL32.DLL")); | 246 | kernel = LoadLibrary(TEXT("KERNEL32.DLL")); |
229 | user = LoadLibrary(TEXT("USER32.DLL")); | 247 | user = LoadLibrary(TEXT("USER32.DLL")); |
230 | netapi = LoadLibrary(TEXT("NETAPI32.DLL")); | 248 | netapi = LoadLibrary(TEXT("NETAPI32.DLL")); |
231 | 249 | ||
232 | #ifndef OPENSSL_SYS_WINCE | ||
233 | #if 1 /* There was previously a problem with NETSTATGET. Currently, this | 250 | #if 1 /* There was previously a problem with NETSTATGET. Currently, this |
234 | * section is still experimental, but if all goes well, this conditional | 251 | * section is still experimental, but if all goes well, this conditional |
235 | * will be removed | 252 | * will be removed |
236 | */ | 253 | */ |
237 | if (netapi) | 254 | if (netapi) |
238 | { | 255 | { |
239 | netstatget = (NETSTATGET) GetProcAddress(netapi,TEXT("NetStatisticsGet")); | 256 | netstatget = (NETSTATGET) GetProcAddress(netapi,"NetStatisticsGet"); |
240 | netfree = (NETFREE) GetProcAddress(netapi,TEXT("NetApiBufferFree")); | 257 | netfree = (NETFREE) GetProcAddress(netapi,"NetApiBufferFree"); |
241 | } | 258 | } |
242 | 259 | ||
243 | if (netstatget && netfree) | 260 | if (netstatget && netfree) |
@@ -264,9 +281,7 @@ int RAND_poll(void) | |||
264 | if (netapi) | 281 | if (netapi) |
265 | FreeLibrary(netapi); | 282 | FreeLibrary(netapi); |
266 | #endif /* 1 */ | 283 | #endif /* 1 */ |
267 | #endif /* !OPENSSL_SYS_WINCE */ | 284 | |
268 | |||
269 | #ifndef OPENSSL_SYS_WINCE | ||
270 | /* It appears like this can cause an exception deep within ADVAPI32.DLL | 285 | /* It appears like this can cause an exception deep within ADVAPI32.DLL |
271 | * at random times on Windows 2000. Reported by Jeffrey Altman. | 286 | * at random times on Windows 2000. Reported by Jeffrey Altman. |
272 | * Only use it on NT. | 287 | * Only use it on NT. |
@@ -321,16 +336,20 @@ int RAND_poll(void) | |||
321 | free(buf); | 336 | free(buf); |
322 | } | 337 | } |
323 | #endif | 338 | #endif |
324 | #endif /* !OPENSSL_SYS_WINCE */ | ||
325 | 339 | ||
326 | if (advapi) | 340 | if (advapi) |
327 | { | 341 | { |
328 | acquire = (CRYPTACQUIRECONTEXT) GetProcAddress(advapi, | 342 | /* |
329 | TEXT("CryptAcquireContextA")); | 343 | * If it's available, then it's available in both ANSI |
344 | * and UNICODE flavors even in Win9x, documentation says. | ||
345 | * We favor Unicode... | ||
346 | */ | ||
347 | acquire = (CRYPTACQUIRECONTEXTW) GetProcAddress(advapi, | ||
348 | "CryptAcquireContextW"); | ||
330 | gen = (CRYPTGENRANDOM) GetProcAddress(advapi, | 349 | gen = (CRYPTGENRANDOM) GetProcAddress(advapi, |
331 | TEXT("CryptGenRandom")); | 350 | "CryptGenRandom"); |
332 | release = (CRYPTRELEASECONTEXT) GetProcAddress(advapi, | 351 | release = (CRYPTRELEASECONTEXT) GetProcAddress(advapi, |
333 | TEXT("CryptReleaseContext")); | 352 | "CryptReleaseContext"); |
334 | } | 353 | } |
335 | 354 | ||
336 | if (acquire && gen && release) | 355 | if (acquire && gen && release) |
@@ -367,26 +386,15 @@ int RAND_poll(void) | |||
367 | if (advapi) | 386 | if (advapi) |
368 | FreeLibrary(advapi); | 387 | FreeLibrary(advapi); |
369 | 388 | ||
370 | /* timer data */ | ||
371 | readtimer(); | ||
372 | |||
373 | /* memory usage statistics */ | ||
374 | GlobalMemoryStatus(&m); | ||
375 | RAND_add(&m, sizeof(m), 1); | ||
376 | |||
377 | /* process ID */ | ||
378 | w = GetCurrentProcessId(); | ||
379 | RAND_add(&w, sizeof(w), 1); | ||
380 | |||
381 | if (user) | 389 | if (user) |
382 | { | 390 | { |
383 | GETCURSORINFO cursor; | 391 | GETCURSORINFO cursor; |
384 | GETFOREGROUNDWINDOW win; | 392 | GETFOREGROUNDWINDOW win; |
385 | GETQUEUESTATUS queue; | 393 | GETQUEUESTATUS queue; |
386 | 394 | ||
387 | win = (GETFOREGROUNDWINDOW) GetProcAddress(user, TEXT("GetForegroundWindow")); | 395 | win = (GETFOREGROUNDWINDOW) GetProcAddress(user, "GetForegroundWindow"); |
388 | cursor = (GETCURSORINFO) GetProcAddress(user, TEXT("GetCursorInfo")); | 396 | cursor = (GETCURSORINFO) GetProcAddress(user, "GetCursorInfo"); |
389 | queue = (GETQUEUESTATUS) GetProcAddress(user, TEXT("GetQueueStatus")); | 397 | queue = (GETQUEUESTATUS) GetProcAddress(user, "GetQueueStatus"); |
390 | 398 | ||
391 | if (win) | 399 | if (win) |
392 | { | 400 | { |
@@ -458,19 +466,19 @@ int RAND_poll(void) | |||
458 | MODULEENTRY32 m; | 466 | MODULEENTRY32 m; |
459 | 467 | ||
460 | snap = (CREATETOOLHELP32SNAPSHOT) | 468 | snap = (CREATETOOLHELP32SNAPSHOT) |
461 | GetProcAddress(kernel, TEXT("CreateToolhelp32Snapshot")); | 469 | GetProcAddress(kernel, "CreateToolhelp32Snapshot"); |
462 | close_snap = (CLOSETOOLHELP32SNAPSHOT) | 470 | close_snap = (CLOSETOOLHELP32SNAPSHOT) |
463 | GetProcAddress(kernel, TEXT("CloseToolhelp32Snapshot")); | 471 | GetProcAddress(kernel, "CloseToolhelp32Snapshot"); |
464 | heap_first = (HEAP32FIRST) GetProcAddress(kernel, TEXT("Heap32First")); | 472 | heap_first = (HEAP32FIRST) GetProcAddress(kernel, "Heap32First"); |
465 | heap_next = (HEAP32NEXT) GetProcAddress(kernel, TEXT("Heap32Next")); | 473 | heap_next = (HEAP32NEXT) GetProcAddress(kernel, "Heap32Next"); |
466 | heaplist_first = (HEAP32LIST) GetProcAddress(kernel, TEXT("Heap32ListFirst")); | 474 | heaplist_first = (HEAP32LIST) GetProcAddress(kernel, "Heap32ListFirst"); |
467 | heaplist_next = (HEAP32LIST) GetProcAddress(kernel, TEXT("Heap32ListNext")); | 475 | heaplist_next = (HEAP32LIST) GetProcAddress(kernel, "Heap32ListNext"); |
468 | process_first = (PROCESS32) GetProcAddress(kernel, TEXT("Process32First")); | 476 | process_first = (PROCESS32) GetProcAddress(kernel, "Process32First"); |
469 | process_next = (PROCESS32) GetProcAddress(kernel, TEXT("Process32Next")); | 477 | process_next = (PROCESS32) GetProcAddress(kernel, "Process32Next"); |
470 | thread_first = (THREAD32) GetProcAddress(kernel, TEXT("Thread32First")); | 478 | thread_first = (THREAD32) GetProcAddress(kernel, "Thread32First"); |
471 | thread_next = (THREAD32) GetProcAddress(kernel, TEXT("Thread32Next")); | 479 | thread_next = (THREAD32) GetProcAddress(kernel, "Thread32Next"); |
472 | module_first = (MODULE32) GetProcAddress(kernel, TEXT("Module32First")); | 480 | module_first = (MODULE32) GetProcAddress(kernel, "Module32First"); |
473 | module_next = (MODULE32) GetProcAddress(kernel, TEXT("Module32Next")); | 481 | module_next = (MODULE32) GetProcAddress(kernel, "Module32Next"); |
474 | 482 | ||
475 | if (snap && heap_first && heap_next && heaplist_first && | 483 | if (snap && heap_first && heap_next && heaplist_first && |
476 | heaplist_next && process_first && process_next && | 484 | heaplist_next && process_first && process_next && |
@@ -546,6 +554,18 @@ int RAND_poll(void) | |||
546 | 554 | ||
547 | FreeLibrary(kernel); | 555 | FreeLibrary(kernel); |
548 | } | 556 | } |
557 | #endif /* !OPENSSL_SYS_WINCE */ | ||
558 | |||
559 | /* timer data */ | ||
560 | readtimer(); | ||
561 | |||
562 | /* memory usage statistics */ | ||
563 | GlobalMemoryStatus(&m); | ||
564 | RAND_add(&m, sizeof(m), 1); | ||
565 | |||
566 | /* process ID */ | ||
567 | w = GetCurrentProcessId(); | ||
568 | RAND_add(&w, sizeof(w), 1); | ||
549 | 569 | ||
550 | #if 0 | 570 | #if 0 |
551 | printf("Exiting RAND_poll\n"); | 571 | printf("Exiting RAND_poll\n"); |
@@ -607,7 +627,7 @@ static void readtimer(void) | |||
607 | DWORD w; | 627 | DWORD w; |
608 | LARGE_INTEGER l; | 628 | LARGE_INTEGER l; |
609 | static int have_perfc = 1; | 629 | static int have_perfc = 1; |
610 | #if defined(_MSC_VER) && !defined(OPENSSL_SYS_WINCE) | 630 | #if defined(_MSC_VER) && defined(_M_X86) |
611 | static int have_tsc = 1; | 631 | static int have_tsc = 1; |
612 | DWORD cyclecount; | 632 | DWORD cyclecount; |
613 | 633 | ||
@@ -660,7 +680,7 @@ static void readtimer(void) | |||
660 | 680 | ||
661 | static void readscreen(void) | 681 | static void readscreen(void) |
662 | { | 682 | { |
663 | #ifndef OPENSSL_SYS_WINCE | 683 | #if !defined(OPENSSL_SYS_WINCE) && !defined(OPENSSL_SYS_WIN32_CYGWIN) |
664 | HDC hScrDC; /* screen DC */ | 684 | HDC hScrDC; /* screen DC */ |
665 | HDC hMemDC; /* memory DC */ | 685 | HDC hMemDC; /* memory DC */ |
666 | HBITMAP hBitmap; /* handle for our bitmap */ | 686 | HBITMAP hBitmap; /* handle for our bitmap */ |
diff --git a/src/lib/libcrypto/rand/randfile.c b/src/lib/libcrypto/rand/randfile.c index d88ee0d780..9bd89ba495 100644 --- a/src/lib/libcrypto/rand/randfile.c +++ b/src/lib/libcrypto/rand/randfile.c | |||
@@ -166,6 +166,7 @@ int RAND_write_file(const char *file) | |||
166 | } | 166 | } |
167 | 167 | ||
168 | #if defined(O_CREAT) && !defined(OPENSSL_SYS_WIN32) | 168 | #if defined(O_CREAT) && !defined(OPENSSL_SYS_WIN32) |
169 | { | ||
169 | /* For some reason Win32 can't write to files created this way */ | 170 | /* For some reason Win32 can't write to files created this way */ |
170 | 171 | ||
171 | /* chmod(..., 0600) is too late to protect the file, | 172 | /* chmod(..., 0600) is too late to protect the file, |
@@ -173,6 +174,7 @@ int RAND_write_file(const char *file) | |||
173 | int fd = open(file, O_CREAT, 0600); | 174 | int fd = open(file, O_CREAT, 0600); |
174 | if (fd != -1) | 175 | if (fd != -1) |
175 | out = fdopen(fd, "wb"); | 176 | out = fdopen(fd, "wb"); |
177 | } | ||
176 | #endif | 178 | #endif |
177 | if (out == NULL) | 179 | if (out == NULL) |
178 | out = fopen(file,"wb"); | 180 | out = fopen(file,"wb"); |
diff --git a/src/lib/libcrypto/rc2/rc2.h b/src/lib/libcrypto/rc2/rc2.h index 7816b454dc..71788158d8 100644 --- a/src/lib/libcrypto/rc2/rc2.h +++ b/src/lib/libcrypto/rc2/rc2.h | |||
@@ -79,7 +79,10 @@ typedef struct rc2_key_st | |||
79 | RC2_INT data[64]; | 79 | RC2_INT data[64]; |
80 | } RC2_KEY; | 80 | } RC2_KEY; |
81 | 81 | ||
82 | 82 | #ifdef OPENSSL_FIPS | |
83 | void private_RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, | ||
84 | int bits); | ||
85 | #endif | ||
83 | void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data,int bits); | 86 | void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data,int bits); |
84 | void RC2_ecb_encrypt(const unsigned char *in,unsigned char *out,RC2_KEY *key, | 87 | void RC2_ecb_encrypt(const unsigned char *in,unsigned char *out,RC2_KEY *key, |
85 | int enc); | 88 | int enc); |
diff --git a/src/lib/libcrypto/rc2/rc2_skey.c b/src/lib/libcrypto/rc2/rc2_skey.c index cab3080c73..22f372f85c 100644 --- a/src/lib/libcrypto/rc2/rc2_skey.c +++ b/src/lib/libcrypto/rc2/rc2_skey.c | |||
@@ -57,6 +57,7 @@ | |||
57 | */ | 57 | */ |
58 | 58 | ||
59 | #include <openssl/rc2.h> | 59 | #include <openssl/rc2.h> |
60 | #include <openssl/crypto.h> | ||
60 | #include "rc2_locl.h" | 61 | #include "rc2_locl.h" |
61 | 62 | ||
62 | static unsigned char key_table[256]={ | 63 | static unsigned char key_table[256]={ |
@@ -90,7 +91,19 @@ static unsigned char key_table[256]={ | |||
90 | * BSAFE uses the 'retarded' version. What I previously shipped is | 91 | * BSAFE uses the 'retarded' version. What I previously shipped is |
91 | * the same as specifying 1024 for the 'bits' parameter. Bsafe uses | 92 | * the same as specifying 1024 for the 'bits' parameter. Bsafe uses |
92 | * a version where the bits parameter is the same as len*8 */ | 93 | * a version where the bits parameter is the same as len*8 */ |
94 | |||
95 | #ifdef OPENSSL_FIPS | ||
96 | void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits) | ||
97 | { | ||
98 | if (FIPS_mode()) | ||
99 | FIPS_BAD_ABORT(RC2) | ||
100 | private_RC2_set_key(key, len, data, bits); | ||
101 | } | ||
102 | void private_RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, | ||
103 | int bits) | ||
104 | #else | ||
93 | void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits) | 105 | void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits) |
106 | #endif | ||
94 | { | 107 | { |
95 | int i,j; | 108 | int i,j; |
96 | unsigned char *k; | 109 | unsigned char *k; |
diff --git a/src/lib/libcrypto/rc4/asm/rc4-586.pl b/src/lib/libcrypto/rc4/asm/rc4-586.pl index 7ef889e5a1..d6e98f0811 100644 --- a/src/lib/libcrypto/rc4/asm/rc4-586.pl +++ b/src/lib/libcrypto/rc4/asm/rc4-586.pl | |||
@@ -1,16 +1,37 @@ | |||
1 | #!/usr/local/bin/perl | 1 | #!/usr/local/bin/perl |
2 | 2 | ||
3 | # define for pentium pro friendly version | 3 | # At some point it became apparent that the original SSLeay RC4 |
4 | # assembler implementation performs suboptimaly on latest IA-32 | ||
5 | # microarchitectures. After re-tuning performance has changed as | ||
6 | # following: | ||
7 | # | ||
8 | # Pentium +0% | ||
9 | # Pentium III +17% | ||
10 | # AMD +52%(*) | ||
11 | # P4 +180%(**) | ||
12 | # | ||
13 | # (*) This number is actually a trade-off:-) It's possible to | ||
14 | # achieve +72%, but at the cost of -48% off PIII performance. | ||
15 | # In other words code performing further 13% faster on AMD | ||
16 | # would perform almost 2 times slower on Intel PIII... | ||
17 | # For reference! This code delivers ~80% of rc4-amd64.pl | ||
18 | # performance on the same Opteron machine. | ||
19 | # (**) This number requires compressed key schedule set up by | ||
20 | # RC4_set_key and therefore doesn't apply to 0.9.7 [option for | ||
21 | # compressed key schedule is implemented in 0.9.8 and later, | ||
22 | # see commentary section in rc4_skey.c for further details]. | ||
23 | # | ||
24 | # <appro@fy.chalmers.se> | ||
4 | 25 | ||
5 | push(@INC,"perlasm","../../perlasm"); | 26 | push(@INC,"perlasm","../../perlasm"); |
6 | require "x86asm.pl"; | 27 | require "x86asm.pl"; |
7 | 28 | ||
8 | &asm_init($ARGV[0],"rc4-586.pl"); | 29 | &asm_init($ARGV[0],"rc4-586.pl"); |
9 | 30 | ||
10 | $tx="eax"; | 31 | $x="eax"; |
11 | $ty="ebx"; | 32 | $y="ebx"; |
12 | $x="ecx"; | 33 | $tx="ecx"; |
13 | $y="edx"; | 34 | $ty="edx"; |
14 | $in="esi"; | 35 | $in="esi"; |
15 | $out="edi"; | 36 | $out="edi"; |
16 | $d="ebp"; | 37 | $d="ebp"; |
@@ -31,7 +52,7 @@ sub RC4_loop | |||
31 | { | 52 | { |
32 | &mov($ty, &swtmp(2)); | 53 | &mov($ty, &swtmp(2)); |
33 | &cmp($ty, $in); | 54 | &cmp($ty, $in); |
34 | &jle(&label("finished")); | 55 | &jbe(&label("finished")); |
35 | &inc($in); | 56 | &inc($in); |
36 | } | 57 | } |
37 | else | 58 | else |
@@ -39,27 +60,23 @@ sub RC4_loop | |||
39 | &add($ty, 8); | 60 | &add($ty, 8); |
40 | &inc($in); | 61 | &inc($in); |
41 | &cmp($ty, $in); | 62 | &cmp($ty, $in); |
42 | &jl(&label("finished")); | 63 | &jb(&label("finished")); |
43 | &mov(&swtmp(2), $ty); | 64 | &mov(&swtmp(2), $ty); |
44 | } | 65 | } |
45 | } | 66 | } |
46 | # Moved out | 67 | # Moved out |
47 | # &mov( $tx, &DWP(0,$d,$x,4)) if $p < 0; | 68 | # &mov( $tx, &DWP(0,$d,$x,4)) if $p < 0; |
48 | 69 | ||
49 | &add( $y, $tx); | 70 | &add( &LB($y), &LB($tx)); |
50 | &and( $y, 0xff); | ||
51 | &inc( $x); # NEXT ROUND | ||
52 | &mov( $ty, &DWP(0,$d,$y,4)); | 71 | &mov( $ty, &DWP(0,$d,$y,4)); |
53 | # XXX | 72 | # XXX |
54 | &mov( &DWP(-4,$d,$x,4),$ty); # AGI | 73 | &mov( &DWP(0,$d,$x,4),$ty); |
55 | &add( $ty, $tx); | 74 | &add( $ty, $tx); |
56 | &and( $x, 0xff); # NEXT ROUND | ||
57 | &and( $ty, 0xff); | ||
58 | &mov( &DWP(0,$d,$y,4),$tx); | 75 | &mov( &DWP(0,$d,$y,4),$tx); |
59 | &nop(); | 76 | &and( $ty, 0xff); |
60 | &mov( $ty, &DWP(0,$d,$ty,4)); | 77 | &inc( &LB($x)); # NEXT ROUND |
61 | &mov( $tx, &DWP(0,$d,$x,4)) if $p < 1; # NEXT ROUND | 78 | &mov( $tx, &DWP(0,$d,$x,4)) if $p < 1; # NEXT ROUND |
62 | # XXX | 79 | &mov( $ty, &DWP(0,$d,$ty,4)); |
63 | 80 | ||
64 | if (!$char) | 81 | if (!$char) |
65 | { | 82 | { |
@@ -88,35 +105,47 @@ sub RC4 | |||
88 | 105 | ||
89 | &function_begin_B($name,""); | 106 | &function_begin_B($name,""); |
90 | 107 | ||
108 | &mov($ty,&wparam(1)); # len | ||
109 | &cmp($ty,0); | ||
110 | &jne(&label("proceed")); | ||
111 | &ret(); | ||
112 | &set_label("proceed"); | ||
113 | |||
91 | &comment(""); | 114 | &comment(""); |
92 | 115 | ||
93 | &push("ebp"); | 116 | &push("ebp"); |
94 | &push("ebx"); | 117 | &push("ebx"); |
95 | &mov( $d, &wparam(0)); # key | ||
96 | &mov( $ty, &wparam(1)); # num | ||
97 | &push("esi"); | 118 | &push("esi"); |
98 | &push("edi"); | 119 | &xor( $x, $x); # avoid partial register stalls |
120 | &push("edi"); | ||
121 | &xor( $y, $y); # avoid partial register stalls | ||
122 | &mov( $d, &wparam(0)); # key | ||
123 | &mov( $in, &wparam(2)); | ||
99 | 124 | ||
100 | &mov( $x, &DWP(0,$d,"",1)); | 125 | &movb( &LB($x), &BP(0,$d,"",1)); |
101 | &mov( $y, &DWP(4,$d,"",1)); | 126 | &movb( &LB($y), &BP(4,$d,"",1)); |
102 | 127 | ||
103 | &mov( $in, &wparam(2)); | 128 | &mov( $out, &wparam(3)); |
104 | &inc( $x); | 129 | &inc( &LB($x)); |
105 | 130 | ||
106 | &stack_push(3); # 3 temp variables | 131 | &stack_push(3); # 3 temp variables |
107 | &add( $d, 8); | 132 | &add( $d, 8); |
108 | &and( $x, 0xff); | 133 | |
134 | # detect compressed schedule, see commentary section in rc4_skey.c... | ||
135 | # in 0.9.7 context ~50 bytes below RC4_CHAR label remain redundant, | ||
136 | # as compressed key schedule is set up in 0.9.8 and later. | ||
137 | &cmp(&DWP(256,$d),-1); | ||
138 | &je(&label("RC4_CHAR")); | ||
109 | 139 | ||
110 | &lea( $ty, &DWP(-8,$ty,$in)); | 140 | &lea( $ty, &DWP(-8,$ty,$in)); |
111 | 141 | ||
112 | # check for 0 length input | 142 | # check for 0 length input |
113 | 143 | ||
114 | &mov( $out, &wparam(3)); | ||
115 | &mov( &swtmp(2), $ty); # this is now address to exit at | 144 | &mov( &swtmp(2), $ty); # this is now address to exit at |
116 | &mov( $tx, &DWP(0,$d,$x,4)); | 145 | &mov( $tx, &DWP(0,$d,$x,4)); |
117 | 146 | ||
118 | &cmp( $ty, $in); | 147 | &cmp( $ty, $in); |
119 | &jl( &label("end")); # less than 8 bytes | 148 | &jb( &label("end")); # less than 8 bytes |
120 | 149 | ||
121 | &set_label("start"); | 150 | &set_label("start"); |
122 | 151 | ||
@@ -148,7 +177,7 @@ sub RC4 | |||
148 | &mov( &DWP(-4,$out,"",0), $tx); | 177 | &mov( &DWP(-4,$out,"",0), $tx); |
149 | &mov( $tx, &DWP(0,$d,$x,4)); | 178 | &mov( $tx, &DWP(0,$d,$x,4)); |
150 | &cmp($in, $ty); | 179 | &cmp($in, $ty); |
151 | &jle(&label("start")); | 180 | &jbe(&label("start")); |
152 | 181 | ||
153 | &set_label("end"); | 182 | &set_label("end"); |
154 | 183 | ||
@@ -162,10 +191,37 @@ sub RC4 | |||
162 | &RC4_loop(5,0,1); | 191 | &RC4_loop(5,0,1); |
163 | &RC4_loop(6,1,1); | 192 | &RC4_loop(6,1,1); |
164 | 193 | ||
194 | &jmp(&label("finished")); | ||
195 | |||
196 | &align(16); | ||
197 | # this is essentially Intel P4 specific codepath, see rc4_skey.c, | ||
198 | # and is engaged in 0.9.8 and later context... | ||
199 | &set_label("RC4_CHAR"); | ||
200 | |||
201 | &lea ($ty,&DWP(0,$in,$ty)); | ||
202 | &mov (&swtmp(2),$ty); | ||
203 | |||
204 | # strangely enough unrolled loop performs over 20% slower... | ||
205 | &set_label("RC4_CHAR_loop"); | ||
206 | &movz ($tx,&BP(0,$d,$x)); | ||
207 | &add (&LB($y),&LB($tx)); | ||
208 | &movz ($ty,&BP(0,$d,$y)); | ||
209 | &movb (&BP(0,$d,$y),&LB($tx)); | ||
210 | &movb (&BP(0,$d,$x),&LB($ty)); | ||
211 | &add (&LB($ty),&LB($tx)); | ||
212 | &movz ($ty,&BP(0,$d,$ty)); | ||
213 | &xorb (&LB($ty),&BP(0,$in)); | ||
214 | &movb (&BP(0,$out),&LB($ty)); | ||
215 | &inc (&LB($x)); | ||
216 | &inc ($in); | ||
217 | &inc ($out); | ||
218 | &cmp ($in,&swtmp(2)); | ||
219 | &jb (&label("RC4_CHAR_loop")); | ||
220 | |||
165 | &set_label("finished"); | 221 | &set_label("finished"); |
166 | &dec( $x); | 222 | &dec( $x); |
167 | &stack_pop(3); | 223 | &stack_pop(3); |
168 | &mov( &DWP(-4,$d,"",0),$y); | 224 | &movb( &BP(-4,$d,"",0),&LB($y)); |
169 | &movb( &BP(-8,$d,"",0),&LB($x)); | 225 | &movb( &BP(-8,$d,"",0),&LB($x)); |
170 | 226 | ||
171 | &function_end($name); | 227 | &function_end($name); |
diff --git a/src/lib/libcrypto/rc4/rc4.h b/src/lib/libcrypto/rc4/rc4.h index 8722091f2e..dd90d9fde0 100644 --- a/src/lib/libcrypto/rc4/rc4.h +++ b/src/lib/libcrypto/rc4/rc4.h | |||
@@ -73,10 +73,17 @@ typedef struct rc4_key_st | |||
73 | { | 73 | { |
74 | RC4_INT x,y; | 74 | RC4_INT x,y; |
75 | RC4_INT data[256]; | 75 | RC4_INT data[256]; |
76 | #if defined(__ia64) || defined(__ia64__) || defined(_M_IA64) | ||
77 | /* see crypto/rc4/asm/rc4-ia64.S for further details... */ | ||
78 | RC4_INT pad[512-256-2]; | ||
79 | #endif | ||
76 | } RC4_KEY; | 80 | } RC4_KEY; |
77 | 81 | ||
78 | 82 | ||
79 | const char *RC4_options(void); | 83 | const char *RC4_options(void); |
84 | #ifdef OPENSSL_FIPS | ||
85 | void private_RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); | ||
86 | #endif | ||
80 | void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); | 87 | void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); |
81 | void RC4(RC4_KEY *key, unsigned long len, const unsigned char *indata, | 88 | void RC4(RC4_KEY *key, unsigned long len, const unsigned char *indata, |
82 | unsigned char *outdata); | 89 | unsigned char *outdata); |
diff --git a/src/lib/libcrypto/rc4/rc4_enc.c b/src/lib/libcrypto/rc4/rc4_enc.c index d5f18a3a70..81a97ea3b7 100644 --- a/src/lib/libcrypto/rc4/rc4_enc.c +++ b/src/lib/libcrypto/rc4/rc4_enc.c | |||
@@ -77,6 +77,10 @@ void RC4(RC4_KEY *key, unsigned long len, const unsigned char *indata, | |||
77 | x=key->x; | 77 | x=key->x; |
78 | y=key->y; | 78 | y=key->y; |
79 | d=key->data; | 79 | d=key->data; |
80 | #if defined(__ia64) || defined(__ia64__) || defined(_M_IA64) | ||
81 | /* see crypto/rc4/asm/rc4-ia64.S for further details... */ | ||
82 | d=(RC4_INT *)(((size_t)(d+255))&~(sizeof(key->data)-1)); | ||
83 | #endif | ||
80 | 84 | ||
81 | #if defined(RC4_CHUNK) | 85 | #if defined(RC4_CHUNK) |
82 | /* | 86 | /* |
diff --git a/src/lib/libcrypto/rc4/rc4_locl.h b/src/lib/libcrypto/rc4/rc4_locl.h index 3bb80b6ce9..c712e1632e 100644 --- a/src/lib/libcrypto/rc4/rc4_locl.h +++ b/src/lib/libcrypto/rc4/rc4_locl.h | |||
@@ -1,4 +1,5 @@ | |||
1 | #ifndef HEADER_RC4_LOCL_H | 1 | #ifndef HEADER_RC4_LOCL_H |
2 | #define HEADER_RC4_LOCL_H | 2 | #define HEADER_RC4_LOCL_H |
3 | #include <openssl/opensslconf.h> | 3 | #include <openssl/opensslconf.h> |
4 | #include <cryptlib.h> | ||
4 | #endif | 5 | #endif |
diff --git a/src/lib/libcrypto/rc4/rc4_skey.c b/src/lib/libcrypto/rc4/rc4_skey.c index bb10c1ebe2..07234f061a 100644 --- a/src/lib/libcrypto/rc4/rc4_skey.c +++ b/src/lib/libcrypto/rc4/rc4_skey.c | |||
@@ -57,6 +57,7 @@ | |||
57 | */ | 57 | */ |
58 | 58 | ||
59 | #include <openssl/rc4.h> | 59 | #include <openssl/rc4.h> |
60 | #include <openssl/crypto.h> | ||
60 | #include "rc4_locl.h" | 61 | #include "rc4_locl.h" |
61 | #include <openssl/opensslv.h> | 62 | #include <openssl/opensslv.h> |
62 | 63 | ||
@@ -85,7 +86,7 @@ const char *RC4_options(void) | |||
85 | * Date: Wed, 14 Sep 1994 06:35:31 GMT | 86 | * Date: Wed, 14 Sep 1994 06:35:31 GMT |
86 | */ | 87 | */ |
87 | 88 | ||
88 | void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data) | 89 | FIPS_NON_FIPS_VCIPHER_Init(RC4) |
89 | { | 90 | { |
90 | register RC4_INT tmp; | 91 | register RC4_INT tmp; |
91 | register int id1,id2; | 92 | register int id1,id2; |
@@ -93,6 +94,11 @@ void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data) | |||
93 | unsigned int i; | 94 | unsigned int i; |
94 | 95 | ||
95 | d= &(key->data[0]); | 96 | d= &(key->data[0]); |
97 | #if defined(__ia64) || defined(__ia64__) || defined(_M_IA64) | ||
98 | /* see crypto/rc4/asm/rc4-ia64.S for further details... */ | ||
99 | d=(RC4_INT *)(((size_t)(d+255))&~(sizeof(key->data)-1)); | ||
100 | #endif | ||
101 | |||
96 | for (i=0; i<256; i++) | 102 | for (i=0; i<256; i++) |
97 | d[i]=i; | 103 | d[i]=i; |
98 | key->x = 0; | 104 | key->x = 0; |
diff --git a/src/lib/libcrypto/rc5/rc5.h b/src/lib/libcrypto/rc5/rc5.h index 4adfd2db5a..aa3f26920b 100644 --- a/src/lib/libcrypto/rc5/rc5.h +++ b/src/lib/libcrypto/rc5/rc5.h | |||
@@ -92,7 +92,10 @@ typedef struct rc5_key_st | |||
92 | RC5_32_INT data[2*(RC5_16_ROUNDS+1)]; | 92 | RC5_32_INT data[2*(RC5_16_ROUNDS+1)]; |
93 | } RC5_32_KEY; | 93 | } RC5_32_KEY; |
94 | 94 | ||
95 | 95 | #ifdef OPENSSL_FIPS | |
96 | void private_RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data, | ||
97 | int rounds); | ||
98 | #endif | ||
96 | void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data, | 99 | void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data, |
97 | int rounds); | 100 | int rounds); |
98 | void RC5_32_ecb_encrypt(const unsigned char *in,unsigned char *out,RC5_32_KEY *key, | 101 | void RC5_32_ecb_encrypt(const unsigned char *in,unsigned char *out,RC5_32_KEY *key, |
diff --git a/src/lib/libcrypto/ripemd/ripemd.h b/src/lib/libcrypto/ripemd/ripemd.h index 78d5f36560..7d0d998189 100644 --- a/src/lib/libcrypto/ripemd/ripemd.h +++ b/src/lib/libcrypto/ripemd/ripemd.h | |||
@@ -90,6 +90,9 @@ typedef struct RIPEMD160state_st | |||
90 | int num; | 90 | int num; |
91 | } RIPEMD160_CTX; | 91 | } RIPEMD160_CTX; |
92 | 92 | ||
93 | #ifdef OPENSSL_FIPS | ||
94 | int private_RIPEMD160_Init(RIPEMD160_CTX *c); | ||
95 | #endif | ||
93 | int RIPEMD160_Init(RIPEMD160_CTX *c); | 96 | int RIPEMD160_Init(RIPEMD160_CTX *c); |
94 | int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, unsigned long len); | 97 | int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, unsigned long len); |
95 | int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); | 98 | int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); |
diff --git a/src/lib/libcrypto/ripemd/rmd_dgst.c b/src/lib/libcrypto/ripemd/rmd_dgst.c index 28896512e7..58ff010d11 100644 --- a/src/lib/libcrypto/ripemd/rmd_dgst.c +++ b/src/lib/libcrypto/ripemd/rmd_dgst.c | |||
@@ -58,6 +58,7 @@ | |||
58 | 58 | ||
59 | #include <stdio.h> | 59 | #include <stdio.h> |
60 | #include "rmd_locl.h" | 60 | #include "rmd_locl.h" |
61 | #include <openssl/fips.h> | ||
61 | #include <openssl/opensslv.h> | 62 | #include <openssl/opensslv.h> |
62 | 63 | ||
63 | const char *RMD160_version="RIPE-MD160" OPENSSL_VERSION_PTEXT; | 64 | const char *RMD160_version="RIPE-MD160" OPENSSL_VERSION_PTEXT; |
@@ -69,7 +70,7 @@ const char *RMD160_version="RIPE-MD160" OPENSSL_VERSION_PTEXT; | |||
69 | void ripemd160_block(RIPEMD160_CTX *c, unsigned long *p,int num); | 70 | void ripemd160_block(RIPEMD160_CTX *c, unsigned long *p,int num); |
70 | # endif | 71 | # endif |
71 | 72 | ||
72 | int RIPEMD160_Init(RIPEMD160_CTX *c) | 73 | FIPS_NON_FIPS_MD_Init(RIPEMD160) |
73 | { | 74 | { |
74 | c->A=RIPEMD160_A; | 75 | c->A=RIPEMD160_A; |
75 | c->B=RIPEMD160_B; | 76 | c->B=RIPEMD160_B; |
diff --git a/src/lib/libcrypto/rsa/rsa.h b/src/lib/libcrypto/rsa/rsa.h index 62fa745f79..fc3bb5f86d 100644 --- a/src/lib/libcrypto/rsa/rsa.h +++ b/src/lib/libcrypto/rsa/rsa.h | |||
@@ -72,6 +72,10 @@ | |||
72 | #error RSA is disabled. | 72 | #error RSA is disabled. |
73 | #endif | 73 | #endif |
74 | 74 | ||
75 | #if defined(OPENSSL_FIPS) | ||
76 | #define FIPS_RSA_SIZE_T int | ||
77 | #endif | ||
78 | |||
75 | #ifdef __cplusplus | 79 | #ifdef __cplusplus |
76 | extern "C" { | 80 | extern "C" { |
77 | #endif | 81 | #endif |
diff --git a/src/lib/libcrypto/rsa/rsa_eay.c b/src/lib/libcrypto/rsa/rsa_eay.c index e0d286266e..d4caab3f95 100644 --- a/src/lib/libcrypto/rsa/rsa_eay.c +++ b/src/lib/libcrypto/rsa/rsa_eay.c | |||
@@ -62,7 +62,7 @@ | |||
62 | #include <openssl/rsa.h> | 62 | #include <openssl/rsa.h> |
63 | #include <openssl/rand.h> | 63 | #include <openssl/rand.h> |
64 | 64 | ||
65 | #ifndef RSA_NULL | 65 | #if !defined(RSA_NULL) && !defined(OPENSSL_FIPS) |
66 | 66 | ||
67 | static int RSA_eay_public_encrypt(int flen, const unsigned char *from, | 67 | static int RSA_eay_public_encrypt(int flen, const unsigned char *from, |
68 | unsigned char *to, RSA *rsa,int padding); | 68 | unsigned char *to, RSA *rsa,int padding); |
diff --git a/src/lib/libcrypto/rsa/rsa_gen.c b/src/lib/libcrypto/rsa/rsa_gen.c index 00c25adbc5..adb5e34da5 100644 --- a/src/lib/libcrypto/rsa/rsa_gen.c +++ b/src/lib/libcrypto/rsa/rsa_gen.c | |||
@@ -62,6 +62,8 @@ | |||
62 | #include <openssl/bn.h> | 62 | #include <openssl/bn.h> |
63 | #include <openssl/rsa.h> | 63 | #include <openssl/rsa.h> |
64 | 64 | ||
65 | #ifndef OPENSSL_FIPS | ||
66 | |||
65 | RSA *RSA_generate_key(int bits, unsigned long e_value, | 67 | RSA *RSA_generate_key(int bits, unsigned long e_value, |
66 | void (*callback)(int,int,void *), void *cb_arg) | 68 | void (*callback)(int,int,void *), void *cb_arg) |
67 | { | 69 | { |
@@ -195,3 +197,4 @@ err: | |||
195 | return(rsa); | 197 | return(rsa); |
196 | } | 198 | } |
197 | 199 | ||
200 | #endif | ||
diff --git a/src/lib/libcrypto/rsa/rsa_saos.c b/src/lib/libcrypto/rsa/rsa_saos.c index f462716a57..24fc94835e 100644 --- a/src/lib/libcrypto/rsa/rsa_saos.c +++ b/src/lib/libcrypto/rsa/rsa_saos.c | |||
@@ -139,8 +139,11 @@ int RSA_verify_ASN1_OCTET_STRING(int dtype, | |||
139 | ret=1; | 139 | ret=1; |
140 | err: | 140 | err: |
141 | if (sig != NULL) M_ASN1_OCTET_STRING_free(sig); | 141 | if (sig != NULL) M_ASN1_OCTET_STRING_free(sig); |
142 | OPENSSL_cleanse(s,(unsigned int)siglen); | 142 | if (s != NULL) |
143 | OPENSSL_free(s); | 143 | { |
144 | OPENSSL_cleanse(s,(unsigned int)siglen); | ||
145 | OPENSSL_free(s); | ||
146 | } | ||
144 | return(ret); | 147 | return(ret); |
145 | } | 148 | } |
146 | 149 | ||
diff --git a/src/lib/libcrypto/rsa/rsa_sign.c b/src/lib/libcrypto/rsa/rsa_sign.c index 8a1e642183..cee09eccb1 100644 --- a/src/lib/libcrypto/rsa/rsa_sign.c +++ b/src/lib/libcrypto/rsa/rsa_sign.c | |||
@@ -169,7 +169,7 @@ int RSA_verify(int dtype, const unsigned char *m, unsigned int m_len, | |||
169 | } | 169 | } |
170 | if((dtype == NID_md5_sha1) && (m_len != SSL_SIG_LENGTH) ) { | 170 | if((dtype == NID_md5_sha1) && (m_len != SSL_SIG_LENGTH) ) { |
171 | RSAerr(RSA_F_RSA_VERIFY,RSA_R_INVALID_MESSAGE_LENGTH); | 171 | RSAerr(RSA_F_RSA_VERIFY,RSA_R_INVALID_MESSAGE_LENGTH); |
172 | return(0); | 172 | goto err; |
173 | } | 173 | } |
174 | i=RSA_public_decrypt((int)siglen,sigbuf,s,rsa,RSA_PKCS1_PADDING); | 174 | i=RSA_public_decrypt((int)siglen,sigbuf,s,rsa,RSA_PKCS1_PADDING); |
175 | 175 | ||
@@ -222,8 +222,11 @@ int RSA_verify(int dtype, const unsigned char *m, unsigned int m_len, | |||
222 | } | 222 | } |
223 | err: | 223 | err: |
224 | if (sig != NULL) X509_SIG_free(sig); | 224 | if (sig != NULL) X509_SIG_free(sig); |
225 | OPENSSL_cleanse(s,(unsigned int)siglen); | 225 | if (s != NULL) |
226 | OPENSSL_free(s); | 226 | { |
227 | OPENSSL_cleanse(s,(unsigned int)siglen); | ||
228 | OPENSSL_free(s); | ||
229 | } | ||
227 | return(ret); | 230 | return(ret); |
228 | } | 231 | } |
229 | 232 | ||
diff --git a/src/lib/libcrypto/sha/asm/sha1-586.pl b/src/lib/libcrypto/sha/asm/sha1-586.pl index e00f709553..041acc0348 100644 --- a/src/lib/libcrypto/sha/asm/sha1-586.pl +++ b/src/lib/libcrypto/sha/asm/sha1-586.pl | |||
@@ -405,7 +405,7 @@ sub sha1_block_data | |||
405 | &mov(&DWP(16,$tmp1,"",0),$E); | 405 | &mov(&DWP(16,$tmp1,"",0),$E); |
406 | &cmp("esi","eax"); | 406 | &cmp("esi","eax"); |
407 | &mov(&DWP( 4,$tmp1,"",0),$B); | 407 | &mov(&DWP( 4,$tmp1,"",0),$B); |
408 | &jl(&label("start")); | 408 | &jb(&label("start")); |
409 | 409 | ||
410 | &stack_pop(18+9); | 410 | &stack_pop(18+9); |
411 | &pop("edi"); | 411 | &pop("edi"); |
diff --git a/src/lib/libcrypto/sha/sha.h b/src/lib/libcrypto/sha/sha.h index 3fd54a10cc..79c07b0fd1 100644 --- a/src/lib/libcrypto/sha/sha.h +++ b/src/lib/libcrypto/sha/sha.h | |||
@@ -69,6 +69,10 @@ extern "C" { | |||
69 | #error SHA is disabled. | 69 | #error SHA is disabled. |
70 | #endif | 70 | #endif |
71 | 71 | ||
72 | #if defined(OPENSSL_FIPS) | ||
73 | #define FIPS_SHA_SIZE_T unsigned long | ||
74 | #endif | ||
75 | |||
72 | /* | 76 | /* |
73 | * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 77 | * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
74 | * ! SHA_LONG has to be at least 32 bits wide. If it's wider, then ! | 78 | * ! SHA_LONG has to be at least 32 bits wide. If it's wider, then ! |
@@ -101,6 +105,9 @@ typedef struct SHAstate_st | |||
101 | } SHA_CTX; | 105 | } SHA_CTX; |
102 | 106 | ||
103 | #ifndef OPENSSL_NO_SHA0 | 107 | #ifndef OPENSSL_NO_SHA0 |
108 | #ifdef OPENSSL_FIPS | ||
109 | int private_SHA_Init(SHA_CTX *c); | ||
110 | #endif | ||
104 | int SHA_Init(SHA_CTX *c); | 111 | int SHA_Init(SHA_CTX *c); |
105 | int SHA_Update(SHA_CTX *c, const void *data, unsigned long len); | 112 | int SHA_Update(SHA_CTX *c, const void *data, unsigned long len); |
106 | int SHA_Final(unsigned char *md, SHA_CTX *c); | 113 | int SHA_Final(unsigned char *md, SHA_CTX *c); |
diff --git a/src/lib/libcrypto/sha/sha1dgst.c b/src/lib/libcrypto/sha/sha1dgst.c index 182f65982a..1e2009b760 100644 --- a/src/lib/libcrypto/sha/sha1dgst.c +++ b/src/lib/libcrypto/sha/sha1dgst.c | |||
@@ -62,12 +62,20 @@ | |||
62 | #define SHA_1 | 62 | #define SHA_1 |
63 | 63 | ||
64 | #include <openssl/opensslv.h> | 64 | #include <openssl/opensslv.h> |
65 | #include <openssl/opensslconf.h> | ||
65 | 66 | ||
67 | #ifndef OPENSSL_FIPS | ||
66 | const char *SHA1_version="SHA1" OPENSSL_VERSION_PTEXT; | 68 | const char *SHA1_version="SHA1" OPENSSL_VERSION_PTEXT; |
67 | 69 | ||
68 | /* The implementation is in ../md32_common.h */ | 70 | /* The implementation is in ../md32_common.h */ |
69 | 71 | ||
70 | #include "sha_locl.h" | 72 | #include "sha_locl.h" |
71 | 73 | ||
74 | #else /* ndef OPENSSL_FIPS */ | ||
75 | |||
76 | static void *dummy=&dummy; | ||
77 | |||
78 | #endif /* ndef OPENSSL_FIPS */ | ||
79 | |||
72 | #endif | 80 | #endif |
73 | 81 | ||
diff --git a/src/lib/libcrypto/sha/sha_locl.h b/src/lib/libcrypto/sha/sha_locl.h index 2dd63a62a6..a3623f72da 100644 --- a/src/lib/libcrypto/sha/sha_locl.h +++ b/src/lib/libcrypto/sha/sha_locl.h | |||
@@ -121,6 +121,11 @@ | |||
121 | # define sha1_block_data_order sha1_block_asm_data_order | 121 | # define sha1_block_data_order sha1_block_asm_data_order |
122 | # define DONT_IMPLEMENT_BLOCK_DATA_ORDER | 122 | # define DONT_IMPLEMENT_BLOCK_DATA_ORDER |
123 | # define HASH_BLOCK_DATA_ORDER_ALIGNED sha1_block_asm_data_order | 123 | # define HASH_BLOCK_DATA_ORDER_ALIGNED sha1_block_asm_data_order |
124 | # elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64) | ||
125 | # define sha1_block_host_order sha1_block_asm_host_order | ||
126 | # define DONT_IMPLEMENT_BLOCK_HOST_ORDER | ||
127 | # define sha1_block_data_order sha1_block_asm_data_order | ||
128 | # define DONT_IMPLEMENT_BLOCK_DATA_ORDER | ||
124 | # endif | 129 | # endif |
125 | # endif | 130 | # endif |
126 | void sha1_block_host_order (SHA_CTX *c, const void *p,int num); | 131 | void sha1_block_host_order (SHA_CTX *c, const void *p,int num); |
@@ -138,7 +143,11 @@ | |||
138 | #define INIT_DATA_h3 0x10325476UL | 143 | #define INIT_DATA_h3 0x10325476UL |
139 | #define INIT_DATA_h4 0xc3d2e1f0UL | 144 | #define INIT_DATA_h4 0xc3d2e1f0UL |
140 | 145 | ||
146 | #if defined(SHA_0) && defined(OPENSSL_FIPS) | ||
147 | FIPS_NON_FIPS_MD_Init(SHA) | ||
148 | #else | ||
141 | int HASH_INIT (SHA_CTX *c) | 149 | int HASH_INIT (SHA_CTX *c) |
150 | #endif | ||
142 | { | 151 | { |
143 | c->h0=INIT_DATA_h0; | 152 | c->h0=INIT_DATA_h0; |
144 | c->h1=INIT_DATA_h1; | 153 | c->h1=INIT_DATA_h1; |
diff --git a/src/lib/libcrypto/sha/shatest.c b/src/lib/libcrypto/sha/shatest.c index 5d2b1d3b1a..ff702aa53e 100644 --- a/src/lib/libcrypto/sha/shatest.c +++ b/src/lib/libcrypto/sha/shatest.c | |||
@@ -62,10 +62,10 @@ | |||
62 | 62 | ||
63 | #include "../e_os.h" | 63 | #include "../e_os.h" |
64 | 64 | ||
65 | #ifdef OPENSSL_NO_SHA | 65 | #if defined(OPENSSL_NO_SHA) || defined(OPENSSL_NO_SHA0) |
66 | int main(int argc, char *argv[]) | 66 | int main(int argc, char *argv[]) |
67 | { | 67 | { |
68 | printf("No SHA support\n"); | 68 | printf("No SHA0 support\n"); |
69 | return(0); | 69 | return(0); |
70 | } | 70 | } |
71 | #else | 71 | #else |
diff --git a/src/lib/libcrypto/stack/safestack.h b/src/lib/libcrypto/stack/safestack.h index ed9ed2c23a..bd1121c279 100644 --- a/src/lib/libcrypto/stack/safestack.h +++ b/src/lib/libcrypto/stack/safestack.h | |||
@@ -113,6 +113,8 @@ STACK_OF(type) \ | |||
113 | ((type * (*)(STACK_OF(type) *))sk_pop)(st) | 113 | ((type * (*)(STACK_OF(type) *))sk_pop)(st) |
114 | #define SKM_sk_sort(type, st) \ | 114 | #define SKM_sk_sort(type, st) \ |
115 | ((void (*)(STACK_OF(type) *))sk_sort)(st) | 115 | ((void (*)(STACK_OF(type) *))sk_sort)(st) |
116 | #define SKM_sk_is_sorted(type, st) \ | ||
117 | ((int (*)(const STACK_OF(type) *))sk_is_sorted)(st) | ||
116 | 118 | ||
117 | #define SKM_ASN1_SET_OF_d2i(type, st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ | 119 | #define SKM_ASN1_SET_OF_d2i(type, st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ |
118 | ((STACK_OF(type) * (*) (STACK_OF(type) **,unsigned char **, long , \ | 120 | ((STACK_OF(type) * (*) (STACK_OF(type) **,unsigned char **, long , \ |
@@ -187,6 +189,8 @@ STACK_OF(type) \ | |||
187 | ((type *)sk_pop(st)) | 189 | ((type *)sk_pop(st)) |
188 | #define SKM_sk_sort(type, st) \ | 190 | #define SKM_sk_sort(type, st) \ |
189 | sk_sort(st) | 191 | sk_sort(st) |
192 | #define SKM_sk_is_sorted(type, st) \ | ||
193 | sk_is_sorted(st) | ||
190 | 194 | ||
191 | #define SKM_ASN1_SET_OF_d2i(type, st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ | 195 | #define SKM_ASN1_SET_OF_d2i(type, st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ |
192 | d2i_ASN1_SET(st,pp,length, (char *(*)())d2i_func, (void (*)(void *))free_func, ex_tag,ex_class) | 196 | d2i_ASN1_SET(st,pp,length, (char *(*)())d2i_func, (void (*)(void *))free_func, ex_tag,ex_class) |
@@ -223,6 +227,7 @@ STACK_OF(type) \ | |||
223 | #define sk_ACCESS_DESCRIPTION_shift(st) SKM_sk_shift(ACCESS_DESCRIPTION, (st)) | 227 | #define sk_ACCESS_DESCRIPTION_shift(st) SKM_sk_shift(ACCESS_DESCRIPTION, (st)) |
224 | #define sk_ACCESS_DESCRIPTION_pop(st) SKM_sk_pop(ACCESS_DESCRIPTION, (st)) | 228 | #define sk_ACCESS_DESCRIPTION_pop(st) SKM_sk_pop(ACCESS_DESCRIPTION, (st)) |
225 | #define sk_ACCESS_DESCRIPTION_sort(st) SKM_sk_sort(ACCESS_DESCRIPTION, (st)) | 229 | #define sk_ACCESS_DESCRIPTION_sort(st) SKM_sk_sort(ACCESS_DESCRIPTION, (st)) |
230 | #define sk_ACCESS_DESCRIPTION_is_sorted(st) SKM_sk_is_sorted(ACCESS_DESCRIPTION, (st)) | ||
226 | 231 | ||
227 | #define sk_ASN1_GENERALSTRING_new(st) SKM_sk_new(ASN1_GENERALSTRING, (st)) | 232 | #define sk_ASN1_GENERALSTRING_new(st) SKM_sk_new(ASN1_GENERALSTRING, (st)) |
228 | #define sk_ASN1_GENERALSTRING_new_null() SKM_sk_new_null(ASN1_GENERALSTRING) | 233 | #define sk_ASN1_GENERALSTRING_new_null() SKM_sk_new_null(ASN1_GENERALSTRING) |
@@ -243,6 +248,7 @@ STACK_OF(type) \ | |||
243 | #define sk_ASN1_GENERALSTRING_shift(st) SKM_sk_shift(ASN1_GENERALSTRING, (st)) | 248 | #define sk_ASN1_GENERALSTRING_shift(st) SKM_sk_shift(ASN1_GENERALSTRING, (st)) |
244 | #define sk_ASN1_GENERALSTRING_pop(st) SKM_sk_pop(ASN1_GENERALSTRING, (st)) | 249 | #define sk_ASN1_GENERALSTRING_pop(st) SKM_sk_pop(ASN1_GENERALSTRING, (st)) |
245 | #define sk_ASN1_GENERALSTRING_sort(st) SKM_sk_sort(ASN1_GENERALSTRING, (st)) | 250 | #define sk_ASN1_GENERALSTRING_sort(st) SKM_sk_sort(ASN1_GENERALSTRING, (st)) |
251 | #define sk_ASN1_GENERALSTRING_is_sorted(st) SKM_sk_is_sorted(ASN1_GENERALSTRING, (st)) | ||
246 | 252 | ||
247 | #define sk_ASN1_INTEGER_new(st) SKM_sk_new(ASN1_INTEGER, (st)) | 253 | #define sk_ASN1_INTEGER_new(st) SKM_sk_new(ASN1_INTEGER, (st)) |
248 | #define sk_ASN1_INTEGER_new_null() SKM_sk_new_null(ASN1_INTEGER) | 254 | #define sk_ASN1_INTEGER_new_null() SKM_sk_new_null(ASN1_INTEGER) |
@@ -263,6 +269,7 @@ STACK_OF(type) \ | |||
263 | #define sk_ASN1_INTEGER_shift(st) SKM_sk_shift(ASN1_INTEGER, (st)) | 269 | #define sk_ASN1_INTEGER_shift(st) SKM_sk_shift(ASN1_INTEGER, (st)) |
264 | #define sk_ASN1_INTEGER_pop(st) SKM_sk_pop(ASN1_INTEGER, (st)) | 270 | #define sk_ASN1_INTEGER_pop(st) SKM_sk_pop(ASN1_INTEGER, (st)) |
265 | #define sk_ASN1_INTEGER_sort(st) SKM_sk_sort(ASN1_INTEGER, (st)) | 271 | #define sk_ASN1_INTEGER_sort(st) SKM_sk_sort(ASN1_INTEGER, (st)) |
272 | #define sk_ASN1_INTEGER_is_sorted(st) SKM_sk_is_sorted(ASN1_INTEGER, (st)) | ||
266 | 273 | ||
267 | #define sk_ASN1_OBJECT_new(st) SKM_sk_new(ASN1_OBJECT, (st)) | 274 | #define sk_ASN1_OBJECT_new(st) SKM_sk_new(ASN1_OBJECT, (st)) |
268 | #define sk_ASN1_OBJECT_new_null() SKM_sk_new_null(ASN1_OBJECT) | 275 | #define sk_ASN1_OBJECT_new_null() SKM_sk_new_null(ASN1_OBJECT) |
@@ -283,6 +290,7 @@ STACK_OF(type) \ | |||
283 | #define sk_ASN1_OBJECT_shift(st) SKM_sk_shift(ASN1_OBJECT, (st)) | 290 | #define sk_ASN1_OBJECT_shift(st) SKM_sk_shift(ASN1_OBJECT, (st)) |
284 | #define sk_ASN1_OBJECT_pop(st) SKM_sk_pop(ASN1_OBJECT, (st)) | 291 | #define sk_ASN1_OBJECT_pop(st) SKM_sk_pop(ASN1_OBJECT, (st)) |
285 | #define sk_ASN1_OBJECT_sort(st) SKM_sk_sort(ASN1_OBJECT, (st)) | 292 | #define sk_ASN1_OBJECT_sort(st) SKM_sk_sort(ASN1_OBJECT, (st)) |
293 | #define sk_ASN1_OBJECT_is_sorted(st) SKM_sk_is_sorted(ASN1_OBJECT, (st)) | ||
286 | 294 | ||
287 | #define sk_ASN1_STRING_TABLE_new(st) SKM_sk_new(ASN1_STRING_TABLE, (st)) | 295 | #define sk_ASN1_STRING_TABLE_new(st) SKM_sk_new(ASN1_STRING_TABLE, (st)) |
288 | #define sk_ASN1_STRING_TABLE_new_null() SKM_sk_new_null(ASN1_STRING_TABLE) | 296 | #define sk_ASN1_STRING_TABLE_new_null() SKM_sk_new_null(ASN1_STRING_TABLE) |
@@ -303,6 +311,7 @@ STACK_OF(type) \ | |||
303 | #define sk_ASN1_STRING_TABLE_shift(st) SKM_sk_shift(ASN1_STRING_TABLE, (st)) | 311 | #define sk_ASN1_STRING_TABLE_shift(st) SKM_sk_shift(ASN1_STRING_TABLE, (st)) |
304 | #define sk_ASN1_STRING_TABLE_pop(st) SKM_sk_pop(ASN1_STRING_TABLE, (st)) | 312 | #define sk_ASN1_STRING_TABLE_pop(st) SKM_sk_pop(ASN1_STRING_TABLE, (st)) |
305 | #define sk_ASN1_STRING_TABLE_sort(st) SKM_sk_sort(ASN1_STRING_TABLE, (st)) | 313 | #define sk_ASN1_STRING_TABLE_sort(st) SKM_sk_sort(ASN1_STRING_TABLE, (st)) |
314 | #define sk_ASN1_STRING_TABLE_is_sorted(st) SKM_sk_is_sorted(ASN1_STRING_TABLE, (st)) | ||
306 | 315 | ||
307 | #define sk_ASN1_TYPE_new(st) SKM_sk_new(ASN1_TYPE, (st)) | 316 | #define sk_ASN1_TYPE_new(st) SKM_sk_new(ASN1_TYPE, (st)) |
308 | #define sk_ASN1_TYPE_new_null() SKM_sk_new_null(ASN1_TYPE) | 317 | #define sk_ASN1_TYPE_new_null() SKM_sk_new_null(ASN1_TYPE) |
@@ -323,6 +332,7 @@ STACK_OF(type) \ | |||
323 | #define sk_ASN1_TYPE_shift(st) SKM_sk_shift(ASN1_TYPE, (st)) | 332 | #define sk_ASN1_TYPE_shift(st) SKM_sk_shift(ASN1_TYPE, (st)) |
324 | #define sk_ASN1_TYPE_pop(st) SKM_sk_pop(ASN1_TYPE, (st)) | 333 | #define sk_ASN1_TYPE_pop(st) SKM_sk_pop(ASN1_TYPE, (st)) |
325 | #define sk_ASN1_TYPE_sort(st) SKM_sk_sort(ASN1_TYPE, (st)) | 334 | #define sk_ASN1_TYPE_sort(st) SKM_sk_sort(ASN1_TYPE, (st)) |
335 | #define sk_ASN1_TYPE_is_sorted(st) SKM_sk_is_sorted(ASN1_TYPE, (st)) | ||
326 | 336 | ||
327 | #define sk_ASN1_VALUE_new(st) SKM_sk_new(ASN1_VALUE, (st)) | 337 | #define sk_ASN1_VALUE_new(st) SKM_sk_new(ASN1_VALUE, (st)) |
328 | #define sk_ASN1_VALUE_new_null() SKM_sk_new_null(ASN1_VALUE) | 338 | #define sk_ASN1_VALUE_new_null() SKM_sk_new_null(ASN1_VALUE) |
@@ -343,6 +353,7 @@ STACK_OF(type) \ | |||
343 | #define sk_ASN1_VALUE_shift(st) SKM_sk_shift(ASN1_VALUE, (st)) | 353 | #define sk_ASN1_VALUE_shift(st) SKM_sk_shift(ASN1_VALUE, (st)) |
344 | #define sk_ASN1_VALUE_pop(st) SKM_sk_pop(ASN1_VALUE, (st)) | 354 | #define sk_ASN1_VALUE_pop(st) SKM_sk_pop(ASN1_VALUE, (st)) |
345 | #define sk_ASN1_VALUE_sort(st) SKM_sk_sort(ASN1_VALUE, (st)) | 355 | #define sk_ASN1_VALUE_sort(st) SKM_sk_sort(ASN1_VALUE, (st)) |
356 | #define sk_ASN1_VALUE_is_sorted(st) SKM_sk_is_sorted(ASN1_VALUE, (st)) | ||
346 | 357 | ||
347 | #define sk_BIO_new(st) SKM_sk_new(BIO, (st)) | 358 | #define sk_BIO_new(st) SKM_sk_new(BIO, (st)) |
348 | #define sk_BIO_new_null() SKM_sk_new_null(BIO) | 359 | #define sk_BIO_new_null() SKM_sk_new_null(BIO) |
@@ -363,6 +374,7 @@ STACK_OF(type) \ | |||
363 | #define sk_BIO_shift(st) SKM_sk_shift(BIO, (st)) | 374 | #define sk_BIO_shift(st) SKM_sk_shift(BIO, (st)) |
364 | #define sk_BIO_pop(st) SKM_sk_pop(BIO, (st)) | 375 | #define sk_BIO_pop(st) SKM_sk_pop(BIO, (st)) |
365 | #define sk_BIO_sort(st) SKM_sk_sort(BIO, (st)) | 376 | #define sk_BIO_sort(st) SKM_sk_sort(BIO, (st)) |
377 | #define sk_BIO_is_sorted(st) SKM_sk_is_sorted(BIO, (st)) | ||
366 | 378 | ||
367 | #define sk_CONF_IMODULE_new(st) SKM_sk_new(CONF_IMODULE, (st)) | 379 | #define sk_CONF_IMODULE_new(st) SKM_sk_new(CONF_IMODULE, (st)) |
368 | #define sk_CONF_IMODULE_new_null() SKM_sk_new_null(CONF_IMODULE) | 380 | #define sk_CONF_IMODULE_new_null() SKM_sk_new_null(CONF_IMODULE) |
@@ -383,6 +395,7 @@ STACK_OF(type) \ | |||
383 | #define sk_CONF_IMODULE_shift(st) SKM_sk_shift(CONF_IMODULE, (st)) | 395 | #define sk_CONF_IMODULE_shift(st) SKM_sk_shift(CONF_IMODULE, (st)) |
384 | #define sk_CONF_IMODULE_pop(st) SKM_sk_pop(CONF_IMODULE, (st)) | 396 | #define sk_CONF_IMODULE_pop(st) SKM_sk_pop(CONF_IMODULE, (st)) |
385 | #define sk_CONF_IMODULE_sort(st) SKM_sk_sort(CONF_IMODULE, (st)) | 397 | #define sk_CONF_IMODULE_sort(st) SKM_sk_sort(CONF_IMODULE, (st)) |
398 | #define sk_CONF_IMODULE_is_sorted(st) SKM_sk_is_sorted(CONF_IMODULE, (st)) | ||
386 | 399 | ||
387 | #define sk_CONF_MODULE_new(st) SKM_sk_new(CONF_MODULE, (st)) | 400 | #define sk_CONF_MODULE_new(st) SKM_sk_new(CONF_MODULE, (st)) |
388 | #define sk_CONF_MODULE_new_null() SKM_sk_new_null(CONF_MODULE) | 401 | #define sk_CONF_MODULE_new_null() SKM_sk_new_null(CONF_MODULE) |
@@ -403,6 +416,7 @@ STACK_OF(type) \ | |||
403 | #define sk_CONF_MODULE_shift(st) SKM_sk_shift(CONF_MODULE, (st)) | 416 | #define sk_CONF_MODULE_shift(st) SKM_sk_shift(CONF_MODULE, (st)) |
404 | #define sk_CONF_MODULE_pop(st) SKM_sk_pop(CONF_MODULE, (st)) | 417 | #define sk_CONF_MODULE_pop(st) SKM_sk_pop(CONF_MODULE, (st)) |
405 | #define sk_CONF_MODULE_sort(st) SKM_sk_sort(CONF_MODULE, (st)) | 418 | #define sk_CONF_MODULE_sort(st) SKM_sk_sort(CONF_MODULE, (st)) |
419 | #define sk_CONF_MODULE_is_sorted(st) SKM_sk_is_sorted(CONF_MODULE, (st)) | ||
406 | 420 | ||
407 | #define sk_CONF_VALUE_new(st) SKM_sk_new(CONF_VALUE, (st)) | 421 | #define sk_CONF_VALUE_new(st) SKM_sk_new(CONF_VALUE, (st)) |
408 | #define sk_CONF_VALUE_new_null() SKM_sk_new_null(CONF_VALUE) | 422 | #define sk_CONF_VALUE_new_null() SKM_sk_new_null(CONF_VALUE) |
@@ -423,6 +437,7 @@ STACK_OF(type) \ | |||
423 | #define sk_CONF_VALUE_shift(st) SKM_sk_shift(CONF_VALUE, (st)) | 437 | #define sk_CONF_VALUE_shift(st) SKM_sk_shift(CONF_VALUE, (st)) |
424 | #define sk_CONF_VALUE_pop(st) SKM_sk_pop(CONF_VALUE, (st)) | 438 | #define sk_CONF_VALUE_pop(st) SKM_sk_pop(CONF_VALUE, (st)) |
425 | #define sk_CONF_VALUE_sort(st) SKM_sk_sort(CONF_VALUE, (st)) | 439 | #define sk_CONF_VALUE_sort(st) SKM_sk_sort(CONF_VALUE, (st)) |
440 | #define sk_CONF_VALUE_is_sorted(st) SKM_sk_is_sorted(CONF_VALUE, (st)) | ||
426 | 441 | ||
427 | #define sk_CRYPTO_EX_DATA_FUNCS_new(st) SKM_sk_new(CRYPTO_EX_DATA_FUNCS, (st)) | 442 | #define sk_CRYPTO_EX_DATA_FUNCS_new(st) SKM_sk_new(CRYPTO_EX_DATA_FUNCS, (st)) |
428 | #define sk_CRYPTO_EX_DATA_FUNCS_new_null() SKM_sk_new_null(CRYPTO_EX_DATA_FUNCS) | 443 | #define sk_CRYPTO_EX_DATA_FUNCS_new_null() SKM_sk_new_null(CRYPTO_EX_DATA_FUNCS) |
@@ -443,6 +458,7 @@ STACK_OF(type) \ | |||
443 | #define sk_CRYPTO_EX_DATA_FUNCS_shift(st) SKM_sk_shift(CRYPTO_EX_DATA_FUNCS, (st)) | 458 | #define sk_CRYPTO_EX_DATA_FUNCS_shift(st) SKM_sk_shift(CRYPTO_EX_DATA_FUNCS, (st)) |
444 | #define sk_CRYPTO_EX_DATA_FUNCS_pop(st) SKM_sk_pop(CRYPTO_EX_DATA_FUNCS, (st)) | 459 | #define sk_CRYPTO_EX_DATA_FUNCS_pop(st) SKM_sk_pop(CRYPTO_EX_DATA_FUNCS, (st)) |
445 | #define sk_CRYPTO_EX_DATA_FUNCS_sort(st) SKM_sk_sort(CRYPTO_EX_DATA_FUNCS, (st)) | 460 | #define sk_CRYPTO_EX_DATA_FUNCS_sort(st) SKM_sk_sort(CRYPTO_EX_DATA_FUNCS, (st)) |
461 | #define sk_CRYPTO_EX_DATA_FUNCS_is_sorted(st) SKM_sk_is_sorted(CRYPTO_EX_DATA_FUNCS, (st)) | ||
446 | 462 | ||
447 | #define sk_CRYPTO_dynlock_new(st) SKM_sk_new(CRYPTO_dynlock, (st)) | 463 | #define sk_CRYPTO_dynlock_new(st) SKM_sk_new(CRYPTO_dynlock, (st)) |
448 | #define sk_CRYPTO_dynlock_new_null() SKM_sk_new_null(CRYPTO_dynlock) | 464 | #define sk_CRYPTO_dynlock_new_null() SKM_sk_new_null(CRYPTO_dynlock) |
@@ -463,6 +479,7 @@ STACK_OF(type) \ | |||
463 | #define sk_CRYPTO_dynlock_shift(st) SKM_sk_shift(CRYPTO_dynlock, (st)) | 479 | #define sk_CRYPTO_dynlock_shift(st) SKM_sk_shift(CRYPTO_dynlock, (st)) |
464 | #define sk_CRYPTO_dynlock_pop(st) SKM_sk_pop(CRYPTO_dynlock, (st)) | 480 | #define sk_CRYPTO_dynlock_pop(st) SKM_sk_pop(CRYPTO_dynlock, (st)) |
465 | #define sk_CRYPTO_dynlock_sort(st) SKM_sk_sort(CRYPTO_dynlock, (st)) | 481 | #define sk_CRYPTO_dynlock_sort(st) SKM_sk_sort(CRYPTO_dynlock, (st)) |
482 | #define sk_CRYPTO_dynlock_is_sorted(st) SKM_sk_is_sorted(CRYPTO_dynlock, (st)) | ||
466 | 483 | ||
467 | #define sk_DIST_POINT_new(st) SKM_sk_new(DIST_POINT, (st)) | 484 | #define sk_DIST_POINT_new(st) SKM_sk_new(DIST_POINT, (st)) |
468 | #define sk_DIST_POINT_new_null() SKM_sk_new_null(DIST_POINT) | 485 | #define sk_DIST_POINT_new_null() SKM_sk_new_null(DIST_POINT) |
@@ -483,6 +500,7 @@ STACK_OF(type) \ | |||
483 | #define sk_DIST_POINT_shift(st) SKM_sk_shift(DIST_POINT, (st)) | 500 | #define sk_DIST_POINT_shift(st) SKM_sk_shift(DIST_POINT, (st)) |
484 | #define sk_DIST_POINT_pop(st) SKM_sk_pop(DIST_POINT, (st)) | 501 | #define sk_DIST_POINT_pop(st) SKM_sk_pop(DIST_POINT, (st)) |
485 | #define sk_DIST_POINT_sort(st) SKM_sk_sort(DIST_POINT, (st)) | 502 | #define sk_DIST_POINT_sort(st) SKM_sk_sort(DIST_POINT, (st)) |
503 | #define sk_DIST_POINT_is_sorted(st) SKM_sk_is_sorted(DIST_POINT, (st)) | ||
486 | 504 | ||
487 | #define sk_ENGINE_new(st) SKM_sk_new(ENGINE, (st)) | 505 | #define sk_ENGINE_new(st) SKM_sk_new(ENGINE, (st)) |
488 | #define sk_ENGINE_new_null() SKM_sk_new_null(ENGINE) | 506 | #define sk_ENGINE_new_null() SKM_sk_new_null(ENGINE) |
@@ -503,6 +521,7 @@ STACK_OF(type) \ | |||
503 | #define sk_ENGINE_shift(st) SKM_sk_shift(ENGINE, (st)) | 521 | #define sk_ENGINE_shift(st) SKM_sk_shift(ENGINE, (st)) |
504 | #define sk_ENGINE_pop(st) SKM_sk_pop(ENGINE, (st)) | 522 | #define sk_ENGINE_pop(st) SKM_sk_pop(ENGINE, (st)) |
505 | #define sk_ENGINE_sort(st) SKM_sk_sort(ENGINE, (st)) | 523 | #define sk_ENGINE_sort(st) SKM_sk_sort(ENGINE, (st)) |
524 | #define sk_ENGINE_is_sorted(st) SKM_sk_is_sorted(ENGINE, (st)) | ||
506 | 525 | ||
507 | #define sk_ENGINE_CLEANUP_ITEM_new(st) SKM_sk_new(ENGINE_CLEANUP_ITEM, (st)) | 526 | #define sk_ENGINE_CLEANUP_ITEM_new(st) SKM_sk_new(ENGINE_CLEANUP_ITEM, (st)) |
508 | #define sk_ENGINE_CLEANUP_ITEM_new_null() SKM_sk_new_null(ENGINE_CLEANUP_ITEM) | 527 | #define sk_ENGINE_CLEANUP_ITEM_new_null() SKM_sk_new_null(ENGINE_CLEANUP_ITEM) |
@@ -523,6 +542,7 @@ STACK_OF(type) \ | |||
523 | #define sk_ENGINE_CLEANUP_ITEM_shift(st) SKM_sk_shift(ENGINE_CLEANUP_ITEM, (st)) | 542 | #define sk_ENGINE_CLEANUP_ITEM_shift(st) SKM_sk_shift(ENGINE_CLEANUP_ITEM, (st)) |
524 | #define sk_ENGINE_CLEANUP_ITEM_pop(st) SKM_sk_pop(ENGINE_CLEANUP_ITEM, (st)) | 543 | #define sk_ENGINE_CLEANUP_ITEM_pop(st) SKM_sk_pop(ENGINE_CLEANUP_ITEM, (st)) |
525 | #define sk_ENGINE_CLEANUP_ITEM_sort(st) SKM_sk_sort(ENGINE_CLEANUP_ITEM, (st)) | 544 | #define sk_ENGINE_CLEANUP_ITEM_sort(st) SKM_sk_sort(ENGINE_CLEANUP_ITEM, (st)) |
545 | #define sk_ENGINE_CLEANUP_ITEM_is_sorted(st) SKM_sk_is_sorted(ENGINE_CLEANUP_ITEM, (st)) | ||
526 | 546 | ||
527 | #define sk_GENERAL_NAME_new(st) SKM_sk_new(GENERAL_NAME, (st)) | 547 | #define sk_GENERAL_NAME_new(st) SKM_sk_new(GENERAL_NAME, (st)) |
528 | #define sk_GENERAL_NAME_new_null() SKM_sk_new_null(GENERAL_NAME) | 548 | #define sk_GENERAL_NAME_new_null() SKM_sk_new_null(GENERAL_NAME) |
@@ -543,6 +563,7 @@ STACK_OF(type) \ | |||
543 | #define sk_GENERAL_NAME_shift(st) SKM_sk_shift(GENERAL_NAME, (st)) | 563 | #define sk_GENERAL_NAME_shift(st) SKM_sk_shift(GENERAL_NAME, (st)) |
544 | #define sk_GENERAL_NAME_pop(st) SKM_sk_pop(GENERAL_NAME, (st)) | 564 | #define sk_GENERAL_NAME_pop(st) SKM_sk_pop(GENERAL_NAME, (st)) |
545 | #define sk_GENERAL_NAME_sort(st) SKM_sk_sort(GENERAL_NAME, (st)) | 565 | #define sk_GENERAL_NAME_sort(st) SKM_sk_sort(GENERAL_NAME, (st)) |
566 | #define sk_GENERAL_NAME_is_sorted(st) SKM_sk_is_sorted(GENERAL_NAME, (st)) | ||
546 | 567 | ||
547 | #define sk_KRB5_APREQBODY_new(st) SKM_sk_new(KRB5_APREQBODY, (st)) | 568 | #define sk_KRB5_APREQBODY_new(st) SKM_sk_new(KRB5_APREQBODY, (st)) |
548 | #define sk_KRB5_APREQBODY_new_null() SKM_sk_new_null(KRB5_APREQBODY) | 569 | #define sk_KRB5_APREQBODY_new_null() SKM_sk_new_null(KRB5_APREQBODY) |
@@ -563,6 +584,7 @@ STACK_OF(type) \ | |||
563 | #define sk_KRB5_APREQBODY_shift(st) SKM_sk_shift(KRB5_APREQBODY, (st)) | 584 | #define sk_KRB5_APREQBODY_shift(st) SKM_sk_shift(KRB5_APREQBODY, (st)) |
564 | #define sk_KRB5_APREQBODY_pop(st) SKM_sk_pop(KRB5_APREQBODY, (st)) | 585 | #define sk_KRB5_APREQBODY_pop(st) SKM_sk_pop(KRB5_APREQBODY, (st)) |
565 | #define sk_KRB5_APREQBODY_sort(st) SKM_sk_sort(KRB5_APREQBODY, (st)) | 586 | #define sk_KRB5_APREQBODY_sort(st) SKM_sk_sort(KRB5_APREQBODY, (st)) |
587 | #define sk_KRB5_APREQBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_APREQBODY, (st)) | ||
566 | 588 | ||
567 | #define sk_KRB5_AUTHDATA_new(st) SKM_sk_new(KRB5_AUTHDATA, (st)) | 589 | #define sk_KRB5_AUTHDATA_new(st) SKM_sk_new(KRB5_AUTHDATA, (st)) |
568 | #define sk_KRB5_AUTHDATA_new_null() SKM_sk_new_null(KRB5_AUTHDATA) | 590 | #define sk_KRB5_AUTHDATA_new_null() SKM_sk_new_null(KRB5_AUTHDATA) |
@@ -583,6 +605,7 @@ STACK_OF(type) \ | |||
583 | #define sk_KRB5_AUTHDATA_shift(st) SKM_sk_shift(KRB5_AUTHDATA, (st)) | 605 | #define sk_KRB5_AUTHDATA_shift(st) SKM_sk_shift(KRB5_AUTHDATA, (st)) |
584 | #define sk_KRB5_AUTHDATA_pop(st) SKM_sk_pop(KRB5_AUTHDATA, (st)) | 606 | #define sk_KRB5_AUTHDATA_pop(st) SKM_sk_pop(KRB5_AUTHDATA, (st)) |
585 | #define sk_KRB5_AUTHDATA_sort(st) SKM_sk_sort(KRB5_AUTHDATA, (st)) | 607 | #define sk_KRB5_AUTHDATA_sort(st) SKM_sk_sort(KRB5_AUTHDATA, (st)) |
608 | #define sk_KRB5_AUTHDATA_is_sorted(st) SKM_sk_is_sorted(KRB5_AUTHDATA, (st)) | ||
586 | 609 | ||
587 | #define sk_KRB5_AUTHENTBODY_new(st) SKM_sk_new(KRB5_AUTHENTBODY, (st)) | 610 | #define sk_KRB5_AUTHENTBODY_new(st) SKM_sk_new(KRB5_AUTHENTBODY, (st)) |
588 | #define sk_KRB5_AUTHENTBODY_new_null() SKM_sk_new_null(KRB5_AUTHENTBODY) | 611 | #define sk_KRB5_AUTHENTBODY_new_null() SKM_sk_new_null(KRB5_AUTHENTBODY) |
@@ -603,6 +626,7 @@ STACK_OF(type) \ | |||
603 | #define sk_KRB5_AUTHENTBODY_shift(st) SKM_sk_shift(KRB5_AUTHENTBODY, (st)) | 626 | #define sk_KRB5_AUTHENTBODY_shift(st) SKM_sk_shift(KRB5_AUTHENTBODY, (st)) |
604 | #define sk_KRB5_AUTHENTBODY_pop(st) SKM_sk_pop(KRB5_AUTHENTBODY, (st)) | 627 | #define sk_KRB5_AUTHENTBODY_pop(st) SKM_sk_pop(KRB5_AUTHENTBODY, (st)) |
605 | #define sk_KRB5_AUTHENTBODY_sort(st) SKM_sk_sort(KRB5_AUTHENTBODY, (st)) | 628 | #define sk_KRB5_AUTHENTBODY_sort(st) SKM_sk_sort(KRB5_AUTHENTBODY, (st)) |
629 | #define sk_KRB5_AUTHENTBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_AUTHENTBODY, (st)) | ||
606 | 630 | ||
607 | #define sk_KRB5_CHECKSUM_new(st) SKM_sk_new(KRB5_CHECKSUM, (st)) | 631 | #define sk_KRB5_CHECKSUM_new(st) SKM_sk_new(KRB5_CHECKSUM, (st)) |
608 | #define sk_KRB5_CHECKSUM_new_null() SKM_sk_new_null(KRB5_CHECKSUM) | 632 | #define sk_KRB5_CHECKSUM_new_null() SKM_sk_new_null(KRB5_CHECKSUM) |
@@ -623,6 +647,7 @@ STACK_OF(type) \ | |||
623 | #define sk_KRB5_CHECKSUM_shift(st) SKM_sk_shift(KRB5_CHECKSUM, (st)) | 647 | #define sk_KRB5_CHECKSUM_shift(st) SKM_sk_shift(KRB5_CHECKSUM, (st)) |
624 | #define sk_KRB5_CHECKSUM_pop(st) SKM_sk_pop(KRB5_CHECKSUM, (st)) | 648 | #define sk_KRB5_CHECKSUM_pop(st) SKM_sk_pop(KRB5_CHECKSUM, (st)) |
625 | #define sk_KRB5_CHECKSUM_sort(st) SKM_sk_sort(KRB5_CHECKSUM, (st)) | 649 | #define sk_KRB5_CHECKSUM_sort(st) SKM_sk_sort(KRB5_CHECKSUM, (st)) |
650 | #define sk_KRB5_CHECKSUM_is_sorted(st) SKM_sk_is_sorted(KRB5_CHECKSUM, (st)) | ||
626 | 651 | ||
627 | #define sk_KRB5_ENCDATA_new(st) SKM_sk_new(KRB5_ENCDATA, (st)) | 652 | #define sk_KRB5_ENCDATA_new(st) SKM_sk_new(KRB5_ENCDATA, (st)) |
628 | #define sk_KRB5_ENCDATA_new_null() SKM_sk_new_null(KRB5_ENCDATA) | 653 | #define sk_KRB5_ENCDATA_new_null() SKM_sk_new_null(KRB5_ENCDATA) |
@@ -643,6 +668,7 @@ STACK_OF(type) \ | |||
643 | #define sk_KRB5_ENCDATA_shift(st) SKM_sk_shift(KRB5_ENCDATA, (st)) | 668 | #define sk_KRB5_ENCDATA_shift(st) SKM_sk_shift(KRB5_ENCDATA, (st)) |
644 | #define sk_KRB5_ENCDATA_pop(st) SKM_sk_pop(KRB5_ENCDATA, (st)) | 669 | #define sk_KRB5_ENCDATA_pop(st) SKM_sk_pop(KRB5_ENCDATA, (st)) |
645 | #define sk_KRB5_ENCDATA_sort(st) SKM_sk_sort(KRB5_ENCDATA, (st)) | 670 | #define sk_KRB5_ENCDATA_sort(st) SKM_sk_sort(KRB5_ENCDATA, (st)) |
671 | #define sk_KRB5_ENCDATA_is_sorted(st) SKM_sk_is_sorted(KRB5_ENCDATA, (st)) | ||
646 | 672 | ||
647 | #define sk_KRB5_ENCKEY_new(st) SKM_sk_new(KRB5_ENCKEY, (st)) | 673 | #define sk_KRB5_ENCKEY_new(st) SKM_sk_new(KRB5_ENCKEY, (st)) |
648 | #define sk_KRB5_ENCKEY_new_null() SKM_sk_new_null(KRB5_ENCKEY) | 674 | #define sk_KRB5_ENCKEY_new_null() SKM_sk_new_null(KRB5_ENCKEY) |
@@ -663,6 +689,7 @@ STACK_OF(type) \ | |||
663 | #define sk_KRB5_ENCKEY_shift(st) SKM_sk_shift(KRB5_ENCKEY, (st)) | 689 | #define sk_KRB5_ENCKEY_shift(st) SKM_sk_shift(KRB5_ENCKEY, (st)) |
664 | #define sk_KRB5_ENCKEY_pop(st) SKM_sk_pop(KRB5_ENCKEY, (st)) | 690 | #define sk_KRB5_ENCKEY_pop(st) SKM_sk_pop(KRB5_ENCKEY, (st)) |
665 | #define sk_KRB5_ENCKEY_sort(st) SKM_sk_sort(KRB5_ENCKEY, (st)) | 691 | #define sk_KRB5_ENCKEY_sort(st) SKM_sk_sort(KRB5_ENCKEY, (st)) |
692 | #define sk_KRB5_ENCKEY_is_sorted(st) SKM_sk_is_sorted(KRB5_ENCKEY, (st)) | ||
666 | 693 | ||
667 | #define sk_KRB5_PRINCNAME_new(st) SKM_sk_new(KRB5_PRINCNAME, (st)) | 694 | #define sk_KRB5_PRINCNAME_new(st) SKM_sk_new(KRB5_PRINCNAME, (st)) |
668 | #define sk_KRB5_PRINCNAME_new_null() SKM_sk_new_null(KRB5_PRINCNAME) | 695 | #define sk_KRB5_PRINCNAME_new_null() SKM_sk_new_null(KRB5_PRINCNAME) |
@@ -683,6 +710,7 @@ STACK_OF(type) \ | |||
683 | #define sk_KRB5_PRINCNAME_shift(st) SKM_sk_shift(KRB5_PRINCNAME, (st)) | 710 | #define sk_KRB5_PRINCNAME_shift(st) SKM_sk_shift(KRB5_PRINCNAME, (st)) |
684 | #define sk_KRB5_PRINCNAME_pop(st) SKM_sk_pop(KRB5_PRINCNAME, (st)) | 711 | #define sk_KRB5_PRINCNAME_pop(st) SKM_sk_pop(KRB5_PRINCNAME, (st)) |
685 | #define sk_KRB5_PRINCNAME_sort(st) SKM_sk_sort(KRB5_PRINCNAME, (st)) | 712 | #define sk_KRB5_PRINCNAME_sort(st) SKM_sk_sort(KRB5_PRINCNAME, (st)) |
713 | #define sk_KRB5_PRINCNAME_is_sorted(st) SKM_sk_is_sorted(KRB5_PRINCNAME, (st)) | ||
686 | 714 | ||
687 | #define sk_KRB5_TKTBODY_new(st) SKM_sk_new(KRB5_TKTBODY, (st)) | 715 | #define sk_KRB5_TKTBODY_new(st) SKM_sk_new(KRB5_TKTBODY, (st)) |
688 | #define sk_KRB5_TKTBODY_new_null() SKM_sk_new_null(KRB5_TKTBODY) | 716 | #define sk_KRB5_TKTBODY_new_null() SKM_sk_new_null(KRB5_TKTBODY) |
@@ -703,6 +731,7 @@ STACK_OF(type) \ | |||
703 | #define sk_KRB5_TKTBODY_shift(st) SKM_sk_shift(KRB5_TKTBODY, (st)) | 731 | #define sk_KRB5_TKTBODY_shift(st) SKM_sk_shift(KRB5_TKTBODY, (st)) |
704 | #define sk_KRB5_TKTBODY_pop(st) SKM_sk_pop(KRB5_TKTBODY, (st)) | 732 | #define sk_KRB5_TKTBODY_pop(st) SKM_sk_pop(KRB5_TKTBODY, (st)) |
705 | #define sk_KRB5_TKTBODY_sort(st) SKM_sk_sort(KRB5_TKTBODY, (st)) | 733 | #define sk_KRB5_TKTBODY_sort(st) SKM_sk_sort(KRB5_TKTBODY, (st)) |
734 | #define sk_KRB5_TKTBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_TKTBODY, (st)) | ||
706 | 735 | ||
707 | #define sk_MIME_HEADER_new(st) SKM_sk_new(MIME_HEADER, (st)) | 736 | #define sk_MIME_HEADER_new(st) SKM_sk_new(MIME_HEADER, (st)) |
708 | #define sk_MIME_HEADER_new_null() SKM_sk_new_null(MIME_HEADER) | 737 | #define sk_MIME_HEADER_new_null() SKM_sk_new_null(MIME_HEADER) |
@@ -723,6 +752,7 @@ STACK_OF(type) \ | |||
723 | #define sk_MIME_HEADER_shift(st) SKM_sk_shift(MIME_HEADER, (st)) | 752 | #define sk_MIME_HEADER_shift(st) SKM_sk_shift(MIME_HEADER, (st)) |
724 | #define sk_MIME_HEADER_pop(st) SKM_sk_pop(MIME_HEADER, (st)) | 753 | #define sk_MIME_HEADER_pop(st) SKM_sk_pop(MIME_HEADER, (st)) |
725 | #define sk_MIME_HEADER_sort(st) SKM_sk_sort(MIME_HEADER, (st)) | 754 | #define sk_MIME_HEADER_sort(st) SKM_sk_sort(MIME_HEADER, (st)) |
755 | #define sk_MIME_HEADER_is_sorted(st) SKM_sk_is_sorted(MIME_HEADER, (st)) | ||
726 | 756 | ||
727 | #define sk_MIME_PARAM_new(st) SKM_sk_new(MIME_PARAM, (st)) | 757 | #define sk_MIME_PARAM_new(st) SKM_sk_new(MIME_PARAM, (st)) |
728 | #define sk_MIME_PARAM_new_null() SKM_sk_new_null(MIME_PARAM) | 758 | #define sk_MIME_PARAM_new_null() SKM_sk_new_null(MIME_PARAM) |
@@ -743,6 +773,7 @@ STACK_OF(type) \ | |||
743 | #define sk_MIME_PARAM_shift(st) SKM_sk_shift(MIME_PARAM, (st)) | 773 | #define sk_MIME_PARAM_shift(st) SKM_sk_shift(MIME_PARAM, (st)) |
744 | #define sk_MIME_PARAM_pop(st) SKM_sk_pop(MIME_PARAM, (st)) | 774 | #define sk_MIME_PARAM_pop(st) SKM_sk_pop(MIME_PARAM, (st)) |
745 | #define sk_MIME_PARAM_sort(st) SKM_sk_sort(MIME_PARAM, (st)) | 775 | #define sk_MIME_PARAM_sort(st) SKM_sk_sort(MIME_PARAM, (st)) |
776 | #define sk_MIME_PARAM_is_sorted(st) SKM_sk_is_sorted(MIME_PARAM, (st)) | ||
746 | 777 | ||
747 | #define sk_NAME_FUNCS_new(st) SKM_sk_new(NAME_FUNCS, (st)) | 778 | #define sk_NAME_FUNCS_new(st) SKM_sk_new(NAME_FUNCS, (st)) |
748 | #define sk_NAME_FUNCS_new_null() SKM_sk_new_null(NAME_FUNCS) | 779 | #define sk_NAME_FUNCS_new_null() SKM_sk_new_null(NAME_FUNCS) |
@@ -763,6 +794,7 @@ STACK_OF(type) \ | |||
763 | #define sk_NAME_FUNCS_shift(st) SKM_sk_shift(NAME_FUNCS, (st)) | 794 | #define sk_NAME_FUNCS_shift(st) SKM_sk_shift(NAME_FUNCS, (st)) |
764 | #define sk_NAME_FUNCS_pop(st) SKM_sk_pop(NAME_FUNCS, (st)) | 795 | #define sk_NAME_FUNCS_pop(st) SKM_sk_pop(NAME_FUNCS, (st)) |
765 | #define sk_NAME_FUNCS_sort(st) SKM_sk_sort(NAME_FUNCS, (st)) | 796 | #define sk_NAME_FUNCS_sort(st) SKM_sk_sort(NAME_FUNCS, (st)) |
797 | #define sk_NAME_FUNCS_is_sorted(st) SKM_sk_is_sorted(NAME_FUNCS, (st)) | ||
766 | 798 | ||
767 | #define sk_OCSP_CERTID_new(st) SKM_sk_new(OCSP_CERTID, (st)) | 799 | #define sk_OCSP_CERTID_new(st) SKM_sk_new(OCSP_CERTID, (st)) |
768 | #define sk_OCSP_CERTID_new_null() SKM_sk_new_null(OCSP_CERTID) | 800 | #define sk_OCSP_CERTID_new_null() SKM_sk_new_null(OCSP_CERTID) |
@@ -783,6 +815,7 @@ STACK_OF(type) \ | |||
783 | #define sk_OCSP_CERTID_shift(st) SKM_sk_shift(OCSP_CERTID, (st)) | 815 | #define sk_OCSP_CERTID_shift(st) SKM_sk_shift(OCSP_CERTID, (st)) |
784 | #define sk_OCSP_CERTID_pop(st) SKM_sk_pop(OCSP_CERTID, (st)) | 816 | #define sk_OCSP_CERTID_pop(st) SKM_sk_pop(OCSP_CERTID, (st)) |
785 | #define sk_OCSP_CERTID_sort(st) SKM_sk_sort(OCSP_CERTID, (st)) | 817 | #define sk_OCSP_CERTID_sort(st) SKM_sk_sort(OCSP_CERTID, (st)) |
818 | #define sk_OCSP_CERTID_is_sorted(st) SKM_sk_is_sorted(OCSP_CERTID, (st)) | ||
786 | 819 | ||
787 | #define sk_OCSP_ONEREQ_new(st) SKM_sk_new(OCSP_ONEREQ, (st)) | 820 | #define sk_OCSP_ONEREQ_new(st) SKM_sk_new(OCSP_ONEREQ, (st)) |
788 | #define sk_OCSP_ONEREQ_new_null() SKM_sk_new_null(OCSP_ONEREQ) | 821 | #define sk_OCSP_ONEREQ_new_null() SKM_sk_new_null(OCSP_ONEREQ) |
@@ -803,6 +836,7 @@ STACK_OF(type) \ | |||
803 | #define sk_OCSP_ONEREQ_shift(st) SKM_sk_shift(OCSP_ONEREQ, (st)) | 836 | #define sk_OCSP_ONEREQ_shift(st) SKM_sk_shift(OCSP_ONEREQ, (st)) |
804 | #define sk_OCSP_ONEREQ_pop(st) SKM_sk_pop(OCSP_ONEREQ, (st)) | 837 | #define sk_OCSP_ONEREQ_pop(st) SKM_sk_pop(OCSP_ONEREQ, (st)) |
805 | #define sk_OCSP_ONEREQ_sort(st) SKM_sk_sort(OCSP_ONEREQ, (st)) | 838 | #define sk_OCSP_ONEREQ_sort(st) SKM_sk_sort(OCSP_ONEREQ, (st)) |
839 | #define sk_OCSP_ONEREQ_is_sorted(st) SKM_sk_is_sorted(OCSP_ONEREQ, (st)) | ||
806 | 840 | ||
807 | #define sk_OCSP_SINGLERESP_new(st) SKM_sk_new(OCSP_SINGLERESP, (st)) | 841 | #define sk_OCSP_SINGLERESP_new(st) SKM_sk_new(OCSP_SINGLERESP, (st)) |
808 | #define sk_OCSP_SINGLERESP_new_null() SKM_sk_new_null(OCSP_SINGLERESP) | 842 | #define sk_OCSP_SINGLERESP_new_null() SKM_sk_new_null(OCSP_SINGLERESP) |
@@ -823,6 +857,7 @@ STACK_OF(type) \ | |||
823 | #define sk_OCSP_SINGLERESP_shift(st) SKM_sk_shift(OCSP_SINGLERESP, (st)) | 857 | #define sk_OCSP_SINGLERESP_shift(st) SKM_sk_shift(OCSP_SINGLERESP, (st)) |
824 | #define sk_OCSP_SINGLERESP_pop(st) SKM_sk_pop(OCSP_SINGLERESP, (st)) | 858 | #define sk_OCSP_SINGLERESP_pop(st) SKM_sk_pop(OCSP_SINGLERESP, (st)) |
825 | #define sk_OCSP_SINGLERESP_sort(st) SKM_sk_sort(OCSP_SINGLERESP, (st)) | 859 | #define sk_OCSP_SINGLERESP_sort(st) SKM_sk_sort(OCSP_SINGLERESP, (st)) |
860 | #define sk_OCSP_SINGLERESP_is_sorted(st) SKM_sk_is_sorted(OCSP_SINGLERESP, (st)) | ||
826 | 861 | ||
827 | #define sk_PKCS12_SAFEBAG_new(st) SKM_sk_new(PKCS12_SAFEBAG, (st)) | 862 | #define sk_PKCS12_SAFEBAG_new(st) SKM_sk_new(PKCS12_SAFEBAG, (st)) |
828 | #define sk_PKCS12_SAFEBAG_new_null() SKM_sk_new_null(PKCS12_SAFEBAG) | 863 | #define sk_PKCS12_SAFEBAG_new_null() SKM_sk_new_null(PKCS12_SAFEBAG) |
@@ -843,6 +878,7 @@ STACK_OF(type) \ | |||
843 | #define sk_PKCS12_SAFEBAG_shift(st) SKM_sk_shift(PKCS12_SAFEBAG, (st)) | 878 | #define sk_PKCS12_SAFEBAG_shift(st) SKM_sk_shift(PKCS12_SAFEBAG, (st)) |
844 | #define sk_PKCS12_SAFEBAG_pop(st) SKM_sk_pop(PKCS12_SAFEBAG, (st)) | 879 | #define sk_PKCS12_SAFEBAG_pop(st) SKM_sk_pop(PKCS12_SAFEBAG, (st)) |
845 | #define sk_PKCS12_SAFEBAG_sort(st) SKM_sk_sort(PKCS12_SAFEBAG, (st)) | 880 | #define sk_PKCS12_SAFEBAG_sort(st) SKM_sk_sort(PKCS12_SAFEBAG, (st)) |
881 | #define sk_PKCS12_SAFEBAG_is_sorted(st) SKM_sk_is_sorted(PKCS12_SAFEBAG, (st)) | ||
846 | 882 | ||
847 | #define sk_PKCS7_new(st) SKM_sk_new(PKCS7, (st)) | 883 | #define sk_PKCS7_new(st) SKM_sk_new(PKCS7, (st)) |
848 | #define sk_PKCS7_new_null() SKM_sk_new_null(PKCS7) | 884 | #define sk_PKCS7_new_null() SKM_sk_new_null(PKCS7) |
@@ -863,6 +899,7 @@ STACK_OF(type) \ | |||
863 | #define sk_PKCS7_shift(st) SKM_sk_shift(PKCS7, (st)) | 899 | #define sk_PKCS7_shift(st) SKM_sk_shift(PKCS7, (st)) |
864 | #define sk_PKCS7_pop(st) SKM_sk_pop(PKCS7, (st)) | 900 | #define sk_PKCS7_pop(st) SKM_sk_pop(PKCS7, (st)) |
865 | #define sk_PKCS7_sort(st) SKM_sk_sort(PKCS7, (st)) | 901 | #define sk_PKCS7_sort(st) SKM_sk_sort(PKCS7, (st)) |
902 | #define sk_PKCS7_is_sorted(st) SKM_sk_is_sorted(PKCS7, (st)) | ||
866 | 903 | ||
867 | #define sk_PKCS7_RECIP_INFO_new(st) SKM_sk_new(PKCS7_RECIP_INFO, (st)) | 904 | #define sk_PKCS7_RECIP_INFO_new(st) SKM_sk_new(PKCS7_RECIP_INFO, (st)) |
868 | #define sk_PKCS7_RECIP_INFO_new_null() SKM_sk_new_null(PKCS7_RECIP_INFO) | 905 | #define sk_PKCS7_RECIP_INFO_new_null() SKM_sk_new_null(PKCS7_RECIP_INFO) |
@@ -883,6 +920,7 @@ STACK_OF(type) \ | |||
883 | #define sk_PKCS7_RECIP_INFO_shift(st) SKM_sk_shift(PKCS7_RECIP_INFO, (st)) | 920 | #define sk_PKCS7_RECIP_INFO_shift(st) SKM_sk_shift(PKCS7_RECIP_INFO, (st)) |
884 | #define sk_PKCS7_RECIP_INFO_pop(st) SKM_sk_pop(PKCS7_RECIP_INFO, (st)) | 921 | #define sk_PKCS7_RECIP_INFO_pop(st) SKM_sk_pop(PKCS7_RECIP_INFO, (st)) |
885 | #define sk_PKCS7_RECIP_INFO_sort(st) SKM_sk_sort(PKCS7_RECIP_INFO, (st)) | 922 | #define sk_PKCS7_RECIP_INFO_sort(st) SKM_sk_sort(PKCS7_RECIP_INFO, (st)) |
923 | #define sk_PKCS7_RECIP_INFO_is_sorted(st) SKM_sk_is_sorted(PKCS7_RECIP_INFO, (st)) | ||
886 | 924 | ||
887 | #define sk_PKCS7_SIGNER_INFO_new(st) SKM_sk_new(PKCS7_SIGNER_INFO, (st)) | 925 | #define sk_PKCS7_SIGNER_INFO_new(st) SKM_sk_new(PKCS7_SIGNER_INFO, (st)) |
888 | #define sk_PKCS7_SIGNER_INFO_new_null() SKM_sk_new_null(PKCS7_SIGNER_INFO) | 926 | #define sk_PKCS7_SIGNER_INFO_new_null() SKM_sk_new_null(PKCS7_SIGNER_INFO) |
@@ -903,6 +941,7 @@ STACK_OF(type) \ | |||
903 | #define sk_PKCS7_SIGNER_INFO_shift(st) SKM_sk_shift(PKCS7_SIGNER_INFO, (st)) | 941 | #define sk_PKCS7_SIGNER_INFO_shift(st) SKM_sk_shift(PKCS7_SIGNER_INFO, (st)) |
904 | #define sk_PKCS7_SIGNER_INFO_pop(st) SKM_sk_pop(PKCS7_SIGNER_INFO, (st)) | 942 | #define sk_PKCS7_SIGNER_INFO_pop(st) SKM_sk_pop(PKCS7_SIGNER_INFO, (st)) |
905 | #define sk_PKCS7_SIGNER_INFO_sort(st) SKM_sk_sort(PKCS7_SIGNER_INFO, (st)) | 943 | #define sk_PKCS7_SIGNER_INFO_sort(st) SKM_sk_sort(PKCS7_SIGNER_INFO, (st)) |
944 | #define sk_PKCS7_SIGNER_INFO_is_sorted(st) SKM_sk_is_sorted(PKCS7_SIGNER_INFO, (st)) | ||
906 | 945 | ||
907 | #define sk_POLICYINFO_new(st) SKM_sk_new(POLICYINFO, (st)) | 946 | #define sk_POLICYINFO_new(st) SKM_sk_new(POLICYINFO, (st)) |
908 | #define sk_POLICYINFO_new_null() SKM_sk_new_null(POLICYINFO) | 947 | #define sk_POLICYINFO_new_null() SKM_sk_new_null(POLICYINFO) |
@@ -923,6 +962,7 @@ STACK_OF(type) \ | |||
923 | #define sk_POLICYINFO_shift(st) SKM_sk_shift(POLICYINFO, (st)) | 962 | #define sk_POLICYINFO_shift(st) SKM_sk_shift(POLICYINFO, (st)) |
924 | #define sk_POLICYINFO_pop(st) SKM_sk_pop(POLICYINFO, (st)) | 963 | #define sk_POLICYINFO_pop(st) SKM_sk_pop(POLICYINFO, (st)) |
925 | #define sk_POLICYINFO_sort(st) SKM_sk_sort(POLICYINFO, (st)) | 964 | #define sk_POLICYINFO_sort(st) SKM_sk_sort(POLICYINFO, (st)) |
965 | #define sk_POLICYINFO_is_sorted(st) SKM_sk_is_sorted(POLICYINFO, (st)) | ||
926 | 966 | ||
927 | #define sk_POLICYQUALINFO_new(st) SKM_sk_new(POLICYQUALINFO, (st)) | 967 | #define sk_POLICYQUALINFO_new(st) SKM_sk_new(POLICYQUALINFO, (st)) |
928 | #define sk_POLICYQUALINFO_new_null() SKM_sk_new_null(POLICYQUALINFO) | 968 | #define sk_POLICYQUALINFO_new_null() SKM_sk_new_null(POLICYQUALINFO) |
@@ -943,6 +983,7 @@ STACK_OF(type) \ | |||
943 | #define sk_POLICYQUALINFO_shift(st) SKM_sk_shift(POLICYQUALINFO, (st)) | 983 | #define sk_POLICYQUALINFO_shift(st) SKM_sk_shift(POLICYQUALINFO, (st)) |
944 | #define sk_POLICYQUALINFO_pop(st) SKM_sk_pop(POLICYQUALINFO, (st)) | 984 | #define sk_POLICYQUALINFO_pop(st) SKM_sk_pop(POLICYQUALINFO, (st)) |
945 | #define sk_POLICYQUALINFO_sort(st) SKM_sk_sort(POLICYQUALINFO, (st)) | 985 | #define sk_POLICYQUALINFO_sort(st) SKM_sk_sort(POLICYQUALINFO, (st)) |
986 | #define sk_POLICYQUALINFO_is_sorted(st) SKM_sk_is_sorted(POLICYQUALINFO, (st)) | ||
946 | 987 | ||
947 | #define sk_SSL_CIPHER_new(st) SKM_sk_new(SSL_CIPHER, (st)) | 988 | #define sk_SSL_CIPHER_new(st) SKM_sk_new(SSL_CIPHER, (st)) |
948 | #define sk_SSL_CIPHER_new_null() SKM_sk_new_null(SSL_CIPHER) | 989 | #define sk_SSL_CIPHER_new_null() SKM_sk_new_null(SSL_CIPHER) |
@@ -963,6 +1004,7 @@ STACK_OF(type) \ | |||
963 | #define sk_SSL_CIPHER_shift(st) SKM_sk_shift(SSL_CIPHER, (st)) | 1004 | #define sk_SSL_CIPHER_shift(st) SKM_sk_shift(SSL_CIPHER, (st)) |
964 | #define sk_SSL_CIPHER_pop(st) SKM_sk_pop(SSL_CIPHER, (st)) | 1005 | #define sk_SSL_CIPHER_pop(st) SKM_sk_pop(SSL_CIPHER, (st)) |
965 | #define sk_SSL_CIPHER_sort(st) SKM_sk_sort(SSL_CIPHER, (st)) | 1006 | #define sk_SSL_CIPHER_sort(st) SKM_sk_sort(SSL_CIPHER, (st)) |
1007 | #define sk_SSL_CIPHER_is_sorted(st) SKM_sk_is_sorted(SSL_CIPHER, (st)) | ||
966 | 1008 | ||
967 | #define sk_SSL_COMP_new(st) SKM_sk_new(SSL_COMP, (st)) | 1009 | #define sk_SSL_COMP_new(st) SKM_sk_new(SSL_COMP, (st)) |
968 | #define sk_SSL_COMP_new_null() SKM_sk_new_null(SSL_COMP) | 1010 | #define sk_SSL_COMP_new_null() SKM_sk_new_null(SSL_COMP) |
@@ -983,6 +1025,7 @@ STACK_OF(type) \ | |||
983 | #define sk_SSL_COMP_shift(st) SKM_sk_shift(SSL_COMP, (st)) | 1025 | #define sk_SSL_COMP_shift(st) SKM_sk_shift(SSL_COMP, (st)) |
984 | #define sk_SSL_COMP_pop(st) SKM_sk_pop(SSL_COMP, (st)) | 1026 | #define sk_SSL_COMP_pop(st) SKM_sk_pop(SSL_COMP, (st)) |
985 | #define sk_SSL_COMP_sort(st) SKM_sk_sort(SSL_COMP, (st)) | 1027 | #define sk_SSL_COMP_sort(st) SKM_sk_sort(SSL_COMP, (st)) |
1028 | #define sk_SSL_COMP_is_sorted(st) SKM_sk_is_sorted(SSL_COMP, (st)) | ||
986 | 1029 | ||
987 | #define sk_SXNETID_new(st) SKM_sk_new(SXNETID, (st)) | 1030 | #define sk_SXNETID_new(st) SKM_sk_new(SXNETID, (st)) |
988 | #define sk_SXNETID_new_null() SKM_sk_new_null(SXNETID) | 1031 | #define sk_SXNETID_new_null() SKM_sk_new_null(SXNETID) |
@@ -1003,6 +1046,7 @@ STACK_OF(type) \ | |||
1003 | #define sk_SXNETID_shift(st) SKM_sk_shift(SXNETID, (st)) | 1046 | #define sk_SXNETID_shift(st) SKM_sk_shift(SXNETID, (st)) |
1004 | #define sk_SXNETID_pop(st) SKM_sk_pop(SXNETID, (st)) | 1047 | #define sk_SXNETID_pop(st) SKM_sk_pop(SXNETID, (st)) |
1005 | #define sk_SXNETID_sort(st) SKM_sk_sort(SXNETID, (st)) | 1048 | #define sk_SXNETID_sort(st) SKM_sk_sort(SXNETID, (st)) |
1049 | #define sk_SXNETID_is_sorted(st) SKM_sk_is_sorted(SXNETID, (st)) | ||
1006 | 1050 | ||
1007 | #define sk_UI_STRING_new(st) SKM_sk_new(UI_STRING, (st)) | 1051 | #define sk_UI_STRING_new(st) SKM_sk_new(UI_STRING, (st)) |
1008 | #define sk_UI_STRING_new_null() SKM_sk_new_null(UI_STRING) | 1052 | #define sk_UI_STRING_new_null() SKM_sk_new_null(UI_STRING) |
@@ -1023,6 +1067,7 @@ STACK_OF(type) \ | |||
1023 | #define sk_UI_STRING_shift(st) SKM_sk_shift(UI_STRING, (st)) | 1067 | #define sk_UI_STRING_shift(st) SKM_sk_shift(UI_STRING, (st)) |
1024 | #define sk_UI_STRING_pop(st) SKM_sk_pop(UI_STRING, (st)) | 1068 | #define sk_UI_STRING_pop(st) SKM_sk_pop(UI_STRING, (st)) |
1025 | #define sk_UI_STRING_sort(st) SKM_sk_sort(UI_STRING, (st)) | 1069 | #define sk_UI_STRING_sort(st) SKM_sk_sort(UI_STRING, (st)) |
1070 | #define sk_UI_STRING_is_sorted(st) SKM_sk_is_sorted(UI_STRING, (st)) | ||
1026 | 1071 | ||
1027 | #define sk_X509_new(st) SKM_sk_new(X509, (st)) | 1072 | #define sk_X509_new(st) SKM_sk_new(X509, (st)) |
1028 | #define sk_X509_new_null() SKM_sk_new_null(X509) | 1073 | #define sk_X509_new_null() SKM_sk_new_null(X509) |
@@ -1043,6 +1088,7 @@ STACK_OF(type) \ | |||
1043 | #define sk_X509_shift(st) SKM_sk_shift(X509, (st)) | 1088 | #define sk_X509_shift(st) SKM_sk_shift(X509, (st)) |
1044 | #define sk_X509_pop(st) SKM_sk_pop(X509, (st)) | 1089 | #define sk_X509_pop(st) SKM_sk_pop(X509, (st)) |
1045 | #define sk_X509_sort(st) SKM_sk_sort(X509, (st)) | 1090 | #define sk_X509_sort(st) SKM_sk_sort(X509, (st)) |
1091 | #define sk_X509_is_sorted(st) SKM_sk_is_sorted(X509, (st)) | ||
1046 | 1092 | ||
1047 | #define sk_X509V3_EXT_METHOD_new(st) SKM_sk_new(X509V3_EXT_METHOD, (st)) | 1093 | #define sk_X509V3_EXT_METHOD_new(st) SKM_sk_new(X509V3_EXT_METHOD, (st)) |
1048 | #define sk_X509V3_EXT_METHOD_new_null() SKM_sk_new_null(X509V3_EXT_METHOD) | 1094 | #define sk_X509V3_EXT_METHOD_new_null() SKM_sk_new_null(X509V3_EXT_METHOD) |
@@ -1063,6 +1109,7 @@ STACK_OF(type) \ | |||
1063 | #define sk_X509V3_EXT_METHOD_shift(st) SKM_sk_shift(X509V3_EXT_METHOD, (st)) | 1109 | #define sk_X509V3_EXT_METHOD_shift(st) SKM_sk_shift(X509V3_EXT_METHOD, (st)) |
1064 | #define sk_X509V3_EXT_METHOD_pop(st) SKM_sk_pop(X509V3_EXT_METHOD, (st)) | 1110 | #define sk_X509V3_EXT_METHOD_pop(st) SKM_sk_pop(X509V3_EXT_METHOD, (st)) |
1065 | #define sk_X509V3_EXT_METHOD_sort(st) SKM_sk_sort(X509V3_EXT_METHOD, (st)) | 1111 | #define sk_X509V3_EXT_METHOD_sort(st) SKM_sk_sort(X509V3_EXT_METHOD, (st)) |
1112 | #define sk_X509V3_EXT_METHOD_is_sorted(st) SKM_sk_is_sorted(X509V3_EXT_METHOD, (st)) | ||
1066 | 1113 | ||
1067 | #define sk_X509_ALGOR_new(st) SKM_sk_new(X509_ALGOR, (st)) | 1114 | #define sk_X509_ALGOR_new(st) SKM_sk_new(X509_ALGOR, (st)) |
1068 | #define sk_X509_ALGOR_new_null() SKM_sk_new_null(X509_ALGOR) | 1115 | #define sk_X509_ALGOR_new_null() SKM_sk_new_null(X509_ALGOR) |
@@ -1083,6 +1130,7 @@ STACK_OF(type) \ | |||
1083 | #define sk_X509_ALGOR_shift(st) SKM_sk_shift(X509_ALGOR, (st)) | 1130 | #define sk_X509_ALGOR_shift(st) SKM_sk_shift(X509_ALGOR, (st)) |
1084 | #define sk_X509_ALGOR_pop(st) SKM_sk_pop(X509_ALGOR, (st)) | 1131 | #define sk_X509_ALGOR_pop(st) SKM_sk_pop(X509_ALGOR, (st)) |
1085 | #define sk_X509_ALGOR_sort(st) SKM_sk_sort(X509_ALGOR, (st)) | 1132 | #define sk_X509_ALGOR_sort(st) SKM_sk_sort(X509_ALGOR, (st)) |
1133 | #define sk_X509_ALGOR_is_sorted(st) SKM_sk_is_sorted(X509_ALGOR, (st)) | ||
1086 | 1134 | ||
1087 | #define sk_X509_ATTRIBUTE_new(st) SKM_sk_new(X509_ATTRIBUTE, (st)) | 1135 | #define sk_X509_ATTRIBUTE_new(st) SKM_sk_new(X509_ATTRIBUTE, (st)) |
1088 | #define sk_X509_ATTRIBUTE_new_null() SKM_sk_new_null(X509_ATTRIBUTE) | 1136 | #define sk_X509_ATTRIBUTE_new_null() SKM_sk_new_null(X509_ATTRIBUTE) |
@@ -1103,6 +1151,7 @@ STACK_OF(type) \ | |||
1103 | #define sk_X509_ATTRIBUTE_shift(st) SKM_sk_shift(X509_ATTRIBUTE, (st)) | 1151 | #define sk_X509_ATTRIBUTE_shift(st) SKM_sk_shift(X509_ATTRIBUTE, (st)) |
1104 | #define sk_X509_ATTRIBUTE_pop(st) SKM_sk_pop(X509_ATTRIBUTE, (st)) | 1152 | #define sk_X509_ATTRIBUTE_pop(st) SKM_sk_pop(X509_ATTRIBUTE, (st)) |
1105 | #define sk_X509_ATTRIBUTE_sort(st) SKM_sk_sort(X509_ATTRIBUTE, (st)) | 1153 | #define sk_X509_ATTRIBUTE_sort(st) SKM_sk_sort(X509_ATTRIBUTE, (st)) |
1154 | #define sk_X509_ATTRIBUTE_is_sorted(st) SKM_sk_is_sorted(X509_ATTRIBUTE, (st)) | ||
1106 | 1155 | ||
1107 | #define sk_X509_CRL_new(st) SKM_sk_new(X509_CRL, (st)) | 1156 | #define sk_X509_CRL_new(st) SKM_sk_new(X509_CRL, (st)) |
1108 | #define sk_X509_CRL_new_null() SKM_sk_new_null(X509_CRL) | 1157 | #define sk_X509_CRL_new_null() SKM_sk_new_null(X509_CRL) |
@@ -1123,6 +1172,7 @@ STACK_OF(type) \ | |||
1123 | #define sk_X509_CRL_shift(st) SKM_sk_shift(X509_CRL, (st)) | 1172 | #define sk_X509_CRL_shift(st) SKM_sk_shift(X509_CRL, (st)) |
1124 | #define sk_X509_CRL_pop(st) SKM_sk_pop(X509_CRL, (st)) | 1173 | #define sk_X509_CRL_pop(st) SKM_sk_pop(X509_CRL, (st)) |
1125 | #define sk_X509_CRL_sort(st) SKM_sk_sort(X509_CRL, (st)) | 1174 | #define sk_X509_CRL_sort(st) SKM_sk_sort(X509_CRL, (st)) |
1175 | #define sk_X509_CRL_is_sorted(st) SKM_sk_is_sorted(X509_CRL, (st)) | ||
1126 | 1176 | ||
1127 | #define sk_X509_EXTENSION_new(st) SKM_sk_new(X509_EXTENSION, (st)) | 1177 | #define sk_X509_EXTENSION_new(st) SKM_sk_new(X509_EXTENSION, (st)) |
1128 | #define sk_X509_EXTENSION_new_null() SKM_sk_new_null(X509_EXTENSION) | 1178 | #define sk_X509_EXTENSION_new_null() SKM_sk_new_null(X509_EXTENSION) |
@@ -1143,6 +1193,7 @@ STACK_OF(type) \ | |||
1143 | #define sk_X509_EXTENSION_shift(st) SKM_sk_shift(X509_EXTENSION, (st)) | 1193 | #define sk_X509_EXTENSION_shift(st) SKM_sk_shift(X509_EXTENSION, (st)) |
1144 | #define sk_X509_EXTENSION_pop(st) SKM_sk_pop(X509_EXTENSION, (st)) | 1194 | #define sk_X509_EXTENSION_pop(st) SKM_sk_pop(X509_EXTENSION, (st)) |
1145 | #define sk_X509_EXTENSION_sort(st) SKM_sk_sort(X509_EXTENSION, (st)) | 1195 | #define sk_X509_EXTENSION_sort(st) SKM_sk_sort(X509_EXTENSION, (st)) |
1196 | #define sk_X509_EXTENSION_is_sorted(st) SKM_sk_is_sorted(X509_EXTENSION, (st)) | ||
1146 | 1197 | ||
1147 | #define sk_X509_INFO_new(st) SKM_sk_new(X509_INFO, (st)) | 1198 | #define sk_X509_INFO_new(st) SKM_sk_new(X509_INFO, (st)) |
1148 | #define sk_X509_INFO_new_null() SKM_sk_new_null(X509_INFO) | 1199 | #define sk_X509_INFO_new_null() SKM_sk_new_null(X509_INFO) |
@@ -1163,6 +1214,7 @@ STACK_OF(type) \ | |||
1163 | #define sk_X509_INFO_shift(st) SKM_sk_shift(X509_INFO, (st)) | 1214 | #define sk_X509_INFO_shift(st) SKM_sk_shift(X509_INFO, (st)) |
1164 | #define sk_X509_INFO_pop(st) SKM_sk_pop(X509_INFO, (st)) | 1215 | #define sk_X509_INFO_pop(st) SKM_sk_pop(X509_INFO, (st)) |
1165 | #define sk_X509_INFO_sort(st) SKM_sk_sort(X509_INFO, (st)) | 1216 | #define sk_X509_INFO_sort(st) SKM_sk_sort(X509_INFO, (st)) |
1217 | #define sk_X509_INFO_is_sorted(st) SKM_sk_is_sorted(X509_INFO, (st)) | ||
1166 | 1218 | ||
1167 | #define sk_X509_LOOKUP_new(st) SKM_sk_new(X509_LOOKUP, (st)) | 1219 | #define sk_X509_LOOKUP_new(st) SKM_sk_new(X509_LOOKUP, (st)) |
1168 | #define sk_X509_LOOKUP_new_null() SKM_sk_new_null(X509_LOOKUP) | 1220 | #define sk_X509_LOOKUP_new_null() SKM_sk_new_null(X509_LOOKUP) |
@@ -1183,6 +1235,7 @@ STACK_OF(type) \ | |||
1183 | #define sk_X509_LOOKUP_shift(st) SKM_sk_shift(X509_LOOKUP, (st)) | 1235 | #define sk_X509_LOOKUP_shift(st) SKM_sk_shift(X509_LOOKUP, (st)) |
1184 | #define sk_X509_LOOKUP_pop(st) SKM_sk_pop(X509_LOOKUP, (st)) | 1236 | #define sk_X509_LOOKUP_pop(st) SKM_sk_pop(X509_LOOKUP, (st)) |
1185 | #define sk_X509_LOOKUP_sort(st) SKM_sk_sort(X509_LOOKUP, (st)) | 1237 | #define sk_X509_LOOKUP_sort(st) SKM_sk_sort(X509_LOOKUP, (st)) |
1238 | #define sk_X509_LOOKUP_is_sorted(st) SKM_sk_is_sorted(X509_LOOKUP, (st)) | ||
1186 | 1239 | ||
1187 | #define sk_X509_NAME_new(st) SKM_sk_new(X509_NAME, (st)) | 1240 | #define sk_X509_NAME_new(st) SKM_sk_new(X509_NAME, (st)) |
1188 | #define sk_X509_NAME_new_null() SKM_sk_new_null(X509_NAME) | 1241 | #define sk_X509_NAME_new_null() SKM_sk_new_null(X509_NAME) |
@@ -1203,6 +1256,7 @@ STACK_OF(type) \ | |||
1203 | #define sk_X509_NAME_shift(st) SKM_sk_shift(X509_NAME, (st)) | 1256 | #define sk_X509_NAME_shift(st) SKM_sk_shift(X509_NAME, (st)) |
1204 | #define sk_X509_NAME_pop(st) SKM_sk_pop(X509_NAME, (st)) | 1257 | #define sk_X509_NAME_pop(st) SKM_sk_pop(X509_NAME, (st)) |
1205 | #define sk_X509_NAME_sort(st) SKM_sk_sort(X509_NAME, (st)) | 1258 | #define sk_X509_NAME_sort(st) SKM_sk_sort(X509_NAME, (st)) |
1259 | #define sk_X509_NAME_is_sorted(st) SKM_sk_is_sorted(X509_NAME, (st)) | ||
1206 | 1260 | ||
1207 | #define sk_X509_NAME_ENTRY_new(st) SKM_sk_new(X509_NAME_ENTRY, (st)) | 1261 | #define sk_X509_NAME_ENTRY_new(st) SKM_sk_new(X509_NAME_ENTRY, (st)) |
1208 | #define sk_X509_NAME_ENTRY_new_null() SKM_sk_new_null(X509_NAME_ENTRY) | 1262 | #define sk_X509_NAME_ENTRY_new_null() SKM_sk_new_null(X509_NAME_ENTRY) |
@@ -1223,6 +1277,7 @@ STACK_OF(type) \ | |||
1223 | #define sk_X509_NAME_ENTRY_shift(st) SKM_sk_shift(X509_NAME_ENTRY, (st)) | 1277 | #define sk_X509_NAME_ENTRY_shift(st) SKM_sk_shift(X509_NAME_ENTRY, (st)) |
1224 | #define sk_X509_NAME_ENTRY_pop(st) SKM_sk_pop(X509_NAME_ENTRY, (st)) | 1278 | #define sk_X509_NAME_ENTRY_pop(st) SKM_sk_pop(X509_NAME_ENTRY, (st)) |
1225 | #define sk_X509_NAME_ENTRY_sort(st) SKM_sk_sort(X509_NAME_ENTRY, (st)) | 1279 | #define sk_X509_NAME_ENTRY_sort(st) SKM_sk_sort(X509_NAME_ENTRY, (st)) |
1280 | #define sk_X509_NAME_ENTRY_is_sorted(st) SKM_sk_is_sorted(X509_NAME_ENTRY, (st)) | ||
1226 | 1281 | ||
1227 | #define sk_X509_OBJECT_new(st) SKM_sk_new(X509_OBJECT, (st)) | 1282 | #define sk_X509_OBJECT_new(st) SKM_sk_new(X509_OBJECT, (st)) |
1228 | #define sk_X509_OBJECT_new_null() SKM_sk_new_null(X509_OBJECT) | 1283 | #define sk_X509_OBJECT_new_null() SKM_sk_new_null(X509_OBJECT) |
@@ -1243,6 +1298,7 @@ STACK_OF(type) \ | |||
1243 | #define sk_X509_OBJECT_shift(st) SKM_sk_shift(X509_OBJECT, (st)) | 1298 | #define sk_X509_OBJECT_shift(st) SKM_sk_shift(X509_OBJECT, (st)) |
1244 | #define sk_X509_OBJECT_pop(st) SKM_sk_pop(X509_OBJECT, (st)) | 1299 | #define sk_X509_OBJECT_pop(st) SKM_sk_pop(X509_OBJECT, (st)) |
1245 | #define sk_X509_OBJECT_sort(st) SKM_sk_sort(X509_OBJECT, (st)) | 1300 | #define sk_X509_OBJECT_sort(st) SKM_sk_sort(X509_OBJECT, (st)) |
1301 | #define sk_X509_OBJECT_is_sorted(st) SKM_sk_is_sorted(X509_OBJECT, (st)) | ||
1246 | 1302 | ||
1247 | #define sk_X509_PURPOSE_new(st) SKM_sk_new(X509_PURPOSE, (st)) | 1303 | #define sk_X509_PURPOSE_new(st) SKM_sk_new(X509_PURPOSE, (st)) |
1248 | #define sk_X509_PURPOSE_new_null() SKM_sk_new_null(X509_PURPOSE) | 1304 | #define sk_X509_PURPOSE_new_null() SKM_sk_new_null(X509_PURPOSE) |
@@ -1263,6 +1319,7 @@ STACK_OF(type) \ | |||
1263 | #define sk_X509_PURPOSE_shift(st) SKM_sk_shift(X509_PURPOSE, (st)) | 1319 | #define sk_X509_PURPOSE_shift(st) SKM_sk_shift(X509_PURPOSE, (st)) |
1264 | #define sk_X509_PURPOSE_pop(st) SKM_sk_pop(X509_PURPOSE, (st)) | 1320 | #define sk_X509_PURPOSE_pop(st) SKM_sk_pop(X509_PURPOSE, (st)) |
1265 | #define sk_X509_PURPOSE_sort(st) SKM_sk_sort(X509_PURPOSE, (st)) | 1321 | #define sk_X509_PURPOSE_sort(st) SKM_sk_sort(X509_PURPOSE, (st)) |
1322 | #define sk_X509_PURPOSE_is_sorted(st) SKM_sk_is_sorted(X509_PURPOSE, (st)) | ||
1266 | 1323 | ||
1267 | #define sk_X509_REVOKED_new(st) SKM_sk_new(X509_REVOKED, (st)) | 1324 | #define sk_X509_REVOKED_new(st) SKM_sk_new(X509_REVOKED, (st)) |
1268 | #define sk_X509_REVOKED_new_null() SKM_sk_new_null(X509_REVOKED) | 1325 | #define sk_X509_REVOKED_new_null() SKM_sk_new_null(X509_REVOKED) |
@@ -1283,6 +1340,7 @@ STACK_OF(type) \ | |||
1283 | #define sk_X509_REVOKED_shift(st) SKM_sk_shift(X509_REVOKED, (st)) | 1340 | #define sk_X509_REVOKED_shift(st) SKM_sk_shift(X509_REVOKED, (st)) |
1284 | #define sk_X509_REVOKED_pop(st) SKM_sk_pop(X509_REVOKED, (st)) | 1341 | #define sk_X509_REVOKED_pop(st) SKM_sk_pop(X509_REVOKED, (st)) |
1285 | #define sk_X509_REVOKED_sort(st) SKM_sk_sort(X509_REVOKED, (st)) | 1342 | #define sk_X509_REVOKED_sort(st) SKM_sk_sort(X509_REVOKED, (st)) |
1343 | #define sk_X509_REVOKED_is_sorted(st) SKM_sk_is_sorted(X509_REVOKED, (st)) | ||
1286 | 1344 | ||
1287 | #define sk_X509_TRUST_new(st) SKM_sk_new(X509_TRUST, (st)) | 1345 | #define sk_X509_TRUST_new(st) SKM_sk_new(X509_TRUST, (st)) |
1288 | #define sk_X509_TRUST_new_null() SKM_sk_new_null(X509_TRUST) | 1346 | #define sk_X509_TRUST_new_null() SKM_sk_new_null(X509_TRUST) |
@@ -1303,6 +1361,7 @@ STACK_OF(type) \ | |||
1303 | #define sk_X509_TRUST_shift(st) SKM_sk_shift(X509_TRUST, (st)) | 1361 | #define sk_X509_TRUST_shift(st) SKM_sk_shift(X509_TRUST, (st)) |
1304 | #define sk_X509_TRUST_pop(st) SKM_sk_pop(X509_TRUST, (st)) | 1362 | #define sk_X509_TRUST_pop(st) SKM_sk_pop(X509_TRUST, (st)) |
1305 | #define sk_X509_TRUST_sort(st) SKM_sk_sort(X509_TRUST, (st)) | 1363 | #define sk_X509_TRUST_sort(st) SKM_sk_sort(X509_TRUST, (st)) |
1364 | #define sk_X509_TRUST_is_sorted(st) SKM_sk_is_sorted(X509_TRUST, (st)) | ||
1306 | 1365 | ||
1307 | #define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ | 1366 | #define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ |
1308 | SKM_ASN1_SET_OF_d2i(ACCESS_DESCRIPTION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) | 1367 | SKM_ASN1_SET_OF_d2i(ACCESS_DESCRIPTION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) |
diff --git a/src/lib/libcrypto/stack/stack.c b/src/lib/libcrypto/stack/stack.c index 2496f28a8c..c7173eb6ab 100644 --- a/src/lib/libcrypto/stack/stack.c +++ b/src/lib/libcrypto/stack/stack.c | |||
@@ -191,8 +191,7 @@ char *sk_delete(STACK *st, int loc) | |||
191 | char *ret; | 191 | char *ret; |
192 | int i,j; | 192 | int i,j; |
193 | 193 | ||
194 | if ((st == NULL) || (st->num == 0) || (loc < 0) | 194 | if(!st || (loc < 0) || (loc >= st->num)) return NULL; |
195 | || (loc >= st->num)) return(NULL); | ||
196 | 195 | ||
197 | ret=st->data[loc]; | 196 | ret=st->data[loc]; |
198 | if (loc != st->num-1) | 197 | if (loc != st->num-1) |
@@ -306,13 +305,13 @@ int sk_num(const STACK *st) | |||
306 | 305 | ||
307 | char *sk_value(const STACK *st, int i) | 306 | char *sk_value(const STACK *st, int i) |
308 | { | 307 | { |
309 | if(st == NULL) return NULL; | 308 | if(!st || (i < 0) || (i >= st->num)) return NULL; |
310 | return st->data[i]; | 309 | return st->data[i]; |
311 | } | 310 | } |
312 | 311 | ||
313 | char *sk_set(STACK *st, int i, char *value) | 312 | char *sk_set(STACK *st, int i, char *value) |
314 | { | 313 | { |
315 | if(st == NULL) return NULL; | 314 | if(!st || (i < 0) || (i >= st->num)) return NULL; |
316 | return (st->data[i] = value); | 315 | return (st->data[i] = value); |
317 | } | 316 | } |
318 | 317 | ||
@@ -332,3 +331,10 @@ void sk_sort(STACK *st) | |||
332 | st->sorted=1; | 331 | st->sorted=1; |
333 | } | 332 | } |
334 | } | 333 | } |
334 | |||
335 | int sk_is_sorted(const STACK *st) | ||
336 | { | ||
337 | if (!st) | ||
338 | return 1; | ||
339 | return st->sorted; | ||
340 | } | ||
diff --git a/src/lib/libcrypto/stack/stack.h b/src/lib/libcrypto/stack/stack.h index 8b436ca4b9..7570b85fe8 100644 --- a/src/lib/libcrypto/stack/stack.h +++ b/src/lib/libcrypto/stack/stack.h | |||
@@ -99,6 +99,7 @@ int (*sk_set_cmp_func(STACK *sk, int (*c)(const char * const *, | |||
99 | (const char * const *, const char * const *); | 99 | (const char * const *, const char * const *); |
100 | STACK *sk_dup(STACK *st); | 100 | STACK *sk_dup(STACK *st); |
101 | void sk_sort(STACK *st); | 101 | void sk_sort(STACK *st); |
102 | int sk_is_sorted(const STACK *st); | ||
102 | 103 | ||
103 | #ifdef __cplusplus | 104 | #ifdef __cplusplus |
104 | } | 105 | } |
diff --git a/src/lib/libcrypto/util/cygwin.sh b/src/lib/libcrypto/util/cygwin.sh index 930f766b4f..7f791d47f4 100644 --- a/src/lib/libcrypto/util/cygwin.sh +++ b/src/lib/libcrypto/util/cygwin.sh | |||
@@ -21,11 +21,11 @@ function cleanup() | |||
21 | 21 | ||
22 | function get_openssl_version() | 22 | function get_openssl_version() |
23 | { | 23 | { |
24 | eval `grep '^VERSION=' Makefile.ssl` | 24 | eval `grep '^VERSION=' Makefile` |
25 | if [ -z "${VERSION}" ] | 25 | if [ -z "${VERSION}" ] |
26 | then | 26 | then |
27 | echo "Error: Couldn't retrieve OpenSSL version from Makefile.ssl." | 27 | echo "Error: Couldn't retrieve OpenSSL version from Makefile." |
28 | echo " Check value of variable VERSION in Makefile.ssl." | 28 | echo " Check value of variable VERSION in Makefile." |
29 | exit 1 | 29 | exit 1 |
30 | fi | 30 | fi |
31 | } | 31 | } |
@@ -39,7 +39,7 @@ function base_install() | |||
39 | 39 | ||
40 | function doc_install() | 40 | function doc_install() |
41 | { | 41 | { |
42 | DOC_DIR=${INSTALL_PREFIX}/usr/doc/openssl | 42 | DOC_DIR=${INSTALL_PREFIX}/usr/share/doc/openssl |
43 | 43 | ||
44 | mkdir -p ${DOC_DIR} | 44 | mkdir -p ${DOC_DIR} |
45 | cp CHANGES CHANGES.SSLeay INSTALL LICENSE NEWS README ${DOC_DIR} | 45 | cp CHANGES CHANGES.SSLeay INSTALL LICENSE NEWS README ${DOC_DIR} |
@@ -49,7 +49,7 @@ function doc_install() | |||
49 | 49 | ||
50 | function create_cygwin_readme() | 50 | function create_cygwin_readme() |
51 | { | 51 | { |
52 | README_DIR=${INSTALL_PREFIX}/usr/doc/Cygwin | 52 | README_DIR=${INSTALL_PREFIX}/usr/share/doc/Cygwin |
53 | README_FILE=${README_DIR}/openssl-${VERSION}.README | 53 | README_FILE=${README_DIR}/openssl-${VERSION}.README |
54 | 54 | ||
55 | mkdir -p ${README_DIR} | 55 | mkdir -p ${README_DIR} |
@@ -112,8 +112,8 @@ cd ${INSTALL_PREFIX} | |||
112 | strip usr/bin/*.exe usr/bin/*.dll | 112 | strip usr/bin/*.exe usr/bin/*.dll |
113 | 113 | ||
114 | # Runtime package | 114 | # Runtime package |
115 | find etc usr/bin usr/doc usr/ssl/certs usr/ssl/man/man[157] usr/ssl/misc \ | 115 | find etc usr/bin usr/share/doc usr/ssl/certs usr/ssl/man/man[157] \ |
116 | usr/ssl/openssl.cnf usr/ssl/private -empty -o \! -type d | | 116 | usr/ssl/misc usr/ssl/openssl.cnf usr/ssl/private -empty -o \! -type d | |
117 | tar cjfT openssl-${VERSION}-${SUBVERSION}.tar.bz2 - | 117 | tar cjfT openssl-${VERSION}-${SUBVERSION}.tar.bz2 - |
118 | # Development package | 118 | # Development package |
119 | find usr/include usr/lib usr/ssl/man/man3 -empty -o \! -type d | | 119 | find usr/include usr/lib usr/ssl/man/man3 -empty -o \! -type d | |
diff --git a/src/lib/libcrypto/util/domd b/src/lib/libcrypto/util/domd index 49310bbdd1..5610521f0b 100644 --- a/src/lib/libcrypto/util/domd +++ b/src/lib/libcrypto/util/domd | |||
@@ -11,7 +11,7 @@ if [ "$1" = "-MD" ]; then | |||
11 | fi | 11 | fi |
12 | if [ "$MAKEDEPEND" = "" ]; then MAKEDEPEND=makedepend; fi | 12 | if [ "$MAKEDEPEND" = "" ]; then MAKEDEPEND=makedepend; fi |
13 | 13 | ||
14 | cp Makefile.ssl Makefile.save | 14 | cp Makefile Makefile.save |
15 | # fake the presence of Kerberos | 15 | # fake the presence of Kerberos |
16 | touch $TOP/krb5.h | 16 | touch $TOP/krb5.h |
17 | if [ "$MAKEDEPEND" = "gcc" ]; then | 17 | if [ "$MAKEDEPEND" = "gcc" ]; then |
@@ -20,15 +20,15 @@ if [ "$MAKEDEPEND" = "gcc" ]; then | |||
20 | if [ "$1" != "--" ]; then args="$args $1"; fi | 20 | if [ "$1" != "--" ]; then args="$args $1"; fi |
21 | shift | 21 | shift |
22 | done | 22 | done |
23 | sed -e '/^# DO NOT DELETE.*/,$d' < Makefile.ssl > Makefile.tmp | 23 | sed -e '/^# DO NOT DELETE.*/,$d' < Makefile > Makefile.tmp |
24 | echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' >> Makefile.tmp | 24 | echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' >> Makefile.tmp |
25 | gcc -D OPENSSL_DOING_MAKEDEPEND -M $args >> Makefile.tmp | 25 | gcc -D OPENSSL_DOING_MAKEDEPEND -M $args >> Makefile.tmp |
26 | ${PERL} $TOP/util/clean-depend.pl < Makefile.tmp > Makefile.new | 26 | ${PERL} $TOP/util/clean-depend.pl < Makefile.tmp > Makefile.new |
27 | rm -f Makefile.tmp | 27 | rm -f Makefile.tmp |
28 | else | 28 | else |
29 | ${MAKEDEPEND} -D OPENSSL_DOING_MAKEDEPEND -f Makefile.ssl $@ | 29 | ${MAKEDEPEND} -D OPENSSL_DOING_MAKEDEPEND -f Makefile $@ |
30 | ${PERL} $TOP/util/clean-depend.pl < Makefile.ssl > Makefile.new | 30 | ${PERL} $TOP/util/clean-depend.pl < Makefile > Makefile.new |
31 | fi | 31 | fi |
32 | mv Makefile.new Makefile.ssl | 32 | mv Makefile.new Makefile |
33 | # unfake the presence of Kerberos | 33 | # unfake the presence of Kerberos |
34 | rm $TOP/krb5.h | 34 | rm $TOP/krb5.h |
diff --git a/src/lib/libcrypto/util/libeay.num b/src/lib/libcrypto/util/libeay.num index 203c7713e7..56fb7446e0 100644 --- a/src/lib/libcrypto/util/libeay.num +++ b/src/lib/libcrypto/util/libeay.num | |||
@@ -284,20 +284,20 @@ EVP_add_alias 291 NOEXIST::FUNCTION: | |||
284 | EVP_add_cipher 292 EXIST::FUNCTION: | 284 | EVP_add_cipher 292 EXIST::FUNCTION: |
285 | EVP_add_digest 293 EXIST::FUNCTION: | 285 | EVP_add_digest 293 EXIST::FUNCTION: |
286 | EVP_bf_cbc 294 EXIST::FUNCTION:BF | 286 | EVP_bf_cbc 294 EXIST::FUNCTION:BF |
287 | EVP_bf_cfb 295 EXIST::FUNCTION:BF | 287 | EVP_bf_cfb64 295 EXIST::FUNCTION:BF |
288 | EVP_bf_ecb 296 EXIST::FUNCTION:BF | 288 | EVP_bf_ecb 296 EXIST::FUNCTION:BF |
289 | EVP_bf_ofb 297 EXIST::FUNCTION:BF | 289 | EVP_bf_ofb 297 EXIST::FUNCTION:BF |
290 | EVP_cleanup 298 EXIST::FUNCTION: | 290 | EVP_cleanup 298 EXIST::FUNCTION: |
291 | EVP_des_cbc 299 EXIST::FUNCTION:DES | 291 | EVP_des_cbc 299 EXIST::FUNCTION:DES |
292 | EVP_des_cfb 300 EXIST::FUNCTION:DES | 292 | EVP_des_cfb64 300 EXIST::FUNCTION:DES |
293 | EVP_des_ecb 301 EXIST::FUNCTION:DES | 293 | EVP_des_ecb 301 EXIST::FUNCTION:DES |
294 | EVP_des_ede 302 EXIST::FUNCTION:DES | 294 | EVP_des_ede 302 EXIST::FUNCTION:DES |
295 | EVP_des_ede3 303 EXIST::FUNCTION:DES | 295 | EVP_des_ede3 303 EXIST::FUNCTION:DES |
296 | EVP_des_ede3_cbc 304 EXIST::FUNCTION:DES | 296 | EVP_des_ede3_cbc 304 EXIST::FUNCTION:DES |
297 | EVP_des_ede3_cfb 305 EXIST::FUNCTION:DES | 297 | EVP_des_ede3_cfb64 305 EXIST::FUNCTION:DES |
298 | EVP_des_ede3_ofb 306 EXIST::FUNCTION:DES | 298 | EVP_des_ede3_ofb 306 EXIST::FUNCTION:DES |
299 | EVP_des_ede_cbc 307 EXIST::FUNCTION:DES | 299 | EVP_des_ede_cbc 307 EXIST::FUNCTION:DES |
300 | EVP_des_ede_cfb 308 EXIST::FUNCTION:DES | 300 | EVP_des_ede_cfb64 308 EXIST::FUNCTION:DES |
301 | EVP_des_ede_ofb 309 EXIST::FUNCTION:DES | 301 | EVP_des_ede_ofb 309 EXIST::FUNCTION:DES |
302 | EVP_des_ofb 310 EXIST::FUNCTION:DES | 302 | EVP_des_ofb 310 EXIST::FUNCTION:DES |
303 | EVP_desx_cbc 311 EXIST::FUNCTION:DES | 303 | EVP_desx_cbc 311 EXIST::FUNCTION:DES |
@@ -308,14 +308,14 @@ EVP_get_cipherbyname 315 EXIST::FUNCTION: | |||
308 | EVP_get_digestbyname 316 EXIST::FUNCTION: | 308 | EVP_get_digestbyname 316 EXIST::FUNCTION: |
309 | EVP_get_pw_prompt 317 EXIST::FUNCTION: | 309 | EVP_get_pw_prompt 317 EXIST::FUNCTION: |
310 | EVP_idea_cbc 318 EXIST::FUNCTION:IDEA | 310 | EVP_idea_cbc 318 EXIST::FUNCTION:IDEA |
311 | EVP_idea_cfb 319 EXIST::FUNCTION:IDEA | 311 | EVP_idea_cfb64 319 EXIST::FUNCTION:IDEA |
312 | EVP_idea_ecb 320 EXIST::FUNCTION:IDEA | 312 | EVP_idea_ecb 320 EXIST::FUNCTION:IDEA |
313 | EVP_idea_ofb 321 EXIST::FUNCTION:IDEA | 313 | EVP_idea_ofb 321 EXIST::FUNCTION:IDEA |
314 | EVP_md2 322 EXIST::FUNCTION:MD2 | 314 | EVP_md2 322 EXIST::FUNCTION:MD2 |
315 | EVP_md5 323 EXIST::FUNCTION:MD5 | 315 | EVP_md5 323 EXIST::FUNCTION:MD5 |
316 | EVP_md_null 324 EXIST::FUNCTION: | 316 | EVP_md_null 324 EXIST::FUNCTION: |
317 | EVP_rc2_cbc 325 EXIST::FUNCTION:RC2 | 317 | EVP_rc2_cbc 325 EXIST::FUNCTION:RC2 |
318 | EVP_rc2_cfb 326 EXIST::FUNCTION:RC2 | 318 | EVP_rc2_cfb64 326 EXIST::FUNCTION:RC2 |
319 | EVP_rc2_ecb 327 EXIST::FUNCTION:RC2 | 319 | EVP_rc2_ecb 327 EXIST::FUNCTION:RC2 |
320 | EVP_rc2_ofb 328 EXIST::FUNCTION:RC2 | 320 | EVP_rc2_ofb 328 EXIST::FUNCTION:RC2 |
321 | EVP_rc4 329 EXIST::FUNCTION:RC4 | 321 | EVP_rc4 329 EXIST::FUNCTION:RC4 |
@@ -962,7 +962,7 @@ i2t_ASN1_OBJECT 979 EXIST::FUNCTION: | |||
962 | BN_BLINDING_new 980 EXIST::FUNCTION: | 962 | BN_BLINDING_new 980 EXIST::FUNCTION: |
963 | BN_BLINDING_free 981 EXIST::FUNCTION: | 963 | BN_BLINDING_free 981 EXIST::FUNCTION: |
964 | EVP_cast5_cbc 983 EXIST::FUNCTION:CAST | 964 | EVP_cast5_cbc 983 EXIST::FUNCTION:CAST |
965 | EVP_cast5_cfb 984 EXIST::FUNCTION:CAST | 965 | EVP_cast5_cfb64 984 EXIST::FUNCTION:CAST |
966 | EVP_cast5_ecb 985 EXIST::FUNCTION:CAST | 966 | EVP_cast5_ecb 985 EXIST::FUNCTION:CAST |
967 | EVP_cast5_ofb 986 EXIST::FUNCTION:CAST | 967 | EVP_cast5_ofb 986 EXIST::FUNCTION:CAST |
968 | BF_decrypt 987 EXIST::FUNCTION:BF | 968 | BF_decrypt 987 EXIST::FUNCTION:BF |
@@ -1057,7 +1057,7 @@ EVP_CIPHER_param_to_asn1 1084 EXIST::FUNCTION: | |||
1057 | EVP_CIPHER_get_asn1_iv 1085 EXIST::FUNCTION: | 1057 | EVP_CIPHER_get_asn1_iv 1085 EXIST::FUNCTION: |
1058 | EVP_CIPHER_set_asn1_iv 1086 EXIST::FUNCTION: | 1058 | EVP_CIPHER_set_asn1_iv 1086 EXIST::FUNCTION: |
1059 | EVP_rc5_32_12_16_cbc 1087 EXIST::FUNCTION:RC5 | 1059 | EVP_rc5_32_12_16_cbc 1087 EXIST::FUNCTION:RC5 |
1060 | EVP_rc5_32_12_16_cfb 1088 EXIST::FUNCTION:RC5 | 1060 | EVP_rc5_32_12_16_cfb64 1088 EXIST::FUNCTION:RC5 |
1061 | EVP_rc5_32_12_16_ecb 1089 EXIST::FUNCTION:RC5 | 1061 | EVP_rc5_32_12_16_ecb 1089 EXIST::FUNCTION:RC5 |
1062 | EVP_rc5_32_12_16_ofb 1090 EXIST::FUNCTION:RC5 | 1062 | EVP_rc5_32_12_16_ofb 1090 EXIST::FUNCTION:RC5 |
1063 | asn1_add_error 1091 EXIST::FUNCTION: | 1063 | asn1_add_error 1091 EXIST::FUNCTION: |
@@ -2776,10 +2776,10 @@ ENGINE_load_4758cca 3218 EXIST::FUNCTION:ENGINE | |||
2776 | _ossl_096_des_random_seed 3219 EXIST::FUNCTION:DES | 2776 | _ossl_096_des_random_seed 3219 EXIST::FUNCTION:DES |
2777 | EVP_aes_256_ofb 3220 EXIST::FUNCTION:AES | 2777 | EVP_aes_256_ofb 3220 EXIST::FUNCTION:AES |
2778 | EVP_aes_192_ofb 3221 EXIST::FUNCTION:AES | 2778 | EVP_aes_192_ofb 3221 EXIST::FUNCTION:AES |
2779 | EVP_aes_128_cfb 3222 EXIST::FUNCTION:AES | 2779 | EVP_aes_128_cfb128 3222 EXIST::FUNCTION:AES |
2780 | EVP_aes_256_cfb 3223 EXIST::FUNCTION:AES | 2780 | EVP_aes_256_cfb128 3223 EXIST::FUNCTION:AES |
2781 | EVP_aes_128_ofb 3224 EXIST::FUNCTION:AES | 2781 | EVP_aes_128_ofb 3224 EXIST::FUNCTION:AES |
2782 | EVP_aes_192_cfb 3225 EXIST::FUNCTION:AES | 2782 | EVP_aes_192_cfb128 3225 EXIST::FUNCTION:AES |
2783 | CONF_modules_free 3226 EXIST::FUNCTION: | 2783 | CONF_modules_free 3226 EXIST::FUNCTION: |
2784 | NCONF_default 3227 EXIST::FUNCTION: | 2784 | NCONF_default 3227 EXIST::FUNCTION: |
2785 | OPENSSL_no_config 3228 EXIST::FUNCTION: | 2785 | OPENSSL_no_config 3228 EXIST::FUNCTION: |
@@ -2803,3 +2803,67 @@ OpenSSLDie 3244 EXIST::FUNCTION: | |||
2803 | OPENSSL_cleanse 3245 EXIST::FUNCTION: | 2803 | OPENSSL_cleanse 3245 EXIST::FUNCTION: |
2804 | ENGINE_setup_bsd_cryptodev 3246 EXIST:__FreeBSD__:FUNCTION:ENGINE | 2804 | ENGINE_setup_bsd_cryptodev 3246 EXIST:__FreeBSD__:FUNCTION:ENGINE |
2805 | ERR_release_err_state_table 3247 EXIST::FUNCTION:LHASH | 2805 | ERR_release_err_state_table 3247 EXIST::FUNCTION:LHASH |
2806 | EVP_aes_128_cfb8 3248 EXIST::FUNCTION:AES | ||
2807 | FIPS_corrupt_rsa 3249 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2808 | FIPS_selftest_des 3250 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2809 | EVP_aes_128_cfb1 3251 EXIST::FUNCTION:AES | ||
2810 | EVP_aes_192_cfb8 3252 EXIST::FUNCTION:AES | ||
2811 | FIPS_mode_set 3253 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2812 | FIPS_selftest_dsa 3254 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2813 | EVP_aes_256_cfb8 3255 EXIST::FUNCTION:AES | ||
2814 | FIPS_allow_md5 3256 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2815 | DES_ede3_cfb_encrypt 3257 EXIST::FUNCTION:DES | ||
2816 | EVP_des_ede3_cfb8 3258 EXIST::FUNCTION:DES | ||
2817 | FIPS_rand_seeded 3259 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2818 | AES_cfbr_encrypt_block 3260 EXIST::FUNCTION:AES | ||
2819 | AES_cfb8_encrypt 3261 EXIST::FUNCTION:AES | ||
2820 | FIPS_rand_seed 3262 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2821 | FIPS_corrupt_des 3263 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2822 | EVP_aes_192_cfb1 3264 EXIST::FUNCTION:AES | ||
2823 | FIPS_selftest_aes 3265 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2824 | FIPS_set_prng_key 3266 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2825 | EVP_des_cfb8 3267 EXIST::FUNCTION:DES | ||
2826 | FIPS_corrupt_dsa 3268 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2827 | FIPS_test_mode 3269 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2828 | FIPS_rand_method 3270 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2829 | EVP_aes_256_cfb1 3271 EXIST::FUNCTION:AES | ||
2830 | ERR_load_FIPS_strings 3272 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2831 | FIPS_corrupt_aes 3273 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2832 | FIPS_selftest_sha1 3274 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2833 | FIPS_selftest_rsa 3275 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2834 | FIPS_corrupt_sha1 3276 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2835 | EVP_des_cfb1 3277 EXIST::FUNCTION:DES | ||
2836 | FIPS_dsa_check 3278 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2837 | AES_cfb1_encrypt 3279 EXIST::FUNCTION:AES | ||
2838 | EVP_des_ede3_cfb1 3280 EXIST::FUNCTION:DES | ||
2839 | FIPS_rand_check 3281 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2840 | FIPS_md5_allowed 3282 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2841 | FIPS_mode 3283 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2842 | FIPS_selftest_failed 3284 EXIST:OPENSSL_FIPS:FUNCTION: | ||
2843 | sk_is_sorted 3285 EXIST::FUNCTION: | ||
2844 | X509_check_ca 3286 EXIST::FUNCTION: | ||
2845 | private_idea_set_encrypt_key 3287 EXIST:OPENSSL_FIPS:FUNCTION:IDEA | ||
2846 | HMAC_CTX_set_flags 3288 EXIST::FUNCTION:HMAC | ||
2847 | private_SHA_Init 3289 EXIST:OPENSSL_FIPS:FUNCTION:SHA,SHA0 | ||
2848 | private_CAST_set_key 3290 EXIST:OPENSSL_FIPS:FUNCTION:CAST | ||
2849 | private_RIPEMD160_Init 3291 EXIST:OPENSSL_FIPS:FUNCTION:RIPEMD | ||
2850 | private_RC5_32_set_key 3292 EXIST:OPENSSL_FIPS:FUNCTION:RC5 | ||
2851 | private_MD5_Init 3293 EXIST:OPENSSL_FIPS:FUNCTION:MD5 | ||
2852 | private_RC4_set_key 3294 EXIST:OPENSSL_FIPS:FUNCTION:RC4 | ||
2853 | private_MDC2_Init 3295 EXIST:OPENSSL_FIPS:FUNCTION:MDC2 | ||
2854 | private_RC2_set_key 3296 EXIST:OPENSSL_FIPS:FUNCTION:RC2 | ||
2855 | private_MD4_Init 3297 EXIST:OPENSSL_FIPS:FUNCTION:MD4 | ||
2856 | private_BF_set_key 3298 EXIST:OPENSSL_FIPS:FUNCTION:BF | ||
2857 | private_MD2_Init 3299 EXIST:OPENSSL_FIPS:FUNCTION:MD2 | ||
2858 | d2i_PROXY_CERT_INFO_EXTENSION 3300 EXIST::FUNCTION: | ||
2859 | PROXY_POLICY_it 3301 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: | ||
2860 | PROXY_POLICY_it 3301 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: | ||
2861 | i2d_PROXY_POLICY 3302 EXIST::FUNCTION: | ||
2862 | i2d_PROXY_CERT_INFO_EXTENSION 3303 EXIST::FUNCTION: | ||
2863 | d2i_PROXY_POLICY 3304 EXIST::FUNCTION: | ||
2864 | PROXY_CERT_INFO_EXTENSION_new 3305 EXIST::FUNCTION: | ||
2865 | PROXY_CERT_INFO_EXTENSION_free 3306 EXIST::FUNCTION: | ||
2866 | PROXY_CERT_INFO_EXTENSION_it 3307 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: | ||
2867 | PROXY_CERT_INFO_EXTENSION_it 3307 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: | ||
2868 | PROXY_POLICY_free 3308 EXIST::FUNCTION: | ||
2869 | PROXY_POLICY_new 3309 EXIST::FUNCTION: | ||
diff --git a/src/lib/libcrypto/util/mk1mf.pl b/src/lib/libcrypto/util/mk1mf.pl index b4bc0457e5..957264c6b5 100644 --- a/src/lib/libcrypto/util/mk1mf.pl +++ b/src/lib/libcrypto/util/mk1mf.pl | |||
@@ -10,7 +10,7 @@ $OPTIONS=""; | |||
10 | $ssl_version=""; | 10 | $ssl_version=""; |
11 | $banner="\t\@echo Building OpenSSL"; | 11 | $banner="\t\@echo Building OpenSSL"; |
12 | 12 | ||
13 | open(IN,"<Makefile.ssl") || die "unable to open Makefile.ssl!\n"; | 13 | open(IN,"<Makefile") || die "unable to open Makefile!\n"; |
14 | while(<IN>) { | 14 | while(<IN>) { |
15 | $ssl_version=$1 if (/^VERSION=(.*)$/); | 15 | $ssl_version=$1 if (/^VERSION=(.*)$/); |
16 | $OPTIONS=$1 if (/^OPTIONS=(.*)$/); | 16 | $OPTIONS=$1 if (/^OPTIONS=(.*)$/); |
@@ -18,7 +18,7 @@ while(<IN>) { | |||
18 | } | 18 | } |
19 | close(IN); | 19 | close(IN); |
20 | 20 | ||
21 | die "Makefile.ssl is not the toplevel Makefile!\n" if $ssl_version eq ""; | 21 | die "Makefile is not the toplevel Makefile!\n" if $ssl_version eq ""; |
22 | 22 | ||
23 | $infile="MINFO"; | 23 | $infile="MINFO"; |
24 | 24 | ||
@@ -222,7 +222,7 @@ $cflags.=" -DOPENSSL_NO_SHA" if $no_sha; | |||
222 | $cflags.=" -DOPENSSL_NO_SHA1" if $no_sha1; | 222 | $cflags.=" -DOPENSSL_NO_SHA1" if $no_sha1; |
223 | $cflags.=" -DOPENSSL_NO_RIPEMD" if $no_ripemd; | 223 | $cflags.=" -DOPENSSL_NO_RIPEMD" if $no_ripemd; |
224 | $cflags.=" -DOPENSSL_NO_MDC2" if $no_mdc2; | 224 | $cflags.=" -DOPENSSL_NO_MDC2" if $no_mdc2; |
225 | $cflags.=" -DOPENSSL_NO_BF" if $no_bf; | 225 | $cflags.=" -DOPENSSL_NO_BF" if $no_bf; |
226 | $cflags.=" -DOPENSSL_NO_CAST" if $no_cast; | 226 | $cflags.=" -DOPENSSL_NO_CAST" if $no_cast; |
227 | $cflags.=" -DOPENSSL_NO_DES" if $no_des; | 227 | $cflags.=" -DOPENSSL_NO_DES" if $no_des; |
228 | $cflags.=" -DOPENSSL_NO_RSA" if $no_rsa; | 228 | $cflags.=" -DOPENSSL_NO_RSA" if $no_rsa; |
@@ -236,6 +236,7 @@ $cflags.=" -DOPENSSL_NO_KRB5" if $no_krb5; | |||
236 | $cflags.=" -DOPENSSL_NO_EC" if $no_ec; | 236 | $cflags.=" -DOPENSSL_NO_EC" if $no_ec; |
237 | $cflags.=" -DOPENSSL_NO_ENGINE" if $no_engine; | 237 | $cflags.=" -DOPENSSL_NO_ENGINE" if $no_engine; |
238 | $cflags.=" -DOPENSSL_NO_HW" if $no_hw; | 238 | $cflags.=" -DOPENSSL_NO_HW" if $no_hw; |
239 | $cflags.=" -DOPENSSL_FIPS" if $fips; | ||
239 | #$cflags.=" -DRSAref" if $rsaref ne ""; | 240 | #$cflags.=" -DRSAref" if $rsaref ne ""; |
240 | 241 | ||
241 | ## if ($unix) | 242 | ## if ($unix) |
@@ -631,15 +632,21 @@ foreach (split(/\s+/,$test)) | |||
631 | $rules.= &do_lib_rule("\$(SSLOBJ)","\$(O_SSL)",$ssl,$shlib,"\$(SO_SSL)"); | 632 | $rules.= &do_lib_rule("\$(SSLOBJ)","\$(O_SSL)",$ssl,$shlib,"\$(SO_SSL)"); |
632 | $rules.= &do_lib_rule("\$(CRYPTOOBJ)","\$(O_CRYPTO)",$crypto,$shlib,"\$(SO_CRYPTO)"); | 633 | $rules.= &do_lib_rule("\$(CRYPTOOBJ)","\$(O_CRYPTO)",$crypto,$shlib,"\$(SO_CRYPTO)"); |
633 | 634 | ||
634 | $rules.=&do_link_rule("\$(BIN_D)$o\$(E_EXE)$exep","\$(E_OBJ)","\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)"); | 635 | if ($fips) |
635 | 636 | { | |
637 | $rules.=&do_link_rule("\$(BIN_D)$o\$(E_EXE)$exep","\$(E_OBJ)","\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)","\$(BIN_D)$o.sha1","\$(BIN_D)$o\$(E_EXE)$exep"); | ||
638 | } | ||
639 | else | ||
640 | { | ||
641 | $rules.=&do_link_rule("\$(BIN_D)$o\$(E_EXE)$exep","\$(E_OBJ)","\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)"); | ||
642 | } | ||
636 | print $defs; | 643 | print $defs; |
637 | 644 | ||
638 | if ($platform eq "linux-elf") { | 645 | if ($platform eq "linux-elf") { |
639 | print <<"EOF"; | 646 | print <<"EOF"; |
640 | # Generate perlasm output files | 647 | # Generate perlasm output files |
641 | %.cpp: | 648 | %.cpp: |
642 | (cd \$(\@D)/..; PERL=perl make -f Makefile.ssl asm/\$(\@F)) | 649 | (cd \$(\@D)/..; PERL=perl make -f Makefile asm/\$(\@F)) |
643 | EOF | 650 | EOF |
644 | } | 651 | } |
645 | print "###################################################################\n"; | 652 | print "###################################################################\n"; |
@@ -921,6 +928,7 @@ sub read_options | |||
921 | $no_aes=1; } | 928 | $no_aes=1; } |
922 | 929 | ||
923 | elsif (/^rsaref$/) { } | 930 | elsif (/^rsaref$/) { } |
931 | elsif (/^fips$/) { $fips=1; } | ||
924 | elsif (/^gcc$/) { $gcc=1; } | 932 | elsif (/^gcc$/) { $gcc=1; } |
925 | elsif (/^debug$/) { $debug=1; } | 933 | elsif (/^debug$/) { $debug=1; } |
926 | elsif (/^profile$/) { $profile=1; } | 934 | elsif (/^profile$/) { $profile=1; } |
diff --git a/src/lib/libcrypto/util/mkdef.pl b/src/lib/libcrypto/util/mkdef.pl index 01a1bfda19..9918c3d549 100644 --- a/src/lib/libcrypto/util/mkdef.pl +++ b/src/lib/libcrypto/util/mkdef.pl | |||
@@ -79,7 +79,7 @@ my $OS2=0; | |||
79 | my $safe_stack_def = 0; | 79 | my $safe_stack_def = 0; |
80 | 80 | ||
81 | my @known_platforms = ( "__FreeBSD__", "PERL5", "NeXT", | 81 | my @known_platforms = ( "__FreeBSD__", "PERL5", "NeXT", |
82 | "EXPORT_VAR_AS_FUNCTION" ); | 82 | "EXPORT_VAR_AS_FUNCTION", "OPENSSL_FIPS" ); |
83 | my @known_ossl_platforms = ( "VMS", "WIN16", "WIN32", "WINNT", "OS2" ); | 83 | my @known_ossl_platforms = ( "VMS", "WIN16", "WIN32", "WINNT", "OS2" ); |
84 | my @known_algorithms = ( "RC2", "RC4", "RC5", "IDEA", "DES", "BF", | 84 | my @known_algorithms = ( "RC2", "RC4", "RC5", "IDEA", "DES", "BF", |
85 | "CAST", "MD2", "MD4", "MD5", "SHA", "SHA0", "SHA1", | 85 | "CAST", "MD2", "MD4", "MD5", "SHA", "SHA0", "SHA1", |
@@ -94,7 +94,7 @@ my @known_algorithms = ( "RC2", "RC4", "RC5", "IDEA", "DES", "BF", | |||
94 | "FP_API", "STDIO", "SOCK", "KRB5", "ENGINE", "HW" ); | 94 | "FP_API", "STDIO", "SOCK", "KRB5", "ENGINE", "HW" ); |
95 | 95 | ||
96 | my $options=""; | 96 | my $options=""; |
97 | open(IN,"<Makefile.ssl") || die "unable to open Makefile.ssl!\n"; | 97 | open(IN,"<Makefile") || die "unable to open Makefile!\n"; |
98 | while(<IN>) { | 98 | while(<IN>) { |
99 | $options=$1 if (/^OPTIONS=(.*)$/); | 99 | $options=$1 if (/^OPTIONS=(.*)$/); |
100 | } | 100 | } |
@@ -109,6 +109,7 @@ my $no_md2; my $no_md4; my $no_md5; my $no_sha; my $no_ripemd; my $no_mdc2; | |||
109 | my $no_rsa; my $no_dsa; my $no_dh; my $no_hmac=0; my $no_aes; my $no_krb5; | 109 | my $no_rsa; my $no_dsa; my $no_dh; my $no_hmac=0; my $no_aes; my $no_krb5; |
110 | my $no_ec; my $no_engine; my $no_hw; | 110 | my $no_ec; my $no_engine; my $no_hw; |
111 | my $no_fp_api; | 111 | my $no_fp_api; |
112 | my $fips; | ||
112 | 113 | ||
113 | foreach (@ARGV, split(/ /, $options)) | 114 | foreach (@ARGV, split(/ /, $options)) |
114 | { | 115 | { |
@@ -129,6 +130,7 @@ foreach (@ARGV, split(/ /, $options)) | |||
129 | } | 130 | } |
130 | $VMS=1 if $_ eq "VMS"; | 131 | $VMS=1 if $_ eq "VMS"; |
131 | $OS2=1 if $_ eq "OS2"; | 132 | $OS2=1 if $_ eq "OS2"; |
133 | $fips=1 if $_ eq "fips"; | ||
132 | 134 | ||
133 | $do_ssl=1 if $_ eq "ssleay"; | 135 | $do_ssl=1 if $_ eq "ssleay"; |
134 | if ($_ eq "ssl") { | 136 | if ($_ eq "ssl") { |
@@ -265,6 +267,7 @@ $crypto.=" crypto/ocsp/ocsp.h"; | |||
265 | $crypto.=" crypto/ui/ui.h crypto/ui/ui_compat.h"; | 267 | $crypto.=" crypto/ui/ui.h crypto/ui/ui_compat.h"; |
266 | $crypto.=" crypto/krb5/krb5_asn.h"; | 268 | $crypto.=" crypto/krb5/krb5_asn.h"; |
267 | $crypto.=" crypto/tmdiff.h"; | 269 | $crypto.=" crypto/tmdiff.h"; |
270 | $crypto.=" fips/fips.h fips/rand/fips_rand.h"; | ||
268 | 271 | ||
269 | my $symhacks="crypto/symhacks.h"; | 272 | my $symhacks="crypto/symhacks.h"; |
270 | 273 | ||
@@ -469,7 +472,7 @@ sub do_defs | |||
469 | push(@tag,$1); | 472 | push(@tag,$1); |
470 | $tag{$1}=-1; | 473 | $tag{$1}=-1; |
471 | } | 474 | } |
472 | } elsif (/^\#\s*ifdef\s+(.*)/) { | 475 | } elsif (/^\#\s*ifdef\s+(\S*)/) { |
473 | push(@tag,"-"); | 476 | push(@tag,"-"); |
474 | push(@tag,$1); | 477 | push(@tag,$1); |
475 | $tag{$1}=1; | 478 | $tag{$1}=1; |
@@ -794,7 +797,7 @@ sub do_defs | |||
794 | } | 797 | } |
795 | close(IN); | 798 | close(IN); |
796 | 799 | ||
797 | my $algs; | 800 | my $algs = ''; |
798 | my $plays; | 801 | my $plays; |
799 | 802 | ||
800 | print STDERR "DEBUG: postprocessing ----------\n" if $debug; | 803 | print STDERR "DEBUG: postprocessing ----------\n" if $debug; |
@@ -864,6 +867,7 @@ sub do_defs | |||
864 | 867 | ||
865 | $platform{$s} = | 868 | $platform{$s} = |
866 | &reduce_platforms((defined($platform{$s})?$platform{$s}.',':"").$p); | 869 | &reduce_platforms((defined($platform{$s})?$platform{$s}.',':"").$p); |
870 | $algorithm{$s} = '' if !defined $algorithm{$s}; | ||
867 | $algorithm{$s} .= ','.$a; | 871 | $algorithm{$s} .= ','.$a; |
868 | 872 | ||
869 | if (defined($variant{$s})) { | 873 | if (defined($variant{$s})) { |
@@ -1028,6 +1032,9 @@ sub is_valid | |||
1028 | if ($keyword eq "EXPORT_VAR_AS_FUNCTION" && ($VMSVAX || $W32 || $W16)) { | 1032 | if ($keyword eq "EXPORT_VAR_AS_FUNCTION" && ($VMSVAX || $W32 || $W16)) { |
1029 | return 1; | 1033 | return 1; |
1030 | } | 1034 | } |
1035 | if ($keyword eq "OPENSSL_FIPS" && $fips) { | ||
1036 | return 1; | ||
1037 | } | ||
1031 | return 0; | 1038 | return 0; |
1032 | } else { | 1039 | } else { |
1033 | # algorithms | 1040 | # algorithms |
@@ -1119,7 +1126,7 @@ sub print_test_file | |||
1119 | sub get_version { | 1126 | sub get_version { |
1120 | local *MF; | 1127 | local *MF; |
1121 | my $v = '?'; | 1128 | my $v = '?'; |
1122 | open MF, 'Makefile.ssl' or return $v; | 1129 | open MF, 'Makefile' or return $v; |
1123 | while (<MF>) { | 1130 | while (<MF>) { |
1124 | $v = $1, last if /^VERSION=(.*?)\s*$/; | 1131 | $v = $1, last if /^VERSION=(.*?)\s*$/; |
1125 | } | 1132 | } |
diff --git a/src/lib/libcrypto/util/mkerr.pl b/src/lib/libcrypto/util/mkerr.pl index 1b2915c767..60e534807e 100644 --- a/src/lib/libcrypto/util/mkerr.pl +++ b/src/lib/libcrypto/util/mkerr.pl | |||
@@ -41,7 +41,8 @@ while (@ARGV) { | |||
41 | } | 41 | } |
42 | 42 | ||
43 | if($recurse) { | 43 | if($recurse) { |
44 | @source = (<crypto/*.c>, <crypto/*/*.c>, <ssl/*.c>); | 44 | @source = (<crypto/*.c>, <crypto/*/*.c>, <ssl/*.c>, <fips/*.c>, |
45 | <fips/*/*.c>); | ||
45 | } else { | 46 | } else { |
46 | @source = @ARGV; | 47 | @source = @ARGV; |
47 | } | 48 | } |
@@ -262,7 +263,7 @@ foreach $lib (keys %csrc) | |||
262 | } else { | 263 | } else { |
263 | push @out, | 264 | push @out, |
264 | "/* ====================================================================\n", | 265 | "/* ====================================================================\n", |
265 | " * Copyright (c) 2001-2003 The OpenSSL Project. All rights reserved.\n", | 266 | " * Copyright (c) 2001-2005 The OpenSSL Project. All rights reserved.\n", |
266 | " *\n", | 267 | " *\n", |
267 | " * Redistribution and use in source and binary forms, with or without\n", | 268 | " * Redistribution and use in source and binary forms, with or without\n", |
268 | " * modification, are permitted provided that the following conditions\n", | 269 | " * modification, are permitted provided that the following conditions\n", |
@@ -404,7 +405,7 @@ EOF | |||
404 | print OUT <<"EOF"; | 405 | print OUT <<"EOF"; |
405 | /* $cfile */ | 406 | /* $cfile */ |
406 | /* ==================================================================== | 407 | /* ==================================================================== |
407 | * Copyright (c) 1999-2003 The OpenSSL Project. All rights reserved. | 408 | * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. |
408 | * | 409 | * |
409 | * Redistribution and use in source and binary forms, with or without | 410 | * Redistribution and use in source and binary forms, with or without |
410 | * modification, are permitted provided that the following conditions | 411 | * modification, are permitted provided that the following conditions |
diff --git a/src/lib/libcrypto/util/mkfiles.pl b/src/lib/libcrypto/util/mkfiles.pl index 29e1404c69..928a274303 100644 --- a/src/lib/libcrypto/util/mkfiles.pl +++ b/src/lib/libcrypto/util/mkfiles.pl | |||
@@ -51,6 +51,14 @@ my @dirs = ( | |||
51 | "crypto/ocsp", | 51 | "crypto/ocsp", |
52 | "crypto/ui", | 52 | "crypto/ui", |
53 | "crypto/krb5", | 53 | "crypto/krb5", |
54 | "fips", | ||
55 | "fips/aes", | ||
56 | "fips/des", | ||
57 | "fips/dsa", | ||
58 | "fips/dh", | ||
59 | "fips/rand", | ||
60 | "fips/rsa", | ||
61 | "fips/sha1", | ||
54 | "ssl", | 62 | "ssl", |
55 | "apps", | 63 | "apps", |
56 | "test", | 64 | "test", |
@@ -58,7 +66,7 @@ my @dirs = ( | |||
58 | ); | 66 | ); |
59 | 67 | ||
60 | foreach (@dirs) { | 68 | foreach (@dirs) { |
61 | &files_dir ($_, "Makefile.ssl"); | 69 | &files_dir ($_, "Makefile"); |
62 | } | 70 | } |
63 | 71 | ||
64 | exit(0); | 72 | exit(0); |
diff --git a/src/lib/libcrypto/util/mklink.pl b/src/lib/libcrypto/util/mklink.pl index 9386da7aa4..c8653cecc3 100644 --- a/src/lib/libcrypto/util/mklink.pl +++ b/src/lib/libcrypto/util/mklink.pl | |||
@@ -52,6 +52,7 @@ $symlink_exists=eval {symlink("",""); 1}; | |||
52 | foreach $file (@files) { | 52 | foreach $file (@files) { |
53 | my $err = ""; | 53 | my $err = ""; |
54 | if ($symlink_exists) { | 54 | if ($symlink_exists) { |
55 | unlink "$from/$file"; | ||
55 | symlink("$to/$file", "$from/$file") or $err = " [$!]"; | 56 | symlink("$to/$file", "$from/$file") or $err = " [$!]"; |
56 | } else { | 57 | } else { |
57 | unlink "$from/$file"; | 58 | unlink "$from/$file"; |
diff --git a/src/lib/libcrypto/util/mkstack.pl b/src/lib/libcrypto/util/mkstack.pl index 085c50f790..0ca9eb6a76 100644 --- a/src/lib/libcrypto/util/mkstack.pl +++ b/src/lib/libcrypto/util/mkstack.pl | |||
@@ -84,6 +84,7 @@ while(<IN>) { | |||
84 | #define sk_${type_thing}_shift(st) SKM_sk_shift($type_thing, (st)) | 84 | #define sk_${type_thing}_shift(st) SKM_sk_shift($type_thing, (st)) |
85 | #define sk_${type_thing}_pop(st) SKM_sk_pop($type_thing, (st)) | 85 | #define sk_${type_thing}_pop(st) SKM_sk_pop($type_thing, (st)) |
86 | #define sk_${type_thing}_sort(st) SKM_sk_sort($type_thing, (st)) | 86 | #define sk_${type_thing}_sort(st) SKM_sk_sort($type_thing, (st)) |
87 | #define sk_${type_thing}_is_sorted(st) SKM_sk_is_sorted($type_thing, (st)) | ||
87 | EOF | 88 | EOF |
88 | } | 89 | } |
89 | foreach $type_thing (sort @asn1setlst) { | 90 | foreach $type_thing (sort @asn1setlst) { |
diff --git a/src/lib/libcrypto/util/pl/BC-16.pl b/src/lib/libcrypto/util/pl/BC-16.pl index 2033f524ca..8030653daa 100644 --- a/src/lib/libcrypto/util/pl/BC-16.pl +++ b/src/lib/libcrypto/util/pl/BC-16.pl | |||
@@ -64,7 +64,7 @@ $lfile=''; | |||
64 | 64 | ||
65 | $asm='bcc -c -B -Tml'; | 65 | $asm='bcc -c -B -Tml'; |
66 | $afile='/o'; | 66 | $afile='/o'; |
67 | if ($no_asm) | 67 | if ($no_asm || $fips) |
68 | { | 68 | { |
69 | $bn_asm_obj=''; | 69 | $bn_asm_obj=''; |
70 | $bn_asm_src=''; | 70 | $bn_asm_src=''; |
@@ -119,11 +119,11 @@ sub do_lib_rule | |||
119 | 119 | ||
120 | sub do_link_rule | 120 | sub do_link_rule |
121 | { | 121 | { |
122 | local($target,$files,$dep_libs,$libs)=@_; | 122 | local($target,$files,$dep_libs,$libs,$sha1file,$openssl)=@_; |
123 | local($ret,$f,$_,@f); | 123 | local($ret,$f,$_,@f); |
124 | 124 | ||
125 | $file =~ s/\//$o/g if $o ne '/'; | 125 | $file =~ s/\//$o/g if $o ne '/'; |
126 | $n=&bname($targer); | 126 | $n=&bname($target); |
127 | $ret.="$target: $files $dep_libs\n"; | 127 | $ret.="$target: $files $dep_libs\n"; |
128 | $ret.=" \$(LINK) @&&|"; | 128 | $ret.=" \$(LINK) @&&|"; |
129 | 129 | ||
@@ -139,7 +139,12 @@ sub do_link_rule | |||
139 | } | 139 | } |
140 | else | 140 | else |
141 | { $ret.="\n $r \$(APP_EX_OBJ) $files\n"; } | 141 | { $ret.="\n $r \$(APP_EX_OBJ) $files\n"; } |
142 | $ret.=" $target\n\n $libs\n\n|\n\n"; | 142 | $ret.=" $target\n\n $libs\n\n|\n"; |
143 | if (defined $sha1file) | ||
144 | { | ||
145 | $ret.=" $openssl sha1 -hmac etaonrishdlcupfm -binary $target > $sha1file"; | ||
146 | } | ||
147 | $ret.="\n"; | ||
143 | return($ret); | 148 | return($ret); |
144 | } | 149 | } |
145 | 150 | ||
diff --git a/src/lib/libcrypto/util/pl/BC-32.pl b/src/lib/libcrypto/util/pl/BC-32.pl index e83b336190..897ae9d824 100644 --- a/src/lib/libcrypto/util/pl/BC-32.pl +++ b/src/lib/libcrypto/util/pl/BC-32.pl | |||
@@ -62,7 +62,7 @@ $des_enc_src=''; | |||
62 | $bf_enc_obj=''; | 62 | $bf_enc_obj=''; |
63 | $bf_enc_src=''; | 63 | $bf_enc_src=''; |
64 | 64 | ||
65 | if (!$no_asm) | 65 | if (!$no_asm && !$fips) |
66 | { | 66 | { |
67 | $bn_mulw_obj='crypto\bn\asm\bn_win32.obj'; | 67 | $bn_mulw_obj='crypto\bn\asm\bn_win32.obj'; |
68 | $bn_mulw_src='crypto\bn\asm\bn_win32.asm'; | 68 | $bn_mulw_src='crypto\bn\asm\bn_win32.asm'; |
@@ -122,13 +122,18 @@ sub do_lib_rule | |||
122 | 122 | ||
123 | sub do_link_rule | 123 | sub do_link_rule |
124 | { | 124 | { |
125 | local($target,$files,$dep_libs,$libs)=@_; | 125 | local($target,$files,$dep_libs,$libs,$sha1file,$openssl)=@_; |
126 | local($ret,$_); | 126 | local($ret,$_); |
127 | 127 | ||
128 | $file =~ s/\//$o/g if $o ne '/'; | 128 | $file =~ s/\//$o/g if $o ne '/'; |
129 | $n=&bname($targer); | 129 | $n=&bname($targer); |
130 | $ret.="$target: $files $dep_libs\n"; | 130 | $ret.="$target: $files $dep_libs\n"; |
131 | $ret.="\t\$(LINK) \$(LFLAGS) $files \$(APP_EX_OBJ), $target,, $libs\n\n"; | 131 | $ret.="\t\$(LINK) \$(LFLAGS) $files \$(APP_EX_OBJ), $target,, $libs\n"; |
132 | if (defined $sha1file) | ||
133 | { | ||
134 | $ret.="\t$openssl sha1 -hmac etaonrishdlcupfm -binary $target > $sha1file"; | ||
135 | } | ||
136 | $ret.="\n"; | ||
132 | return($ret); | 137 | return($ret); |
133 | } | 138 | } |
134 | 139 | ||
diff --git a/src/lib/libcrypto/util/pl/Mingw32.pl b/src/lib/libcrypto/util/pl/Mingw32.pl index 4bee638c4a..b9bb24d21d 100644 --- a/src/lib/libcrypto/util/pl/Mingw32.pl +++ b/src/lib/libcrypto/util/pl/Mingw32.pl | |||
@@ -21,7 +21,7 @@ if ($debug) | |||
21 | else | 21 | else |
22 | { $cflags="-DL_ENDIAN -DDSO_WIN32 -fomit-frame-pointer -O3 -mcpu=i486 -Wall"; } | 22 | { $cflags="-DL_ENDIAN -DDSO_WIN32 -fomit-frame-pointer -O3 -mcpu=i486 -Wall"; } |
23 | 23 | ||
24 | if ($gaswin and !$no_asm) | 24 | if ($gaswin and !$no_asm and !$fips) |
25 | { | 25 | { |
26 | $bn_asm_obj='$(OBJ_D)\bn-win32.o'; | 26 | $bn_asm_obj='$(OBJ_D)\bn-win32.o'; |
27 | $bn_asm_src='crypto/bn/asm/bn-win32.s'; | 27 | $bn_asm_src='crypto/bn/asm/bn-win32.s'; |
@@ -92,13 +92,18 @@ sub do_lib_rule | |||
92 | 92 | ||
93 | sub do_link_rule | 93 | sub do_link_rule |
94 | { | 94 | { |
95 | local($target,$files,$dep_libs,$libs)=@_; | 95 | local($target,$files,$dep_libs,$libs,$sha1file,$openssl)=@_; |
96 | local($ret,$_); | 96 | local($ret,$_); |
97 | 97 | ||
98 | $file =~ s/\//$o/g if $o ne '/'; | 98 | $file =~ s/\//$o/g if $o ne '/'; |
99 | $n=&bname($target); | 99 | $n=&bname($target); |
100 | $ret.="$target: $files $dep_libs\n"; | 100 | $ret.="$target: $files $dep_libs\n"; |
101 | $ret.="\t\$(LINK) ${efile}$target \$(LFLAGS) $files $libs\n\n"; | 101 | $ret.="\t\$(LINK) ${efile}$target \$(LFLAGS) $files $libs\n"; |
102 | if (defined $sha1file) | ||
103 | { | ||
104 | $ret.="\t$openssl sha1 -hmac etaonrishdlcupfm -binary $target > $sha1file"; | ||
105 | } | ||
106 | $ret.="\n"; | ||
102 | return($ret); | 107 | return($ret); |
103 | } | 108 | } |
104 | 1; | 109 | 1; |
diff --git a/src/lib/libcrypto/util/pl/OS2-EMX.pl b/src/lib/libcrypto/util/pl/OS2-EMX.pl index ddb3524210..75d72ebbcb 100644 --- a/src/lib/libcrypto/util/pl/OS2-EMX.pl +++ b/src/lib/libcrypto/util/pl/OS2-EMX.pl | |||
@@ -48,7 +48,7 @@ $des_enc_src=""; | |||
48 | $bf_enc_obj=""; | 48 | $bf_enc_obj=""; |
49 | $bf_enc_src=""; | 49 | $bf_enc_src=""; |
50 | 50 | ||
51 | if (!$no_asm) | 51 | if (!$no_asm && !$fips) |
52 | { | 52 | { |
53 | $bn_asm_obj="crypto/bn/asm/bn-os2$obj crypto/bn/asm/co-os2$obj"; | 53 | $bn_asm_obj="crypto/bn/asm/bn-os2$obj crypto/bn/asm/co-os2$obj"; |
54 | $bn_asm_src="crypto/bn/asm/bn-os2.asm crypto/bn/asm/co-os2.asm"; | 54 | $bn_asm_src="crypto/bn/asm/bn-os2.asm crypto/bn/asm/co-os2.asm"; |
@@ -106,13 +106,18 @@ sub do_lib_rule | |||
106 | 106 | ||
107 | sub do_link_rule | 107 | sub do_link_rule |
108 | { | 108 | { |
109 | local($target,$files,$dep_libs,$libs)=@_; | 109 | local($target,$files,$dep_libs,$libs,$sha1file,$openssl)=@_; |
110 | local($ret,$_); | 110 | local($ret,$_); |
111 | 111 | ||
112 | $file =~ s/\//$o/g if $o ne '/'; | 112 | $file =~ s/\//$o/g if $o ne '/'; |
113 | $n=&bname($target); | 113 | $n=&bname($target); |
114 | $ret.="$target: $files $dep_libs\n"; | 114 | $ret.="$target: $files $dep_libs\n"; |
115 | $ret.="\t\$(LINK) ${efile}$target \$(CFLAG) \$(LFLAGS) $files $libs\n\n"; | 115 | $ret.="\t\$(LINK) ${efile}$target \$(CFLAG) \$(LFLAGS) $files $libs\n"; |
116 | if (defined $sha1file) | ||
117 | { | ||
118 | $ret.="\t$openssl sha1 -hmac etaonrishdlcupfm -binary $target > $sha1file"; | ||
119 | } | ||
120 | $ret.="\n"; | ||
116 | return($ret); | 121 | return($ret); |
117 | } | 122 | } |
118 | 123 | ||
diff --git a/src/lib/libcrypto/util/pl/VC-16.pl b/src/lib/libcrypto/util/pl/VC-16.pl index 7cda5e67a9..564ba3fd08 100644 --- a/src/lib/libcrypto/util/pl/VC-16.pl +++ b/src/lib/libcrypto/util/pl/VC-16.pl | |||
@@ -61,7 +61,7 @@ if ($shlib) | |||
61 | else | 61 | else |
62 | { $mlflags=''; } | 62 | { $mlflags=''; } |
63 | 63 | ||
64 | $app_ex_obj="setargv.obj"; | 64 | $app_ex_obj=""; |
65 | 65 | ||
66 | $obj='.obj'; | 66 | $obj='.obj'; |
67 | $ofile="/Fo"; | 67 | $ofile="/Fo"; |
@@ -90,7 +90,7 @@ $des_enc_src=''; | |||
90 | $bf_enc_obj=''; | 90 | $bf_enc_obj=''; |
91 | $bf_enc_src=''; | 91 | $bf_enc_src=''; |
92 | 92 | ||
93 | if (!$no_asm) | 93 | if (!$no_asm && !$fips) |
94 | { | 94 | { |
95 | if ($asmbits == 32) | 95 | if ($asmbits == 32) |
96 | { | 96 | { |
@@ -147,7 +147,7 @@ sub do_lib_rule | |||
147 | 147 | ||
148 | sub do_link_rule | 148 | sub do_link_rule |
149 | { | 149 | { |
150 | local($target,$files,$dep_libs,$libs)=@_; | 150 | local($target,$files,$dep_libs,$libs,$sha1file,$openssl)=@_; |
151 | local($ret,$f,$_,@f); | 151 | local($ret,$f,$_,@f); |
152 | 152 | ||
153 | $file =~ s/\//$o/g if $o ne '/'; | 153 | $file =~ s/\//$o/g if $o ne '/'; |
@@ -165,7 +165,12 @@ sub do_link_rule | |||
165 | } | 165 | } |
166 | else | 166 | else |
167 | { $ret.=" \$(APP_EX_OBJ) $files"; } | 167 | { $ret.=" \$(APP_EX_OBJ) $files"; } |
168 | $ret.="\n $target\n\n $libs\n\n<<\n\n"; | 168 | $ret.="\n $target\n\n $libs\n\n<<\n"; |
169 | if (defined $sha1file) | ||
170 | { | ||
171 | $ret.=" $openssl sha1 -hmac etaonrishdlcupfm -binary $target > $sha1file"; | ||
172 | } | ||
173 | $ret.="\n"; | ||
169 | return($ret); | 174 | return($ret); |
170 | } | 175 | } |
171 | 176 | ||
diff --git a/src/lib/libcrypto/util/pl/VC-32.pl b/src/lib/libcrypto/util/pl/VC-32.pl index 285990c589..cf689b9feb 100644 --- a/src/lib/libcrypto/util/pl/VC-32.pl +++ b/src/lib/libcrypto/util/pl/VC-32.pl | |||
@@ -64,7 +64,7 @@ $des_enc_src=''; | |||
64 | $bf_enc_obj=''; | 64 | $bf_enc_obj=''; |
65 | $bf_enc_src=''; | 65 | $bf_enc_src=''; |
66 | 66 | ||
67 | if (!$no_asm) | 67 | if (!$no_asm && !$fips) |
68 | { | 68 | { |
69 | $bn_asm_obj='crypto\bn\asm\bn_win32.obj'; | 69 | $bn_asm_obj='crypto\bn\asm\bn_win32.obj'; |
70 | $bn_asm_src='crypto\bn\asm\bn_win32.asm'; | 70 | $bn_asm_src='crypto\bn\asm\bn_win32.asm'; |
@@ -126,14 +126,19 @@ sub do_lib_rule | |||
126 | 126 | ||
127 | sub do_link_rule | 127 | sub do_link_rule |
128 | { | 128 | { |
129 | local($target,$files,$dep_libs,$libs)=@_; | 129 | local($target,$files,$dep_libs,$libs,$sha1file,$openssl)=@_; |
130 | local($ret,$_); | 130 | local($ret,$_); |
131 | 131 | ||
132 | $file =~ s/\//$o/g if $o ne '/'; | 132 | $file =~ s/\//$o/g if $o ne '/'; |
133 | $n=&bname($targer); | 133 | $n=&bname($targer); |
134 | $ret.="$target: $files $dep_libs\n"; | 134 | $ret.="$target: $files $dep_libs\n"; |
135 | $ret.=" \$(LINK) \$(LFLAGS) $efile$target @<<\n"; | 135 | $ret.=" \$(LINK) \$(LFLAGS) $efile$target @<<\n"; |
136 | $ret.=" \$(APP_EX_OBJ) $files $libs\n<<\n\n"; | 136 | $ret.=" \$(APP_EX_OBJ) $files $libs\n<<\n"; |
137 | if (defined $sha1file) | ||
138 | { | ||
139 | $ret.=" $openssl sha1 -hmac etaonrishdlcupfm -binary $target > $sha1file"; | ||
140 | } | ||
141 | $ret.="\n"; | ||
137 | return($ret); | 142 | return($ret); |
138 | } | 143 | } |
139 | 144 | ||
diff --git a/src/lib/libcrypto/util/pl/linux.pl b/src/lib/libcrypto/util/pl/linux.pl index 8924ed5480..df05c40526 100644 --- a/src/lib/libcrypto/util/pl/linux.pl +++ b/src/lib/libcrypto/util/pl/linux.pl | |||
@@ -72,13 +72,18 @@ sub do_shlib_rule | |||
72 | 72 | ||
73 | sub do_link_rule | 73 | sub do_link_rule |
74 | { | 74 | { |
75 | local($target,$files,$dep_libs,$libs)=@_; | 75 | local($target,$files,$dep_libs,$libs,$sha1file,$openssl)=@_; |
76 | local($ret,$_); | 76 | local($ret,$_); |
77 | 77 | ||
78 | $file =~ s/\//$o/g if $o ne '/'; | 78 | $file =~ s/\//$o/g if $o ne '/'; |
79 | $n=&bname($target); | 79 | $n=&bname($target); |
80 | $ret.="$target: $files $dep_libs\n"; | 80 | $ret.="$target: $files $dep_libs\n"; |
81 | $ret.="\t\$(LINK) ${efile}$target \$(LFLAGS) $files $libs\n\n"; | 81 | $ret.="\t\$(LINK) ${efile}$target \$(LFLAGS) $files $libs\n"; |
82 | if (defined $sha1file) | ||
83 | { | ||
84 | $ret.="\t$openssl sha1 -hmac etaonrishdlcupfm -binary $target > $sha1file"; | ||
85 | } | ||
86 | $ret.="\n"; | ||
82 | return($ret); | 87 | return($ret); |
83 | } | 88 | } |
84 | 89 | ||
diff --git a/src/lib/libcrypto/util/pl/ultrix.pl b/src/lib/libcrypto/util/pl/ultrix.pl index ea370c71f9..447b854708 100644 --- a/src/lib/libcrypto/util/pl/ultrix.pl +++ b/src/lib/libcrypto/util/pl/ultrix.pl | |||
@@ -17,7 +17,7 @@ else | |||
17 | 17 | ||
18 | $cflags.=" -std1 -DL_ENDIAN"; | 18 | $cflags.=" -std1 -DL_ENDIAN"; |
19 | 19 | ||
20 | if (!$no_asm) | 20 | if (!$no_asm && !$fips) |
21 | { | 21 | { |
22 | $bn_asm_obj='$(OBJ_D)/mips1.o'; | 22 | $bn_asm_obj='$(OBJ_D)/mips1.o'; |
23 | $bn_asm_src='crypto/bn/asm/mips1.s'; | 23 | $bn_asm_src='crypto/bn/asm/mips1.s'; |
@@ -25,13 +25,18 @@ if (!$no_asm) | |||
25 | 25 | ||
26 | sub do_link_rule | 26 | sub do_link_rule |
27 | { | 27 | { |
28 | local($target,$files,$dep_libs,$libs)=@_; | 28 | local($target,$files,$dep_libs,$libs,$sha1file,$openssl)=@_; |
29 | local($ret,$_); | 29 | local($ret,$_); |
30 | 30 | ||
31 | $file =~ s/\//$o/g if $o ne '/'; | 31 | $file =~ s/\//$o/g if $o ne '/'; |
32 | $n=&bname($target); | 32 | $n=&bname($target); |
33 | $ret.="$target: $files $dep_libs\n"; | 33 | $ret.="$target: $files $dep_libs\n"; |
34 | $ret.="\t\$(LINK) ${efile}$target \$(LFLAGS) $files $libs\n\n"; | 34 | $ret.="\t\$(LINK) ${efile}$target \$(LFLAGS) $files $libs\n"; |
35 | if (defined $sha1file) | ||
36 | { | ||
37 | $ret.="\t$openssl sha1 -hmac etaonrishdlcupfm -binary $target > $sha1file"; | ||
38 | } | ||
39 | $ret.="\n"; | ||
35 | return($ret); | 40 | return($ret); |
36 | } | 41 | } |
37 | 42 | ||
diff --git a/src/lib/libcrypto/util/pl/unix.pl b/src/lib/libcrypto/util/pl/unix.pl index 146611ad99..bbd1798a2e 100644 --- a/src/lib/libcrypto/util/pl/unix.pl +++ b/src/lib/libcrypto/util/pl/unix.pl | |||
@@ -70,13 +70,18 @@ sub do_lib_rule | |||
70 | 70 | ||
71 | sub do_link_rule | 71 | sub do_link_rule |
72 | { | 72 | { |
73 | local($target,$files,$dep_libs,$libs)=@_; | 73 | local($target,$files,$dep_libs,$libs,$sha1file,$openssl)=@_; |
74 | local($ret,$_); | 74 | local($ret,$_); |
75 | 75 | ||
76 | $file =~ s/\//$o/g if $o ne '/'; | 76 | $file =~ s/\//$o/g if $o ne '/'; |
77 | $n=&bname($target); | 77 | $n=&bname($target); |
78 | $ret.="$target: $files $dep_libs\n"; | 78 | $ret.="$target: $files $dep_libs\n"; |
79 | $ret.="\t\$(LINK) ${efile}$target \$(LFLAGS) $files $libs\n\n"; | 79 | $ret.="\t\$(LINK) ${efile}$target \$(LFLAGS) $files $libs\n"; |
80 | if (defined $sha1file) | ||
81 | { | ||
82 | $ret.="\t$openssl sha1 -hmac etaonrishdlcupfm -binary $target > $sha1file"; | ||
83 | } | ||
84 | $ret.="\n"; | ||
80 | return($ret); | 85 | return($ret); |
81 | } | 86 | } |
82 | 87 | ||
diff --git a/src/lib/libcrypto/util/selftest.pl b/src/lib/libcrypto/util/selftest.pl index 276b81183d..e9d5aa8938 100644 --- a/src/lib/libcrypto/util/selftest.pl +++ b/src/lib/libcrypto/util/selftest.pl | |||
@@ -34,9 +34,9 @@ foreach $_ (split("\n",$c)) { | |||
34 | $platform0=$1 if (/Configuring for (.*)$/); | 34 | $platform0=$1 if (/Configuring for (.*)$/); |
35 | } | 35 | } |
36 | 36 | ||
37 | system "sh config" if (! -f "Makefile.ssl"); | 37 | system "sh config" if (! -f "Makefile"); |
38 | 38 | ||
39 | if (open(IN,"<Makefile.ssl")) { | 39 | if (open(IN,"<Makefile")) { |
40 | while (<IN>) { | 40 | while (<IN>) { |
41 | $version=$1 if (/^VERSION=(.*)$/); | 41 | $version=$1 if (/^VERSION=(.*)$/); |
42 | $platform=$1 if (/^PLATFORM=(.*)$/); | 42 | $platform=$1 if (/^PLATFORM=(.*)$/); |
diff --git a/src/lib/libcrypto/x509/by_file.c b/src/lib/libcrypto/x509/by_file.c index b4b04183d0..a5e0d4aefa 100644 --- a/src/lib/libcrypto/x509/by_file.c +++ b/src/lib/libcrypto/x509/by_file.c | |||
@@ -150,7 +150,7 @@ int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type) | |||
150 | x=PEM_read_bio_X509_AUX(in,NULL,NULL,NULL); | 150 | x=PEM_read_bio_X509_AUX(in,NULL,NULL,NULL); |
151 | if (x == NULL) | 151 | if (x == NULL) |
152 | { | 152 | { |
153 | if ((ERR_GET_REASON(ERR_peek_error()) == | 153 | if ((ERR_GET_REASON(ERR_peek_last_error()) == |
154 | PEM_R_NO_START_LINE) && (count > 0)) | 154 | PEM_R_NO_START_LINE) && (count > 0)) |
155 | { | 155 | { |
156 | ERR_clear_error(); | 156 | ERR_clear_error(); |
@@ -217,7 +217,7 @@ int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type) | |||
217 | x=PEM_read_bio_X509_CRL(in,NULL,NULL,NULL); | 217 | x=PEM_read_bio_X509_CRL(in,NULL,NULL,NULL); |
218 | if (x == NULL) | 218 | if (x == NULL) |
219 | { | 219 | { |
220 | if ((ERR_GET_REASON(ERR_peek_error()) == | 220 | if ((ERR_GET_REASON(ERR_peek_last_error()) == |
221 | PEM_R_NO_START_LINE) && (count > 0)) | 221 | PEM_R_NO_START_LINE) && (count > 0)) |
222 | { | 222 | { |
223 | ERR_clear_error(); | 223 | ERR_clear_error(); |
diff --git a/src/lib/libcrypto/x509/x509.h b/src/lib/libcrypto/x509/x509.h index 8d0c7e2e17..e8c1a59cf2 100644 --- a/src/lib/libcrypto/x509/x509.h +++ b/src/lib/libcrypto/x509/x509.h | |||
@@ -410,6 +410,7 @@ typedef struct X509_crl_info_st | |||
410 | ASN1_TIME *nextUpdate; | 410 | ASN1_TIME *nextUpdate; |
411 | STACK_OF(X509_REVOKED) *revoked; | 411 | STACK_OF(X509_REVOKED) *revoked; |
412 | STACK_OF(X509_EXTENSION) /* [0] */ *extensions; | 412 | STACK_OF(X509_EXTENSION) /* [0] */ *extensions; |
413 | ASN1_ENCODING enc; | ||
413 | } X509_CRL_INFO; | 414 | } X509_CRL_INFO; |
414 | 415 | ||
415 | struct X509_crl_st | 416 | struct X509_crl_st |
@@ -1037,18 +1038,18 @@ int X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type, | |||
1037 | int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, | 1038 | int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, |
1038 | unsigned char *bytes, int len, int loc, int set); | 1039 | unsigned char *bytes, int len, int loc, int set); |
1039 | X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, | 1040 | X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, |
1040 | char *field, int type, unsigned char *bytes, int len); | 1041 | const char *field, int type, const unsigned char *bytes, int len); |
1041 | X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, | 1042 | X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, |
1042 | int type,unsigned char *bytes, int len); | 1043 | int type,unsigned char *bytes, int len); |
1043 | int X509_NAME_add_entry_by_txt(X509_NAME *name, char *field, int type, | 1044 | int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, |
1044 | unsigned char *bytes, int len, int loc, int set); | 1045 | const unsigned char *bytes, int len, int loc, int set); |
1045 | X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, | 1046 | X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, |
1046 | ASN1_OBJECT *obj, int type,unsigned char *bytes, | 1047 | ASN1_OBJECT *obj, int type,const unsigned char *bytes, |
1047 | int len); | 1048 | int len); |
1048 | int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, | 1049 | int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, |
1049 | ASN1_OBJECT *obj); | 1050 | ASN1_OBJECT *obj); |
1050 | int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, | 1051 | int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, |
1051 | unsigned char *bytes, int len); | 1052 | const unsigned char *bytes, int len); |
1052 | ASN1_OBJECT * X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne); | 1053 | ASN1_OBJECT * X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne); |
1053 | ASN1_STRING * X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne); | 1054 | ASN1_STRING * X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne); |
1054 | 1055 | ||
diff --git a/src/lib/libcrypto/x509/x509_cmp.c b/src/lib/libcrypto/x509/x509_cmp.c index f460102f49..030d0966fc 100644 --- a/src/lib/libcrypto/x509/x509_cmp.c +++ b/src/lib/libcrypto/x509/x509_cmp.c | |||
@@ -254,33 +254,49 @@ static int nocase_spacenorm_cmp(const ASN1_STRING *a, const ASN1_STRING *b) | |||
254 | return 0; | 254 | return 0; |
255 | } | 255 | } |
256 | 256 | ||
257 | static int asn1_string_memcmp(ASN1_STRING *a, ASN1_STRING *b) | ||
258 | { | ||
259 | int j; | ||
260 | j = a->length - b->length; | ||
261 | if (j) | ||
262 | return j; | ||
263 | return memcmp(a->data, b->data, a->length); | ||
264 | } | ||
265 | |||
266 | #define STR_TYPE_CMP (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_UTF8STRING) | ||
267 | |||
257 | int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b) | 268 | int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b) |
258 | { | 269 | { |
259 | int i,j; | 270 | int i,j; |
260 | X509_NAME_ENTRY *na,*nb; | 271 | X509_NAME_ENTRY *na,*nb; |
261 | 272 | ||
262 | if (sk_X509_NAME_ENTRY_num(a->entries) | 273 | unsigned long nabit, nbbit; |
263 | != sk_X509_NAME_ENTRY_num(b->entries)) | 274 | |
264 | return sk_X509_NAME_ENTRY_num(a->entries) | 275 | j = sk_X509_NAME_ENTRY_num(a->entries) |
265 | -sk_X509_NAME_ENTRY_num(b->entries); | 276 | - sk_X509_NAME_ENTRY_num(b->entries); |
277 | if (j) | ||
278 | return j; | ||
266 | for (i=sk_X509_NAME_ENTRY_num(a->entries)-1; i>=0; i--) | 279 | for (i=sk_X509_NAME_ENTRY_num(a->entries)-1; i>=0; i--) |
267 | { | 280 | { |
268 | na=sk_X509_NAME_ENTRY_value(a->entries,i); | 281 | na=sk_X509_NAME_ENTRY_value(a->entries,i); |
269 | nb=sk_X509_NAME_ENTRY_value(b->entries,i); | 282 | nb=sk_X509_NAME_ENTRY_value(b->entries,i); |
270 | j=na->value->type-nb->value->type; | 283 | j=na->value->type-nb->value->type; |
271 | if (j) return(j); | 284 | if (j) |
272 | if (na->value->type == V_ASN1_PRINTABLESTRING) | 285 | { |
286 | nabit = ASN1_tag2bit(na->value->type); | ||
287 | nbbit = ASN1_tag2bit(nb->value->type); | ||
288 | if (!(nabit & STR_TYPE_CMP) || | ||
289 | !(nbbit & STR_TYPE_CMP)) | ||
290 | return j; | ||
291 | j = asn1_string_memcmp(na->value, nb->value); | ||
292 | } | ||
293 | else if (na->value->type == V_ASN1_PRINTABLESTRING) | ||
273 | j=nocase_spacenorm_cmp(na->value, nb->value); | 294 | j=nocase_spacenorm_cmp(na->value, nb->value); |
274 | else if (na->value->type == V_ASN1_IA5STRING | 295 | else if (na->value->type == V_ASN1_IA5STRING |
275 | && OBJ_obj2nid(na->object) == NID_pkcs9_emailAddress) | 296 | && OBJ_obj2nid(na->object) == NID_pkcs9_emailAddress) |
276 | j=nocase_cmp(na->value, nb->value); | 297 | j=nocase_cmp(na->value, nb->value); |
277 | else | 298 | else |
278 | { | 299 | j = asn1_string_memcmp(na->value, nb->value); |
279 | j=na->value->length-nb->value->length; | ||
280 | if (j) return(j); | ||
281 | j=memcmp(na->value->data,nb->value->data, | ||
282 | na->value->length); | ||
283 | } | ||
284 | if (j) return(j); | 300 | if (j) return(j); |
285 | j=na->set-nb->set; | 301 | j=na->set-nb->set; |
286 | if (j) return(j); | 302 | if (j) return(j); |
@@ -306,10 +322,16 @@ unsigned long X509_NAME_hash(X509_NAME *x) | |||
306 | { | 322 | { |
307 | unsigned long ret=0; | 323 | unsigned long ret=0; |
308 | unsigned char md[16]; | 324 | unsigned char md[16]; |
325 | EVP_MD_CTX md_ctx; | ||
309 | 326 | ||
310 | /* Make sure X509_NAME structure contains valid cached encoding */ | 327 | /* Make sure X509_NAME structure contains valid cached encoding */ |
311 | i2d_X509_NAME(x,NULL); | 328 | i2d_X509_NAME(x,NULL); |
312 | EVP_Digest(x->bytes->data, x->bytes->length, md, NULL, EVP_md5(), NULL); | 329 | EVP_MD_CTX_init(&md_ctx); |
330 | EVP_MD_CTX_set_flags(&md_ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); | ||
331 | EVP_DigestInit_ex(&md_ctx, EVP_md5(), NULL); | ||
332 | EVP_DigestUpdate(&md_ctx, x->bytes->data, x->bytes->length); | ||
333 | EVP_DigestFinal_ex(&md_ctx,md,NULL); | ||
334 | EVP_MD_CTX_cleanup(&md_ctx); | ||
313 | 335 | ||
314 | ret=( ((unsigned long)md[0] )|((unsigned long)md[1]<<8L)| | 336 | ret=( ((unsigned long)md[0] )|((unsigned long)md[1]<<8L)| |
315 | ((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L) | 337 | ((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L) |
diff --git a/src/lib/libcrypto/x509/x509_r2x.c b/src/lib/libcrypto/x509/x509_r2x.c index db051033d9..fb8a78dabe 100644 --- a/src/lib/libcrypto/x509/x509_r2x.c +++ b/src/lib/libcrypto/x509/x509_r2x.c | |||
@@ -92,8 +92,10 @@ X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey) | |||
92 | X509_set_subject_name(ret,X509_NAME_dup(xn)); | 92 | X509_set_subject_name(ret,X509_NAME_dup(xn)); |
93 | X509_set_issuer_name(ret,X509_NAME_dup(xn)); | 93 | X509_set_issuer_name(ret,X509_NAME_dup(xn)); |
94 | 94 | ||
95 | X509_gmtime_adj(xi->validity->notBefore,0); | 95 | if (X509_gmtime_adj(xi->validity->notBefore,0) == NULL) |
96 | X509_gmtime_adj(xi->validity->notAfter,(long)60*60*24*days); | 96 | goto err; |
97 | if (X509_gmtime_adj(xi->validity->notAfter,(long)60*60*24*days) == NULL) | ||
98 | goto err; | ||
97 | 99 | ||
98 | X509_set_pubkey(ret,X509_REQ_get_pubkey(r)); | 100 | X509_set_pubkey(ret,X509_REQ_get_pubkey(r)); |
99 | 101 | ||
diff --git a/src/lib/libcrypto/x509/x509_req.c b/src/lib/libcrypto/x509/x509_req.c index 0affa3bf30..59fc6ca548 100644 --- a/src/lib/libcrypto/x509/x509_req.c +++ b/src/lib/libcrypto/x509/x509_req.c | |||
@@ -118,7 +118,7 @@ EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req) | |||
118 | * used and there may be more: so the list is configurable. | 118 | * used and there may be more: so the list is configurable. |
119 | */ | 119 | */ |
120 | 120 | ||
121 | static int ext_nid_list[] = { NID_ms_ext_req, NID_ext_req, NID_undef}; | 121 | static int ext_nid_list[] = { NID_ext_req, NID_ms_ext_req, NID_undef}; |
122 | 122 | ||
123 | static int *ext_nids = ext_nid_list; | 123 | static int *ext_nids = ext_nid_list; |
124 | 124 | ||
@@ -143,32 +143,33 @@ void X509_REQ_set_extension_nids(int *nids) | |||
143 | } | 143 | } |
144 | 144 | ||
145 | STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req) | 145 | STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req) |
146 | { | 146 | { |
147 | X509_ATTRIBUTE *attr; | 147 | X509_ATTRIBUTE *attr; |
148 | STACK_OF(X509_ATTRIBUTE) *sk; | ||
149 | ASN1_TYPE *ext = NULL; | 148 | ASN1_TYPE *ext = NULL; |
150 | int i; | 149 | int idx, *pnid; |
151 | unsigned char *p; | 150 | unsigned char *p; |
152 | if ((req == NULL) || (req->req_info == NULL)) | 151 | |
152 | if ((req == NULL) || (req->req_info == NULL) || !ext_nids) | ||
153 | return(NULL); | 153 | return(NULL); |
154 | sk=req->req_info->attributes; | 154 | for (pnid = ext_nids; *pnid != NID_undef; pnid++) |
155 | if (!sk) return NULL; | 155 | { |
156 | for(i = 0; i < sk_X509_ATTRIBUTE_num(sk); i++) { | 156 | idx = X509_REQ_get_attr_by_NID(req, *pnid, -1); |
157 | attr = sk_X509_ATTRIBUTE_value(sk, i); | 157 | if (idx == -1) |
158 | if(X509_REQ_extension_nid(OBJ_obj2nid(attr->object))) { | 158 | continue; |
159 | if(attr->single) ext = attr->value.single; | 159 | attr = X509_REQ_get_attr(req, idx); |
160 | else if(sk_ASN1_TYPE_num(attr->value.set)) | 160 | if(attr->single) ext = attr->value.single; |
161 | ext = sk_ASN1_TYPE_value(attr->value.set, 0); | 161 | else if(sk_ASN1_TYPE_num(attr->value.set)) |
162 | break; | 162 | ext = sk_ASN1_TYPE_value(attr->value.set, 0); |
163 | break; | ||
163 | } | 164 | } |
164 | } | 165 | if(!ext || (ext->type != V_ASN1_SEQUENCE)) |
165 | if(!ext || (ext->type != V_ASN1_SEQUENCE)) return NULL; | 166 | return NULL; |
166 | p = ext->value.sequence->data; | 167 | p = ext->value.sequence->data; |
167 | return d2i_ASN1_SET_OF_X509_EXTENSION(NULL, &p, | 168 | return d2i_ASN1_SET_OF_X509_EXTENSION(NULL, &p, |
168 | ext->value.sequence->length, | 169 | ext->value.sequence->length, |
169 | d2i_X509_EXTENSION, X509_EXTENSION_free, | 170 | d2i_X509_EXTENSION, X509_EXTENSION_free, |
170 | V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL); | 171 | V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL); |
171 | } | 172 | } |
172 | 173 | ||
173 | /* Add a STACK_OF extensions to a certificate request: allow alternative OIDs | 174 | /* Add a STACK_OF extensions to a certificate request: allow alternative OIDs |
174 | * in case we want to create a non standard one. | 175 | * in case we want to create a non standard one. |
diff --git a/src/lib/libcrypto/x509/x509_txt.c b/src/lib/libcrypto/x509/x509_txt.c index e31ebc6741..f19e66a238 100644 --- a/src/lib/libcrypto/x509/x509_txt.c +++ b/src/lib/libcrypto/x509/x509_txt.c | |||
@@ -122,8 +122,14 @@ const char *X509_verify_cert_error_string(long n) | |||
122 | return("certificate revoked"); | 122 | return("certificate revoked"); |
123 | case X509_V_ERR_INVALID_CA: | 123 | case X509_V_ERR_INVALID_CA: |
124 | return ("invalid CA certificate"); | 124 | return ("invalid CA certificate"); |
125 | case X509_V_ERR_INVALID_NON_CA: | ||
126 | return ("invalid non-CA certificate (has CA markings)"); | ||
125 | case X509_V_ERR_PATH_LENGTH_EXCEEDED: | 127 | case X509_V_ERR_PATH_LENGTH_EXCEEDED: |
126 | return ("path length constraint exceeded"); | 128 | return ("path length constraint exceeded"); |
129 | case X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED: | ||
130 | return("proxy path length constraint exceeded"); | ||
131 | case X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED: | ||
132 | return("proxy cerificates not allowed, please set the appropriate flag"); | ||
127 | case X509_V_ERR_INVALID_PURPOSE: | 133 | case X509_V_ERR_INVALID_PURPOSE: |
128 | return ("unsupported certificate purpose"); | 134 | return ("unsupported certificate purpose"); |
129 | case X509_V_ERR_CERT_UNTRUSTED: | 135 | case X509_V_ERR_CERT_UNTRUSTED: |
@@ -140,19 +146,16 @@ const char *X509_verify_cert_error_string(long n) | |||
140 | return("authority and issuer serial number mismatch"); | 146 | return("authority and issuer serial number mismatch"); |
141 | case X509_V_ERR_KEYUSAGE_NO_CERTSIGN: | 147 | case X509_V_ERR_KEYUSAGE_NO_CERTSIGN: |
142 | return("key usage does not include certificate signing"); | 148 | return("key usage does not include certificate signing"); |
143 | |||
144 | case X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER: | 149 | case X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER: |
145 | return("unable to get CRL issuer certificate"); | 150 | return("unable to get CRL issuer certificate"); |
146 | |||
147 | case X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION: | 151 | case X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION: |
148 | return("unhandled critical extension"); | 152 | return("unhandled critical extension"); |
149 | |||
150 | case X509_V_ERR_KEYUSAGE_NO_CRL_SIGN: | 153 | case X509_V_ERR_KEYUSAGE_NO_CRL_SIGN: |
151 | return("key usage does not include CRL signing"); | 154 | return("key usage does not include CRL signing"); |
152 | 155 | case X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE: | |
156 | return("key usage does not include digital signature"); | ||
153 | case X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION: | 157 | case X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION: |
154 | return("unhandled critical CRL extension"); | 158 | return("unhandled critical CRL extension"); |
155 | |||
156 | default: | 159 | default: |
157 | BIO_snprintf(buf,sizeof buf,"error number %ld",n); | 160 | BIO_snprintf(buf,sizeof buf,"error number %ld",n); |
158 | return(buf); | 161 | return(buf); |
diff --git a/src/lib/libcrypto/x509/x509_vfy.c b/src/lib/libcrypto/x509/x509_vfy.c index 2e4d0b823a..e43c861ee7 100644 --- a/src/lib/libcrypto/x509/x509_vfy.c +++ b/src/lib/libcrypto/x509/x509_vfy.c | |||
@@ -73,7 +73,7 @@ | |||
73 | static int null_callback(int ok,X509_STORE_CTX *e); | 73 | static int null_callback(int ok,X509_STORE_CTX *e); |
74 | static int check_issued(X509_STORE_CTX *ctx, X509 *x, X509 *issuer); | 74 | static int check_issued(X509_STORE_CTX *ctx, X509 *x, X509 *issuer); |
75 | static X509 *find_issuer(X509_STORE_CTX *ctx, STACK_OF(X509) *sk, X509 *x); | 75 | static X509 *find_issuer(X509_STORE_CTX *ctx, STACK_OF(X509) *sk, X509 *x); |
76 | static int check_chain_purpose(X509_STORE_CTX *ctx); | 76 | static int check_chain_extensions(X509_STORE_CTX *ctx); |
77 | static int check_trust(X509_STORE_CTX *ctx); | 77 | static int check_trust(X509_STORE_CTX *ctx); |
78 | static int check_revocation(X509_STORE_CTX *ctx); | 78 | static int check_revocation(X509_STORE_CTX *ctx); |
79 | static int check_cert(X509_STORE_CTX *ctx); | 79 | static int check_cert(X509_STORE_CTX *ctx); |
@@ -281,7 +281,7 @@ int X509_verify_cert(X509_STORE_CTX *ctx) | |||
281 | } | 281 | } |
282 | 282 | ||
283 | /* We have the chain complete: now we need to check its purpose */ | 283 | /* We have the chain complete: now we need to check its purpose */ |
284 | if (ctx->purpose > 0) ok = check_chain_purpose(ctx); | 284 | ok = check_chain_extensions(ctx); |
285 | 285 | ||
286 | if (!ok) goto end; | 286 | if (!ok) goto end; |
287 | 287 | ||
@@ -365,21 +365,39 @@ static int get_issuer_sk(X509 **issuer, X509_STORE_CTX *ctx, X509 *x) | |||
365 | else | 365 | else |
366 | return 0; | 366 | return 0; |
367 | } | 367 | } |
368 | 368 | ||
369 | 369 | ||
370 | /* Check a certificate chains extensions for consistency | 370 | /* Check a certificate chains extensions for consistency |
371 | * with the supplied purpose | 371 | * with the supplied purpose |
372 | */ | 372 | */ |
373 | 373 | ||
374 | static int check_chain_purpose(X509_STORE_CTX *ctx) | 374 | static int check_chain_extensions(X509_STORE_CTX *ctx) |
375 | { | 375 | { |
376 | #ifdef OPENSSL_NO_CHAIN_VERIFY | 376 | #ifdef OPENSSL_NO_CHAIN_VERIFY |
377 | return 1; | 377 | return 1; |
378 | #else | 378 | #else |
379 | int i, ok=0; | 379 | int i, ok=0, must_be_ca; |
380 | X509 *x; | 380 | X509 *x; |
381 | int (*cb)(); | 381 | int (*cb)(); |
382 | int proxy_path_length = 0; | ||
383 | int allow_proxy_certs = !!(ctx->flags & X509_V_FLAG_ALLOW_PROXY_CERTS); | ||
382 | cb=ctx->verify_cb; | 384 | cb=ctx->verify_cb; |
385 | |||
386 | /* must_be_ca can have 1 of 3 values: | ||
387 | -1: we accept both CA and non-CA certificates, to allow direct | ||
388 | use of self-signed certificates (which are marked as CA). | ||
389 | 0: we only accept non-CA certificates. This is currently not | ||
390 | used, but the possibility is present for future extensions. | ||
391 | 1: we only accept CA certificates. This is currently used for | ||
392 | all certificates in the chain except the leaf certificate. | ||
393 | */ | ||
394 | must_be_ca = -1; | ||
395 | |||
396 | /* A hack to keep people who don't want to modify their software | ||
397 | happy */ | ||
398 | if (getenv("OPENSSL_ALLOW_PROXY_CERTS")) | ||
399 | allow_proxy_certs = 1; | ||
400 | |||
383 | /* Check all untrusted certificates */ | 401 | /* Check all untrusted certificates */ |
384 | for (i = 0; i < ctx->last_untrusted; i++) | 402 | for (i = 0; i < ctx->last_untrusted; i++) |
385 | { | 403 | { |
@@ -394,23 +412,73 @@ static int check_chain_purpose(X509_STORE_CTX *ctx) | |||
394 | ok=cb(0,ctx); | 412 | ok=cb(0,ctx); |
395 | if (!ok) goto end; | 413 | if (!ok) goto end; |
396 | } | 414 | } |
397 | ret = X509_check_purpose(x, ctx->purpose, i); | 415 | if (!allow_proxy_certs && (x->ex_flags & EXFLAG_PROXY)) |
398 | if ((ret == 0) | ||
399 | || ((ctx->flags & X509_V_FLAG_X509_STRICT) | ||
400 | && (ret != 1))) | ||
401 | { | 416 | { |
402 | if (i) | 417 | ctx->error = X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED; |
418 | ctx->error_depth = i; | ||
419 | ctx->current_cert = x; | ||
420 | ok=cb(0,ctx); | ||
421 | if (!ok) goto end; | ||
422 | } | ||
423 | ret = X509_check_ca(x); | ||
424 | switch(must_be_ca) | ||
425 | { | ||
426 | case -1: | ||
427 | if ((ctx->flags & X509_V_FLAG_X509_STRICT) | ||
428 | && (ret != 1) && (ret != 0)) | ||
429 | { | ||
430 | ret = 0; | ||
403 | ctx->error = X509_V_ERR_INVALID_CA; | 431 | ctx->error = X509_V_ERR_INVALID_CA; |
432 | } | ||
404 | else | 433 | else |
405 | ctx->error = X509_V_ERR_INVALID_PURPOSE; | 434 | ret = 1; |
435 | break; | ||
436 | case 0: | ||
437 | if (ret != 0) | ||
438 | { | ||
439 | ret = 0; | ||
440 | ctx->error = X509_V_ERR_INVALID_NON_CA; | ||
441 | } | ||
442 | else | ||
443 | ret = 1; | ||
444 | break; | ||
445 | default: | ||
446 | if ((ret == 0) | ||
447 | || ((ctx->flags & X509_V_FLAG_X509_STRICT) | ||
448 | && (ret != 1))) | ||
449 | { | ||
450 | ret = 0; | ||
451 | ctx->error = X509_V_ERR_INVALID_CA; | ||
452 | } | ||
453 | else | ||
454 | ret = 1; | ||
455 | break; | ||
456 | } | ||
457 | if (ret == 0) | ||
458 | { | ||
406 | ctx->error_depth = i; | 459 | ctx->error_depth = i; |
407 | ctx->current_cert = x; | 460 | ctx->current_cert = x; |
408 | ok=cb(0,ctx); | 461 | ok=cb(0,ctx); |
409 | if (!ok) goto end; | 462 | if (!ok) goto end; |
410 | } | 463 | } |
464 | if (ctx->purpose > 0) | ||
465 | { | ||
466 | ret = X509_check_purpose(x, ctx->purpose, | ||
467 | must_be_ca > 0); | ||
468 | if ((ret == 0) | ||
469 | || ((ctx->flags & X509_V_FLAG_X509_STRICT) | ||
470 | && (ret != 1))) | ||
471 | { | ||
472 | ctx->error = X509_V_ERR_INVALID_PURPOSE; | ||
473 | ctx->error_depth = i; | ||
474 | ctx->current_cert = x; | ||
475 | ok=cb(0,ctx); | ||
476 | if (!ok) goto end; | ||
477 | } | ||
478 | } | ||
411 | /* Check pathlen */ | 479 | /* Check pathlen */ |
412 | if ((i > 1) && (x->ex_pathlen != -1) | 480 | if ((i > 1) && (x->ex_pathlen != -1) |
413 | && (i > (x->ex_pathlen + 1))) | 481 | && (i > (x->ex_pathlen + proxy_path_length + 1))) |
414 | { | 482 | { |
415 | ctx->error = X509_V_ERR_PATH_LENGTH_EXCEEDED; | 483 | ctx->error = X509_V_ERR_PATH_LENGTH_EXCEEDED; |
416 | ctx->error_depth = i; | 484 | ctx->error_depth = i; |
@@ -418,6 +486,32 @@ static int check_chain_purpose(X509_STORE_CTX *ctx) | |||
418 | ok=cb(0,ctx); | 486 | ok=cb(0,ctx); |
419 | if (!ok) goto end; | 487 | if (!ok) goto end; |
420 | } | 488 | } |
489 | /* If this certificate is a proxy certificate, the next | ||
490 | certificate must be another proxy certificate or a EE | ||
491 | certificate. If not, the next certificate must be a | ||
492 | CA certificate. */ | ||
493 | if (x->ex_flags & EXFLAG_PROXY) | ||
494 | { | ||
495 | PROXY_CERT_INFO_EXTENSION *pci = | ||
496 | X509_get_ext_d2i(x, NID_proxyCertInfo, | ||
497 | NULL, NULL); | ||
498 | if (pci->pcPathLengthConstraint && | ||
499 | ASN1_INTEGER_get(pci->pcPathLengthConstraint) | ||
500 | < i) | ||
501 | { | ||
502 | PROXY_CERT_INFO_EXTENSION_free(pci); | ||
503 | ctx->error = X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED; | ||
504 | ctx->error_depth = i; | ||
505 | ctx->current_cert = x; | ||
506 | ok=cb(0,ctx); | ||
507 | if (!ok) goto end; | ||
508 | } | ||
509 | PROXY_CERT_INFO_EXTENSION_free(pci); | ||
510 | proxy_path_length++; | ||
511 | must_be_ca = 0; | ||
512 | } | ||
513 | else | ||
514 | must_be_ca = 1; | ||
421 | } | 515 | } |
422 | ok = 1; | 516 | ok = 1; |
423 | end: | 517 | end: |
@@ -627,6 +721,15 @@ static int cert_crl(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x) | |||
627 | X509_EXTENSION *ext; | 721 | X509_EXTENSION *ext; |
628 | /* Look for serial number of certificate in CRL */ | 722 | /* Look for serial number of certificate in CRL */ |
629 | rtmp.serialNumber = X509_get_serialNumber(x); | 723 | rtmp.serialNumber = X509_get_serialNumber(x); |
724 | /* Sort revoked into serial number order if not already sorted. | ||
725 | * Do this under a lock to avoid race condition. | ||
726 | */ | ||
727 | if (!sk_X509_REVOKED_is_sorted(crl->crl->revoked)) | ||
728 | { | ||
729 | CRYPTO_w_lock(CRYPTO_LOCK_X509_CRL); | ||
730 | sk_X509_REVOKED_sort(crl->crl->revoked); | ||
731 | CRYPTO_w_unlock(CRYPTO_LOCK_X509_CRL); | ||
732 | } | ||
630 | idx = sk_X509_REVOKED_find(crl->crl->revoked, &rtmp); | 733 | idx = sk_X509_REVOKED_find(crl->crl->revoked, &rtmp); |
631 | /* If found assume revoked: want something cleverer than | 734 | /* If found assume revoked: want something cleverer than |
632 | * this to handle entry extensions in V2 CRLs. | 735 | * this to handle entry extensions in V2 CRLs. |
@@ -772,6 +875,7 @@ static int internal_verify(X509_STORE_CTX *ctx) | |||
772 | } | 875 | } |
773 | 876 | ||
774 | /* The last error (if any) is still in the error value */ | 877 | /* The last error (if any) is still in the error value */ |
878 | ctx->current_issuer=xi; | ||
775 | ctx->current_cert=xs; | 879 | ctx->current_cert=xs; |
776 | ok=(*cb)(1,ctx); | 880 | ok=(*cb)(1,ctx); |
777 | if (!ok) goto end; | 881 | if (!ok) goto end; |
@@ -851,7 +955,8 @@ int X509_cmp_time(ASN1_TIME *ctm, time_t *cmp_time) | |||
851 | atm.length=sizeof(buff2); | 955 | atm.length=sizeof(buff2); |
852 | atm.data=(unsigned char *)buff2; | 956 | atm.data=(unsigned char *)buff2; |
853 | 957 | ||
854 | X509_time_adj(&atm,-offset*60, cmp_time); | 958 | if (X509_time_adj(&atm,-offset*60, cmp_time) == NULL) |
959 | return 0; | ||
855 | 960 | ||
856 | if (ctm->type == V_ASN1_UTCTIME) | 961 | if (ctm->type == V_ASN1_UTCTIME) |
857 | { | 962 | { |
diff --git a/src/lib/libcrypto/x509/x509_vfy.h b/src/lib/libcrypto/x509/x509_vfy.h index 198495884c..7fd1f0bc4d 100644 --- a/src/lib/libcrypto/x509/x509_vfy.h +++ b/src/lib/libcrypto/x509/x509_vfy.h | |||
@@ -276,7 +276,7 @@ struct x509_store_ctx_st /* X509_STORE_CTX */ | |||
276 | #define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 | 276 | #define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 |
277 | #define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 | 277 | #define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 |
278 | #define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 | 278 | #define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 |
279 | #define X509_V_ERR_CERT_NOT_YET_VALID 9 | 279 | #define X509_V_ERR_CERT_NOT_YET_VALID 9 |
280 | #define X509_V_ERR_CERT_HAS_EXPIRED 10 | 280 | #define X509_V_ERR_CERT_HAS_EXPIRED 10 |
281 | #define X509_V_ERR_CRL_NOT_YET_VALID 11 | 281 | #define X509_V_ERR_CRL_NOT_YET_VALID 11 |
282 | #define X509_V_ERR_CRL_HAS_EXPIRED 12 | 282 | #define X509_V_ERR_CRL_HAS_EXPIRED 12 |
@@ -306,6 +306,10 @@ struct x509_store_ctx_st /* X509_STORE_CTX */ | |||
306 | #define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 | 306 | #define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 |
307 | #define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 | 307 | #define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 |
308 | #define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 | 308 | #define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 |
309 | #define X509_V_ERR_INVALID_NON_CA 37 | ||
310 | #define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 | ||
311 | #define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 | ||
312 | #define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 | ||
309 | 313 | ||
310 | /* The application is not happy */ | 314 | /* The application is not happy */ |
311 | #define X509_V_ERR_APPLICATION_VERIFICATION 50 | 315 | #define X509_V_ERR_APPLICATION_VERIFICATION 50 |
@@ -324,6 +328,8 @@ struct x509_store_ctx_st /* X509_STORE_CTX */ | |||
324 | #define X509_V_FLAG_IGNORE_CRITICAL 0x10 | 328 | #define X509_V_FLAG_IGNORE_CRITICAL 0x10 |
325 | /* Disable workarounds for broken certificates */ | 329 | /* Disable workarounds for broken certificates */ |
326 | #define X509_V_FLAG_X509_STRICT 0x20 | 330 | #define X509_V_FLAG_X509_STRICT 0x20 |
331 | /* Enable proxy certificate validation */ | ||
332 | #define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40 | ||
327 | 333 | ||
328 | int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, int type, | 334 | int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, int type, |
329 | X509_NAME *name); | 335 | X509_NAME *name); |
diff --git a/src/lib/libcrypto/x509/x509cset.c b/src/lib/libcrypto/x509/x509cset.c index 6cac440ea9..9d1646d5c8 100644 --- a/src/lib/libcrypto/x509/x509cset.c +++ b/src/lib/libcrypto/x509/x509cset.c | |||
@@ -129,6 +129,7 @@ int X509_CRL_sort(X509_CRL *c) | |||
129 | r=sk_X509_REVOKED_value(c->crl->revoked,i); | 129 | r=sk_X509_REVOKED_value(c->crl->revoked,i); |
130 | r->sequence=i; | 130 | r->sequence=i; |
131 | } | 131 | } |
132 | c->crl->enc.modified = 1; | ||
132 | return 1; | 133 | return 1; |
133 | } | 134 | } |
134 | 135 | ||
diff --git a/src/lib/libcrypto/x509/x509name.c b/src/lib/libcrypto/x509/x509name.c index 4c20e03ece..068abfe5f0 100644 --- a/src/lib/libcrypto/x509/x509name.c +++ b/src/lib/libcrypto/x509/x509name.c | |||
@@ -195,8 +195,8 @@ int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, | |||
195 | return ret; | 195 | return ret; |
196 | } | 196 | } |
197 | 197 | ||
198 | int X509_NAME_add_entry_by_txt(X509_NAME *name, char *field, int type, | 198 | int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, |
199 | unsigned char *bytes, int len, int loc, int set) | 199 | const unsigned char *bytes, int len, int loc, int set) |
200 | { | 200 | { |
201 | X509_NAME_ENTRY *ne; | 201 | X509_NAME_ENTRY *ne; |
202 | int ret; | 202 | int ret; |
@@ -273,7 +273,7 @@ err: | |||
273 | } | 273 | } |
274 | 274 | ||
275 | X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, | 275 | X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, |
276 | char *field, int type, unsigned char *bytes, int len) | 276 | const char *field, int type, const unsigned char *bytes, int len) |
277 | { | 277 | { |
278 | ASN1_OBJECT *obj; | 278 | ASN1_OBJECT *obj; |
279 | X509_NAME_ENTRY *nentry; | 279 | X509_NAME_ENTRY *nentry; |
@@ -309,7 +309,7 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, | |||
309 | } | 309 | } |
310 | 310 | ||
311 | X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, | 311 | X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, |
312 | ASN1_OBJECT *obj, int type, unsigned char *bytes, int len) | 312 | ASN1_OBJECT *obj, int type, const unsigned char *bytes, int len) |
313 | { | 313 | { |
314 | X509_NAME_ENTRY *ret; | 314 | X509_NAME_ENTRY *ret; |
315 | 315 | ||
@@ -347,7 +347,7 @@ int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, ASN1_OBJECT *obj) | |||
347 | } | 347 | } |
348 | 348 | ||
349 | int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, | 349 | int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, |
350 | unsigned char *bytes, int len) | 350 | const unsigned char *bytes, int len) |
351 | { | 351 | { |
352 | int i; | 352 | int i; |
353 | 353 | ||
diff --git a/src/lib/libcrypto/x509/x_all.c b/src/lib/libcrypto/x509/x_all.c index fb5015cd4d..ac6dea493a 100644 --- a/src/lib/libcrypto/x509/x_all.c +++ b/src/lib/libcrypto/x509/x_all.c | |||
@@ -103,6 +103,7 @@ int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md) | |||
103 | 103 | ||
104 | int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md) | 104 | int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md) |
105 | { | 105 | { |
106 | x->crl->enc.modified = 1; | ||
106 | return(ASN1_item_sign(ASN1_ITEM_rptr(X509_CRL_INFO),x->crl->sig_alg, | 107 | return(ASN1_item_sign(ASN1_ITEM_rptr(X509_CRL_INFO),x->crl->sig_alg, |
107 | x->sig_alg, x->signature, x->crl,pkey,md)); | 108 | x->sig_alg, x->signature, x->crl,pkey,md)); |
108 | } | 109 | } |
diff --git a/src/lib/libcrypto/x509v3/ext_dat.h b/src/lib/libcrypto/x509v3/ext_dat.h index 5442480595..d8328ac468 100644 --- a/src/lib/libcrypto/x509v3/ext_dat.h +++ b/src/lib/libcrypto/x509v3/ext_dat.h | |||
@@ -3,7 +3,7 @@ | |||
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
5 | /* ==================================================================== | 5 | /* ==================================================================== |
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | 6 | * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. |
7 | * | 7 | * |
8 | * Redistribution and use in source and binary forms, with or without | 8 | * Redistribution and use in source and binary forms, with or without |
9 | * modification, are permitted provided that the following conditions | 9 | * modification, are permitted provided that the following conditions |
@@ -60,10 +60,11 @@ | |||
60 | extern X509V3_EXT_METHOD v3_bcons, v3_nscert, v3_key_usage, v3_ext_ku; | 60 | extern X509V3_EXT_METHOD v3_bcons, v3_nscert, v3_key_usage, v3_ext_ku; |
61 | extern X509V3_EXT_METHOD v3_pkey_usage_period, v3_sxnet, v3_info, v3_sinfo; | 61 | extern X509V3_EXT_METHOD v3_pkey_usage_period, v3_sxnet, v3_info, v3_sinfo; |
62 | extern X509V3_EXT_METHOD v3_ns_ia5_list[], v3_alt[], v3_skey_id, v3_akey_id; | 62 | extern X509V3_EXT_METHOD v3_ns_ia5_list[], v3_alt[], v3_skey_id, v3_akey_id; |
63 | extern X509V3_EXT_METHOD v3_crl_num, v3_crl_reason, v3_crl_invdate, v3_cpols, v3_crld; | 63 | extern X509V3_EXT_METHOD v3_crl_num, v3_crl_reason, v3_crl_invdate; |
64 | extern X509V3_EXT_METHOD v3_delta_crl, v3_cpols, v3_crld; | ||
64 | extern X509V3_EXT_METHOD v3_ocsp_nonce, v3_ocsp_accresp, v3_ocsp_acutoff; | 65 | extern X509V3_EXT_METHOD v3_ocsp_nonce, v3_ocsp_accresp, v3_ocsp_acutoff; |
65 | extern X509V3_EXT_METHOD v3_ocsp_crlid, v3_ocsp_nocheck, v3_ocsp_serviceloc; | 66 | extern X509V3_EXT_METHOD v3_ocsp_crlid, v3_ocsp_nocheck, v3_ocsp_serviceloc; |
66 | extern X509V3_EXT_METHOD v3_crl_hold; | 67 | extern X509V3_EXT_METHOD v3_crl_hold, v3_pci; |
67 | 68 | ||
68 | /* This table will be searched using OBJ_bsearch so it *must* kept in | 69 | /* This table will be searched using OBJ_bsearch so it *must* kept in |
69 | * order of the ext_nid values. | 70 | * order of the ext_nid values. |
@@ -89,6 +90,7 @@ static X509V3_EXT_METHOD *standard_exts[] = { | |||
89 | &v3_akey_id, | 90 | &v3_akey_id, |
90 | &v3_crld, | 91 | &v3_crld, |
91 | &v3_ext_ku, | 92 | &v3_ext_ku, |
93 | &v3_delta_crl, | ||
92 | &v3_crl_reason, | 94 | &v3_crl_reason, |
93 | #ifndef OPENSSL_NO_OCSP | 95 | #ifndef OPENSSL_NO_OCSP |
94 | &v3_crl_invdate, | 96 | &v3_crl_invdate, |
@@ -105,8 +107,9 @@ static X509V3_EXT_METHOD *standard_exts[] = { | |||
105 | #endif | 107 | #endif |
106 | &v3_sinfo, | 108 | &v3_sinfo, |
107 | #ifndef OPENSSL_NO_OCSP | 109 | #ifndef OPENSSL_NO_OCSP |
108 | &v3_crl_hold | 110 | &v3_crl_hold, |
109 | #endif | 111 | #endif |
112 | &v3_pci, | ||
110 | }; | 113 | }; |
111 | 114 | ||
112 | /* Number of standard extensions */ | 115 | /* Number of standard extensions */ |
diff --git a/src/lib/libcrypto/x509v3/v3_bitst.c b/src/lib/libcrypto/x509v3/v3_bitst.c index 16cf125562..274965306d 100644 --- a/src/lib/libcrypto/x509v3/v3_bitst.c +++ b/src/lib/libcrypto/x509v3/v3_bitst.c | |||
@@ -124,7 +124,12 @@ static ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, | |||
124 | for(bnam = method->usr_data; bnam->lname; bnam++) { | 124 | for(bnam = method->usr_data; bnam->lname; bnam++) { |
125 | if(!strcmp(bnam->sname, val->name) || | 125 | if(!strcmp(bnam->sname, val->name) || |
126 | !strcmp(bnam->lname, val->name) ) { | 126 | !strcmp(bnam->lname, val->name) ) { |
127 | ASN1_BIT_STRING_set_bit(bs, bnam->bitnum, 1); | 127 | if(!ASN1_BIT_STRING_set_bit(bs, bnam->bitnum, 1)) { |
128 | X509V3err(X509V3_F_V2I_ASN1_BIT_STRING, | ||
129 | ERR_R_MALLOC_FAILURE); | ||
130 | M_ASN1_BIT_STRING_free(bs); | ||
131 | return NULL; | ||
132 | } | ||
128 | break; | 133 | break; |
129 | } | 134 | } |
130 | } | 135 | } |
diff --git a/src/lib/libcrypto/x509v3/v3_ia5.c b/src/lib/libcrypto/x509v3/v3_ia5.c index f9414456de..9683afa47c 100644 --- a/src/lib/libcrypto/x509v3/v3_ia5.c +++ b/src/lib/libcrypto/x509v3/v3_ia5.c | |||
@@ -82,7 +82,10 @@ static char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, | |||
82 | { | 82 | { |
83 | char *tmp; | 83 | char *tmp; |
84 | if(!ia5 || !ia5->length) return NULL; | 84 | if(!ia5 || !ia5->length) return NULL; |
85 | if (!(tmp = OPENSSL_malloc(ia5->length + 1))) return NULL; | 85 | if(!(tmp = OPENSSL_malloc(ia5->length + 1))) { |
86 | X509V3err(X509V3_F_I2S_ASN1_IA5STRING,ERR_R_MALLOC_FAILURE); | ||
87 | return NULL; | ||
88 | } | ||
86 | memcpy(tmp, ia5->data, ia5->length); | 89 | memcpy(tmp, ia5->data, ia5->length); |
87 | tmp[ia5->length] = 0; | 90 | tmp[ia5->length] = 0; |
88 | return tmp; | 91 | return tmp; |
diff --git a/src/lib/libcrypto/x509v3/v3_int.c b/src/lib/libcrypto/x509v3/v3_int.c index f34cbfb731..7a43b4717b 100644 --- a/src/lib/libcrypto/x509v3/v3_int.c +++ b/src/lib/libcrypto/x509v3/v3_int.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
5 | /* ==================================================================== | 5 | /* ==================================================================== |
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | 6 | * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. |
7 | * | 7 | * |
8 | * Redistribution and use in source and binary forms, with or without | 8 | * Redistribution and use in source and binary forms, with or without |
9 | * modification, are permitted provided that the following conditions | 9 | * modification, are permitted provided that the following conditions |
@@ -61,9 +61,16 @@ | |||
61 | #include <openssl/x509v3.h> | 61 | #include <openssl/x509v3.h> |
62 | 62 | ||
63 | X509V3_EXT_METHOD v3_crl_num = { | 63 | X509V3_EXT_METHOD v3_crl_num = { |
64 | NID_crl_number, 0, ASN1_ITEM_ref(ASN1_INTEGER), | 64 | NID_crl_number, 0, ASN1_ITEM_ref(ASN1_INTEGER), |
65 | 0,0,0,0, | 65 | 0,0,0,0, |
66 | (X509V3_EXT_I2S)i2s_ASN1_INTEGER, | 66 | (X509V3_EXT_I2S)i2s_ASN1_INTEGER, |
67 | 0, | 67 | 0, |
68 | 0,0,0,0, NULL}; | 68 | 0,0,0,0, NULL}; |
69 | |||
70 | X509V3_EXT_METHOD v3_delta_crl = { | ||
71 | NID_delta_crl, 0, ASN1_ITEM_ref(ASN1_INTEGER), | ||
72 | 0,0,0,0, | ||
73 | (X509V3_EXT_I2S)i2s_ASN1_INTEGER, | ||
74 | 0, | ||
75 | 0,0,0,0, NULL}; | ||
69 | 76 | ||
diff --git a/src/lib/libcrypto/x509v3/v3_purp.c b/src/lib/libcrypto/x509v3/v3_purp.c index b3d1ae5d1c..bbdf6da493 100644 --- a/src/lib/libcrypto/x509v3/v3_purp.c +++ b/src/lib/libcrypto/x509v3/v3_purp.c | |||
@@ -63,7 +63,6 @@ | |||
63 | 63 | ||
64 | static void x509v3_cache_extensions(X509 *x); | 64 | static void x509v3_cache_extensions(X509 *x); |
65 | 65 | ||
66 | static int ca_check(const X509 *x); | ||
67 | static int check_ssl_ca(const X509 *x); | 66 | static int check_ssl_ca(const X509 *x); |
68 | static int check_purpose_ssl_client(const X509_PURPOSE *xp, const X509 *x, int ca); | 67 | static int check_purpose_ssl_client(const X509_PURPOSE *xp, const X509 *x, int ca); |
69 | static int check_purpose_ssl_server(const X509_PURPOSE *xp, const X509 *x, int ca); | 68 | static int check_purpose_ssl_server(const X509_PURPOSE *xp, const X509 *x, int ca); |
@@ -286,7 +285,8 @@ int X509_supported_extension(X509_EXTENSION *ex) | |||
286 | NID_key_usage, /* 83 */ | 285 | NID_key_usage, /* 83 */ |
287 | NID_subject_alt_name, /* 85 */ | 286 | NID_subject_alt_name, /* 85 */ |
288 | NID_basic_constraints, /* 87 */ | 287 | NID_basic_constraints, /* 87 */ |
289 | NID_ext_key_usage /* 126 */ | 288 | NID_ext_key_usage, /* 126 */ |
289 | NID_proxyCertInfo /* 661 */ | ||
290 | }; | 290 | }; |
291 | 291 | ||
292 | int ex_nid; | 292 | int ex_nid; |
@@ -307,6 +307,7 @@ int X509_supported_extension(X509_EXTENSION *ex) | |||
307 | static void x509v3_cache_extensions(X509 *x) | 307 | static void x509v3_cache_extensions(X509 *x) |
308 | { | 308 | { |
309 | BASIC_CONSTRAINTS *bs; | 309 | BASIC_CONSTRAINTS *bs; |
310 | PROXY_CERT_INFO_EXTENSION *pci; | ||
310 | ASN1_BIT_STRING *usage; | 311 | ASN1_BIT_STRING *usage; |
311 | ASN1_BIT_STRING *ns; | 312 | ASN1_BIT_STRING *ns; |
312 | EXTENDED_KEY_USAGE *extusage; | 313 | EXTENDED_KEY_USAGE *extusage; |
@@ -335,6 +336,16 @@ static void x509v3_cache_extensions(X509 *x) | |||
335 | BASIC_CONSTRAINTS_free(bs); | 336 | BASIC_CONSTRAINTS_free(bs); |
336 | x->ex_flags |= EXFLAG_BCONS; | 337 | x->ex_flags |= EXFLAG_BCONS; |
337 | } | 338 | } |
339 | /* Handle proxy certificates */ | ||
340 | if((pci=X509_get_ext_d2i(x, NID_proxyCertInfo, NULL, NULL))) { | ||
341 | if (x->ex_flags & EXFLAG_CA | ||
342 | || X509_get_ext_by_NID(x, NID_subject_alt_name, 0) >= 0 | ||
343 | || X509_get_ext_by_NID(x, NID_issuer_alt_name, 0) >= 0) { | ||
344 | x->ex_flags |= EXFLAG_INVALID; | ||
345 | } | ||
346 | PROXY_CERT_INFO_EXTENSION_free(pci); | ||
347 | x->ex_flags |= EXFLAG_PROXY; | ||
348 | } | ||
338 | /* Handle key usage */ | 349 | /* Handle key usage */ |
339 | if((usage=X509_get_ext_d2i(x, NID_key_usage, NULL, NULL))) { | 350 | if((usage=X509_get_ext_d2i(x, NID_key_usage, NULL, NULL))) { |
340 | if(usage->length > 0) { | 351 | if(usage->length > 0) { |
@@ -426,7 +437,7 @@ static void x509v3_cache_extensions(X509 *x) | |||
426 | #define ns_reject(x, usage) \ | 437 | #define ns_reject(x, usage) \ |
427 | (((x)->ex_flags & EXFLAG_NSCERT) && !((x)->ex_nscert & (usage))) | 438 | (((x)->ex_flags & EXFLAG_NSCERT) && !((x)->ex_nscert & (usage))) |
428 | 439 | ||
429 | static int ca_check(const X509 *x) | 440 | static int check_ca(const X509 *x) |
430 | { | 441 | { |
431 | /* keyUsage if present should allow cert signing */ | 442 | /* keyUsage if present should allow cert signing */ |
432 | if(ku_reject(x, KU_KEY_CERT_SIGN)) return 0; | 443 | if(ku_reject(x, KU_KEY_CERT_SIGN)) return 0; |
@@ -435,25 +446,37 @@ static int ca_check(const X509 *x) | |||
435 | /* If basicConstraints says not a CA then say so */ | 446 | /* If basicConstraints says not a CA then say so */ |
436 | else return 0; | 447 | else return 0; |
437 | } else { | 448 | } else { |
449 | /* we support V1 roots for... uh, I don't really know why. */ | ||
438 | if((x->ex_flags & V1_ROOT) == V1_ROOT) return 3; | 450 | if((x->ex_flags & V1_ROOT) == V1_ROOT) return 3; |
439 | /* If key usage present it must have certSign so tolerate it */ | 451 | /* If key usage present it must have certSign so tolerate it */ |
440 | else if (x->ex_flags & EXFLAG_KUSAGE) return 4; | 452 | else if (x->ex_flags & EXFLAG_KUSAGE) return 4; |
441 | else return 2; | 453 | /* Older certificates could have Netscape-specific CA types */ |
454 | else if (x->ex_flags & EXFLAG_NSCERT | ||
455 | && x->ex_nscert & NS_ANY_CA) return 5; | ||
456 | /* can this still be regarded a CA certificate? I doubt it */ | ||
457 | return 0; | ||
442 | } | 458 | } |
443 | } | 459 | } |
444 | 460 | ||
461 | int X509_check_ca(X509 *x) | ||
462 | { | ||
463 | if(!(x->ex_flags & EXFLAG_SET)) { | ||
464 | CRYPTO_w_lock(CRYPTO_LOCK_X509); | ||
465 | x509v3_cache_extensions(x); | ||
466 | CRYPTO_w_unlock(CRYPTO_LOCK_X509); | ||
467 | } | ||
468 | |||
469 | return check_ca(x); | ||
470 | } | ||
471 | |||
445 | /* Check SSL CA: common checks for SSL client and server */ | 472 | /* Check SSL CA: common checks for SSL client and server */ |
446 | static int check_ssl_ca(const X509 *x) | 473 | static int check_ssl_ca(const X509 *x) |
447 | { | 474 | { |
448 | int ca_ret; | 475 | int ca_ret; |
449 | ca_ret = ca_check(x); | 476 | ca_ret = check_ca(x); |
450 | if(!ca_ret) return 0; | 477 | if(!ca_ret) return 0; |
451 | /* check nsCertType if present */ | 478 | /* check nsCertType if present */ |
452 | if(x->ex_flags & EXFLAG_NSCERT) { | 479 | if(ca_ret != 5 || x->ex_nscert & NS_SSL_CA) return ca_ret; |
453 | if(x->ex_nscert & NS_SSL_CA) return ca_ret; | ||
454 | return 0; | ||
455 | } | ||
456 | if(ca_ret != 2) return ca_ret; | ||
457 | else return 0; | 480 | else return 0; |
458 | } | 481 | } |
459 | 482 | ||
@@ -498,14 +521,10 @@ static int purpose_smime(const X509 *x, int ca) | |||
498 | if(xku_reject(x,XKU_SMIME)) return 0; | 521 | if(xku_reject(x,XKU_SMIME)) return 0; |
499 | if(ca) { | 522 | if(ca) { |
500 | int ca_ret; | 523 | int ca_ret; |
501 | ca_ret = ca_check(x); | 524 | ca_ret = check_ca(x); |
502 | if(!ca_ret) return 0; | 525 | if(!ca_ret) return 0; |
503 | /* check nsCertType if present */ | 526 | /* check nsCertType if present */ |
504 | if(x->ex_flags & EXFLAG_NSCERT) { | 527 | if(ca_ret != 5 || x->ex_nscert & NS_SMIME_CA) return ca_ret; |
505 | if(x->ex_nscert & NS_SMIME_CA) return ca_ret; | ||
506 | return 0; | ||
507 | } | ||
508 | if(ca_ret != 2) return ca_ret; | ||
509 | else return 0; | 528 | else return 0; |
510 | } | 529 | } |
511 | if(x->ex_flags & EXFLAG_NSCERT) { | 530 | if(x->ex_flags & EXFLAG_NSCERT) { |
@@ -539,7 +558,7 @@ static int check_purpose_crl_sign(const X509_PURPOSE *xp, const X509 *x, int ca) | |||
539 | { | 558 | { |
540 | if(ca) { | 559 | if(ca) { |
541 | int ca_ret; | 560 | int ca_ret; |
542 | if((ca_ret = ca_check(x)) != 2) return ca_ret; | 561 | if((ca_ret = check_ca(x)) != 2) return ca_ret; |
543 | else return 0; | 562 | else return 0; |
544 | } | 563 | } |
545 | if(ku_reject(x, KU_CRL_SIGN)) return 0; | 564 | if(ku_reject(x, KU_CRL_SIGN)) return 0; |
@@ -552,17 +571,9 @@ static int check_purpose_crl_sign(const X509_PURPOSE *xp, const X509 *x, int ca) | |||
552 | 571 | ||
553 | static int ocsp_helper(const X509_PURPOSE *xp, const X509 *x, int ca) | 572 | static int ocsp_helper(const X509_PURPOSE *xp, const X509 *x, int ca) |
554 | { | 573 | { |
555 | /* Must be a valid CA */ | 574 | /* Must be a valid CA. Should we really support the "I don't know" |
556 | if(ca) { | 575 | value (2)? */ |
557 | int ca_ret; | 576 | if(ca) return check_ca(x); |
558 | ca_ret = ca_check(x); | ||
559 | if(ca_ret != 2) return ca_ret; | ||
560 | if(x->ex_flags & EXFLAG_NSCERT) { | ||
561 | if(x->ex_nscert & NS_ANY_CA) return ca_ret; | ||
562 | return 0; | ||
563 | } | ||
564 | return 0; | ||
565 | } | ||
566 | /* leaf certificate is checked in OCSP_verify() */ | 577 | /* leaf certificate is checked in OCSP_verify() */ |
567 | return 1; | 578 | return 1; |
568 | } | 579 | } |
@@ -624,7 +635,13 @@ int X509_check_issued(X509 *issuer, X509 *subject) | |||
624 | return X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH; | 635 | return X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH; |
625 | } | 636 | } |
626 | } | 637 | } |
627 | if(ku_reject(issuer, KU_KEY_CERT_SIGN)) return X509_V_ERR_KEYUSAGE_NO_CERTSIGN; | 638 | if(subject->ex_flags & EXFLAG_PROXY) |
639 | { | ||
640 | if(ku_reject(issuer, KU_DIGITAL_SIGNATURE)) | ||
641 | return X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE; | ||
642 | } | ||
643 | else if(ku_reject(issuer, KU_KEY_CERT_SIGN)) | ||
644 | return X509_V_ERR_KEYUSAGE_NO_CERTSIGN; | ||
628 | return X509_V_OK; | 645 | return X509_V_OK; |
629 | } | 646 | } |
630 | 647 | ||
diff --git a/src/lib/libcrypto/x509v3/v3err.c b/src/lib/libcrypto/x509v3/v3err.c index 6458e95bb9..2df0c3ef01 100644 --- a/src/lib/libcrypto/x509v3/v3err.c +++ b/src/lib/libcrypto/x509v3/v3err.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* crypto/x509v3/v3err.c */ | 1 | /* crypto/x509v3/v3err.c */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. |
4 | * | 4 | * |
5 | * Redistribution and use in source and binary forms, with or without | 5 | * Redistribution and use in source and binary forms, with or without |
6 | * modification, are permitted provided that the following conditions | 6 | * modification, are permitted provided that the following conditions |
@@ -72,12 +72,14 @@ static ERR_STRING_DATA X509V3_str_functs[]= | |||
72 | {ERR_PACK(0,X509V3_F_DO_EXT_I2D,0), "DO_EXT_I2D"}, | 72 | {ERR_PACK(0,X509V3_F_DO_EXT_I2D,0), "DO_EXT_I2D"}, |
73 | {ERR_PACK(0,X509V3_F_HEX_TO_STRING,0), "hex_to_string"}, | 73 | {ERR_PACK(0,X509V3_F_HEX_TO_STRING,0), "hex_to_string"}, |
74 | {ERR_PACK(0,X509V3_F_I2S_ASN1_ENUMERATED,0), "i2s_ASN1_ENUMERATED"}, | 74 | {ERR_PACK(0,X509V3_F_I2S_ASN1_ENUMERATED,0), "i2s_ASN1_ENUMERATED"}, |
75 | {ERR_PACK(0,X509V3_F_I2S_ASN1_IA5STRING,0), "I2S_ASN1_IA5STRING"}, | ||
75 | {ERR_PACK(0,X509V3_F_I2S_ASN1_INTEGER,0), "i2s_ASN1_INTEGER"}, | 76 | {ERR_PACK(0,X509V3_F_I2S_ASN1_INTEGER,0), "i2s_ASN1_INTEGER"}, |
76 | {ERR_PACK(0,X509V3_F_I2V_AUTHORITY_INFO_ACCESS,0), "I2V_AUTHORITY_INFO_ACCESS"}, | 77 | {ERR_PACK(0,X509V3_F_I2V_AUTHORITY_INFO_ACCESS,0), "I2V_AUTHORITY_INFO_ACCESS"}, |
77 | {ERR_PACK(0,X509V3_F_NOTICE_SECTION,0), "NOTICE_SECTION"}, | 78 | {ERR_PACK(0,X509V3_F_NOTICE_SECTION,0), "NOTICE_SECTION"}, |
78 | {ERR_PACK(0,X509V3_F_NREF_NOS,0), "NREF_NOS"}, | 79 | {ERR_PACK(0,X509V3_F_NREF_NOS,0), "NREF_NOS"}, |
79 | {ERR_PACK(0,X509V3_F_POLICY_SECTION,0), "POLICY_SECTION"}, | 80 | {ERR_PACK(0,X509V3_F_POLICY_SECTION,0), "POLICY_SECTION"}, |
80 | {ERR_PACK(0,X509V3_F_R2I_CERTPOL,0), "R2I_CERTPOL"}, | 81 | {ERR_PACK(0,X509V3_F_R2I_CERTPOL,0), "R2I_CERTPOL"}, |
82 | {ERR_PACK(0,X509V3_F_R2I_PCI,0), "R2I_PCI"}, | ||
81 | {ERR_PACK(0,X509V3_F_S2I_ASN1_IA5STRING,0), "S2I_ASN1_IA5STRING"}, | 83 | {ERR_PACK(0,X509V3_F_S2I_ASN1_IA5STRING,0), "S2I_ASN1_IA5STRING"}, |
82 | {ERR_PACK(0,X509V3_F_S2I_ASN1_INTEGER,0), "s2i_ASN1_INTEGER"}, | 84 | {ERR_PACK(0,X509V3_F_S2I_ASN1_INTEGER,0), "s2i_ASN1_INTEGER"}, |
83 | {ERR_PACK(0,X509V3_F_S2I_ASN1_OCTET_STRING,0), "s2i_ASN1_OCTET_STRING"}, | 85 | {ERR_PACK(0,X509V3_F_S2I_ASN1_OCTET_STRING,0), "s2i_ASN1_OCTET_STRING"}, |
@@ -128,6 +130,7 @@ static ERR_STRING_DATA X509V3_str_reasons[]= | |||
128 | {X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED,"extension setting not supported"}, | 130 | {X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED,"extension setting not supported"}, |
129 | {X509V3_R_EXTENSION_VALUE_ERROR ,"extension value error"}, | 131 | {X509V3_R_EXTENSION_VALUE_ERROR ,"extension value error"}, |
130 | {X509V3_R_ILLEGAL_HEX_DIGIT ,"illegal hex digit"}, | 132 | {X509V3_R_ILLEGAL_HEX_DIGIT ,"illegal hex digit"}, |
133 | {X509V3_R_INCORRECT_POLICY_SYNTAX_TAG ,"incorrect policy syntax tag"}, | ||
131 | {X509V3_R_INVALID_BOOLEAN_STRING ,"invalid boolean string"}, | 134 | {X509V3_R_INVALID_BOOLEAN_STRING ,"invalid boolean string"}, |
132 | {X509V3_R_INVALID_EXTENSION_STRING ,"invalid extension string"}, | 135 | {X509V3_R_INVALID_EXTENSION_STRING ,"invalid extension string"}, |
133 | {X509V3_R_INVALID_NAME ,"invalid name"}, | 136 | {X509V3_R_INVALID_NAME ,"invalid name"}, |
@@ -139,6 +142,8 @@ static ERR_STRING_DATA X509V3_str_reasons[]= | |||
139 | {X509V3_R_INVALID_OBJECT_IDENTIFIER ,"invalid object identifier"}, | 142 | {X509V3_R_INVALID_OBJECT_IDENTIFIER ,"invalid object identifier"}, |
140 | {X509V3_R_INVALID_OPTION ,"invalid option"}, | 143 | {X509V3_R_INVALID_OPTION ,"invalid option"}, |
141 | {X509V3_R_INVALID_POLICY_IDENTIFIER ,"invalid policy identifier"}, | 144 | {X509V3_R_INVALID_POLICY_IDENTIFIER ,"invalid policy identifier"}, |
145 | {X509V3_R_INVALID_PROXY_POLICY_IDENTIFIER,"invalid proxy policy identifier"}, | ||
146 | {X509V3_R_INVALID_PROXY_POLICY_SETTING ,"invalid proxy policy setting"}, | ||
142 | {X509V3_R_INVALID_PURPOSE ,"invalid purpose"}, | 147 | {X509V3_R_INVALID_PURPOSE ,"invalid purpose"}, |
143 | {X509V3_R_INVALID_SECTION ,"invalid section"}, | 148 | {X509V3_R_INVALID_SECTION ,"invalid section"}, |
144 | {X509V3_R_INVALID_SYNTAX ,"invalid syntax"}, | 149 | {X509V3_R_INVALID_SYNTAX ,"invalid syntax"}, |
@@ -149,9 +154,16 @@ static ERR_STRING_DATA X509V3_str_reasons[]= | |||
149 | {X509V3_R_NO_ISSUER_CERTIFICATE ,"no issuer certificate"}, | 154 | {X509V3_R_NO_ISSUER_CERTIFICATE ,"no issuer certificate"}, |
150 | {X509V3_R_NO_ISSUER_DETAILS ,"no issuer details"}, | 155 | {X509V3_R_NO_ISSUER_DETAILS ,"no issuer details"}, |
151 | {X509V3_R_NO_POLICY_IDENTIFIER ,"no policy identifier"}, | 156 | {X509V3_R_NO_POLICY_IDENTIFIER ,"no policy identifier"}, |
157 | {X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED,"no proxy cert policy language defined"}, | ||
152 | {X509V3_R_NO_PUBLIC_KEY ,"no public key"}, | 158 | {X509V3_R_NO_PUBLIC_KEY ,"no public key"}, |
153 | {X509V3_R_NO_SUBJECT_DETAILS ,"no subject details"}, | 159 | {X509V3_R_NO_SUBJECT_DETAILS ,"no subject details"}, |
154 | {X509V3_R_ODD_NUMBER_OF_DIGITS ,"odd number of digits"}, | 160 | {X509V3_R_ODD_NUMBER_OF_DIGITS ,"odd number of digits"}, |
161 | {X509V3_R_POLICY_LANGUAGE_ALREADTY_DEFINED,"policy language alreadty defined"}, | ||
162 | {X509V3_R_POLICY_PATH_LENGTH ,"policy path length"}, | ||
163 | {X509V3_R_POLICY_PATH_LENGTH_ALREADTY_DEFINED,"policy path length alreadty defined"}, | ||
164 | {X509V3_R_POLICY_SYNTAX_NOT ,"policy syntax not"}, | ||
165 | {X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED,"policy syntax not currently supported"}, | ||
166 | {X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY,"policy when proxy language requires no policy"}, | ||
155 | {X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS ,"unable to get issuer details"}, | 167 | {X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS ,"unable to get issuer details"}, |
156 | {X509V3_R_UNABLE_TO_GET_ISSUER_KEYID ,"unable to get issuer keyid"}, | 168 | {X509V3_R_UNABLE_TO_GET_ISSUER_KEYID ,"unable to get issuer keyid"}, |
157 | {X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT ,"unknown bit string argument"}, | 169 | {X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT ,"unknown bit string argument"}, |
diff --git a/src/lib/libcrypto/x509v3/x509v3.h b/src/lib/libcrypto/x509v3/x509v3.h index fb07a19016..e6d91251c2 100644 --- a/src/lib/libcrypto/x509v3/x509v3.h +++ b/src/lib/libcrypto/x509v3/x509v3.h | |||
@@ -287,6 +287,23 @@ typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; | |||
287 | DECLARE_STACK_OF(POLICYINFO) | 287 | DECLARE_STACK_OF(POLICYINFO) |
288 | DECLARE_ASN1_SET_OF(POLICYINFO) | 288 | DECLARE_ASN1_SET_OF(POLICYINFO) |
289 | 289 | ||
290 | /* Proxy certificate structures, see RFC 3820 */ | ||
291 | typedef struct PROXY_POLICY_st | ||
292 | { | ||
293 | ASN1_OBJECT *policyLanguage; | ||
294 | ASN1_OCTET_STRING *policy; | ||
295 | } PROXY_POLICY; | ||
296 | |||
297 | typedef struct PROXY_CERT_INFO_EXTENSION_st | ||
298 | { | ||
299 | ASN1_INTEGER *pcPathLengthConstraint; | ||
300 | PROXY_POLICY *proxyPolicy; | ||
301 | } PROXY_CERT_INFO_EXTENSION; | ||
302 | |||
303 | DECLARE_ASN1_FUNCTIONS(PROXY_POLICY) | ||
304 | DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION) | ||
305 | |||
306 | |||
290 | #define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \ | 307 | #define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \ |
291 | ",name:", val->name, ",value:", val->value); | 308 | ",name:", val->name, ",value:", val->value); |
292 | 309 | ||
@@ -325,6 +342,7 @@ DECLARE_ASN1_SET_OF(POLICYINFO) | |||
325 | #define EXFLAG_INVALID 0x80 | 342 | #define EXFLAG_INVALID 0x80 |
326 | #define EXFLAG_SET 0x100 | 343 | #define EXFLAG_SET 0x100 |
327 | #define EXFLAG_CRITICAL 0x200 | 344 | #define EXFLAG_CRITICAL 0x200 |
345 | #define EXFLAG_PROXY 0x400 | ||
328 | 346 | ||
329 | #define KU_DIGITAL_SIGNATURE 0x0080 | 347 | #define KU_DIGITAL_SIGNATURE 0x0080 |
330 | #define KU_NON_REPUDIATION 0x0040 | 348 | #define KU_NON_REPUDIATION 0x0040 |
@@ -527,6 +545,7 @@ int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); | |||
527 | 545 | ||
528 | int X509V3_extensions_print(BIO *out, char *title, STACK_OF(X509_EXTENSION) *exts, unsigned long flag, int indent); | 546 | int X509V3_extensions_print(BIO *out, char *title, STACK_OF(X509_EXTENSION) *exts, unsigned long flag, int indent); |
529 | 547 | ||
548 | int X509_check_ca(X509 *x); | ||
530 | int X509_check_purpose(X509 *x, int id, int ca); | 549 | int X509_check_purpose(X509 *x, int id, int ca); |
531 | int X509_supported_extension(X509_EXTENSION *ex); | 550 | int X509_supported_extension(X509_EXTENSION *ex); |
532 | int X509_PURPOSE_set(int *p, int purpose); | 551 | int X509_PURPOSE_set(int *p, int purpose); |
@@ -564,12 +583,14 @@ void ERR_load_X509V3_strings(void); | |||
564 | #define X509V3_F_DO_EXT_I2D 135 | 583 | #define X509V3_F_DO_EXT_I2D 135 |
565 | #define X509V3_F_HEX_TO_STRING 111 | 584 | #define X509V3_F_HEX_TO_STRING 111 |
566 | #define X509V3_F_I2S_ASN1_ENUMERATED 121 | 585 | #define X509V3_F_I2S_ASN1_ENUMERATED 121 |
586 | #define X509V3_F_I2S_ASN1_IA5STRING 142 | ||
567 | #define X509V3_F_I2S_ASN1_INTEGER 120 | 587 | #define X509V3_F_I2S_ASN1_INTEGER 120 |
568 | #define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 | 588 | #define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 |
569 | #define X509V3_F_NOTICE_SECTION 132 | 589 | #define X509V3_F_NOTICE_SECTION 132 |
570 | #define X509V3_F_NREF_NOS 133 | 590 | #define X509V3_F_NREF_NOS 133 |
571 | #define X509V3_F_POLICY_SECTION 131 | 591 | #define X509V3_F_POLICY_SECTION 131 |
572 | #define X509V3_F_R2I_CERTPOL 130 | 592 | #define X509V3_F_R2I_CERTPOL 130 |
593 | #define X509V3_F_R2I_PCI 142 | ||
573 | #define X509V3_F_S2I_ASN1_IA5STRING 100 | 594 | #define X509V3_F_S2I_ASN1_IA5STRING 100 |
574 | #define X509V3_F_S2I_ASN1_INTEGER 108 | 595 | #define X509V3_F_S2I_ASN1_INTEGER 108 |
575 | #define X509V3_F_S2I_ASN1_OCTET_STRING 112 | 596 | #define X509V3_F_S2I_ASN1_OCTET_STRING 112 |
@@ -617,6 +638,7 @@ void ERR_load_X509V3_strings(void); | |||
617 | #define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED 103 | 638 | #define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED 103 |
618 | #define X509V3_R_EXTENSION_VALUE_ERROR 116 | 639 | #define X509V3_R_EXTENSION_VALUE_ERROR 116 |
619 | #define X509V3_R_ILLEGAL_HEX_DIGIT 113 | 640 | #define X509V3_R_ILLEGAL_HEX_DIGIT 113 |
641 | #define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG 153 | ||
620 | #define X509V3_R_INVALID_BOOLEAN_STRING 104 | 642 | #define X509V3_R_INVALID_BOOLEAN_STRING 104 |
621 | #define X509V3_R_INVALID_EXTENSION_STRING 105 | 643 | #define X509V3_R_INVALID_EXTENSION_STRING 105 |
622 | #define X509V3_R_INVALID_NAME 106 | 644 | #define X509V3_R_INVALID_NAME 106 |
@@ -628,6 +650,8 @@ void ERR_load_X509V3_strings(void); | |||
628 | #define X509V3_R_INVALID_OBJECT_IDENTIFIER 110 | 650 | #define X509V3_R_INVALID_OBJECT_IDENTIFIER 110 |
629 | #define X509V3_R_INVALID_OPTION 138 | 651 | #define X509V3_R_INVALID_OPTION 138 |
630 | #define X509V3_R_INVALID_POLICY_IDENTIFIER 134 | 652 | #define X509V3_R_INVALID_POLICY_IDENTIFIER 134 |
653 | #define X509V3_R_INVALID_PROXY_POLICY_IDENTIFIER 147 | ||
654 | #define X509V3_R_INVALID_PROXY_POLICY_SETTING 151 | ||
631 | #define X509V3_R_INVALID_PURPOSE 146 | 655 | #define X509V3_R_INVALID_PURPOSE 146 |
632 | #define X509V3_R_INVALID_SECTION 135 | 656 | #define X509V3_R_INVALID_SECTION 135 |
633 | #define X509V3_R_INVALID_SYNTAX 143 | 657 | #define X509V3_R_INVALID_SYNTAX 143 |
@@ -638,9 +662,16 @@ void ERR_load_X509V3_strings(void); | |||
638 | #define X509V3_R_NO_ISSUER_CERTIFICATE 121 | 662 | #define X509V3_R_NO_ISSUER_CERTIFICATE 121 |
639 | #define X509V3_R_NO_ISSUER_DETAILS 127 | 663 | #define X509V3_R_NO_ISSUER_DETAILS 127 |
640 | #define X509V3_R_NO_POLICY_IDENTIFIER 139 | 664 | #define X509V3_R_NO_POLICY_IDENTIFIER 139 |
665 | #define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED 148 | ||
641 | #define X509V3_R_NO_PUBLIC_KEY 114 | 666 | #define X509V3_R_NO_PUBLIC_KEY 114 |
642 | #define X509V3_R_NO_SUBJECT_DETAILS 125 | 667 | #define X509V3_R_NO_SUBJECT_DETAILS 125 |
643 | #define X509V3_R_ODD_NUMBER_OF_DIGITS 112 | 668 | #define X509V3_R_ODD_NUMBER_OF_DIGITS 112 |
669 | #define X509V3_R_POLICY_LANGUAGE_ALREADTY_DEFINED 149 | ||
670 | #define X509V3_R_POLICY_PATH_LENGTH 152 | ||
671 | #define X509V3_R_POLICY_PATH_LENGTH_ALREADTY_DEFINED 150 | ||
672 | #define X509V3_R_POLICY_SYNTAX_NOT 154 | ||
673 | #define X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED 155 | ||
674 | #define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 156 | ||
644 | #define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS 122 | 675 | #define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS 122 |
645 | #define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID 123 | 676 | #define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID 123 |
646 | #define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT 111 | 677 | #define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT 111 |