fix EVP_CIPHER_mode macro
[oweals/openssl.git] / crypto / evp / encode.c
index 110435d5dfc4911e4155c01d50872550026b9039..6ff9c1783cf60720ee60a29298746ec5e0427356 100644 (file)
@@ -185,7 +185,7 @@ void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl)
        *outl=ret;
        }
 
-int EVP_EncodeBlock(unsigned char *t, unsigned char *f, int dlen)
+int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int dlen)
        {
        int i,ret=0;
        unsigned long l;
@@ -292,14 +292,24 @@ int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
                /* If we are at the end of input and it looks like a
                 * line, process it. */
                if (((i+1) == inl) && (((n&3) == 0) || eof))
+                       {
                        v=B64_EOF;
+                       /* In case things were given us in really small
+                          records (so two '=' were given in separate
+                          updates), eof may contain the incorrect number
+                          of ending bytes to skip, so let's redo the count */
+                       eof = 0;
+                       if (d[n-1] == '=') eof++;
+                       if (d[n-2] == '=') eof++;
+                       /* There will never be more than two '=' */
+                       }
 
-               if ((v == B64_EOF) || (n >= 68))
+               if ((v == B64_EOF) || (n >= 64))
                        {
                        /* This is needed to work correctly on 64 byte input
                         * lines.  We process the line and then need to
                         * accept the '\n' */
-                       if ((v != B64_EOF) && (n >= 68)) exp_nl=1;
+                       if ((v != B64_EOF) && (n >= 64)) exp_nl=1;
                        tmp2=v;
                        if (n > 0)
                                {
@@ -337,7 +347,7 @@ end:
        return(rv);
        }
 
-int EVP_DecodeBlock(unsigned char *t, unsigned char *f, int n)
+int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n)
        {
        int i,ret=0,a,b,c,d;
        unsigned long l;