Import of old SSLeay release: SSLeay 0.9.1b (unreleased)
[openssl.git] / crypto / x509 / x509_cmp.c
index f9d9510ac50762a0541030bc428ab0a8177950b3..ea6a65d2a198dc9ed01a5f7860d728eaa9fb2a4a 100644 (file)
@@ -255,3 +255,47 @@ X509_NAME *name;
        return(NULL);
        }
 
        return(NULL);
        }
 
+EVP_PKEY *X509_get_pubkey(x)
+X509 *x;
+       {
+       if ((x == NULL) || (x->cert_info == NULL))
+               return(NULL);
+       return(X509_PUBKEY_get(x->cert_info->key));
+       }
+
+int X509_check_private_key(x,k)
+X509 *x;
+EVP_PKEY *k;
+       {
+       EVP_PKEY *xk=NULL;
+       int ok=0;
+
+       xk=X509_get_pubkey(x);
+       if (xk->type != k->type) goto err;
+       switch (k->type)
+               {
+#ifndef NO_RSA
+       case EVP_PKEY_RSA:
+               if (BN_cmp(xk->pkey.rsa->n,k->pkey.rsa->n) != 0) goto err;
+               if (BN_cmp(xk->pkey.rsa->e,k->pkey.rsa->e) != 0) goto err;
+               break;
+#endif
+#ifndef NO_DSA
+       case EVP_PKEY_DSA:
+               if (BN_cmp(xk->pkey.dsa->pub_key,k->pkey.dsa->pub_key) != 0)
+                       goto err;
+               break;
+#endif
+#ifndef NO_DH
+       case EVP_PKEY_DH:
+               /* No idea */
+               goto err;
+#endif
+       default:
+               goto err;
+               }
+
+       ok=1;
+err:
+       return(ok);
+       }