1171840Sdanger/* crypto/ts/ts_lib.c */ 2171840Sdanger/* 3171840Sdanger * Written by Zoltan Glozik (zglozik@stones.com) for the OpenSSL project 4171840Sdanger * 2002. 5171840Sdanger */ 6171840Sdanger/* ==================================================================== 7171840Sdanger * Copyright (c) 2006 The OpenSSL Project. All rights reserved. 8171840Sdanger * 9171840Sdanger * Redistribution and use in source and binary forms, with or without 10171840Sdanger * modification, are permitted provided that the following conditions 11171840Sdanger * are met: 12171840Sdanger * 13171840Sdanger * 1. Redistributions of source code must retain the above copyright 14171840Sdanger * notice, this list of conditions and the following disclaimer. 15171840Sdanger * 16171840Sdanger * 2. Redistributions in binary form must reproduce the above copyright 17171840Sdanger * notice, this list of conditions and the following disclaimer in 18171840Sdanger * the documentation and/or other materials provided with the 19171840Sdanger * distribution. 20171840Sdanger * 21171840Sdanger * 3. All advertising materials mentioning features or use of this 22171840Sdanger * software must display the following acknowledgment: 23171840Sdanger * "This product includes software developed by the OpenSSL Project 24171840Sdanger * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 25171840Sdanger * 26171840Sdanger * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 27171840Sdanger * endorse or promote products derived from this software without 28171840Sdanger * prior written permission. For written permission, please contact 29171840Sdanger * licensing@OpenSSL.org. 30171840Sdanger * 31171840Sdanger * 5. Products derived from this software may not be called "OpenSSL" 32171840Sdanger * nor may "OpenSSL" appear in their names without prior written 33171840Sdanger * permission of the OpenSSL Project. 34171840Sdanger * 35171840Sdanger * 6. Redistributions of any form whatsoever must retain the following 36171840Sdanger * acknowledgment: 37171840Sdanger * "This product includes software developed by the OpenSSL Project 38171840Sdanger * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 39171840Sdanger * 40171840Sdanger * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 41171840Sdanger * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42171840Sdanger * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 43171840Sdanger * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 44171840Sdanger * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 45171840Sdanger * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 46171840Sdanger * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 47171840Sdanger * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48171840Sdanger * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 49171840Sdanger * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 50171840Sdanger * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 51171840Sdanger * OF THE POSSIBILITY OF SUCH DAMAGE. 52171840Sdanger * ==================================================================== 53171840Sdanger * 54171840Sdanger * This product includes cryptographic software written by Eric Young 55171840Sdanger * (eay@cryptsoft.com). This product includes software written by Tim 56171840Sdanger * Hudson (tjh@cryptsoft.com). 57171840Sdanger * 58171840Sdanger */ 59171840Sdanger 60171840Sdanger#include <stdio.h> 61171840Sdanger#include "cryptlib.h" 62171840Sdanger#include <openssl/objects.h> 63171840Sdanger#include <openssl/bn.h> 64171840Sdanger#include <openssl/x509v3.h> 65171840Sdanger#include "ts.h" 66171840Sdanger 67208028Suqs/* Local function declarations. */ 68208028Suqs 69208028Suqs/* Function definitions. */ 70208028Suqs 71208028Suqsint TS_ASN1_INTEGER_print_bio(BIO *bio, const ASN1_INTEGER *num) 72171840Sdanger{ 73171840Sdanger BIGNUM num_bn; 74171840Sdanger int result = 0; 75171840Sdanger char *hex; 76171840Sdanger 77171840Sdanger BN_init(&num_bn); 78171840Sdanger ASN1_INTEGER_to_BN(num, &num_bn); 79171840Sdanger if ((hex = BN_bn2hex(&num_bn))) { 80171840Sdanger result = BIO_write(bio, "0x", 2) > 0; 81171840Sdanger result = result && BIO_write(bio, hex, strlen(hex)) > 0; 82171840Sdanger OPENSSL_free(hex); 83171840Sdanger } 84171840Sdanger BN_free(&num_bn); 85171840Sdanger 86175074Sdanger return result; 87175074Sdanger} 88175074Sdanger 89175074Sdangerint TS_OBJ_print_bio(BIO *bio, const ASN1_OBJECT *obj) 90175074Sdanger{ 91171840Sdanger char obj_txt[128]; 92171840Sdanger 93171840Sdanger OBJ_obj2txt(obj_txt, sizeof(obj_txt), obj, 0); 94171840Sdanger BIO_printf(bio, "%s\n", obj_txt); 95171840Sdanger 96171840Sdanger return 1; 97171840Sdanger} 98171840Sdanger 99171840Sdangerint TS_ext_print_bio(BIO *bio, const STACK_OF(X509_EXTENSION) *extensions) 100171840Sdanger{ 101171840Sdanger int i, critical, n; 102171840Sdanger X509_EXTENSION *ex; 103171840Sdanger ASN1_OBJECT *obj; 104 105 BIO_printf(bio, "Extensions:\n"); 106 n = X509v3_get_ext_count(extensions); 107 for (i = 0; i < n; i++) { 108 ex = X509v3_get_ext(extensions, i); 109 obj = X509_EXTENSION_get_object(ex); 110 i2a_ASN1_OBJECT(bio, obj); 111 critical = X509_EXTENSION_get_critical(ex); 112 BIO_printf(bio, ": %s\n", critical ? "critical" : ""); 113 if (!X509V3_EXT_print(bio, ex, 0, 4)) { 114 BIO_printf(bio, "%4s", ""); 115 M_ASN1_OCTET_STRING_print(bio, ex->value); 116 } 117 BIO_write(bio, "\n", 1); 118 } 119 120 return 1; 121} 122 123int TS_X509_ALGOR_print_bio(BIO *bio, const X509_ALGOR *alg) 124{ 125 int i = OBJ_obj2nid(alg->algorithm); 126 return BIO_printf(bio, "Hash Algorithm: %s\n", 127 (i == NID_undef) ? "UNKNOWN" : OBJ_nid2ln(i)); 128} 129 130int TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *a) 131{ 132 const ASN1_OCTET_STRING *msg; 133 134 TS_X509_ALGOR_print_bio(bio, TS_MSG_IMPRINT_get_algo(a)); 135 136 BIO_printf(bio, "Message data:\n"); 137 msg = TS_MSG_IMPRINT_get_msg(a); 138 BIO_dump_indent(bio, (const char *)M_ASN1_STRING_data(msg), 139 M_ASN1_STRING_length(msg), 4); 140 141 return 1; 142} 143