- if ((point = EC_GROUP_get0_generator(pkey->pkey.eckey->group))
- == NULL)
- {
- EVPerr(EVP_F_EC_KEY_PKEY2PKCS8, ERR_R_EC_LIB);
- return 0;
- }
- len = EC_POINT_point2oct(pkey->pkey.eckey->group, point,
- pkey->pkey.eckey->conv_form, NULL, 0, NULL);
- p = OPENSSL_malloc(len);
- if (!len || !p || !EC_POINT_point2oct(pkey->pkey.eckey->group,
- point, pkey->pkey.eckey->conv_form, p, len, NULL))
- {
- EVPerr(EVP_F_EC_KEY_PKEY2PKCS8, ERR_R_EC_LIB);
- OPENSSL_free(p);
- return 0;
- }
- if ((ttmp->value.octet_string =ASN1_OCTET_STRING_new()) == NULL)
- {
- EVPerr(EVP_F_EC_KEY_PKEY2PKCS8, ERR_R_MALLOC_FAILURE);
- return 0;
- }
- if (!ASN1_OCTET_STRING_set(ttmp->value.octet_string, p, len))
- {
- EVPerr(EVP_F_EC_KEY_PKEY2PKCS8, EVP_R_ASN1_LIB);
- return 0;
- }
- OPENSSL_free(p);
-
- ttmp->type = V_ASN1_OCTET_STRING;
- if (!sk_ASN1_TYPE_push(neckey, ttmp))
- {
- sk_ASN1_TYPE_pop_free(neckey, ASN1_TYPE_free);
- ASN1_INTEGER_free(prkey);
- return 0;
- }
-
- if ((ttmp = ASN1_TYPE_new()) == NULL)
- {
- EVPerr(EVP_F_EC_KEY_PKEY2PKCS8, ERR_R_MALLOC_FAILURE);
- return 0;
- }
- ttmp->value.integer = prkey;
- ttmp->type = V_ASN1_INTEGER;
- if (!sk_ASN1_TYPE_push(neckey, ttmp))
- {
- sk_ASN1_TYPE_pop_free(neckey, ASN1_TYPE_free);
- ASN1_INTEGER_free(prkey);
- return 0;
- }