Add X9.42 DH test.
[openssl.git] / crypto / x509 / x509type.c
index 8fe1c5458314545581a6b223e9878d5d652de918..9702ec53103fc6c04ba154603a5ff5eb2a7aa573 100644 (file)
@@ -91,28 +91,38 @@ int X509_certificate_type(X509 *x, EVP_PKEY *pkey)
                break;
        case EVP_PKEY_DH:
                ret=EVP_PK_DH|EVP_PKT_EXCH;
+               break;  
+       case NID_id_GostR3410_94:
+       case NID_id_GostR3410_2001:
+               ret=EVP_PKT_EXCH|EVP_PKT_SIGN;
                break;
        default:
                break;
                }
 
-       i=X509_get_signature_type(x);
-       switch (i)
+       i=OBJ_obj2nid(x->sig_alg->algorithm);
+       if (i && OBJ_find_sigid_algs(i, NULL, &i))
                {
-       case EVP_PKEY_RSA:
-               ret|=EVP_PKS_RSA;
-               break;
-       case EVP_PKEY_DSA:
-               ret|=EVP_PKS_DSA;
-               break;
-       case EVP_PKEY_EC:
-               ret|=EVP_PKS_EC;
-               break;
-       default:
-               break;
+
+               switch (i)
+                       {
+               case NID_rsaEncryption:
+               case NID_rsa:
+                       ret|=EVP_PKS_RSA;
+                       break;
+               case NID_dsa:
+               case NID_dsa_2:
+                       ret|=EVP_PKS_DSA;
+                       break;
+               case NID_X9_62_id_ecPublicKey:
+                       ret|=EVP_PKS_EC;
+                       break;
+               default:
+                       break;
+                       }
                }
 
-       if (EVP_PKEY_size(pk) <= 512/8) /* /8 because it's 512 bits we look
+       if (EVP_PKEY_size(pk) <= 1024/8)/* /8 because it's 1024 bits we look
                                           for, not bytes */
                ret|=EVP_PKT_EXP;
        if(pkey==NULL) EVP_PKEY_free(pk);