1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* asn1t.h */ 2e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * project 2000. 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* ==================================================================== 6221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom * Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met: 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the above copyright 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer. 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer in 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the documentation and/or other materials provided with the 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * distribution. 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * software must display the following acknowledgment: 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes software developed by the OpenSSL Project 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * endorse or promote products derived from this software without 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * prior written permission. For written permission, please contact 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * licensing@OpenSSL.org. 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5. Products derived from this software may not be called "OpenSSL" 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * nor may "OpenSSL" appear in their names without prior written 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * permission of the OpenSSL Project. 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 6. Redistributions of any form whatsoever must retain the following 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * acknowledgment: 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes software developed by the OpenSSL Project 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OF THE POSSIBILITY OF SUCH DAMAGE. 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ==================================================================== 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This product includes cryptographic software written by Eric Young 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * (eay@cryptsoft.com). This product includes software written by Tim 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Hudson (tjh@cryptsoft.com). 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef HEADER_ASN1T_H 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define HEADER_ASN1T_H 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stddef.h> 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/e_os2.h> 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/asn1.h> 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef OPENSSL_BUILD_SHLIBCRYPTO 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# undef OPENSSL_EXTERN 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# define OPENSSL_EXTERN OPENSSL_EXPORT 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* ASN1 template defines, structures and functions */ 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef __cplusplus 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectextern "C" { 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr)) 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Macros for start and end of ASN1_ITEM definition */ 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ITEM_start(itname) \ 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project OPENSSL_GLOBAL const ASN1_ITEM itname##_it = { 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ITEM_end(itname) \ 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project }; 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr())) 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Macros for start and end of ASN1_ITEM definition */ 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ITEM_start(itname) \ 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const ASN1_ITEM * itname##_it(void) \ 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { \ 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const ASN1_ITEM local_it = { 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ITEM_end(itname) \ 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project }; \ 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return &local_it; \ 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Macros to aid ASN1 template writing */ 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ITEM_TEMPLATE(tname) \ 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const ASN1_TEMPLATE tname##_item_tt 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ITEM_TEMPLATE_END(tname) \ 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ;\ 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_start(tname) \ 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITYPE_PRIMITIVE,\ 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project -1,\ 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &tname##_item_tt,\ 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0,\ 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NULL,\ 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0,\ 126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project #tname \ 127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_end(tname) 128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* This is a ASN1 type which just embeds a template */ 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* This pair helps declare a SEQUENCE. We can do: 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ASN1_SEQUENCE(stname) = { 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ... SEQUENCE components ... 136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * } ASN1_SEQUENCE_END(stname) 137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This will produce an ASN1_ITEM called stname_it 139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * for a structure called stname. 140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * If you want the same structure but a different 142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * name then use: 143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ASN1_SEQUENCE(itname) = { 145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ... SEQUENCE components ... 146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * } ASN1_SEQUENCE_END_name(stname, itname) 147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This will create an item called itname_it using 149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * a structure called stname. 150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_SEQUENCE(tname) \ 153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const ASN1_TEMPLATE tname##_seq_tt[] 154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname) 156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_SEQUENCE_END_name(stname, tname) \ 158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ;\ 159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_start(tname) \ 160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITYPE_SEQUENCE,\ 161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project V_ASN1_SEQUENCE,\ 162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tname##_seq_tt,\ 163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ 164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NULL,\ 165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sizeof(stname),\ 166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project #stname \ 167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_end(tname) 168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_NDEF_SEQUENCE(tname) \ 170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_SEQUENCE(tname) 171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_NDEF_SEQUENCE_cb(tname, cb) \ 173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_SEQUENCE_cb(tname, cb) 174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_SEQUENCE_cb(tname, cb) \ 176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ 177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_SEQUENCE(tname) 178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_BROKEN_SEQUENCE(tname) \ 180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \ 181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_SEQUENCE(tname) 182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_SEQUENCE_ref(tname, cb, lck) \ 184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), lck, cb, 0}; \ 185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_SEQUENCE(tname) 186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_SEQUENCE_enc(tname, enc, cb) \ 188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \ 189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_SEQUENCE(tname) 190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_NDEF_SEQUENCE_END(tname) \ 192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ;\ 193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_start(tname) \ 194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITYPE_NDEF_SEQUENCE,\ 195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project V_ASN1_SEQUENCE,\ 196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tname##_seq_tt,\ 197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ 198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NULL,\ 199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sizeof(tname),\ 200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project #tname \ 201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_end(tname) 202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname) 204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) 206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) 208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_SEQUENCE_END_ref(stname, tname) \ 210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ;\ 211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_start(tname) \ 212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITYPE_SEQUENCE,\ 213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project V_ASN1_SEQUENCE,\ 214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tname##_seq_tt,\ 215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ 216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &tname##_aux,\ 217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sizeof(stname),\ 218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project #stname \ 219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_end(tname) 220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 221221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \ 222221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ;\ 223221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ASN1_ITEM_start(tname) \ 224221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ASN1_ITYPE_NDEF_SEQUENCE,\ 225221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom V_ASN1_SEQUENCE,\ 226221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom tname##_seq_tt,\ 227221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ 228221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom &tname##_aux,\ 229221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sizeof(stname),\ 230221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom #stname \ 231221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ASN1_ITEM_end(tname) 232221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* This pair helps declare a CHOICE type. We can do: 235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ASN1_CHOICE(chname) = { 237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ... CHOICE options ... 238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ASN1_CHOICE_END(chname) 239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This will produce an ASN1_ITEM called chname_it 241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * for a structure called chname. The structure 242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * definition must look like this: 243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * typedef struct { 244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * int type; 245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * union { 246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ASN1_SOMETHING *opt1; 247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ASN1_SOMEOTHER *opt2; 248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * } value; 249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * } chname; 250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the name of the selector must be 'type'. 252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * to use an alternative selector name use the 253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ASN1_CHOICE_END_selector() version. 254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_CHOICE(tname) \ 257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const ASN1_TEMPLATE tname##_ch_tt[] 258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_CHOICE_cb(tname, cb) \ 260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ 261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_CHOICE(tname) 262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) 264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type) 266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_CHOICE_END_selector(stname, tname, selname) \ 268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ;\ 269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_start(tname) \ 270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITYPE_CHOICE,\ 271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project offsetof(stname,selname) ,\ 272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tname##_ch_tt,\ 273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ 274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NULL,\ 275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sizeof(stname),\ 276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project #stname \ 277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_end(tname) 278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_CHOICE_END_cb(stname, tname, selname) \ 280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ;\ 281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_start(tname) \ 282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITYPE_CHOICE,\ 283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project offsetof(stname,selname) ,\ 284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tname##_ch_tt,\ 285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ 286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &tname##_aux,\ 287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sizeof(stname),\ 288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project #stname \ 289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_end(tname) 290656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* This helps with the template wrapper form of ASN1_ITEM */ 292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \ 294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (flags), (tag), 0,\ 295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project #name, ASN1_ITEM_ref(type) } 296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* These help with SEQUENCE or CHOICE components */ 298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* used to declare other types */ 300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 301656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_EX_TYPE(flags, tag, stname, field, type) { \ 302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (flags), (tag), offsetof(stname, field),\ 303656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project #field, ASN1_ITEM_ref(type) } 304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* used when the structure is combined with the parent */ 306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_EX_COMBINE(flags, tag, type) { \ 308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (flags)|ASN1_TFLG_COMBINE, (tag), 0, NULL, ASN1_ITEM_ref(type) } 309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* implicit and explicit helper macros */ 311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_IMP_EX(stname, field, type, tag, ex) \ 313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | ex, tag, stname, field, type) 314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_EXP_EX(stname, field, type, tag, ex) \ 316656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | ex, tag, stname, field, type) 317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Any defined by macros: the field used is in the table itself */ 319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION 321656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } 322656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } 323656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 324656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } 325656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } 326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 327656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Plain simple type */ 328656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) 329656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* OPTIONAL simple type */ 331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type) 332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* IMPLICIT tagged simple type */ 334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0) 335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 336656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* IMPLICIT tagged OPTIONAL simple type */ 337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) 338656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 339656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Same as above but EXPLICIT */ 340656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0) 342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) 343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* SEQUENCE OF type */ 345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_SEQUENCE_OF(stname, field, type) \ 346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type) 347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* OPTIONAL SEQUENCE OF */ 349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_SEQUENCE_OF_OPT(stname, field, type) \ 350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) 351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 352656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Same as above but for SET OF */ 353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_SET_OF(stname, field, type) \ 355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type) 356656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_SET_OF_OPT(stname, field, type) \ 358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_EX_TYPE(ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) 359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */ 361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_IMP_SET_OF(stname, field, type, tag) \ 363656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) 364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 365656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_EXP_SET_OF(stname, field, type, tag) \ 366656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) 367656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 368656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \ 369656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) 370656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 371656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \ 372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) 373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \ 375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) 376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \ 378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) 379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 380656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \ 381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) 382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 383656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \ 384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) 385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* EXPLICIT using indefinite length constructed form */ 387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_NDEF_EXP(stname, field, type, tag) \ 388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF) 389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* EXPLICIT OPTIONAL using indefinite length constructed form */ 391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \ 392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF) 393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Macros for the ASN1_ADB structure */ 395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 396656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ADB(name) \ 397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const ASN1_ADB_TABLE name##_adbtbl[] 398656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION 400656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 401656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ADB_END(name, flags, field, app_table, def, none) \ 402656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ;\ 403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const ASN1_ADB name##_adb = {\ 404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project flags,\ 405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project offsetof(name, field),\ 406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project app_table,\ 407656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project name##_adbtbl,\ 408656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ 409656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project def,\ 410656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project none\ 411656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 412656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 413656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 414656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ADB_END(name, flags, field, app_table, def, none) \ 416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ;\ 417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const ASN1_ITEM *name##_adb(void) \ 418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { \ 419656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const ASN1_ADB internal_adb = \ 420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project {\ 421656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project flags,\ 422656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project offsetof(name, field),\ 423656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project app_table,\ 424656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project name##_adbtbl,\ 425656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ 426656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project def,\ 427656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project none\ 428656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project }; \ 429656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return (const ASN1_ITEM *) &internal_adb; \ 430656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } \ 431656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void dummy_function(void) 432656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 433656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 434656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 435656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ADB_ENTRY(val, template) {val, template} 436656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 437656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ADB_TEMPLATE(name) \ 438656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const ASN1_TEMPLATE name##_tt 439656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 440656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* This is the ASN1 template structure that defines 441656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * a wrapper round the actual type. It determines the 442656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * actual position of the field in the value structure, 443656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * various flags such as OPTIONAL and the field name. 444656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 445656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 446656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct ASN1_TEMPLATE_st { 447656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectunsigned long flags; /* Various flags */ 448656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectlong tag; /* tag, not used if no tagging */ 449656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectunsigned long offset; /* Offset of this field in structure */ 450656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef NO_ASN1_FIELD_NAMES 451656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectconst char *field_name; /* Field name */ 452656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 453656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */ 454656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 455656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 456656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */ 457656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 458656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TEMPLATE_item(t) (t->item_ptr) 459656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TEMPLATE_adb(t) (t->item_ptr) 460656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 461656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE; 462656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct ASN1_ADB_st ASN1_ADB; 463656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 464656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct ASN1_ADB_st { 465656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned long flags; /* Various flags */ 466656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned long offset; /* Offset of selector field */ 467656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STACK_OF(ASN1_ADB_TABLE) **app_items; /* Application defined items */ 468656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const ASN1_ADB_TABLE *tbl; /* Table of possible types */ 469656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project long tblcount; /* Number of entries in tbl */ 470656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const ASN1_TEMPLATE *default_tt; /* Type to use if no match */ 471656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */ 472656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 473656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 474656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct ASN1_ADB_TABLE_st { 475656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project long value; /* NID for an object or value for an int */ 476656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const ASN1_TEMPLATE tt; /* item for this value */ 477656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 478656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 479656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* template flags */ 480656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 481656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Field is optional */ 482656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_OPTIONAL (0x1) 483656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 484656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Field is a SET OF */ 485656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_SET_OF (0x1 << 1) 486656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 487656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Field is a SEQUENCE OF */ 488656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_SEQUENCE_OF (0x2 << 1) 489656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 490656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Special case: this refers to a SET OF that 491656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * will be sorted into DER order when encoded *and* 492656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the corresponding STACK will be modified to match 493656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the new order. 494656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 495656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_SET_ORDER (0x3 << 1) 496656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 497656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Mask for SET OF or SEQUENCE OF */ 498656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_SK_MASK (0x3 << 1) 499656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 500656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* These flags mean the tag should be taken from the 501656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * tag field. If EXPLICIT then the underlying type 502656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * is used for the inner tag. 503656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 504656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 505656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* IMPLICIT tagging */ 506656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_IMPTAG (0x1 << 3) 507656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 508656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 509656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* EXPLICIT tagging, inner tag from underlying type */ 510656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_EXPTAG (0x2 << 3) 511656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 512656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_TAG_MASK (0x3 << 3) 513656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 514656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* context specific IMPLICIT */ 515656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_IMPLICIT ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT 516656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 517656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* context specific EXPLICIT */ 518656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_EXPLICIT ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT 519656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 520656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* If tagging is in force these determine the 521656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * type of tag to use. Otherwise the tag is 522656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * determined by the underlying type. These 523656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * values reflect the actual octet format. 524656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 525656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 526656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Universal tag */ 527656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_UNIVERSAL (0x0<<6) 528656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Application tag */ 529656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_APPLICATION (0x1<<6) 530656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Context specific tag */ 531656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_CONTEXT (0x2<<6) 532656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Private tag */ 533656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_PRIVATE (0x3<<6) 534656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 535656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_TAG_CLASS (0x3<<6) 536656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 537656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* These are for ANY DEFINED BY type. In this case 538656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the 'item' field points to an ASN1_ADB structure 539656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * which contains a table of values to decode the 540656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * relevant type 541656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 542656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 543656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_ADB_MASK (0x3<<8) 544656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 545656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_ADB_OID (0x1<<8) 546656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 547656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_ADB_INT (0x1<<9) 548656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 549656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* This flag means a parent structure is passed 550656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * instead of the field: this is useful is a 551656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SEQUENCE is being combined with a CHOICE for 552656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * example. Since this means the structure and 553656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * item name will differ we need to use the 554656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ASN1_CHOICE_END_name() macro for example. 555656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 556656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 557656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_COMBINE (0x1<<10) 558656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 559656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* This flag when present in a SEQUENCE OF, SET OF 560656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * or EXPLICIT causes indefinite length constructed 561656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * encoding to be used if required. 562656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 563656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 564656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_TFLG_NDEF (0x1<<11) 565656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 566656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* This is the actual ASN1 item itself */ 567656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 568656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct ASN1_ITEM_st { 569656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectchar itype; /* The item type, primitive, SEQUENCE, CHOICE or extern */ 570656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectlong utype; /* underlying type */ 571656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectconst ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains the contents */ 572656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectlong tcount; /* Number of templates if SEQUENCE or CHOICE */ 573656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectconst void *funcs; /* functions that handle this type */ 574656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectlong size; /* Structure size (usually)*/ 575656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef NO_ASN1_FIELD_NAMES 576656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectconst char *sname; /* Structure name */ 577656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 578656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 579656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 580656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* These are values for the itype field and 581656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * determine how the type is interpreted. 582656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 583656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * For PRIMITIVE types the underlying type 584656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * determines the behaviour if items is NULL. 585656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 586656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Otherwise templates must contain a single 587656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * template and the type is treated in the 588656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * same way as the type specified in the template. 589656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 590656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * For SEQUENCE types the templates field points 591656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * to the members, the size field is the 592656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * structure size. 593656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 594656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * For CHOICE types the templates field points 595656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * to each possible member (typically a union) 596656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * and the 'size' field is the offset of the 597656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * selector. 598656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 599656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The 'funcs' field is used for application 600656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * specific functions. 601656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 602656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * For COMPAT types the funcs field gives a 603656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * set of functions that handle this type, this 604656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * supports the old d2i, i2d convention. 605656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 606656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The EXTERN type uses a new style d2i/i2d. 607656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The new style should be used where possible 608656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * because it avoids things like the d2i IMPLICIT 609656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * hack. 610656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 611656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * MSTRING is a multiple string type, it is used 612656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * for a CHOICE of character strings where the 613656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * actual strings all occupy an ASN1_STRING 614656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * structure. In this case the 'utype' field 615656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * has a special meaning, it is used as a mask 616656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * of acceptable types using the B_ASN1 constants. 617656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 618656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * NDEF_SEQUENCE is the same as SEQUENCE except 619656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * that it will use indefinite length constructed 620656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * encoding if requested. 621656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 622656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 623656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 624656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ITYPE_PRIMITIVE 0x0 625656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 626656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ITYPE_SEQUENCE 0x1 627656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 628656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ITYPE_CHOICE 0x2 629656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 630656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ITYPE_COMPAT 0x3 631656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 632656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ITYPE_EXTERN 0x4 633656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 634656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ITYPE_MSTRING 0x5 635656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 636656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_ITYPE_NDEF_SEQUENCE 0x6 637656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 638656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Cache for ASN1 tag and length, so we 639656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * don't keep re-reading it for things 640656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * like CHOICE 641656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 642656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 643656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct ASN1_TLC_st{ 644656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project char valid; /* Values below are valid */ 645656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int ret; /* return value */ 646656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project long plen; /* length */ 647656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int ptag; /* class value */ 648656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int pclass; /* class value */ 649656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int hdrlen; /* header length */ 650656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 651656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 652656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Typedefs for ASN1 function pointers */ 653656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 654656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef ASN1_VALUE * ASN1_new_func(void); 655656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef void ASN1_free_func(ASN1_VALUE *a); 656656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef ASN1_VALUE * ASN1_d2i_func(ASN1_VALUE **a, const unsigned char ** in, long length); 657656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef int ASN1_i2d_func(ASN1_VALUE * a, unsigned char **in); 658656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 659656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it, 660656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int tag, int aclass, char opt, ASN1_TLC *ctx); 661656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 662656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass); 663656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); 664656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); 665656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 666221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromtypedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval, 667221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom int indent, const char *fname, 668221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const ASN1_PCTX *pctx); 669221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 670656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it); 671656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it); 672221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromtypedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it, int indent, const ASN1_PCTX *pctx); 673656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 674656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct ASN1_COMPAT_FUNCS_st { 675656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_new_func *asn1_new; 676656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_free_func *asn1_free; 677656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_d2i_func *asn1_d2i; 678656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_i2d_func *asn1_i2d; 679656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} ASN1_COMPAT_FUNCS; 680656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 681656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct ASN1_EXTERN_FUNCS_st { 682656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void *app_data; 683656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ex_new_func *asn1_ex_new; 684656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ex_free_func *asn1_ex_free; 685656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ex_free_func *asn1_ex_clear; 686656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ex_d2i *asn1_ex_d2i; 687656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ex_i2d *asn1_ex_i2d; 688221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ASN1_ex_print_func *asn1_ex_print; 689656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} ASN1_EXTERN_FUNCS; 690656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 691656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct ASN1_PRIMITIVE_FUNCS_st { 692656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void *app_data; 693656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned long flags; 694656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ex_new_func *prim_new; 695656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ex_free_func *prim_free; 696656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ex_free_func *prim_clear; 697656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_primitive_c2i *prim_c2i; 698656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_primitive_i2c *prim_i2c; 699221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ASN1_primitive_print *prim_print; 700656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} ASN1_PRIMITIVE_FUNCS; 701656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 702656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* This is the ASN1_AUX structure: it handles various 703656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * miscellaneous requirements. For example the use of 704656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * reference counts and an informational callback. 705656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 706656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The "informational callback" is called at various 707656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * points during the ASN1 encoding and decoding. It can 708656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * be used to provide minor customisation of the structures 709656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * used. This is most useful where the supplied routines 710656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * *almost* do the right thing but need some extra help 711656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * at a few points. If the callback returns zero then 712656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * it is assumed a fatal error has occurred and the 713656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * main operation should be abandoned. 714656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 715656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * If major changes in the default behaviour are required 716656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * then an external type is more appropriate. 717656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 718656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 719221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromtypedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, 720221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom void *exarg); 721656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 722656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct ASN1_AUX_st { 723656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void *app_data; 724656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int flags; 725656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int ref_offset; /* Offset of reference value */ 726656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int ref_lock; /* Lock type to use */ 727656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_aux_cb *asn1_cb; 728656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int enc_offset; /* Offset of ASN1_ENCODING structure */ 729656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} ASN1_AUX; 730656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 731221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom/* For print related callbacks exarg points to this structure */ 732221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromtypedef struct ASN1_PRINT_ARG_st { 733221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom BIO *out; 734221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom int indent; 735221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const ASN1_PCTX *pctx; 736221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} ASN1_PRINT_ARG; 737221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 738221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom/* For streaming related callbacks exarg points to this structure */ 739221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromtypedef struct ASN1_STREAM_ARG_st { 740221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom /* BIO to stream through */ 741221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom BIO *out; 742221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom /* BIO with filters appended */ 743221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom BIO *ndef_bio; 744221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom /* Streaming I/O boundary */ 745221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom unsigned char **boundary; 746221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} ASN1_STREAM_ARG; 747221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 748656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Flags in ASN1_AUX */ 749656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 750656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Use a reference count */ 751656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_AFLG_REFCOUNT 1 752656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Save the encoding of structure (useful for signatures) */ 753656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_AFLG_ENCODING 2 754656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* The Sequence length is invalid */ 755656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_AFLG_BROKEN 4 756656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 757656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* operation values for asn1_cb */ 758656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 759656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_OP_NEW_PRE 0 760656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_OP_NEW_POST 1 761656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_OP_FREE_PRE 2 762656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_OP_FREE_POST 3 763656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_OP_D2I_PRE 4 764656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_OP_D2I_POST 5 765656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_OP_I2D_PRE 6 766656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ASN1_OP_I2D_POST 7 767221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define ASN1_OP_PRINT_PRE 8 768221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define ASN1_OP_PRINT_POST 9 769221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define ASN1_OP_STREAM_PRE 10 770221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define ASN1_OP_STREAM_POST 11 771221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define ASN1_OP_DETACHED_PRE 12 772221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define ASN1_OP_DETACHED_POST 13 773656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 774656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Macro to implement a primitive type */ 775656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) 776656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \ 777656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_start(itname) \ 778656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \ 779656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_end(itname) 780656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 781656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Macro to implement a multi string type */ 782656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_ASN1_MSTRING(itname, mask) \ 783656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_start(itname) \ 784656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \ 785656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_end(itname) 786656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 787656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Macro to implement an ASN1_ITEM in terms of old style funcs */ 788656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 789656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_COMPAT_ASN1(sname) IMPLEMENT_COMPAT_ASN1_type(sname, V_ASN1_SEQUENCE) 790656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 791656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_COMPAT_ASN1_type(sname, tag) \ 792656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static const ASN1_COMPAT_FUNCS sname##_ff = { \ 793656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (ASN1_new_func *)sname##_new, \ 794656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (ASN1_free_func *)sname##_free, \ 795656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (ASN1_d2i_func *)d2i_##sname, \ 796656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (ASN1_i2d_func *)i2d_##sname, \ 797656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project }; \ 798656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_start(sname) \ 799656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITYPE_COMPAT, \ 800656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tag, \ 801656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NULL, \ 802656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0, \ 803656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &sname##_ff, \ 804656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0, \ 805656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project #sname \ 806656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_end(sname) 807656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 808656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \ 809656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_start(sname) \ 810656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITYPE_EXTERN, \ 811656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tag, \ 812656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NULL, \ 813656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0, \ 814656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &fptrs, \ 815656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0, \ 816656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project #sname \ 817656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_ITEM_end(sname) 818656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 819656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Macro to implement standard functions in terms of ASN1_ITEM structures */ 820656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 821656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname) 822656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 823656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname) 824656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 825656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \ 826656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname) 827656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 828221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \ 829221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname) 830221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 831656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \ 832656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname) 833656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 834221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \ 835221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pre stname *fname##_new(void) \ 836221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { \ 837221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ 838221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } \ 839221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pre void fname##_free(stname *a) \ 840221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { \ 841221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ 842221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 843221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 844656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \ 845656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project stname *fname##_new(void) \ 846656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { \ 847656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ 848656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } \ 849656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void fname##_free(stname *a) \ 850656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { \ 851656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ 852656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 853656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 854656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \ 855656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ 856656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) 857656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 858656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ 859656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ 860656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { \ 861656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ 862656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } \ 863656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int i2d_##fname(stname *a, unsigned char **out) \ 864656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { \ 865656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ 866656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 867656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 868656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ 869656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int i2d_##stname##_NDEF(stname *a, unsigned char **out) \ 870656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { \ 871656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ 872656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 873656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 874656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* This includes evil casts to remove const: they will go away when full 875656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ASN1 constification is done. 876656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 877656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ 878656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ 879656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { \ 880656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ 881656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } \ 882656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int i2d_##fname(const stname *a, unsigned char **out) \ 883656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { \ 884656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ 885656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 886656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 887656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ 888656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project stname * stname##_dup(stname *x) \ 889656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { \ 890656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ 891656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 892656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 893221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \ 894221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) 895221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 896221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ 897221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom int fname##_print_ctx(BIO *out, stname *x, int indent, \ 898221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const ASN1_PCTX *pctx) \ 899221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { \ 900221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \ 901221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ASN1_ITEM_rptr(itname), pctx); \ 902221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 903221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 904656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_ASN1_FUNCTIONS_const(name) \ 905656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name) 906656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 907656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \ 908656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ 909656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) 910656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 911656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* external definitions for primitive types */ 912656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 913656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_ITEM(ASN1_BOOLEAN) 914656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_ITEM(ASN1_TBOOLEAN) 915656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_ITEM(ASN1_FBOOLEAN) 916656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_ITEM(ASN1_SEQUENCE) 917656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_ITEM(CBIGNUM) 918656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_ITEM(BIGNUM) 919656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_ITEM(LONG) 920656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_ASN1_ITEM(ZLONG) 921656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 922656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectDECLARE_STACK_OF(ASN1_VALUE) 923656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 924656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Functions used internally by the ASN1 code */ 925656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 926656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it); 927656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it); 928656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint ASN1_template_new(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); 929656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it); 930656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 931656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid ASN1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); 932656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint ASN1_template_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_TEMPLATE *tt); 933656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it, 934656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int tag, int aclass, char opt, ASN1_TLC *ctx); 935656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 936656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass); 937656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint ASN1_template_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_TEMPLATE *tt); 938656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid ASN1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it); 939656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 940656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it); 941656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint asn1_ex_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it); 942656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 943656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint asn1_get_choice_selector(ASN1_VALUE **pval, const ASN1_ITEM *it); 944656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint asn1_set_choice_selector(ASN1_VALUE **pval, int value, const ASN1_ITEM *it); 945656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 946656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectASN1_VALUE ** asn1_get_field_ptr(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); 947656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 948656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectconst ASN1_TEMPLATE *asn1_do_adb(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt, int nullerr); 949656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 950656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint asn1_do_lock(ASN1_VALUE **pval, int op, const ASN1_ITEM *it); 951656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 952656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid asn1_enc_init(ASN1_VALUE **pval, const ASN1_ITEM *it); 953656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid asn1_enc_free(ASN1_VALUE **pval, const ASN1_ITEM *it); 954656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval, const ASN1_ITEM *it); 955656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen, const ASN1_ITEM *it); 956656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 957656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef __cplusplus 958656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 959656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 960656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 961