/* Allocates new gost_pmeth_data structure and assigns it as data */ static int pkey_gost_init(EVP_PKEY_CTX *ctx) { struct gost_pmeth_data *data; EVP_PKEY *pkey = EVP_PKEY_CTX_get0_pkey(ctx); data = OPENSSL_malloc(sizeof(*data)); if (!data) return 0; memset(data, 0, sizeof(*data)); if (pkey && EVP_PKEY_get0(pkey)) { switch (EVP_PKEY_base_id(pkey)) { case NID_id_GostR3410_2001: case NID_id_GostR3410_2012_256: case NID_id_GostR3410_2012_512: { const EC_GROUP *group = EC_KEY_get0_group(EVP_PKEY_get0((EVP_PKEY *)pkey)); if (group != NULL) { data->sign_param_nid = EC_GROUP_get_curve_name(group); break; } /* else */ } default: OPENSSL_free(data); return 0; } } EVP_PKEY_CTX_set_data(ctx, data); return 1; }
static int pkey_mac_init(EVP_PKEY_CTX *ctx) { MAC_PKEY_CTX *hctx; int nid = ctx->pmeth->pkey_id; if ((hctx = OPENSSL_zalloc(sizeof(*hctx))) == NULL) { EVPerr(EVP_F_PKEY_MAC_INIT, ERR_R_MALLOC_FAILURE); return 0; } /* We're being smart and using the same base NIDs for PKEY and for MAC */ hctx->ctx = EVP_MAC_CTX_new_id(nid); if (hctx->ctx == NULL) { OPENSSL_free(hctx); return 0; } if (nid == EVP_PKEY_CMAC) { hctx->type = MAC_TYPE_MAC; } else { hctx->type = MAC_TYPE_RAW; hctx->raw_data.ktmp.type = V_ASN1_OCTET_STRING; } EVP_PKEY_CTX_set_data(ctx, hctx); ctx->keygen_info_count = 0; return 1; }
/* Allocates new gost_pmeth_data structure and assigns it as data */ static int pkey_gost_init(EVP_PKEY_CTX *ctx) { struct gost_pmeth_data *data; EVP_PKEY *pkey = EVP_PKEY_CTX_get0_pkey(ctx); data = OPENSSL_malloc(sizeof(struct gost_pmeth_data)); if (!data) return 0; memset(data, 0, sizeof(struct gost_pmeth_data)); if (pkey && EVP_PKEY_get0(pkey)) { switch (EVP_PKEY_base_id(pkey)) { case NID_id_GostR3410_94: data->sign_param_nid = gost94_nid_by_params(EVP_PKEY_get0(pkey)); break; case NID_id_GostR3410_2001: data->sign_param_nid = EC_GROUP_get_curve_name(EC_KEY_get0_group (EVP_PKEY_get0((EVP_PKEY *)pkey))); break; default: return 0; } } EVP_PKEY_CTX_set_data(ctx, data); return 1; }
//Init private key data structure static int pkey_gost_mac_init(EVP_PKEY_CTX *ctx) { struct te_mac_pmeth_data *data; data = OPENSSL_malloc(sizeof(struct te_mac_pmeth_data)); if (!data) return 0; memset(data, 0, sizeof(struct te_mac_pmeth_data)); EVP_PKEY_CTX_set_data(ctx, data); return 1; }
/* -------- PKEY_METHOD for GOST MAC algorithm --------------------*/ static int pkey_gost_mac_init(EVP_PKEY_CTX *ctx) { struct gost_mac_pmeth_data *data; data =(gost_mac_pmeth_data*) OPENSSL_malloc(sizeof(struct gost_mac_pmeth_data)); if (!data) return 0; TINYCLR_SSL_MEMSET(data,0,sizeof(struct gost_mac_pmeth_data)); EVP_PKEY_CTX_set_data(ctx,data); return 1; }
static int pkey_gost_mac_init(EVP_PKEY_CTX *ctx) { struct gost_mac_pmeth_data *data; data = calloc(1, sizeof(struct gost_mac_pmeth_data)); if (data == NULL) return 0; EVP_PKEY_CTX_set_data(ctx, data); return 1; }
static void ossl_hmac_cleanup(EVP_PKEY_CTX *ctx) { OSSL_HMAC_PKEY_CTX *hctx = EVP_PKEY_CTX_get_data(ctx); if (hctx) { HMAC_CTX_free(hctx->ctx); OPENSSL_clear_free(hctx->ktmp.data, hctx->ktmp.length); OPENSSL_free(hctx); EVP_PKEY_CTX_set_data(ctx, NULL); } }
static int ossl_hmac_init(EVP_PKEY_CTX *ctx) { OSSL_HMAC_PKEY_CTX *hctx; hctx = OPENSSL_zalloc(sizeof(*hctx)); if (hctx == NULL) return 0; hctx->ktmp.type = V_ASN1_OCTET_STRING; hctx->ctx = HMAC_CTX_new(); EVP_PKEY_CTX_set_data(ctx, hctx); EVP_PKEY_CTX_set0_keygen_info(ctx, NULL, 0); # ifdef TEST_ENG_OPENSSL_HMAC_INIT fprintf(stderr, "(TEST_ENG_OPENSSL_HMAC) ossl_hmac_init() called\n"); # endif return 1; }
static void pkey_mac_cleanup(EVP_PKEY_CTX *ctx) { MAC_PKEY_CTX *hctx = EVP_PKEY_CTX_get_data(ctx); if (hctx != NULL) { switch (hctx->type) { case MAC_TYPE_RAW: OPENSSL_clear_free(hctx->raw_data.ktmp.data, hctx->raw_data.ktmp.length); break; } EVP_MAC_CTX_free(hctx->ctx); OPENSSL_free(hctx); EVP_PKEY_CTX_set_data(ctx, NULL); } }
/* -------- PKEY_METHOD for GOST MAC algorithm --------------------*/ static int pkey_gost_mac_init(EVP_PKEY_CTX *ctx) { struct gost_mac_pmeth_data *data = OPENSSL_malloc(sizeof(*data)); EVP_PKEY *pkey = EVP_PKEY_CTX_get0_pkey(ctx); if (!data) return 0; memset(data, 0, sizeof(*data)); data->mac_size = 4; data->mac_param_nid = NID_undef; if (pkey) { struct gost_mac_key *key = EVP_PKEY_get0(pkey); if (key) { data->mac_param_nid = key->mac_param_nid; data->mac_size = key->mac_size; } } EVP_PKEY_CTX_set_data(ctx, data); return 1; }