fix warnings
[openssl.git] / crypto / ecdsa / ecs_asn1.c
index 886cd01db202f3c6cd78db420eaf9184554e82e6..8c47a14da6f8d9f2e197ba32314b066f98a10d04 100644 (file)
@@ -73,6 +73,8 @@ ASN1_SEQUENCE(X9_62_FIELDID) = {
        ASN1_SIMPLE(X9_62_FIELDID, parameters, ASN1_ANY)
 } ASN1_SEQUENCE_END(X9_62_FIELDID)
 
+DECLARE_ASN1_FUNCTIONS_const(X9_62_FIELDID)
+DECLARE_ASN1_ENCODE_FUNCTIONS_const(X9_62_FIELDID, X9_62_FIELDID)
 IMPLEMENT_ASN1_FUNCTIONS_const(X9_62_FIELDID)
 
 ASN1_SEQUENCE(X9_62_CURVE) = {
@@ -81,6 +83,8 @@ ASN1_SEQUENCE(X9_62_CURVE) = {
        ASN1_OPT(X9_62_CURVE, seed, ASN1_BIT_STRING)
 } ASN1_SEQUENCE_END(X9_62_CURVE)
 
+DECLARE_ASN1_FUNCTIONS_const(X9_62_CURVE)
+DECLARE_ASN1_ENCODE_FUNCTIONS_const(X9_62_CURVE, X9_62_CURVE)
 IMPLEMENT_ASN1_FUNCTIONS_const(X9_62_CURVE)
 
 ASN1_SEQUENCE(X9_62_EC_PARAMETERS) = {
@@ -92,6 +96,8 @@ ASN1_SEQUENCE(X9_62_EC_PARAMETERS) = {
        ASN1_SIMPLE(X9_62_EC_PARAMETERS, cofactor, ASN1_INTEGER)
 } ASN1_SEQUENCE_END(X9_62_EC_PARAMETERS)
 
+DECLARE_ASN1_FUNCTIONS_const(X9_62_EC_PARAMETERS)
+DECLARE_ASN1_ENCODE_FUNCTIONS_const(X9_62_EC_PARAMETERS, X9_62_EC_PARAMETERS)
 IMPLEMENT_ASN1_FUNCTIONS_const(X9_62_EC_PARAMETERS)
 
 ASN1_CHOICE(EC_PARAMETERS) = {
@@ -100,6 +106,8 @@ ASN1_CHOICE(EC_PARAMETERS) = {
        ASN1_SIMPLE(EC_PARAMETERS, value.implicitlyCA, ASN1_NULL)
 } ASN1_CHOICE_END(EC_PARAMETERS)
 
+DECLARE_ASN1_FUNCTIONS_const(EC_PARAMETERS)
+DECLARE_ASN1_ENCODE_FUNCTIONS_const(EC_PARAMETERS, EC_PARAMETERS)
 IMPLEMENT_ASN1_FUNCTIONS_const(EC_PARAMETERS)
              
 ASN1_SEQUENCE(ECDSAPrivateKey) = {
@@ -109,6 +117,8 @@ ASN1_SEQUENCE(ECDSAPrivateKey) = {
        ASN1_SIMPLE(ECDSAPrivateKey, priv_key, BIGNUM)
 } ASN1_SEQUENCE_END(ECDSAPrivateKey)
 
+DECLARE_ASN1_FUNCTIONS_const(ECDSAPrivateKey)
+DECLARE_ASN1_ENCODE_FUNCTIONS_const(ECDSAPrivateKey, ecdsaPrivateKey)
 IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(ECDSAPrivateKey, ECDSAPrivateKey, ECDSAPrivateKey)
 IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(ECDSAPrivateKey, ECDSAPrivateKey, ecdsaPrivateKey)
 
@@ -122,6 +132,7 @@ ASN1_CHOICE(ECDSAPublicKey) = {
        ASN1_EX_COMBINE(0, 0, ecdsa_pub_internal)
 } ASN1_CHOICE_END_selector(ECDSAPrivateKey, ECDSAPublicKey, write_params)
 
+DECLARE_ASN1_ENCODE_FUNCTIONS_const(ECDSAPrivateKey, ecdsaPublicKey)
 IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(ECDSAPrivateKey, ECDSAPublicKey, ecdsaPublicKey)
 
 
@@ -170,6 +181,7 @@ X9_62_CURVE   *ECDSA_get_X9_62_CURVE(const ECDSA *ecdsa, X9_62_CURVE *curve)
        X9_62_CURVE *ret=NULL;
        BIGNUM      *tmp1=NULL, *tmp2=NULL;
        unsigned char *buffer=NULL;
+       unsigned char char_buf = 0;
 
        if (!ecdsa || !ecdsa->group)
                OPENSSL_ECDSA_ABORT(ECDSA_R_MISSING_PARAMETERS)
@@ -189,29 +201,38 @@ X9_62_CURVE   *ECDSA_get_X9_62_CURVE(const ECDSA *ecdsa, X9_62_CURVE *curve)
        if (!EC_GROUP_get_curve_GFp(ecdsa->group, NULL, tmp1, tmp2, NULL))
                OPENSSL_ECDSA_ABORT(ERR_R_EC_LIB)
 
-       if ((len1 = BN_num_bytes(tmp1)) == 0)
-               OPENSSL_ECDSA_ABORT(ECDSA_R_UNEXPECTED_PARAMETER_LENGTH)
-       if ((buffer = OPENSSL_malloc(len1)) == NULL)
-               OPENSSL_ECDSA_ABORT(ERR_R_MALLOC_FAILURE)
-       if ((len1 = BN_bn2bin(tmp1, buffer)) == 0) goto err;
-       if ((ret->a = M_ASN1_OCTET_STRING_new()) == NULL)
-               OPENSSL_ECDSA_ABORT(ERR_R_ASN1_LIB)
-       if (!M_ASN1_OCTET_STRING_set(ret->a, buffer, len1))
+       if ((ret->a = M_ASN1_OCTET_STRING_new()) == NULL || 
+           (ret->b = M_ASN1_OCTET_STRING_new()) == NULL )
                OPENSSL_ECDSA_ABORT(ERR_R_ASN1_LIB)
 
-       if ((len2 = BN_num_bytes(tmp2)) == 0)
-               OPENSSL_ECDSA_ABORT(ECDSA_R_UNEXPECTED_PARAMETER_LENGTH)
-       if (len1 < len2)
+       len1 = BN_num_bytes(tmp1);
+       len2 = BN_num_bytes(tmp2);
+
+       if ((buffer = OPENSSL_malloc(len1 > len2 ? len1 : len2)) == NULL)
+               OPENSSL_ECDSA_ABORT(ERR_R_MALLOC_FAILURE)
+
+       if (len1 == 0) /* => a == 0 */
        {
-               OPENSSL_free(buffer);
-               if ((buffer = OPENSSL_malloc(len2)) == NULL)
-                       OPENSSL_ECDSA_ABORT(ERR_R_MALLOC_FAILURE)
+               if (!M_ASN1_OCTET_STRING_set(ret->a, &char_buf, 1))
+                       OPENSSL_ECDSA_ABORT(ERR_R_ASN1_LIB)
+       }
+       else
+       {
+               if ((len1 = BN_bn2bin(tmp1, buffer)) == 0) goto err;
+               if (!M_ASN1_OCTET_STRING_set(ret->a, buffer, len1))
+                       OPENSSL_ECDSA_ABORT(ERR_R_ASN1_LIB)
+       }
+       if (len2 == 0) /* => b == 0 */
+       {
+               if (!M_ASN1_OCTET_STRING_set(ret->a, &char_buf, 1))
+                       OPENSSL_ECDSA_ABORT(ERR_R_ASN1_LIB)
+       }
+       else
+       {
+               if ((len2 = BN_bn2bin(tmp2, buffer)) == 0) goto err;
+               if (!M_ASN1_OCTET_STRING_set(ret->b, buffer, len2))
+                       OPENSSL_ECDSA_ABORT(ERR_R_ASN1_LIB)
        }
-       if ((len2 = BN_bn2bin(tmp2, buffer)) == 0) goto err;
-       if ((ret->b = M_ASN1_OCTET_STRING_new()) == NULL)
-               OPENSSL_ECDSA_ABORT(ERR_R_ASN1_LIB)
-       if (!M_ASN1_OCTET_STRING_set(ret->b, buffer, len2))
-               OPENSSL_ECDSA_ABORT(ERR_R_ASN1_LIB)
 
        if (ecdsa->seed)
        {       
@@ -355,7 +376,7 @@ ECDSA         *ECDSA_x9_62parameters2ecdsa(const X9_62_EC_PARAMETERS *params, EC
 {
        int       ok=0, reason=ERR_R_EC_LIB, tmp;
        ECDSA     *ret=NULL;
-       EC_METHOD *meth=NULL;
+       const EC_METHOD *meth=NULL;
        BIGNUM    *tmp_1=NULL, *tmp_2=NULL, *tmp_3=NULL;
        EC_POINT  *point=NULL;
 
@@ -398,7 +419,7 @@ ECDSA         *ECDSA_x9_62parameters2ecdsa(const X9_62_EC_PARAMETERS *params, EC
        else if (tmp == NID_X9_62_prime_field)
        {
                /* TODO : optimal method for the curve */
-               (const EC_METHOD *)meth = EC_GFp_mont_method();
+               meth = EC_GFp_mont_method();
                if ((ret->group = EC_GROUP_new(meth)) == NULL) goto err;
                if (params->fieldID->parameters->type != V_ASN1_INTEGER)
                        OPENSSL_ECDSA_ABORT(ECDSA_R_UNEXPECTED_ASN1_TYPE)