Updated External
[yaz-moved-to-github.git] / asn / prt-acc.c
1 /*
2  * Copyright (c) 1995, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: prt-acc.c,v $
7  * Revision 1.3  1995-08-15 11:59:41  quinn
8  * Updated External
9  *
10  * Revision 1.2  1995/06/05  10:52:05  quinn
11  * Fixed some negligences.
12  *
13  * Revision 1.1  1995/06/02  09:49:15  quinn
14  * Adding access control
15  *
16  *
17  */
18
19 #include <proto.h>
20
21 int z_Encryption1(ODR o, Z_Encryption1 **p, int opt)
22 {
23     if (!odr_sequence_begin(o, p, sizeof(**p)))
24         return opt && odr_ok(o);
25     return
26         odr_implicit(o, odr_octetstring, &(*p)->cryptType, ODR_CONTEXT, 1, 1) &&
27         odr_implicit(o, odr_octetstring, &(*p)->credential, ODR_CONTEXT, 2,
28             1) &&
29         odr_implicit(o, odr_octetstring, &(*p)->data, ODR_CONTEXT, 3, 0) &&
30         odr_sequence_end(o);
31 }
32
33 int z_EnumeratedPrompt1(ODR o, Z_EnumeratedPrompt1 **p, int opt)
34 {
35     if (!odr_sequence_begin(o, p, sizeof(**p)))
36         return opt && odr_ok(o);
37     return
38         odr_implicit(o, odr_integer, &(*p)->type, ODR_CONTEXT, 1, 0) &&
39         odr_implicit(o, odr_visiblestring, &(*p)->suggestedString, ODR_CONTEXT,
40             2, 1) &&
41         odr_sequence_end(o);
42 }
43
44 int z_PromptId1(ODR o, Z_PromptId1 **p, int opt)
45 {
46     static Odr_arm arm[] =
47     {
48         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PromptId1_enumeratedPrompt,
49             z_EnumeratedPrompt1},
50         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PromptId1_nonEnumeratedPrompt,
51             odr_visiblestring},
52         {-1, -1, -1, -1, 0}
53     };
54
55     if (o->direction == ODR_DECODE)
56         *p = odr_malloc(o, sizeof(**p));
57     else if (!*p)
58         return opt;
59     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
60         return 1;
61     *p = 0;
62     return opt && odr_ok(o);
63 }
64
65 int z_PromptInfo1(ODR o, Z_PromptInfo1 **p, int opt)
66 {
67     static Odr_arm arm[] =
68     {
69         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Challenge1_character,
70             odr_visiblestring},
71         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Challenge1_encrypted,
72             z_Encryption1},
73         {-1, -1, -1, -1, 0}
74     };
75
76     if (o->direction == ODR_DECODE)
77         *p = odr_malloc(o, sizeof(**p));
78     else if (!*p)
79         return opt;
80     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
81         return 1;
82     *p = 0;
83     return opt && odr_ok(o);
84 }
85
86 int z_ChallengeUnit1(ODR o, Z_ChallengeUnit1 **p, int opt)
87 {
88     if (!odr_sequence_begin(o, p, sizeof(**p)))
89         return opt && odr_ok(o);
90     return
91         odr_explicit(o, z_PromptId1, &(*p)->promptId, ODR_CONTEXT, 1, 0) &&
92         odr_implicit(o, odr_visiblestring, &(*p)->defaultResponse, ODR_CONTEXT,
93             2, 1) &&
94         odr_explicit(o, z_PromptInfo1, &(*p)->promptInfo, ODR_CONTEXT, 3, 1) &&
95         odr_implicit(o, odr_visiblestring, &(*p)->regExpr, ODR_CONTEXT, 4, 1) &&
96         odr_implicit(o, odr_null, &(*p)->responseRequired, ODR_CONTEXT, 5, 1) &&
97         odr_implicit_settag(o, ODR_CONTEXT, 6) &&
98         (odr_sequence_of(o, odr_visiblestring, &(*p)->allowedValues,
99             &(*p)->num_values) || odr_ok(o)) &&
100         odr_implicit(o, odr_null, &(*p)->shouldSave, ODR_CONTEXT, 7, 1) &&
101         odr_implicit(o, odr_integer, &(*p)->dataType, ODR_CONTEXT, 8, 1) &&
102         odr_implicit(o, z_External, &(*p)->diagnostic, ODR_CONTEXT, 9, 1) &&
103         odr_sequence_end(o);
104 }
105
106 int z_Challenge1(ODR o, Z_Challenge1 **p, int opt)
107 {
108     if (o->direction == ODR_ENCODE)
109         *p = odr_malloc(o, sizeof(**p));
110     else if (!*p)
111         return opt;
112     if (odr_sequence_of(o, z_ChallengeUnit1, &(*p)->list,
113         &(*p)->num_challenges))
114         return 1;
115     *p = 0;
116     return opt && odr_ok(o);
117 }
118
119 int z_DiagRec(ODR, Z_DiagRec **, int);
120
121 int z_ResponseUnit1(ODR o, Z_ResponseUnit1 **p, int opt)
122 {
123     static Odr_arm arm[] = 
124     {
125         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Response1_string, odr_visiblestring},
126         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Response1_accept, odr_bool},
127         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Response1_acknowledge, odr_null},
128         {ODR_EXPLICIT, ODR_CONTEXT, 4, Z_Response1_diagnostic, z_DiagRec},
129         {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_Response1_encrypted, z_Encryption1},
130         {-1, -1, -1, -1, 0}
131     };
132
133     if (odr_sequence_begin(o, p, sizeof(**p)))
134         return opt && odr_ok(o);
135     return
136         odr_explicit(o, z_PromptId1, &(*p)->promptId, ODR_CONTEXT, 1, 0) &&
137         odr_constructed_begin(o, p, ODR_CONTEXT, 2) &&
138         odr_choice(o, arm, &(*p)->u, &(*p)->which) &&
139         odr_constructed_end(o) &&
140         odr_sequence_end(o);
141 }
142
143 int z_Response1(ODR o, Z_Response1 **p, int opt)
144 {
145     if (o->direction == ODR_ENCODE)
146         *p = odr_malloc(o, sizeof(**p));
147     else if (!*p)
148         return opt;
149     if (odr_sequence_of(o, z_ResponseUnit1, &(*p)->list,
150         &(*p)->num_responses))
151         return 1;
152     *p = 0;
153     return opt && odr_ok(o);
154 }
155
156 int z_PromptObject1(ODR o, Z_PromptObject1 **p, int opt)
157 {
158     static Odr_arm arm[] =
159     {
160         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PromptObject1_challenge, z_Challenge1},
161         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PromptObject1_response, z_Response1},
162         {-1, -1, -1, -1, 0}
163     };
164
165     if (o->direction == ODR_DECODE)
166         *p = odr_malloc(o, sizeof(**p));
167     else if (!*p)
168         return opt;
169     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
170         return 1;
171     *p = 0;
172     return opt && odr_ok(o);
173 }