diff options
Diffstat (limited to 'src/lib/libcrypto/asn1/x_algor.c')
-rw-r--r-- | src/lib/libcrypto/asn1/x_algor.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/lib/libcrypto/asn1/x_algor.c b/src/lib/libcrypto/asn1/x_algor.c index 00b9ea54a1..33533aba86 100644 --- a/src/lib/libcrypto/asn1/x_algor.c +++ b/src/lib/libcrypto/asn1/x_algor.c | |||
@@ -66,8 +66,65 @@ ASN1_SEQUENCE(X509_ALGOR) = { | |||
66 | ASN1_OPT(X509_ALGOR, parameter, ASN1_ANY) | 66 | ASN1_OPT(X509_ALGOR, parameter, ASN1_ANY) |
67 | } ASN1_SEQUENCE_END(X509_ALGOR) | 67 | } ASN1_SEQUENCE_END(X509_ALGOR) |
68 | 68 | ||
69 | ASN1_ITEM_TEMPLATE(X509_ALGORS) = | ||
70 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, algorithms, X509_ALGOR) | ||
71 | ASN1_ITEM_TEMPLATE_END(X509_ALGORS) | ||
72 | |||
69 | IMPLEMENT_ASN1_FUNCTIONS(X509_ALGOR) | 73 | IMPLEMENT_ASN1_FUNCTIONS(X509_ALGOR) |
74 | IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(X509_ALGORS, X509_ALGORS, X509_ALGORS) | ||
70 | IMPLEMENT_ASN1_DUP_FUNCTION(X509_ALGOR) | 75 | IMPLEMENT_ASN1_DUP_FUNCTION(X509_ALGOR) |
71 | 76 | ||
72 | IMPLEMENT_STACK_OF(X509_ALGOR) | 77 | IMPLEMENT_STACK_OF(X509_ALGOR) |
73 | IMPLEMENT_ASN1_SET_OF(X509_ALGOR) | 78 | IMPLEMENT_ASN1_SET_OF(X509_ALGOR) |
79 | |||
80 | int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval) | ||
81 | { | ||
82 | if (!alg) | ||
83 | return 0; | ||
84 | if (ptype != V_ASN1_UNDEF) | ||
85 | { | ||
86 | if (alg->parameter == NULL) | ||
87 | alg->parameter = ASN1_TYPE_new(); | ||
88 | if (alg->parameter == NULL) | ||
89 | return 0; | ||
90 | } | ||
91 | if (alg) | ||
92 | { | ||
93 | if (alg->algorithm) | ||
94 | ASN1_OBJECT_free(alg->algorithm); | ||
95 | alg->algorithm = aobj; | ||
96 | } | ||
97 | if (ptype == 0) | ||
98 | return 1; | ||
99 | if (ptype == V_ASN1_UNDEF) | ||
100 | { | ||
101 | if (alg->parameter) | ||
102 | { | ||
103 | ASN1_TYPE_free(alg->parameter); | ||
104 | alg->parameter = NULL; | ||
105 | } | ||
106 | } | ||
107 | else | ||
108 | ASN1_TYPE_set(alg->parameter, ptype, pval); | ||
109 | return 1; | ||
110 | } | ||
111 | |||
112 | void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval, | ||
113 | X509_ALGOR *algor) | ||
114 | { | ||
115 | if (paobj) | ||
116 | *paobj = algor->algorithm; | ||
117 | if (pptype) | ||
118 | { | ||
119 | if (algor->parameter == NULL) | ||
120 | { | ||
121 | *pptype = V_ASN1_UNDEF; | ||
122 | return; | ||
123 | } | ||
124 | else | ||
125 | *pptype = algor->parameter->type; | ||
126 | if (ppval) | ||
127 | *ppval = algor->parameter->value.ptr; | ||
128 | } | ||
129 | } | ||
130 | |||