diff options
| author | djm <> | 2010-10-01 22:59:01 +0000 |
|---|---|---|
| committer | djm <> | 2010-10-01 22:59:01 +0000 |
| commit | 8922d4bc4a8b8893d72a48deb2cdf58215f98505 (patch) | |
| tree | 939b752540947d33507b3acc48d76a8bfb7c3dc3 /src/lib/libcrypto/evp/e_des3.c | |
| parent | 76262f7bf9262f965142b1b2b2105cb279c5c696 (diff) | |
| download | openbsd-8922d4bc4a8b8893d72a48deb2cdf58215f98505.tar.gz openbsd-8922d4bc4a8b8893d72a48deb2cdf58215f98505.tar.bz2 openbsd-8922d4bc4a8b8893d72a48deb2cdf58215f98505.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= "); |
