Change DH_up() -> DH_up_ref()
[openssl.git] / crypto / evp / evp_lib.c
index 69784eb..a431945 100644 (file)
 
 #include <stdio.h>
 #include "cryptlib.h"
-#include "evp.h"
-#include "objects.h"
+#include <openssl/evp.h>
+#include <openssl/objects.h>
 
-int EVP_CIPHER_param_to_asn1(c,type)
-EVP_CIPHER_CTX *c;
-ASN1_TYPE *type;
+int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type)
        {
        int ret;
 
@@ -74,9 +72,7 @@ ASN1_TYPE *type;
        return(ret);
        }
 
-int EVP_CIPHER_asn1_to_param(c,type)
-EVP_CIPHER_CTX *c;
-ASN1_TYPE *type;
+int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type)
        {
        int ret;
 
@@ -87,9 +83,7 @@ ASN1_TYPE *type;
        return(ret);
        }
 
-int EVP_CIPHER_get_asn1_iv(c,type)
-EVP_CIPHER_CTX *c;
-ASN1_TYPE *type;
+int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type)
        {
        int i=0,l;
 
@@ -97,14 +91,15 @@ ASN1_TYPE *type;
                {
                l=EVP_CIPHER_CTX_iv_length(c);
                i=ASN1_TYPE_get_octetstring(type,c->oiv,l);
-               memcpy(c->iv,c->oiv,l);
+               if (i != l)
+                       return(-1);
+               else if (i > 0)
+                       memcpy(c->iv,c->oiv,l);
                }
        return(i);
        }
 
-int EVP_CIPHER_set_asn1_iv(c,type)
-EVP_CIPHER_CTX *c;
-ASN1_TYPE *type;
+int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type)
        {
        int i=0,j;
 
@@ -115,3 +110,33 @@ ASN1_TYPE *type;
                }
        return(i);
        }
+
+/* Convert the various cipher NIDs and dummies to a proper OID NID */
+int EVP_CIPHER_type(const EVP_CIPHER *ctx)
+{
+       int nid;
+       ASN1_OBJECT *otmp;
+       nid = EVP_CIPHER_nid(ctx);
+
+       switch(nid) {
+
+               case NID_rc2_cbc:
+               case NID_rc2_64_cbc:
+               case NID_rc2_40_cbc:
+
+               return NID_rc2_cbc;
+
+               case NID_rc4:
+               case NID_rc4_40:
+
+               return NID_rc4;
+
+               default:
+               /* Check it has an OID and it is valid */
+               otmp = OBJ_nid2obj(nid);
+               if(!otmp || !otmp->data) nid = NID_undef;
+               ASN1_OBJECT_free(otmp);
+               return nid;
+       }
+}
+