1/*
2 * Copyright (c) 2005-2007,2011,2014 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
25/*
26 * asn1Types.h - ASN.1/DER #defines - strictly hard coded per the real world
27 *
28 */
29
30#ifndef	_ASN1_TYPES_H_
31#define _ASN1_TYPES_H_
32
33#ifdef __cplusplus
34extern "C" {
35#endif
36
37/* copied from libsecurity_asn1 project */
38
39#define ASN1_BOOLEAN			0x01
40#define ASN1_INTEGER			0x02
41#define ASN1_BIT_STRING			0x03
42#define ASN1_OCTET_STRING		0x04
43#define ASN1_NULL				0x05
44#define ASN1_OBJECT_ID			0x06
45#define ASN1_OBJECT_DESCRIPTOR  0x07
46/* External type and instance-of type   0x08 */
47#define ASN1_REAL               0x09
48#define ASN1_ENUMERATED			0x0a
49#define ASN1_EMBEDDED_PDV       0x0b
50#define ASN1_UTF8_STRING		0x0c
51/*                                  0x0d */
52/*                                  0x0e */
53/*                                  0x0f */
54#define ASN1_SEQUENCE			0x10
55#define ASN1_SET				0x11
56#define ASN1_NUMERIC_STRING		0x12
57#define ASN1_PRINTABLE_STRING	0x13
58#define ASN1_T61_STRING			0x14
59#define ASN1_VIDEOTEX_STRING	0x15
60#define ASN1_IA5_STRING			0x16
61#define ASN1_UTC_TIME			0x17
62#define ASN1_GENERALIZED_TIME	0x18
63#define ASN1_GRAPHIC_STRING		0x19
64#define ASN1_VISIBLE_STRING		0x1a
65#define ASN1_GENERAL_STRING		0x1b
66#define ASN1_UNIVERSAL_STRING	0x1c
67/*                                  0x1d */
68#define ASN1_BMP_STRING			0x1e
69#define ASN1_HIGH_TAG_NUMBER	0x1f
70#define ASN1_TELETEX_STRING ASN1_T61_STRING
71
72#ifdef DER_MULTIBYTE_TAGS
73
74#define ASN1_TAG_MASK			((DERTag)~0)
75#define ASN1_TAGNUM_MASK        ((DERTag)~((DERTag)7 << (sizeof(DERTag) * 8 - 3)))
76
77#define ASN1_METHOD_MASK		((DERTag)1 << (sizeof(DERTag) * 8 - 3))
78#define ASN1_PRIMITIVE			((DERTag)0 << (sizeof(DERTag) * 8 - 3))
79#define ASN1_CONSTRUCTED		((DERTag)1 << (sizeof(DERTag) * 8 - 3))
80
81#define ASN1_CLASS_MASK			((DERTag)3 << (sizeof(DERTag) * 8 - 2))
82#define ASN1_UNIVERSAL			((DERTag)0 << (sizeof(DERTag) * 8 - 2))
83#define ASN1_APPLICATION		((DERTag)1 << (sizeof(DERTag) * 8 - 2))
84#define ASN1_CONTEXT_SPECIFIC	((DERTag)2 << (sizeof(DERTag) * 8 - 2))
85#define ASN1_PRIVATE			((DERTag)3 << (sizeof(DERTag) * 8 - 2))
86
87#else /* DER_MULTIBYTE_TAGS */
88
89#define ASN1_TAG_MASK			0xff
90#define ASN1_TAGNUM_MASK		0x1f
91#define ASN1_METHOD_MASK		0x20
92#define ASN1_PRIMITIVE			0x00
93#define ASN1_CONSTRUCTED		0x20
94
95#define ASN1_CLASS_MASK			0xc0
96#define ASN1_UNIVERSAL			0x00
97#define ASN1_APPLICATION		0x40
98#define ASN1_CONTEXT_SPECIFIC	0x80
99#define ASN1_PRIVATE			0xc0
100
101#endif /* !DER_MULTIBYTE_TAGS */
102
103/* sequence and set appear as the following */
104#define ASN1_CONSTR_SEQUENCE	(ASN1_CONSTRUCTED | ASN1_SEQUENCE)
105#define ASN1_CONSTR_SET			(ASN1_CONSTRUCTED | ASN1_SET)
106
107#ifdef __cplusplus
108}
109#endif
110
111#endif	/* _ASN1_TYPES_H_ */
112
113