Really add the EVP and all of the DES changes.
[openssl.git] / crypto / evp / bio_ok.c
index 1703a2457d3e046ab828b0456e0e8449985a5067..6b00741e476f616356f5021d1c5903f0bcb98def 100644 (file)
@@ -199,6 +199,8 @@ static int ok_new(BIO *bi)
        ctx->blockout= 0;
        ctx->sigio=1;
 
+       EVP_MD_CTX_init(&ctx->md);
+
        bi->init=0;
        bi->ptr=(char *)ctx;
        bi->flags=0;
@@ -208,6 +210,7 @@ static int ok_new(BIO *bi)
 static int ok_free(BIO *a)
        {
        if (a == NULL) return(0);
+       EVP_MD_CTX_cleanup(&((BIO_OK_CTX *)a->ptr)->md);
        memset(a->ptr,0,sizeof(BIO_OK_CTX));
        OPENSSL_free(a->ptr);
        a->ptr=NULL;
@@ -353,7 +356,7 @@ static long ok_ctrl(BIO *b, int cmd, long num, void *ptr)
        long ret=1;
        int i;
 
-       ctx=(BIO_OK_CTX *)b->ptr;
+       ctx=b->ptr;
 
        switch (cmd)
                {
@@ -411,14 +414,14 @@ static long ok_ctrl(BIO *b, int cmd, long num, void *ptr)
                ret=(long)ctx->cont;
                break;
        case BIO_C_SET_MD:
-               md=(EVP_MD *)ptr;
-               EVP_DigestInit(&(ctx->md),md);
+               md=ptr;
+               EVP_DigestInit(&ctx->md,md);
                b->init=1;
                break;
        case BIO_C_GET_MD:
                if (b->init)
                        {
-                       ppmd=(const EVP_MD **)ptr;
+                       ppmd=ptr;
                        *ppmd=ctx->md.digest;
                        }
                else
@@ -462,14 +465,17 @@ static void sig_out(BIO* b)
        BIO_OK_CTX *ctx;
        EVP_MD_CTX *md;
 
-       ctx=(BIO_OK_CTX *)b->ptr;
-       md= &(ctx->md);
+       ctx=b->ptr;
+       md=&ctx->md;
 
        if(ctx->buf_len+ 2* md->digest->md_size > OK_BLOCK_SIZE) return;
 
        EVP_DigestInit(md, md->digest);
-       RAND_pseudo_bytes(&(md->md.base[0]), md->digest->md_size);
-       memcpy(&(ctx->buf[ctx->buf_len]), &(md->md.base[0]), md->digest->md_size);
+       /* FIXME: there's absolutely no guarantee this makes any sense at all,
+        * particularly now EVP_MD_CTX has been restructured.
+        */
+       RAND_pseudo_bytes(md->md_data, md->digest->md_size);
+       memcpy(&(ctx->buf[ctx->buf_len]), md->md_data, md->digest->md_size);
        longswap(&(ctx->buf[ctx->buf_len]), md->digest->md_size);
        ctx->buf_len+= md->digest->md_size;
 
@@ -487,14 +493,14 @@ static void sig_in(BIO* b)
        unsigned char tmp[EVP_MAX_MD_SIZE];
        int ret= 0;
 
-       ctx=(BIO_OK_CTX *)b->ptr;
-       md= &(ctx->md);
+       ctx=b->ptr;
+       md=&ctx->md;
 
        if(ctx->buf_len- ctx->buf_off < 2* md->digest->md_size) return;
 
        EVP_DigestInit(md, md->digest);
-       memcpy(&(md->md.base[0]), &(ctx->buf[ctx->buf_off]), md->digest->md_size);
-       longswap(&(md->md.base[0]), md->digest->md_size);
+       memcpy(md->md_data, &(ctx->buf[ctx->buf_off]), md->digest->md_size);
+       longswap(md->md_data, md->digest->md_size);
        ctx->buf_off+= md->digest->md_size;
 
        EVP_DigestUpdate(md, WELLKNOWN, strlen(WELLKNOWN));
@@ -523,8 +529,8 @@ static void block_out(BIO* b)
        EVP_MD_CTX *md;
        unsigned long tl;
 
-       ctx=(BIO_OK_CTX *)b->ptr;
-       md= &(ctx->md);
+       ctx=b->ptr;
+       md=&ctx->md;
 
        tl= ctx->buf_len- OK_BLOCK_BLOCK;
        tl= swapem(tl);
@@ -543,8 +549,8 @@ static void block_in(BIO* b)
        long tl= 0;
        unsigned char tmp[EVP_MAX_MD_SIZE];
 
-       ctx=(BIO_OK_CTX *)b->ptr;
-       md= &(ctx->md);
+       ctx=b->ptr;
+       md=&ctx->md;
 
        memcpy(&tl, ctx->buf, OK_BLOCK_BLOCK);
        tl= swapem(tl);