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