diff options
author | djm <> | 2010-10-01 22:59:01 +0000 |
---|---|---|
committer | djm <> | 2010-10-01 22:59:01 +0000 |
commit | fe047d8b632246cb2db3234a0a4f32e5c318857b (patch) | |
tree | 939b752540947d33507b3acc48d76a8bfb7c3dc3 /src/lib/libcrypto/evp/e_des3.c | |
parent | 2ea67f4aa254b09ded62e6e14fc893bbe6381579 (diff) | |
download | openbsd-fe047d8b632246cb2db3234a0a4f32e5c318857b.tar.gz openbsd-fe047d8b632246cb2db3234a0a4f32e5c318857b.tar.bz2 openbsd-fe047d8b632246cb2db3234a0a4f32e5c318857b.zip |
resolve conflicts, fix local changes
Diffstat (limited to 'src/lib/libcrypto/evp/e_des3.c')
-rw-r--r-- | src/lib/libcrypto/evp/e_des3.c | 95 |
1 files changed, 69 insertions, 26 deletions
diff --git a/src/lib/libcrypto/evp/e_des3.c b/src/lib/libcrypto/evp/e_des3.c index f910af19b1..3232cfe024 100644 --- a/src/lib/libcrypto/evp/e_des3.c +++ b/src/lib/libcrypto/evp/e_des3.c | |||
@@ -85,7 +85,7 @@ typedef struct | |||
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), |
@@ -97,48 +97,80 @@ static int des_ede_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | |||
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)->ks3, | ||
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, ctx->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) |
@@ -147,25 +179,36 @@ static int des_ede3_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | |||
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 |
@@ -174,21 +217,21 @@ BLOCK_CIPHER_defs(des_ede, DES_EDE_KEY, NID_des_ede, 8, 16, 8, 64, | |||
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, |
@@ -215,7 +258,7 @@ static int des_ede3_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *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= "); |