summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/objects/obj_xref.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/objects/obj_xref.c')
-rw-r--r--src/lib/libcrypto/objects/obj_xref.c127
1 files changed, 63 insertions, 64 deletions
diff --git a/src/lib/libcrypto/objects/obj_xref.c b/src/lib/libcrypto/objects/obj_xref.c
index 797adc8d10..25aed74ff1 100644
--- a/src/lib/libcrypto/objects/obj_xref.c
+++ b/src/lib/libcrypto/objects/obj_xref.c
@@ -10,7 +10,7 @@
10 * are met: 10 * are met:
11 * 11 *
12 * 1. Redistributions of source code must retain the above copyright 12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer. 13 * notice, this list of conditions and the following disclaimer.
14 * 14 *
15 * 2. Redistributions in binary form must reproduce the above copyright 15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in 16 * notice, this list of conditions and the following disclaimer in
@@ -62,51 +62,54 @@
62DECLARE_STACK_OF(nid_triple) 62DECLARE_STACK_OF(nid_triple)
63STACK_OF(nid_triple) *sig_app, *sigx_app; 63STACK_OF(nid_triple) *sig_app, *sigx_app;
64 64
65static int sig_cmp(const nid_triple *a, const nid_triple *b) 65static int
66 { 66sig_cmp(const nid_triple *a, const nid_triple *b)
67{
67 return a->sign_id - b->sign_id; 68 return a->sign_id - b->sign_id;
68 } 69}
69 70
70DECLARE_OBJ_BSEARCH_CMP_FN(nid_triple, nid_triple, sig); 71DECLARE_OBJ_BSEARCH_CMP_FN(nid_triple, nid_triple, sig);
71IMPLEMENT_OBJ_BSEARCH_CMP_FN(nid_triple, nid_triple, sig); 72IMPLEMENT_OBJ_BSEARCH_CMP_FN(nid_triple, nid_triple, sig);
72 73
73static int sig_sk_cmp(const nid_triple * const *a, const nid_triple * const *b) 74static int
74 { 75sig_sk_cmp(const nid_triple * const *a, const nid_triple * const *b)
76{
75 return (*a)->sign_id - (*b)->sign_id; 77 return (*a)->sign_id - (*b)->sign_id;
76 } 78}
77 79
78DECLARE_OBJ_BSEARCH_CMP_FN(const nid_triple *, const nid_triple *, sigx); 80DECLARE_OBJ_BSEARCH_CMP_FN(const nid_triple *, const nid_triple *, sigx);
79 81
80static int sigx_cmp(const nid_triple * const *a, const nid_triple * const *b) 82static int
81 { 83sigx_cmp(const nid_triple * const *a, const nid_triple * const *b)
84{
82 int ret; 85 int ret;
86
83 ret = (*a)->hash_id - (*b)->hash_id; 87 ret = (*a)->hash_id - (*b)->hash_id;
84 if (ret) 88 if (ret)
85 return ret; 89 return ret;
86 return (*a)->pkey_id - (*b)->pkey_id; 90 return (*a)->pkey_id - (*b)->pkey_id;
87 } 91}
88 92
89IMPLEMENT_OBJ_BSEARCH_CMP_FN(const nid_triple *, const nid_triple *, sigx); 93IMPLEMENT_OBJ_BSEARCH_CMP_FN(const nid_triple *, const nid_triple *, sigx);
90 94
91int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid) 95int
92 { 96OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid)
97{
93 nid_triple tmp; 98 nid_triple tmp;
94 const nid_triple *rv = NULL; 99 const nid_triple *rv = NULL;
95 tmp.sign_id = signid; 100 tmp.sign_id = signid;
96 101
97 if (sig_app) 102 if (sig_app) {
98 {
99 int idx = sk_nid_triple_find(sig_app, &tmp); 103 int idx = sk_nid_triple_find(sig_app, &tmp);
100 if (idx >= 0) 104 if (idx >= 0)
101 rv = sk_nid_triple_value(sig_app, idx); 105 rv = sk_nid_triple_value(sig_app, idx);
102 } 106 }
103 107
104#ifndef OBJ_XREF_TEST2 108#ifndef OBJ_XREF_TEST2
105 if (rv == NULL) 109 if (rv == NULL) {
106 {
107 rv = OBJ_bsearch_sig(&tmp, sigoid_srt, 110 rv = OBJ_bsearch_sig(&tmp, sigoid_srt,
108 sizeof(sigoid_srt) / sizeof(nid_triple)); 111 sizeof(sigoid_srt) / sizeof(nid_triple));
109 } 112 }
110#endif 113#endif
111 if (rv == NULL) 114 if (rv == NULL)
112 return 0; 115 return 0;
@@ -115,45 +118,44 @@ int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid)
115 if (ppkey_nid) 118 if (ppkey_nid)
116 *ppkey_nid = rv->pkey_id; 119 *ppkey_nid = rv->pkey_id;
117 return 1; 120 return 1;
118 } 121}
119 122
120int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid) 123int
121 { 124OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid)
125{
122 nid_triple tmp; 126 nid_triple tmp;
123 const nid_triple *t=&tmp; 127 const nid_triple *t = &tmp;
124 const nid_triple **rv = NULL; 128 const nid_triple **rv = NULL;
125 129
126 tmp.hash_id = dig_nid; 130 tmp.hash_id = dig_nid;
127 tmp.pkey_id = pkey_nid; 131 tmp.pkey_id = pkey_nid;
128 132
129 if (sigx_app) 133 if (sigx_app) {
130 {
131 int idx = sk_nid_triple_find(sigx_app, &tmp); 134 int idx = sk_nid_triple_find(sigx_app, &tmp);
132 if (idx >= 0) 135 if (idx >= 0) {
133 {
134 t = sk_nid_triple_value(sigx_app, idx); 136 t = sk_nid_triple_value(sigx_app, idx);
135 rv = &t; 137 rv = &t;
136 }
137 } 138 }
139 }
138 140
139#ifndef OBJ_XREF_TEST2 141#ifndef OBJ_XREF_TEST2
140 if (rv == NULL) 142 if (rv == NULL) {
141 {
142 rv = OBJ_bsearch_sigx(&t, sigoid_srt_xref, 143 rv = OBJ_bsearch_sigx(&t, sigoid_srt_xref,
143 sizeof(sigoid_srt_xref) / sizeof(nid_triple *) 144 sizeof(sigoid_srt_xref) / sizeof(nid_triple *));
144 ); 145 }
145 }
146#endif 146#endif
147 if (rv == NULL) 147 if (rv == NULL)
148 return 0; 148 return 0;
149 if (psignid) 149 if (psignid)
150 *psignid = (*rv)->sign_id; 150 *psignid = (*rv)->sign_id;
151 return 1; 151 return 1;
152 } 152}
153 153
154int OBJ_add_sigid(int signid, int dig_id, int pkey_id) 154int
155 { 155OBJ_add_sigid(int signid, int dig_id, int pkey_id)
156{
156 nid_triple *ntr; 157 nid_triple *ntr;
158
157 if (!sig_app) 159 if (!sig_app)
158 sig_app = sk_nid_triple_new(sig_sk_cmp); 160 sig_app = sk_nid_triple_new(sig_sk_cmp);
159 if (!sig_app) 161 if (!sig_app)
@@ -169,11 +171,10 @@ int OBJ_add_sigid(int signid, int dig_id, int pkey_id)
169 ntr->hash_id = dig_id; 171 ntr->hash_id = dig_id;
170 ntr->pkey_id = pkey_id; 172 ntr->pkey_id = pkey_id;
171 173
172 if (!sk_nid_triple_push(sig_app, ntr)) 174 if (!sk_nid_triple_push(sig_app, ntr)) {
173 {
174 free(ntr); 175 free(ntr);
175 return 0; 176 return 0;
176 } 177 }
177 178
178 if (!sk_nid_triple_push(sigx_app, ntr)) 179 if (!sk_nid_triple_push(sigx_app, ntr))
179 return 0; 180 return 0;
@@ -182,53 +183,51 @@ int OBJ_add_sigid(int signid, int dig_id, int pkey_id)
182 sk_nid_triple_sort(sigx_app); 183 sk_nid_triple_sort(sigx_app);
183 184
184 return 1; 185 return 1;
185 } 186}
186 187
187static void sid_free(nid_triple *tt) 188static void
188 { 189sid_free(nid_triple *tt)
190{
189 free(tt); 191 free(tt);
190 } 192}
191 193
192void OBJ_sigid_free(void) 194void
193 { 195OBJ_sigid_free(void)
194 if (sig_app) 196{
195 { 197 if (sig_app) {
196 sk_nid_triple_pop_free(sig_app, sid_free); 198 sk_nid_triple_pop_free(sig_app, sid_free);
197 sig_app = NULL; 199 sig_app = NULL;
198 } 200 }
199 if (sigx_app) 201 if (sigx_app) {
200 {
201 sk_nid_triple_free(sigx_app); 202 sk_nid_triple_free(sigx_app);
202 sigx_app = NULL; 203 sigx_app = NULL;
203 }
204 } 204 }
205 205}
206
206#ifdef OBJ_XREF_TEST 207#ifdef OBJ_XREF_TEST
207 208
208main() 209main()
209 { 210{
210 int n1, n2, n3; 211 int n1, n2, n3;
211 212
212 int i, rv; 213 int i, rv;
213#ifdef OBJ_XREF_TEST2 214#ifdef OBJ_XREF_TEST2
214 for (i = 0; i < sizeof(sigoid_srt) / sizeof(nid_triple); i++) 215 for (i = 0; i < sizeof(sigoid_srt) / sizeof(nid_triple); i++) {
215 {
216 OBJ_add_sigid(sigoid_srt[i][0], sigoid_srt[i][1], 216 OBJ_add_sigid(sigoid_srt[i][0], sigoid_srt[i][1],
217 sigoid_srt[i][2]); 217 sigoid_srt[i][2]);
218 } 218 }
219#endif 219#endif
220 220
221 for (i = 0; i < sizeof(sigoid_srt) / sizeof(nid_triple); i++) 221 for (i = 0; i < sizeof(sigoid_srt) / sizeof(nid_triple); i++) {
222 {
223 n1 = sigoid_srt[i][0]; 222 n1 = sigoid_srt[i][0];
224 rv = OBJ_find_sigid_algs(n1, &n2, &n3); 223 rv = OBJ_find_sigid_algs(n1, &n2, &n3);
225 printf("Forward: %d, %s %s %s\n", rv, 224 printf("Forward: %d, %s %s %s\n", rv,
226 OBJ_nid2ln(n1), OBJ_nid2ln(n2), OBJ_nid2ln(n3)); 225 OBJ_nid2ln(n1), OBJ_nid2ln(n2), OBJ_nid2ln(n3));
227 n1=0; 226 n1 = 0;
228 rv = OBJ_find_sigid_by_algs(&n1, n2, n3); 227 rv = OBJ_find_sigid_by_algs(&n1, n2, n3);
229 printf("Reverse: %d, %s %s %s\n", rv, 228 printf("Reverse: %d, %s %s %s\n", rv,
230 OBJ_nid2ln(n1), OBJ_nid2ln(n2), OBJ_nid2ln(n3)); 229 OBJ_nid2ln(n1), OBJ_nid2ln(n2), OBJ_nid2ln(n3));
231 }
232 } 230 }
233 231}
232
234#endif 233#endif