10Sstevel@tonic-gate /* tasn_typ.c */ 20Sstevel@tonic-gate /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL 30Sstevel@tonic-gate * project 2000. 40Sstevel@tonic-gate */ 50Sstevel@tonic-gate /* ==================================================================== 60Sstevel@tonic-gate * Copyright (c) 2000 The OpenSSL Project. All rights reserved. 70Sstevel@tonic-gate * 80Sstevel@tonic-gate * Redistribution and use in source and binary forms, with or without 90Sstevel@tonic-gate * modification, are permitted provided that the following conditions 100Sstevel@tonic-gate * are met: 110Sstevel@tonic-gate * 120Sstevel@tonic-gate * 1. Redistributions of source code must retain the above copyright 130Sstevel@tonic-gate * notice, this list of conditions and the following disclaimer. 140Sstevel@tonic-gate * 150Sstevel@tonic-gate * 2. Redistributions in binary form must reproduce the above copyright 160Sstevel@tonic-gate * notice, this list of conditions and the following disclaimer in 170Sstevel@tonic-gate * the documentation and/or other materials provided with the 180Sstevel@tonic-gate * distribution. 190Sstevel@tonic-gate * 200Sstevel@tonic-gate * 3. All advertising materials mentioning features or use of this 210Sstevel@tonic-gate * software must display the following acknowledgment: 220Sstevel@tonic-gate * "This product includes software developed by the OpenSSL Project 230Sstevel@tonic-gate * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 240Sstevel@tonic-gate * 250Sstevel@tonic-gate * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 260Sstevel@tonic-gate * endorse or promote products derived from this software without 270Sstevel@tonic-gate * prior written permission. For written permission, please contact 280Sstevel@tonic-gate * licensing@OpenSSL.org. 290Sstevel@tonic-gate * 300Sstevel@tonic-gate * 5. Products derived from this software may not be called "OpenSSL" 310Sstevel@tonic-gate * nor may "OpenSSL" appear in their names without prior written 320Sstevel@tonic-gate * permission of the OpenSSL Project. 330Sstevel@tonic-gate * 340Sstevel@tonic-gate * 6. Redistributions of any form whatsoever must retain the following 350Sstevel@tonic-gate * acknowledgment: 360Sstevel@tonic-gate * "This product includes software developed by the OpenSSL Project 370Sstevel@tonic-gate * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 380Sstevel@tonic-gate * 390Sstevel@tonic-gate * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 400Sstevel@tonic-gate * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 410Sstevel@tonic-gate * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 420Sstevel@tonic-gate * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 430Sstevel@tonic-gate * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 440Sstevel@tonic-gate * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 450Sstevel@tonic-gate * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 460Sstevel@tonic-gate * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 470Sstevel@tonic-gate * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 480Sstevel@tonic-gate * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 490Sstevel@tonic-gate * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 500Sstevel@tonic-gate * OF THE POSSIBILITY OF SUCH DAMAGE. 510Sstevel@tonic-gate * ==================================================================== 520Sstevel@tonic-gate * 530Sstevel@tonic-gate * This product includes cryptographic software written by Eric Young 540Sstevel@tonic-gate * (eay@cryptsoft.com). This product includes software written by Tim 550Sstevel@tonic-gate * Hudson (tjh@cryptsoft.com). 560Sstevel@tonic-gate * 570Sstevel@tonic-gate */ 580Sstevel@tonic-gate #include <stdio.h> 590Sstevel@tonic-gate #include <openssl/asn1.h> 600Sstevel@tonic-gate #include <openssl/asn1t.h> 610Sstevel@tonic-gate 620Sstevel@tonic-gate /* Declarations for string types */ 630Sstevel@tonic-gate 640Sstevel@tonic-gate 650Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_INTEGER) 660Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS(ASN1_INTEGER) 670Sstevel@tonic-gate 680Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_ENUMERATED) 690Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS(ASN1_ENUMERATED) 700Sstevel@tonic-gate 710Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_BIT_STRING) 720Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS(ASN1_BIT_STRING) 730Sstevel@tonic-gate 740Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_OCTET_STRING) 750Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS(ASN1_OCTET_STRING) 760Sstevel@tonic-gate 770Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_NULL) 780Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS(ASN1_NULL) 790Sstevel@tonic-gate 800Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_OBJECT) 810Sstevel@tonic-gate 820Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_UTF8STRING) 830Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS(ASN1_UTF8STRING) 840Sstevel@tonic-gate 850Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_PRINTABLESTRING) 860Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING) 870Sstevel@tonic-gate 880Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_T61STRING) 890Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS(ASN1_T61STRING) 900Sstevel@tonic-gate 910Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_IA5STRING) 920Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS(ASN1_IA5STRING) 930Sstevel@tonic-gate 940Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_GENERALSTRING) 950Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS(ASN1_GENERALSTRING) 960Sstevel@tonic-gate 970Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_UTCTIME) 980Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS(ASN1_UTCTIME) 990Sstevel@tonic-gate 1000Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_GENERALIZEDTIME) 1010Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) 1020Sstevel@tonic-gate 1030Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_VISIBLESTRING) 1040Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) 1050Sstevel@tonic-gate 1060Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_UNIVERSALSTRING) 1070Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) 1080Sstevel@tonic-gate 1090Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_BMPSTRING) 1100Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS(ASN1_BMPSTRING) 1110Sstevel@tonic-gate 1120Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_ANY) 1130Sstevel@tonic-gate 1140Sstevel@tonic-gate /* Just swallow an ASN1_SEQUENCE in an ASN1_STRING */ 1150Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE(ASN1_SEQUENCE) 1160Sstevel@tonic-gate 1170Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) 1180Sstevel@tonic-gate 1190Sstevel@tonic-gate /* Multistring types */ 1200Sstevel@tonic-gate 1210Sstevel@tonic-gate IMPLEMENT_ASN1_MSTRING(ASN1_PRINTABLE, B_ASN1_PRINTABLE) 1220Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) 1230Sstevel@tonic-gate 1240Sstevel@tonic-gate IMPLEMENT_ASN1_MSTRING(DISPLAYTEXT, B_ASN1_DISPLAYTEXT) 1250Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT) 1260Sstevel@tonic-gate 1270Sstevel@tonic-gate IMPLEMENT_ASN1_MSTRING(DIRECTORYSTRING, B_ASN1_DIRECTORYSTRING) 1280Sstevel@tonic-gate IMPLEMENT_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) 1290Sstevel@tonic-gate 1300Sstevel@tonic-gate /* Three separate BOOLEAN type: normal, DEFAULT TRUE and DEFAULT FALSE */ 1310Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE_ex(ASN1_BOOLEAN, ASN1_BOOLEAN, -1) 1320Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE_ex(ASN1_TBOOLEAN, ASN1_BOOLEAN, 1) 1330Sstevel@tonic-gate IMPLEMENT_ASN1_TYPE_ex(ASN1_FBOOLEAN, ASN1_BOOLEAN, 0) 134*2139Sjp161948 135*2139Sjp161948 /* Special, OCTET STRING with indefinite length constructed support */ 136*2139Sjp161948 137*2139Sjp161948 IMPLEMENT_ASN1_TYPE_ex(ASN1_OCTET_STRING_NDEF, ASN1_OCTET_STRING, ASN1_TFLG_NDEF) 138