1/*
2 * Copyright (c) 2011-12 Apple Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23/*
24 * Copyright (c) 1997 - 2005 Kungliga Tekniska Högskolan
25 * (Royal Institute of Technology, Stockholm, Sweden).
26 * All rights reserved.
27 *
28 * Redistribution and use in source and binary forms, with or without
29 * modification, are permitted provided that the following conditions
30 * are met:
31 *
32 * 1. Redistributions of source code must retain the above copyright
33 *    notice, this list of conditions and the following disclaimer.
34 *
35 * 2. Redistributions in binary form must reproduce the above copyright
36 *    notice, this list of conditions and the following disclaimer in the
37 *    documentation and/or other materials provided with the distribution.
38 *
39 * 3. Neither the name of the Institute nor the names of its contributors
40 *    may be used to endorse or promote products derived from this software
41 *    without specific prior written permission.
42 *
43 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
44 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
45 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
46 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
47 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
48 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
49 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
50 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
51 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
52 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
53 * SUCH DAMAGE.
54 */
55
56#include "asn1-der_locl.h"
57
58#include <com_err.h>
59#include <sys/types.h>
60#include <sys/stat.h>
61
62/* #include "rk-getarg.h" */
63
64#include <err.h>
65
66RCSID("$Id$");
67
68
69static const char *class_names[] = {
70    "UNIV",			/* 0 */
71    "APPL",			/* 1 */
72    "CONTEXT",			/* 2 */
73    "PRIVATE"			/* 3 */
74};
75
76static const char *type_names[] = {
77    "PRIM",			/* 0 */
78    "CONS"			/* 1 */
79};
80
81static const char *tag_names[] = {
82    "EndOfContent",		/* 0 */
83    "Boolean",			/* 1 */
84    "Integer",			/* 2 */
85    "BitString",		/* 3 */
86    "OctetString",		/* 4 */
87    "Null",			/* 5 */
88    "ObjectID",			/* 6 */
89    NULL,			/* 7 */
90    NULL,			/* 8 */
91    NULL,			/* 9 */
92    "Enumerated",		/* 10 */
93    NULL,			/* 11 */
94    NULL,			/* 12 */
95    NULL,			/* 13 */
96    NULL,			/* 14 */
97    NULL,			/* 15 */
98    "Sequence",			/* 16 */
99    "Set",			/* 17 */
100    NULL,			/* 18 */
101    "PrintableString",		/* 19 */
102    NULL,			/* 20 */
103    NULL,			/* 21 */
104    "IA5String",		/* 22 */
105    "UTCTime",			/* 23 */
106    "GeneralizedTime",		/* 24 */
107    NULL,			/* 25 */
108    "VisibleString",		/* 26 */
109    "GeneralString",		/* 27 */
110    NULL,			/* 28 */
111    NULL,			/* 29 */
112    "BMPString"			/* 30 */
113};
114
115static int
116get_type(const char *name, const char *list[], unsigned len)
117{
118    unsigned i;
119    for (i = 0; i < len; i++)
120	if (list[i] && strcasecmp(list[i], name) == 0)
121	    return i;
122    return -1;
123}
124
125#define SIZEOF_ARRAY(a) (sizeof((a))/sizeof((a)[0]))
126
127const char *
128der_get_class_name(unsigned num)
129{
130    if (num >= SIZEOF_ARRAY(class_names))
131	return NULL;
132    return class_names[num];
133}
134
135int
136der_get_class_num(const char *name)
137{
138    return get_type(name, class_names, SIZEOF_ARRAY(class_names));
139}
140
141const char *
142der_get_type_name(unsigned num)
143{
144    if (num >= SIZEOF_ARRAY(type_names))
145	return NULL;
146    return type_names[num];
147}
148
149int
150der_get_type_num(const char *name)
151{
152    return get_type(name, type_names, SIZEOF_ARRAY(type_names));
153}
154
155const char *
156der_get_tag_name(unsigned num)
157{
158    if (num >= SIZEOF_ARRAY(tag_names))
159	return NULL;
160    return tag_names[num];
161}
162
163int
164der_get_tag_num(const char *name)
165{
166    return get_type(name, tag_names, SIZEOF_ARRAY(tag_names));
167}
168