PR: 1644
authorDr. Stephen Henson <steve@openssl.org>
Sun, 6 Sep 2009 15:49:12 +0000 (15:49 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Sun, 6 Sep 2009 15:49:12 +0000 (15:49 +0000)
Submitted by: steve@openssl.org

Fix to make DHparams_dup() et al work in C++.

For 1.0 fix the final argument to ASN1_dup() so it is void *. Replace some
*_dup macros with functions.

crypto/asn1/a_dup.c
crypto/asn1/asn1.h
crypto/dh/dh.h
crypto/dh/dh_asn1.c
crypto/dsa/dsa.h
crypto/dsa/dsa_asn1.c

index 199d50f521cdd34553b4b1817b598d17b6143276..d98992548ab1b413efefa15021b7b845106dd090 100644 (file)
@@ -62,7 +62,7 @@
 
 #ifndef NO_OLD_ASN1
 
-void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, char *x)
+void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x)
        {
        unsigned char *b,*p;
        const unsigned char *p2;
index dfc6790ef6e792056d4aa74672b1a1f4b3f42b3e..f7718b5a94be016fad6433188e08f8aa9787cdd3 100644 (file)
@@ -952,7 +952,7 @@ int ASN1_put_eoc(unsigned char **pp);
 int ASN1_object_size(int constructed, int length, int tag);
 
 /* Used to implement other functions */
-void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, char *x);
+void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x);
 
 #define ASN1_dup_of(type,i2d,d2i,x) \
     ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \
index b0332f2c0c215dcb937caef5f13dc3e84a352c01..849309a489940cd6c35fcd895328d22811245353 100644 (file)
@@ -157,7 +157,6 @@ struct dh_st
    this for backward compatibility: */
 #define DH_CHECK_P_NOT_STRONG_PRIME    DH_CHECK_P_NOT_SAFE_PRIME
 
-#define DHparams_dup(x) ASN1_dup_of_const(DH,i2d_DHparams,d2i_DHparams,x)
 #define d2i_DHparams_fp(fp,x) (DH *)ASN1_d2i_fp((char *(*)())DH_new, \
                (char *(*)())d2i_DHparams,(fp),(unsigned char **)(x))
 #define i2d_DHparams_fp(fp,x) ASN1_i2d_fp(i2d_DHparams,(fp), \
@@ -165,6 +164,8 @@ struct dh_st
 #define d2i_DHparams_bio(bp,x) ASN1_d2i_bio_of(DH,DH_new,d2i_DHparams,bp,x)
 #define i2d_DHparams_bio(bp,x) ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x)
 
+DH *DHparams_dup(DH *);
+
 const DH_METHOD *DH_OpenSSL(void);
 
 void DH_set_default_method(const DH_METHOD *meth);
index a02b5605728849e9e5a25aed0dddab4cb5d8fd0e..0b4357d60530f3e20e355e98f373538287a82335 100644 (file)
@@ -86,3 +86,8 @@ ASN1_SEQUENCE_cb(DHparams, dh_cb) = {
 } ASN1_SEQUENCE_END_cb(DH, DHparams)
 
 IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(DH, DHparams, DHparams)
+
+DH *DHparams_dup(DH *dh)
+       {
+       return ASN1_item_dup(ASN1_ITEM_rptr(DHparams), dh);
+       }
index 7e6d84a37e84c7306adf63652b4b9aafc51386c6..ac50a5c846da15f37d9109b3ccf5b03636176b8f 100644 (file)
@@ -165,7 +165,6 @@ struct dsa_st
        ENGINE *engine;
        };
 
-#define DSAparams_dup(x) ASN1_dup_of_const(DSA,i2d_DSAparams,d2i_DSAparams,x)
 #define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \
                (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x))
 #define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \
@@ -174,6 +173,7 @@ struct dsa_st
 #define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x)
 
 
+DSA *DSAparams_dup(DSA *x);
 DSA_SIG * DSA_SIG_new(void);
 void   DSA_SIG_free(DSA_SIG *a);
 int    i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp);
index 8277a74be2def3758068b911fa268d37a6fe6e62..c37460b2d6d629a077fefcd7350e7dc6e0754aa6 100644 (file)
@@ -143,3 +143,8 @@ ASN1_CHOICE_cb(DSAPublicKey, dsa_cb) = {
 } ASN1_CHOICE_END_cb(DSA, DSAPublicKey, write_params)
 
 IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(DSA, DSAPublicKey, DSAPublicKey)
+
+DSA *DSAparams_dup(DSA *dsa)
+       {
+       return ASN1_item_dup(ASN1_ITEM_rptr(DSAparams), dsa);
+       }