diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2000-08-22 22:20:25 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2000-08-22 22:20:25 +0000 |
commit | d096b524afbdc371032d96d22f1686d88bfba0e9 (patch) | |
tree | 8682cc9a6ca3c3142f940a30237f3148e69bf498 | |
parent | c9b51693dc8f9f198281a4f8a976cf5e118313b4 (diff) |
Add support for 'other' PKCS#7 content types.
-rw-r--r-- | CHANGES | 6 | ||||
-rw-r--r-- | crypto/asn1/p7_lib.c | 12 | ||||
-rw-r--r-- | crypto/pkcs7/pkcs7.h | 3 |
3 files changed, 16 insertions, 5 deletions
@@ -4,6 +4,12 @@ Changes between 0.9.5a and 0.9.6 [xx XXX 2000] + *) Unrecognized PKCS#7 content types are now handled via a + catch all ASN1_TYPE structure. This allows unsupported + types to be stored as a "blob" and an application can + encode and decode it manually. + [Steve Henson] + *) Fix various signed/unsigned issues to make a_strex,c compile under VC++. [Oscar Jacobsson <oscar.jacobsson@celocom.com>] diff --git a/crypto/asn1/p7_lib.c b/crypto/asn1/p7_lib.c index 76cb675497..b1196ef581 100644 --- a/crypto/asn1/p7_lib.c +++ b/crypto/asn1/p7_lib.c @@ -104,6 +104,7 @@ int i2d_PKCS7(PKCS7 *a, unsigned char **pp) M_ASN1_I2D_len(a->d.encrypted,i2d_PKCS7_ENCRYPT); break; default: + M_ASN1_I2D_len(a->d.other,i2d_ASN1_TYPE); break; } } @@ -138,6 +139,7 @@ int i2d_PKCS7(PKCS7 *a, unsigned char **pp) M_ASN1_I2D_put(a->d.encrypted,i2d_PKCS7_ENCRYPT); break; default: + M_ASN1_I2D_put(a->d.other,i2d_ASN1_TYPE); break; } M_ASN1_I2D_INF_seq_end(); @@ -189,6 +191,7 @@ int i2d_PKCS7(PKCS7 *a, unsigned char **pp) M_ASN1_I2D_len(a->d.encrypted,i2d_PKCS7_ENCRYPT); break; default: + M_ASN1_I2D_len(a->d.other,i2d_ASN1_TYPE); break; } /* Work out explicit tag content size */ @@ -228,6 +231,7 @@ int i2d_PKCS7(PKCS7 *a, unsigned char **pp) M_ASN1_I2D_put(a->d.encrypted,i2d_PKCS7_ENCRYPT); break; default: + M_ASN1_I2D_put(a->d.other,i2d_ASN1_TYPE); break; } } @@ -298,10 +302,8 @@ PKCS7 *d2i_PKCS7(PKCS7 **a, unsigned char **pp, long length) M_ASN1_D2I_get(ret->d.encrypted,d2i_PKCS7_ENCRYPT); break; default: - c.error=ASN1_R_BAD_PKCS7_TYPE; - c.line=__LINE__; - goto err; - /* break; */ + M_ASN1_D2I_get(ret->d.other,d2i_ASN1_TYPE); + break; } if (Tinf == (1|V_ASN1_CONSTRUCTED)) { @@ -378,7 +380,7 @@ void PKCS7_content_free(PKCS7 *a) PKCS7_ENCRYPT_free(a->d.encrypted); break; default: - /* MEMORY LEAK */ + ASN1_TYPE_free(a->d.other); break; } } diff --git a/crypto/pkcs7/pkcs7.h b/crypto/pkcs7/pkcs7.h index f3f85f57af..ac46c8dd15 100644 --- a/crypto/pkcs7/pkcs7.h +++ b/crypto/pkcs7/pkcs7.h @@ -210,6 +210,9 @@ typedef struct pkcs7_st /* NID_pkcs7_encrypted */ PKCS7_ENCRYPT *encrypted; + + /* Anything else */ + ASN1_TYPE *other; } d; } PKCS7; |