159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan/*
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * COPYRIGHT (C) 2006,2007
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * THE REGENTS OF THE UNIVERSITY OF MICHIGAN
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * ALL RIGHTS RESERVED
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan *
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * Permission is granted to use, copy, create derivative works
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * and redistribute this software and such derivative works
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * for any purpose, so long as the name of The University of
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * Michigan is not used in any advertising or publicity
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * pertaining to the use of distribution of this software
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * without specific, written prior authorization. If the
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * above copyright notice or any other identification of the
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * University of Michigan is included in any copy of any
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * portion of this software, then the disclaimer below must
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * also be included.
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan *
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * FROM THE UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * PURPOSE, AND WITHOUT WARRANTY BY THE UNIVERSITY OF
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * MICHIGAN OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * WITHOUT LIMITATION THE IMPLIED WARRANTIES OF
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE LIABLE
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * FOR ANY DAMAGES, INCLUDING SPECIAL, INDIRECT, INCIDENTAL, OR
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM ARISING
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * SUCH DAMAGES.
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan */
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#include <stdio.h>
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#include <stdlib.h>
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#include <errno.h>
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#include <unistd.h>
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#include <string.h>
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#include <ctype.h>
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#include <assert.h>
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#include "pkinit.h"
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#define FAKECERT
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanconst krb5_octet_data
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan dh_oid = { 0, 7, (unsigned char *)"\x2A\x86\x48\xce\x3e\x02\x01" };
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalankrb5_error_code
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanpkinit_init_req_opts(pkinit_req_opts **reqopts)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan krb5_error_code retval = ENOMEM;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan pkinit_req_opts *opts = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan *reqopts = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan opts = (pkinit_req_opts *) calloc(1, sizeof(pkinit_req_opts));
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (opts == NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan return retval;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan opts->require_eku = 1;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan opts->accept_secondary_eku = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan opts->allow_upn = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan opts->dh_or_rsa = DH_PROTOCOL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan opts->require_crl_checking = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan opts->dh_size = PKINIT_DEFAULT_DH_MIN_BITS;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan opts->win2k_target = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan opts->win2k_require_cksum = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan *reqopts = opts;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan return 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanpkinit_fini_req_opts(pkinit_req_opts *opts)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (opts != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(opts);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalankrb5_error_code
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanpkinit_init_plg_opts(pkinit_plg_opts **plgopts)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan krb5_error_code retval = ENOMEM;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan pkinit_plg_opts *opts = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan *plgopts = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan opts = (pkinit_plg_opts *) calloc(1, sizeof(pkinit_plg_opts));
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (opts == NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan return retval;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan opts->require_eku = 1;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan opts->accept_secondary_eku = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan opts->dh_or_rsa = DH_PROTOCOL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan opts->allow_upn = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan opts->require_crl_checking = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan opts->dh_min_bits = PKINIT_DEFAULT_DH_MIN_BITS;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan *plgopts = opts;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan return 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanpkinit_fini_plg_opts(pkinit_plg_opts *opts)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (opts != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(opts);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanfree_krb5_pa_pk_as_req(krb5_pa_pk_as_req **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (*in == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->signedAuthPack.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->signedAuthPack.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->trustedCertifiers != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free_krb5_external_principal_identifier(&(*in)->trustedCertifiers);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->kdcPkId.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->kdcPkId.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(*in);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanfree_krb5_pa_pk_as_req_draft9(krb5_pa_pk_as_req_draft9 **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (*in == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->signedAuthPack.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->signedAuthPack.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->kdcCert.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->kdcCert.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->encryptionCert.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->encryptionCert.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->trustedCertifiers != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free_krb5_trusted_ca(&(*in)->trustedCertifiers);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(*in);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanfree_krb5_reply_key_pack(krb5_reply_key_pack **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (*in == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->replyKey.contents != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->replyKey.contents);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->asChecksum.contents != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->asChecksum.contents);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(*in);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanfree_krb5_reply_key_pack_draft9(krb5_reply_key_pack_draft9 **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (*in == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->replyKey.contents != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->replyKey.contents);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(*in);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanfree_krb5_auth_pack(krb5_auth_pack **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in) == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->clientPublicValue != NULL) {
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->clientPublicValue->algorithm.algorithm.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->clientPublicValue->algorithm.algorithm.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->clientPublicValue->algorithm.parameters.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->clientPublicValue->algorithm.parameters.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->clientPublicValue->subjectPublicKey.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->clientPublicValue->subjectPublicKey.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->clientPublicValue);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan }
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->pkAuthenticator.paChecksum.contents != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->pkAuthenticator.paChecksum.contents);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->supportedCMSTypes != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free_krb5_algorithm_identifiers(&((*in)->supportedCMSTypes));
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(*in);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanfree_krb5_auth_pack_draft9(krb5_context context,
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan krb5_auth_pack_draft9 **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in) == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan krb5_free_principal(context, (*in)->pkAuthenticator.kdcName);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(*in);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanfree_krb5_pa_pk_as_rep(krb5_pa_pk_as_rep **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (*in == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan switch ((*in)->choice) {
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan case choice_pa_pk_as_rep_dhInfo:
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->u.dh_Info.dhSignedData.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->u.dh_Info.dhSignedData.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan break;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan case choice_pa_pk_as_rep_encKeyPack:
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->u.encKeyPack.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->u.encKeyPack.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan break;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan default:
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan break;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan }
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(*in);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanfree_krb5_pa_pk_as_rep_draft9(krb5_pa_pk_as_rep_draft9 **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (*in == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->u.encKeyPack.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->u.encKeyPack.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(*in);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanfree_krb5_external_principal_identifier(krb5_external_principal_identifier ***in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan int i = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (*in == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan while ((*in)[i] != NULL) {
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)[i]->subjectName.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)[i]->subjectName.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)[i]->issuerAndSerialNumber.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)[i]->issuerAndSerialNumber.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)[i]->subjectKeyIdentifier.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)[i]->subjectKeyIdentifier.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)[i]);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan i++;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan }
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(*in);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanfree_krb5_trusted_ca(krb5_trusted_ca ***in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan int i = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (*in == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan while ((*in)[i] != NULL) {
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan switch((*in)[i]->choice) {
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan case choice_trusted_cas_principalName:
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan break;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan case choice_trusted_cas_caName:
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)[i]->u.caName.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)[i]->u.caName.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan break;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan case choice_trusted_cas_issuerAndSerial:
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)[i]->u.issuerAndSerial.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)[i]->u.issuerAndSerial.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan break;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan case choice_trusted_cas_UNKNOWN:
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan break;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan }
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)[i]);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan i++;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan }
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(*in);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanfree_krb5_typed_data(krb5_typed_data ***in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan int i = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (*in == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan while ((*in)[i] != NULL) {
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)[i]->data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)[i]->data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)[i]);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan i++;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan }
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(*in);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanfree_krb5_algorithm_identifier(krb5_algorithm_identifier *in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (in == NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (in->algorithm.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(in->algorithm.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (in->parameters.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(in->parameters.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(in);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanfree_krb5_algorithm_identifiers(krb5_algorithm_identifier ***in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan int i;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (in == NULL || *in == NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan for (i = 0; (*in)[i] != NULL; i++) {
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free_krb5_algorithm_identifier((*in)[i]);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan }
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(*in);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanfree_krb5_subject_pk_info(krb5_subject_pk_info **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in) == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->algorithm.parameters.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->algorithm.parameters.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->subjectPublicKey.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->subjectPublicKey.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(*in);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanfree_krb5_kdc_dh_key_info(krb5_kdc_dh_key_info **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (*in == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in)->subjectPublicKey.data != NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free((*in)->subjectPublicKey.data);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan free(*in);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalaninit_krb5_pa_pk_as_req(krb5_pa_pk_as_req **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in) = malloc(sizeof(krb5_pa_pk_as_req));
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in) == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->signedAuthPack.data = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->signedAuthPack.length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->trustedCertifiers = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->kdcPkId.data = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->kdcPkId.length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalaninit_krb5_pa_pk_as_req_draft9(krb5_pa_pk_as_req_draft9 **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in) = malloc(sizeof(krb5_pa_pk_as_req_draft9));
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in) == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->signedAuthPack.data = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->signedAuthPack.length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->trustedCertifiers = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->kdcCert.data = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->kdcCert.length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->encryptionCert.data = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->encryptionCert.length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalaninit_krb5_reply_key_pack(krb5_reply_key_pack **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in) = malloc(sizeof(krb5_reply_key_pack));
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in) == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->replyKey.contents = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->replyKey.length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->asChecksum.contents = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->asChecksum.length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalaninit_krb5_reply_key_pack_draft9(krb5_reply_key_pack_draft9 **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in) = malloc(sizeof(krb5_reply_key_pack_draft9));
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in) == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->replyKey.contents = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->replyKey.length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalaninit_krb5_auth_pack(krb5_auth_pack **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in) = malloc(sizeof(krb5_auth_pack));
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in) == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->clientPublicValue = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->supportedCMSTypes = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->clientDHNonce.length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->clientDHNonce.data = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->pkAuthenticator.paChecksum.contents = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalaninit_krb5_auth_pack_draft9(krb5_auth_pack_draft9 **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in) = malloc(sizeof(krb5_auth_pack_draft9));
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in) == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->clientPublicValue = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalaninit_krb5_pa_pk_as_rep(krb5_pa_pk_as_rep **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in) = malloc(sizeof(krb5_pa_pk_as_rep));
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in) == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->u.dh_Info.serverDHNonce.length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->u.dh_Info.serverDHNonce.data = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->u.dh_Info.dhSignedData.length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->u.dh_Info.dhSignedData.data = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->u.encKeyPack.length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->u.encKeyPack.data = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalaninit_krb5_pa_pk_as_rep_draft9(krb5_pa_pk_as_rep_draft9 **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in) = malloc(sizeof(krb5_pa_pk_as_rep_draft9));
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in) == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->u.dhSignedData.length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->u.dhSignedData.data = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->u.encKeyPack.length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->u.encKeyPack.data = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalaninit_krb5_typed_data(krb5_typed_data **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in) = malloc(sizeof(krb5_typed_data));
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in) == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->type = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->data = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalaninit_krb5_subject_pk_info(krb5_subject_pk_info **in)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in) = malloc(sizeof(krb5_subject_pk_info));
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((*in) == NULL) return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->algorithm.parameters.data = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->algorithm.parameters.length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->subjectPublicKey.data = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (*in)->subjectPublicKey.length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalankrb5_error_code
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanpkinit_copy_krb5_octet_data(krb5_octet_data *dst, const krb5_octet_data *src)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (dst == NULL || src == NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan return EINVAL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (src->data == NULL) {
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan dst->data = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan dst->length = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan return 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan }
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan dst->data = malloc(src->length);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (dst->data == NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan return ENOMEM;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (void) memcpy(dst->data, src->data, src->length);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan dst->length = src->length;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan return 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan/* debugging functions */
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanprint_buffer(unsigned char *buf, unsigned int len)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan int i = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan /* Solaris Kerberos: len is unsigned (lint) */
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (len == 0)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan for (i = 0; i < len; i++)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan pkiDebug("%02x ", buf[i]);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan pkiDebug("\n");
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanvoid
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalanprint_buffer_bin(unsigned char *buf, unsigned int len, char *filename)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan FILE *f = NULL;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan int i = 0;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan /* Solaris Kerberos: len is unsigned (lint) */
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (len == 0 || filename == NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if ((f = fopen(filename, "w")) == NULL)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan for (i = 0; i < len; i++)
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (void) fputc(buf[i], f);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan (void) fclose(f);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan}