| OLD | NEW | 
|---|
| 1 /* crypto/evp/encode.c */ | 1 /* crypto/evp/encode.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  Loading... | 
| 78  * pad input with 0 | 78  * pad input with 0 | 
| 79  * left over chars are set to = | 79  * left over chars are set to = | 
| 80  * 1 byte  => xx== | 80  * 1 byte  => xx== | 
| 81  * 2 bytes => xxx= | 81  * 2 bytes => xxx= | 
| 82  * 3 bytes => xxxx | 82  * 3 bytes => xxxx | 
| 83  */ | 83  */ | 
| 84 #define BIN_PER_LINE    (64/4*3) | 84 #define BIN_PER_LINE    (64/4*3) | 
| 85 #define CHUNKS_PER_LINE (64/4) | 85 #define CHUNKS_PER_LINE (64/4) | 
| 86 #define CHAR_PER_LINE   (64+1) | 86 #define CHAR_PER_LINE   (64+1) | 
| 87 | 87 | 
| 88 static unsigned char data_bin2ascii[65]="ABCDEFGHIJKLMNOPQRSTUVWXYZ\ | 88 static const unsigned char data_bin2ascii[65]="ABCDEFGHIJKLMNOPQRSTUVWXYZ\ | 
| 89 abcdefghijklmnopqrstuvwxyz0123456789+/"; | 89 abcdefghijklmnopqrstuvwxyz0123456789+/"; | 
| 90 | 90 | 
| 91 /* 0xF0 is a EOLN | 91 /* 0xF0 is a EOLN | 
| 92  * 0xF1 is ignore but next needs to be 0xF0 (for \r\n processing). | 92  * 0xF1 is ignore but next needs to be 0xF0 (for \r\n processing). | 
| 93  * 0xF2 is EOF | 93  * 0xF2 is EOF | 
| 94  * 0xE0 is ignore at start of line. | 94  * 0xE0 is ignore at start of line. | 
| 95  * 0xFF is error | 95  * 0xFF is error | 
| 96  */ | 96  */ | 
| 97 | 97 | 
| 98 #define B64_EOLN                0xF0 | 98 #define B64_EOLN                0xF0 | 
| 99 #define B64_CR                  0xF1 | 99 #define B64_CR                  0xF1 | 
| 100 #define B64_EOF                 0xF2 | 100 #define B64_EOF                 0xF2 | 
| 101 #define B64_WS                  0xE0 | 101 #define B64_WS                  0xE0 | 
| 102 #define B64_ERROR               0xFF | 102 #define B64_ERROR               0xFF | 
| 103 #define B64_NOT_BASE64(a)       (((a)|0x13) == 0xF3) | 103 #define B64_NOT_BASE64(a)       (((a)|0x13) == 0xF3) | 
| 104 | 104 | 
| 105 static unsigned char data_ascii2bin[128]={ | 105 static const unsigned char data_ascii2bin[128]={ | 
| 106         0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, | 106         0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, | 
| 107         0xFF,0xE0,0xF0,0xFF,0xFF,0xF1,0xFF,0xFF, | 107         0xFF,0xE0,0xF0,0xFF,0xFF,0xF1,0xFF,0xFF, | 
| 108         0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, | 108         0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, | 
| 109         0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, | 109         0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, | 
| 110         0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, | 110         0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, | 
| 111         0xFF,0xFF,0xFF,0x3E,0xFF,0xF2,0xFF,0x3F, | 111         0xFF,0xFF,0xFF,0x3E,0xFF,0xF2,0xFF,0x3F, | 
| 112         0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B, | 112         0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B, | 
| 113         0x3C,0x3D,0xFF,0xFF,0xFF,0x00,0xFF,0xFF, | 113         0x3C,0x3D,0xFF,0xFF,0xFF,0x00,0xFF,0xFF, | 
| 114         0xFF,0x00,0x01,0x02,0x03,0x04,0x05,0x06, | 114         0xFF,0x00,0x01,0x02,0x03,0x04,0x05,0x06, | 
| 115         0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E, | 115         0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E, | 
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 228         ctx->expect_nl=0; | 228         ctx->expect_nl=0; | 
| 229         } | 229         } | 
| 230 | 230 | 
| 231 /* -1 for error | 231 /* -1 for error | 
| 232  *  0 for last line | 232  *  0 for last line | 
| 233  *  1 for full line | 233  *  1 for full line | 
| 234  */ | 234  */ | 
| 235 int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, | 235 int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, | 
| 236              const unsigned char *in, int inl) | 236              const unsigned char *in, int inl) | 
| 237         { | 237         { | 
| 238 »       int seof= -1,eof=0,rv= -1,ret=0,i,v,tmp,n,ln,tmp2,exp_nl; | 238 »       int seof= -1,eof=0,rv= -1,ret=0,i,v,tmp,n,ln,exp_nl; | 
| 239         unsigned char *d; | 239         unsigned char *d; | 
| 240 | 240 | 
| 241         n=ctx->num; | 241         n=ctx->num; | 
| 242         d=ctx->enc_data; | 242         d=ctx->enc_data; | 
| 243         ln=ctx->line_num; | 243         ln=ctx->line_num; | 
| 244         exp_nl=ctx->expect_nl; | 244         exp_nl=ctx->expect_nl; | 
| 245 | 245 | 
| 246         /* last line of input. */ | 246         /* last line of input. */ | 
| 247         if ((inl == 0) || ((n == 0) && (conv_ascii2bin(in[0]) == B64_EOF))) | 247         if ((inl == 0) || ((n == 0) && (conv_ascii2bin(in[0]) == B64_EOF))) | 
| 248                 { rv=0; goto end; } | 248                 { rv=0; goto end; } | 
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 312                         if (d[n-2] == '=') eof++; | 312                         if (d[n-2] == '=') eof++; | 
| 313                         /* There will never be more than two '=' */ | 313                         /* There will never be more than two '=' */ | 
| 314                         } | 314                         } | 
| 315 | 315 | 
| 316                 if ((v == B64_EOF && (n&3) == 0) || (n >= 64)) | 316                 if ((v == B64_EOF && (n&3) == 0) || (n >= 64)) | 
| 317                         { | 317                         { | 
| 318                         /* This is needed to work correctly on 64 byte input | 318                         /* This is needed to work correctly on 64 byte input | 
| 319                          * lines.  We process the line and then need to | 319                          * lines.  We process the line and then need to | 
| 320                          * accept the '\n' */ | 320                          * accept the '\n' */ | 
| 321                         if ((v != B64_EOF) && (n >= 64)) exp_nl=1; | 321                         if ((v != B64_EOF) && (n >= 64)) exp_nl=1; | 
| 322                         tmp2=v; |  | 
| 323                         if (n > 0) | 322                         if (n > 0) | 
| 324                                 { | 323                                 { | 
| 325                                 v=EVP_DecodeBlock(out,d,n); | 324                                 v=EVP_DecodeBlock(out,d,n); | 
| 326                                 n=0; | 325                                 n=0; | 
| 327                                 if (v < 0) { rv=0; goto end; } | 326                                 if (v < 0) { rv=0; goto end; } | 
| 328                                 ret+=(v-eof); | 327                                 ret+=(v-eof); | 
| 329                                 } | 328                                 } | 
| 330                         else | 329                         else | 
| 331                                 { | 330                                 { | 
| 332                                 eof=1; | 331                                 eof=1; | 
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 437                 num+=1+(buf[2] != '=')+(buf[3] != '='); | 436                 num+=1+(buf[2] != '=')+(buf[3] != '='); | 
| 438                 } | 437                 } | 
| 439         if ((i == 1) && (conv_ascii2bin(buf[0]) == B64_EOLN)) | 438         if ((i == 1) && (conv_ascii2bin(buf[0]) == B64_EOLN)) | 
| 440                 return(num); | 439                 return(num); | 
| 441         if ((i == 2) && (conv_ascii2bin(buf[0]) == B64_EOLN) && | 440         if ((i == 2) && (conv_ascii2bin(buf[0]) == B64_EOLN) && | 
| 442                 (conv_ascii2bin(buf[0]) == B64_EOLN)) | 441                 (conv_ascii2bin(buf[0]) == B64_EOLN)) | 
| 443                 return(num); | 442                 return(num); | 
| 444         return(1); | 443         return(1); | 
| 445         } | 444         } | 
| 446 #endif | 445 #endif | 
| OLD | NEW | 
|---|