static int digest_init(EVP_MD_CTX *ctx) { struct digest_ctx *digest_ctx = (struct digest_ctx *)EVP_MD_CTX_md_data(ctx); const struct digest_data_st *digest_d = get_digest_data(EVP_MD_CTX_type(ctx)); if (digest_ctx->init == 0 && (digest_ctx->cfd = open("/dev/crypto", O_RDWR, 0)) < 0) { SYSerr(SYS_F_OPEN, errno); return 0; } digest_ctx->init = 1; memset(&digest_ctx->sess, 0, sizeof(digest_ctx->sess)); digest_ctx->sess.mac = digest_d->devcryptoid; if (ioctl(digest_ctx->cfd, CIOCGSESSION, &digest_ctx->sess) < 0) { SYSerr(SYS_F_IOCTL, errno); close(digest_ctx->cfd); return 0; } return 1; }
static int digest_init(EVP_MD_CTX *ctx) { struct digest_ctx *digest_ctx = (struct digest_ctx *)EVP_MD_CTX_md_data(ctx); const struct digest_data_st *digest_d = get_digest_data(EVP_MD_CTX_type(ctx)); digest_ctx->init_called = 1; memset(&digest_ctx->sess, 0, sizeof(digest_ctx->sess)); digest_ctx->sess.mac = digest_d->devcryptoid; if (ioctl(cfd, CIOCGSESSION, &digest_ctx->sess) < 0) { SYSerr(SYS_F_IOCTL, errno); return 0; } return 1; }