Index: openssl/crypto/asn1/asn1t.h |
=================================================================== |
--- openssl/crypto/asn1/asn1t.h (revision 105093) |
+++ openssl/crypto/asn1/asn1t.h (working copy) |
@@ -3,7 +3,7 @@ |
* project 2000. |
*/ |
/* ==================================================================== |
- * Copyright (c) 2000 The OpenSSL Project. All rights reserved. |
+ * Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
@@ -218,7 +218,19 @@ |
#stname \ |
ASN1_ITEM_end(tname) |
+#define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \ |
+ ;\ |
+ ASN1_ITEM_start(tname) \ |
+ ASN1_ITYPE_NDEF_SEQUENCE,\ |
+ V_ASN1_SEQUENCE,\ |
+ tname##_seq_tt,\ |
+ sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ |
+ &tname##_aux,\ |
+ sizeof(stname),\ |
+ #stname \ |
+ ASN1_ITEM_end(tname) |
+ |
/* This pair helps declare a CHOICE type. We can do: |
* |
* ASN1_CHOICE(chname) = { |
@@ -651,8 +663,13 @@ |
typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); |
typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); |
+typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval, |
+ int indent, const char *fname, |
+ const ASN1_PCTX *pctx); |
+ |
typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it); |
typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it); |
+typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it, int indent, const ASN1_PCTX *pctx); |
typedef struct ASN1_COMPAT_FUNCS_st { |
ASN1_new_func *asn1_new; |
@@ -668,6 +685,7 @@ |
ASN1_ex_free_func *asn1_ex_clear; |
ASN1_ex_d2i *asn1_ex_d2i; |
ASN1_ex_i2d *asn1_ex_i2d; |
+ ASN1_ex_print_func *asn1_ex_print; |
} ASN1_EXTERN_FUNCS; |
typedef struct ASN1_PRIMITIVE_FUNCS_st { |
@@ -678,6 +696,7 @@ |
ASN1_ex_free_func *prim_clear; |
ASN1_primitive_c2i *prim_c2i; |
ASN1_primitive_i2c *prim_i2c; |
+ ASN1_primitive_print *prim_print; |
} ASN1_PRIMITIVE_FUNCS; |
/* This is the ASN1_AUX structure: it handles various |
@@ -697,7 +716,8 @@ |
* then an external type is more appropriate. |
*/ |
-typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it); |
+typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, |
+ void *exarg); |
typedef struct ASN1_AUX_st { |
void *app_data; |
@@ -708,6 +728,23 @@ |
int enc_offset; /* Offset of ASN1_ENCODING structure */ |
} ASN1_AUX; |
+/* For print related callbacks exarg points to this structure */ |
+typedef struct ASN1_PRINT_ARG_st { |
+ BIO *out; |
+ int indent; |
+ const ASN1_PCTX *pctx; |
+} ASN1_PRINT_ARG; |
+ |
+/* For streaming related callbacks exarg points to this structure */ |
+typedef struct ASN1_STREAM_ARG_st { |
+ /* BIO to stream through */ |
+ BIO *out; |
+ /* BIO with filters appended */ |
+ BIO *ndef_bio; |
+ /* Streaming I/O boundary */ |
+ unsigned char **boundary; |
+} ASN1_STREAM_ARG; |
+ |
/* Flags in ASN1_AUX */ |
/* Use a reference count */ |
@@ -727,6 +764,12 @@ |
#define ASN1_OP_D2I_POST 5 |
#define ASN1_OP_I2D_PRE 6 |
#define ASN1_OP_I2D_POST 7 |
+#define ASN1_OP_PRINT_PRE 8 |
+#define ASN1_OP_PRINT_POST 9 |
+#define ASN1_OP_STREAM_PRE 10 |
+#define ASN1_OP_STREAM_POST 11 |
+#define ASN1_OP_DETACHED_PRE 12 |
+#define ASN1_OP_DETACHED_POST 13 |
/* Macro to implement a primitive type */ |
#define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) |
@@ -782,9 +825,22 @@ |
#define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \ |
IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname) |
+#define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \ |
+ IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname) |
+ |
#define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \ |
IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname) |
+#define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \ |
+ pre stname *fname##_new(void) \ |
+ { \ |
+ return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ |
+ } \ |
+ pre void fname##_free(stname *a) \ |
+ { \ |
+ ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ |
+ } |
+ |
#define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \ |
stname *fname##_new(void) \ |
{ \ |
@@ -834,6 +890,17 @@ |
return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ |
} |
+#define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \ |
+ IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) |
+ |
+#define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ |
+ int fname##_print_ctx(BIO *out, stname *x, int indent, \ |
+ const ASN1_PCTX *pctx) \ |
+ { \ |
+ return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \ |
+ ASN1_ITEM_rptr(itname), pctx); \ |
+ } |
+ |
#define IMPLEMENT_ASN1_FUNCTIONS_const(name) \ |
IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name) |