| OLD | NEW |
| 1 /* crypto/evp/e_xcbc_d.c */ | 1 /* crypto/evp/e_xcbc_d.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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 * [including the GNU Public Licence.] | 56 * [including the GNU Public Licence.] |
| 57 */ | 57 */ |
| 58 | 58 |
| 59 #include <stdio.h> | 59 #include <stdio.h> |
| 60 #include "cryptlib.h" | 60 #include "cryptlib.h" |
| 61 | 61 |
| 62 #ifndef OPENSSL_NO_DES | 62 #ifndef OPENSSL_NO_DES |
| 63 | 63 |
| 64 #include <openssl/evp.h> | 64 #include <openssl/evp.h> |
| 65 #include <openssl/objects.h> | 65 #include <openssl/objects.h> |
| 66 #include "evp_locl.h" |
| 66 #include <openssl/des.h> | 67 #include <openssl/des.h> |
| 67 | 68 |
| 68 static int desx_cbc_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, | 69 static int desx_cbc_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, |
| 69 const unsigned char *iv,int enc); | 70 const unsigned char *iv,int enc); |
| 70 static int desx_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | 71 static int desx_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
| 71 » » » const unsigned char *in, unsigned int inl); | 72 » » » const unsigned char *in, size_t inl); |
| 72 | 73 |
| 73 | 74 |
| 74 typedef struct | 75 typedef struct |
| 75 { | 76 { |
| 76 DES_key_schedule ks;/* key schedule */ | 77 DES_key_schedule ks;/* key schedule */ |
| 77 DES_cblock inw; | 78 DES_cblock inw; |
| 78 DES_cblock outw; | 79 DES_cblock outw; |
| 79 } DESX_CBC_KEY; | 80 } DESX_CBC_KEY; |
| 80 | 81 |
| 81 #define data(ctx) ((DESX_CBC_KEY *)(ctx)->cipher_data) | 82 #define data(ctx) ((DESX_CBC_KEY *)(ctx)->cipher_data) |
| (...skipping 24 matching lines...) Expand all Loading... |
| 106 DES_cblock *deskey = (DES_cblock *)key; | 107 DES_cblock *deskey = (DES_cblock *)key; |
| 107 | 108 |
| 108 DES_set_key_unchecked(deskey,&data(ctx)->ks); | 109 DES_set_key_unchecked(deskey,&data(ctx)->ks); |
| 109 memcpy(&data(ctx)->inw[0],&key[8],8); | 110 memcpy(&data(ctx)->inw[0],&key[8],8); |
| 110 memcpy(&data(ctx)->outw[0],&key[16],8); | 111 memcpy(&data(ctx)->outw[0],&key[16],8); |
| 111 | 112 |
| 112 return 1; | 113 return 1; |
| 113 } | 114 } |
| 114 | 115 |
| 115 static int desx_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | 116 static int desx_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
| 116 » » » const unsigned char *in, unsigned int inl) | 117 » » » const unsigned char *in, size_t inl) |
| 117 { | 118 { |
| 118 » DES_xcbc_encrypt(in,out,inl,&data(ctx)->ks, | 119 » while (inl>=EVP_MAXCHUNK) |
| 120 » » { |
| 121 » » DES_xcbc_encrypt(in,out,(long)EVP_MAXCHUNK,&data(ctx)->ks, |
| 119 (DES_cblock *)&(ctx->iv[0]), | 122 (DES_cblock *)&(ctx->iv[0]), |
| 120 &data(ctx)->inw, | 123 &data(ctx)->inw, |
| 121 &data(ctx)->outw, | 124 &data(ctx)->outw, |
| 122 ctx->encrypt); | 125 ctx->encrypt); |
| 126 inl-=EVP_MAXCHUNK; |
| 127 in +=EVP_MAXCHUNK; |
| 128 out+=EVP_MAXCHUNK; |
| 129 } |
| 130 if (inl) |
| 131 DES_xcbc_encrypt(in,out,(long)inl,&data(ctx)->ks, |
| 132 (DES_cblock *)&(ctx->iv[0]), |
| 133 &data(ctx)->inw, |
| 134 &data(ctx)->outw, |
| 135 ctx->encrypt); |
| 123 return 1; | 136 return 1; |
| 124 } | 137 } |
| 125 #endif | 138 #endif |
| OLD | NEW |