Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: openssl/crypto/evp/e_des3.c

Issue 9254031: Upgrade chrome's OpenSSL to same version Android ships with. (Closed) Base URL: http://src.chromium.org/svn/trunk/deps/third_party/openssl/
Patch Set: '' Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « openssl/crypto/evp/e_des.c ('k') | openssl/crypto/evp/e_idea.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* crypto/evp/e_des3.c */ 1 /* crypto/evp/e_des3.c */
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * This package is an SSL implementation written 5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com). 6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL. 7 * The implementation was written so as to conform with Netscapes SSL.
8 * 8 *
9 * This library is free for commercial and non-commercial use as long as 9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions 10 * the following conditions are aheared to. The following conditions
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 DES_key_schedule ks1;/* key schedule */ 78 DES_key_schedule ks1;/* key schedule */
79 DES_key_schedule ks2;/* key schedule (for ede) */ 79 DES_key_schedule ks2;/* key schedule (for ede) */
80 DES_key_schedule ks3;/* key schedule (for ede3) */ 80 DES_key_schedule ks3;/* key schedule (for ede3) */
81 } DES_EDE_KEY; 81 } DES_EDE_KEY;
82 82
83 #define data(ctx) ((DES_EDE_KEY *)(ctx)->cipher_data) 83 #define data(ctx) ((DES_EDE_KEY *)(ctx)->cipher_data)
84 84
85 /* Because of various casts and different args can't use IMPLEMENT_BLOCK_CIPHER */ 85 /* Because of various casts and different args can't use IMPLEMENT_BLOCK_CIPHER */
86 86
87 static int des_ede_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 87 static int des_ede_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
88 » » » const unsigned char *in, unsigned int inl) 88 » » » const unsigned char *in, size_t inl)
89 { 89 {
90 BLOCK_CIPHER_ecb_loop() 90 BLOCK_CIPHER_ecb_loop()
91 DES_ecb3_encrypt((const_DES_cblock *)(in + i), 91 DES_ecb3_encrypt((const_DES_cblock *)(in + i),
92 (DES_cblock *)(out + i), 92 (DES_cblock *)(out + i),
93 &data(ctx)->ks1, &data(ctx)->ks2, 93 &data(ctx)->ks1, &data(ctx)->ks2,
94 &data(ctx)->ks3, 94 &data(ctx)->ks3,
95 ctx->encrypt); 95 ctx->encrypt);
96 return 1; 96 return 1;
97 } 97 }
98 98
99 static int des_ede_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 99 static int des_ede_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
100 » » » const unsigned char *in, unsigned int inl) 100 » » » const unsigned char *in, size_t inl)
101 { 101 {
102 » DES_ede3_ofb64_encrypt(in, out, (long)inl, 102 » if (inl>=EVP_MAXCHUNK)
103 » » {
104 » » DES_ede3_ofb64_encrypt(in, out, (long)EVP_MAXCHUNK,
103 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3 , 105 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3 ,
104 (DES_cblock *)ctx->iv, &ctx->num); 106 (DES_cblock *)ctx->iv, &ctx->num);
107 inl-=EVP_MAXCHUNK;
108 in +=EVP_MAXCHUNK;
109 out+=EVP_MAXCHUNK;
110 }
111 if (inl)
112 DES_ede3_ofb64_encrypt(in, out, (long)inl,
113 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks 3,
114 (DES_cblock *)ctx->iv, &ctx->num);
115
105 return 1; 116 return 1;
106 } 117 }
107 118
108 static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 119 static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
109 » » » const unsigned char *in, unsigned int inl) 120 » » » const unsigned char *in, size_t inl)
110 { 121 {
111 #ifdef KSSL_DEBUG 122 #ifdef KSSL_DEBUG
112 { 123 {
113 int i; 124 int i;
114 » printf("des_ede_cbc_cipher(ctx=%lx, buflen=%d)\n", (unsigned long)ctx, c tx->buf_len); 125 char *cp;
126 » printf("des_ede_cbc_cipher(ctx=%lx, buflen=%d)\n", ctx, ctx->buf_len);
115 printf("\t iv= "); 127 printf("\t iv= ");
116 for(i=0;i<8;i++) 128 for(i=0;i<8;i++)
117 printf("%02X",ctx->iv[i]); 129 printf("%02X",ctx->iv[i]);
118 printf("\n"); 130 printf("\n");
119 } 131 }
120 #endif /* KSSL_DEBUG */ 132 #endif /* KSSL_DEBUG */
121 » DES_ede3_cbc_encrypt(in, out, (long)inl, 133 » if (inl>=EVP_MAXCHUNK)
134 » » {
135 » » DES_ede3_cbc_encrypt(in, out, (long)EVP_MAXCHUNK,
122 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, 136 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
123 (DES_cblock *)ctx->iv, ctx->encrypt); 137 (DES_cblock *)ctx->iv, ctx->encrypt);
138 inl-=EVP_MAXCHUNK;
139 in +=EVP_MAXCHUNK;
140 out+=EVP_MAXCHUNK;
141 }
142 if (inl)
143 DES_ede3_cbc_encrypt(in, out, (long)inl,
144 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
145 (DES_cblock *)ctx->iv, ctx->encrypt);
124 return 1; 146 return 1;
125 } 147 }
126 148
127 static int des_ede_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 149 static int des_ede_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
128 » » » const unsigned char *in, unsigned int inl) 150 » » » const unsigned char *in, size_t inl)
129 { 151 {
130 » DES_ede3_cfb64_encrypt(in, out, (long)inl, 152 » if (inl>=EVP_MAXCHUNK)
153 » » {
154 » » DES_ede3_cfb64_encrypt(in, out, (long)EVP_MAXCHUNK,
131 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3 , 155 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3 ,
132 (DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt); 156 (DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt);
157 inl-=EVP_MAXCHUNK;
158 in +=EVP_MAXCHUNK;
159 out+=EVP_MAXCHUNK;
160 }
161 if (inl)
162 DES_ede3_cfb64_encrypt(in, out, (long)inl,
163 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3 ,
164 (DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt);
133 return 1; 165 return 1;
134 } 166 }
135 167
136 /* Although we have a CFB-r implementation for 3-DES, it doesn't pack the right 168 /* Although we have a CFB-r implementation for 3-DES, it doesn't pack the right
137 way, so wrap it here */ 169 way, so wrap it here */
138 static int des_ede3_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 170 static int des_ede3_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
139 » » » » const unsigned char *in, unsigned int inl) 171 » » » » const unsigned char *in, size_t inl)
140 { 172 {
141 unsigned int n; 173 size_t n;
142 unsigned char c[1],d[1]; 174 unsigned char c[1],d[1];
143 175
144 for(n=0 ; n < inl ; ++n) 176 for(n=0 ; n < inl ; ++n)
145 { 177 {
146 c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0; 178 c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0;
147 DES_ede3_cfb_encrypt(c,d,1,1, 179 DES_ede3_cfb_encrypt(c,d,1,1,
148 &data(ctx)->ks1,&data(ctx)->ks2,&data(ctx)->ks3, 180 &data(ctx)->ks1,&data(ctx)->ks2,&data(ctx)->ks3,
149 (DES_cblock *)ctx->iv,ctx->encrypt); 181 (DES_cblock *)ctx->iv,ctx->encrypt);
150 » out[n/8]=(out[n/8]&~(0x80 >> (n%8)))|((d[0]&0x80) >> (n%8)); 182 » out[n/8]=(out[n/8]&~(0x80 >> (unsigned int)(n%8))) |
183 » » ((d[0]&0x80) >> (unsigned int)(n%8));
151 } 184 }
152 185
153 return 1; 186 return 1;
154 } 187 }
155 188
156 static int des_ede3_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 189 static int des_ede3_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
157 » » » » const unsigned char *in, unsigned int inl) 190 » » » » const unsigned char *in, size_t inl)
158 { 191 {
159 DES_ede3_cfb_encrypt(in,out,8,inl, 192 while (inl>=EVP_MAXCHUNK)
193 » {
194 » DES_ede3_cfb_encrypt(in,out,8,(long)EVP_MAXCHUNK,
160 &data(ctx)->ks1,&data(ctx)->ks2,&data(ctx)->ks3, 195 &data(ctx)->ks1,&data(ctx)->ks2,&data(ctx)->ks3,
161 (DES_cblock *)ctx->iv,ctx->encrypt); 196 (DES_cblock *)ctx->iv,ctx->encrypt);
197 inl-=EVP_MAXCHUNK;
198 in +=EVP_MAXCHUNK;
199 out+=EVP_MAXCHUNK;
200 }
201 if (inl)
202 DES_ede3_cfb_encrypt(in,out,8,(long)inl,
203 &data(ctx)->ks1,&data(ctx)->ks2,&data(ctx)->ks3,
204 (DES_cblock *)ctx->iv,ctx->encrypt);
162 return 1; 205 return 1;
163 } 206 }
164 207
165 BLOCK_CIPHER_defs(des_ede, DES_EDE_KEY, NID_des_ede, 8, 16, 8, 64, 208 BLOCK_CIPHER_defs(des_ede, DES_EDE_KEY, NID_des_ede, 8, 16, 8, 64,
166 » » EVP_CIPH_RAND_KEY|EVP_CIPH_FLAG_FIPS|EVP_CIPH_FLAG_DEFAULT_ASN1, 209 » » » EVP_CIPH_RAND_KEY, des_ede_init_key, NULL,
167 » » » des_ede_init_key, 210 » » » EVP_CIPHER_set_asn1_iv,
168 » » » NULL, NULL, NULL, 211 » » » EVP_CIPHER_get_asn1_iv,
169 des3_ctrl) 212 des3_ctrl)
170 213
171 #define des_ede3_cfb64_cipher des_ede_cfb64_cipher 214 #define des_ede3_cfb64_cipher des_ede_cfb64_cipher
172 #define des_ede3_ofb_cipher des_ede_ofb_cipher 215 #define des_ede3_ofb_cipher des_ede_ofb_cipher
173 #define des_ede3_cbc_cipher des_ede_cbc_cipher 216 #define des_ede3_cbc_cipher des_ede_cbc_cipher
174 #define des_ede3_ecb_cipher des_ede_ecb_cipher 217 #define des_ede3_ecb_cipher des_ede_ecb_cipher
175 218
176 BLOCK_CIPHER_defs(des_ede3, DES_EDE_KEY, NID_des_ede3, 8, 24, 8, 64, 219 BLOCK_CIPHER_defs(des_ede3, DES_EDE_KEY, NID_des_ede3, 8, 24, 8, 64,
177 » » EVP_CIPH_RAND_KEY|EVP_CIPH_FLAG_FIPS|EVP_CIPH_FLAG_DEFAULT_ASN1, 220 » » » EVP_CIPH_RAND_KEY, des_ede3_init_key, NULL,
178 » » » des_ede3_init_key, 221 » » » EVP_CIPHER_set_asn1_iv,
179 » » » NULL, NULL, NULL, 222 » » » EVP_CIPHER_get_asn1_iv,
180 des3_ctrl) 223 des3_ctrl)
181 224
182 BLOCK_CIPHER_def_cfb(des_ede3,DES_EDE_KEY,NID_des_ede3,24,8,1, 225 BLOCK_CIPHER_def_cfb(des_ede3,DES_EDE_KEY,NID_des_ede3,24,8,1,
183 » » EVP_CIPH_RAND_KEY|EVP_CIPH_FLAG_FIPS|EVP_CIPH_FLAG_DEFAULT_ASN1, 226 » » EVP_CIPH_RAND_KEY, des_ede3_init_key,NULL,
184 » » des_ede3_init_key, 227 » » EVP_CIPHER_set_asn1_iv,
185 » » NULL, NULL, NULL, 228 » » EVP_CIPHER_get_asn1_iv,
186 des3_ctrl) 229 des3_ctrl)
187 230
188 BLOCK_CIPHER_def_cfb(des_ede3,DES_EDE_KEY,NID_des_ede3,24,8,8, 231 BLOCK_CIPHER_def_cfb(des_ede3,DES_EDE_KEY,NID_des_ede3,24,8,8,
189 » » EVP_CIPH_RAND_KEY|EVP_CIPH_FLAG_FIPS|EVP_CIPH_FLAG_DEFAULT_ASN1, 232 » » EVP_CIPH_RAND_KEY, des_ede3_init_key,NULL,
190 » » des_ede3_init_key, 233 » » EVP_CIPHER_set_asn1_iv,
191 » » NULL, NULL, NULL, 234 » » EVP_CIPHER_get_asn1_iv,
192 des3_ctrl) 235 des3_ctrl)
193 236
194 static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 237 static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
195 const unsigned char *iv, int enc) 238 const unsigned char *iv, int enc)
196 { 239 {
197 DES_cblock *deskey = (DES_cblock *)key; 240 DES_cblock *deskey = (DES_cblock *)key;
198 #ifdef EVP_CHECK_DES_KEY 241 #ifdef EVP_CHECK_DES_KEY
199 if (DES_set_key_checked(&deskey[0],&data(ctx)->ks1) 242 if (DES_set_key_checked(&deskey[0],&data(ctx)->ks1)
200 !! DES_set_key_checked(&deskey[1],&data(ctx)->ks2)) 243 !! DES_set_key_checked(&deskey[1],&data(ctx)->ks2))
201 return 0; 244 return 0;
202 #else 245 #else
203 DES_set_key_unchecked(&deskey[0],&data(ctx)->ks1); 246 DES_set_key_unchecked(&deskey[0],&data(ctx)->ks1);
204 DES_set_key_unchecked(&deskey[1],&data(ctx)->ks2); 247 DES_set_key_unchecked(&deskey[1],&data(ctx)->ks2);
205 #endif 248 #endif
206 memcpy(&data(ctx)->ks3,&data(ctx)->ks1, 249 memcpy(&data(ctx)->ks3,&data(ctx)->ks1,
207 sizeof(data(ctx)->ks1)); 250 sizeof(data(ctx)->ks1));
208 return 1; 251 return 1;
209 } 252 }
210 253
211 static int des_ede3_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 254 static int des_ede3_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
212 const unsigned char *iv, int enc) 255 const unsigned char *iv, int enc)
213 { 256 {
214 DES_cblock *deskey = (DES_cblock *)key; 257 DES_cblock *deskey = (DES_cblock *)key;
215 #ifdef KSSL_DEBUG 258 #ifdef KSSL_DEBUG
216 { 259 {
217 int i; 260 int i;
218 printf("des_ede3_init_key(ctx=%lx)\n", (unsigned long)ctx); 261 printf("des_ede3_init_key(ctx=%lx)\n", ctx);
219 printf("\tKEY= "); 262 printf("\tKEY= ");
220 for(i=0;i<24;i++) printf("%02X",key[i]); printf("\n"); 263 for(i=0;i<24;i++) printf("%02X",key[i]); printf("\n");
221 printf("\t IV= "); 264 printf("\t IV= ");
222 for(i=0;i<8;i++) printf("%02X",iv[i]); printf("\n"); 265 for(i=0;i<8;i++) printf("%02X",iv[i]); printf("\n");
223 } 266 }
224 #endif /* KSSL_DEBUG */ 267 #endif /* KSSL_DEBUG */
225 268
226 #ifdef EVP_CHECK_DES_KEY 269 #ifdef EVP_CHECK_DES_KEY
227 if (DES_set_key_checked(&deskey[0],&data(ctx)->ks1) 270 if (DES_set_key_checked(&deskey[0],&data(ctx)->ks1)
228 || DES_set_key_checked(&deskey[1],&data(ctx)->ks2) 271 || DES_set_key_checked(&deskey[1],&data(ctx)->ks2)
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 const EVP_CIPHER *EVP_des_ede(void) 304 const EVP_CIPHER *EVP_des_ede(void)
262 { 305 {
263 return &des_ede_ecb; 306 return &des_ede_ecb;
264 } 307 }
265 308
266 const EVP_CIPHER *EVP_des_ede3(void) 309 const EVP_CIPHER *EVP_des_ede3(void)
267 { 310 {
268 return &des_ede3_ecb; 311 return &des_ede3_ecb;
269 } 312 }
270 #endif 313 #endif
OLDNEW
« no previous file with comments | « openssl/crypto/evp/e_des.c ('k') | openssl/crypto/evp/e_idea.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698