- switch (cmd)
- {
- case BIO_CTRL_RESET:
- if (b->init)
- EVP_DigestInit(ctx,ctx->digest);
- else
- ret=0;
- ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
- break;
- case BIO_C_GET_MD:
- if (b->init)
- {
- ppmd=(EVP_MD **)ptr;
- *ppmd=ctx->digest;
- }
- else
- ret=0;
- break;
- case BIO_C_GET_MD_CTX:
- if (b->init)
- {
- pctx=(EVP_MD_CTX **)ptr;
- *pctx=ctx;
- }
- else
- ret=0;
- break;
- case BIO_C_DO_STATE_MACHINE:
- BIO_clear_retry_flags(b);
- ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
- BIO_copy_next_retry(b);
- break;