Path: blob/main/crypto/krb5/src/tests/asn.1/ktest.c
34907 views
/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */1/* tests/asn.1/ktest.c */2/*3* Copyright (C) 1994 by the Massachusetts Institute of Technology.4* All rights reserved.5*6* Export of this software from the United States of America may7* require a specific license from the United States Government.8* It is the responsibility of any person or organization contemplating9* export to obtain such a license before exporting.10*11* WITHIN THAT CONSTRAINT, permission to use, copy, modify, and12* distribute this software and its documentation for any purpose and13* without fee is hereby granted, provided that the above copyright14* notice appear in all copies and that both that copyright notice and15* this permission notice appear in supporting documentation, and that16* the name of M.I.T. not be used in advertising or publicity pertaining17* to distribution of the software without specific, written prior18* permission. Furthermore if you modify this software you must label19* your software as modified software and not distribute it in such a20* fashion that it might be confused with the original M.I.T. software.21* M.I.T. makes no representations about the suitability of22* this software for any purpose. It is provided "as is" without express23* or implied warranty.24*/2526#include "ktest.h"27#include "utility.h"28#include <stdlib.h>2930char *sample_principal_name = "hftsai/[email protected]";3132void33ktest_make_sample_authenticator(krb5_authenticator *a)34{35ktest_make_sample_principal(&a->client);36a->checksum = ealloc(sizeof(krb5_checksum));37ktest_make_sample_checksum(a->checksum);38a->cusec = SAMPLE_USEC;39a->ctime = SAMPLE_TIME;40a->subkey = ealloc(sizeof(krb5_keyblock));41ktest_make_sample_keyblock(a->subkey);42a->seq_number = SAMPLE_SEQ_NUMBER;43ktest_make_sample_authorization_data(&a->authorization_data);44}4546void47ktest_make_sample_principal(krb5_principal *p)48{49if (krb5_parse_name(test_context, sample_principal_name, p))50abort();51}5253void54ktest_make_sample_checksum(krb5_checksum *cs)55{56cs->checksum_type = 1;57cs->length = 4;58cs->contents = ealloc(4);59memcpy(cs->contents,"1234",4);60}6162void63ktest_make_sample_keyblock(krb5_keyblock *kb)64{65kb->magic = KV5M_KEYBLOCK;66kb->enctype = 1;67kb->length = 8;68kb->contents = ealloc(8);69memcpy(kb->contents,"12345678",8);70}7172void73ktest_make_sample_ticket(krb5_ticket *tkt)74{75ktest_make_sample_principal(&tkt->server);76ktest_make_sample_enc_data(&tkt->enc_part);77tkt->enc_part2 = NULL;78}7980void81ktest_make_sample_enc_data(krb5_enc_data *ed)82{83ed->kvno = 5;84ed->enctype = 0;85krb5_data_parse(&ed->ciphertext, "krbASN.1 test message");86}8788void89ktest_make_sample_enc_tkt_part(krb5_enc_tkt_part *etp)90{91etp->flags = SAMPLE_FLAGS;92etp->session = ealloc(sizeof(krb5_keyblock));93ktest_make_sample_keyblock(etp->session);94ktest_make_sample_principal(&etp->client);95ktest_make_sample_transited(&etp->transited);96ktest_make_sample_ticket_times(&etp->times);97ktest_make_sample_addresses(&etp->caddrs);98ktest_make_sample_authorization_data(&etp->authorization_data);99}100101void102ktest_make_sample_addresses(krb5_address ***caddrs)103{104int i;105106*caddrs = ealloc(3 * sizeof(krb5_address *));107for (i = 0; i < 2; i++) {108(*caddrs)[i] = ealloc(sizeof(krb5_address));109ktest_make_sample_address((*caddrs)[i]);110}111(*caddrs)[2] = NULL;112}113114void115ktest_make_sample_authorization_data(krb5_authdata ***ad)116{117int i;118119*ad = ealloc(3 * sizeof(krb5_authdata *));120for (i = 0; i <= 1; i++) {121(*ad)[i] = ealloc(sizeof(krb5_authdata));122ktest_make_sample_authdata((*ad)[i]);123}124(*ad)[2] = NULL;125}126127void128ktest_make_sample_transited(krb5_transited *t)129{130t->tr_type = 1;131krb5_data_parse(&t->tr_contents, "EDU,MIT.,ATHENA.,WASHINGTON.EDU,CS.");132}133134void135ktest_make_sample_ticket_times(krb5_ticket_times *tt)136{137tt->authtime = SAMPLE_TIME;138tt->starttime = SAMPLE_TIME;139tt->endtime = SAMPLE_TIME;140tt->renew_till = SAMPLE_TIME;141}142143void144ktest_make_sample_address(krb5_address *a)145{146a->addrtype = ADDRTYPE_INET;147a->length = 4;148a->contents = ealloc(4 * sizeof(krb5_octet));149a->contents[0] = 18;150a->contents[1] = 208;151a->contents[2] = 0;152a->contents[3] = 35;153}154155void156ktest_make_sample_authdata(krb5_authdata *ad)157{158ad->ad_type = 1;159ad->length = 6;160ad->contents = ealloc(6 * sizeof(krb5_octet));161memcpy(ad->contents, "foobar", 6);162}163164void165ktest_make_sample_enc_kdc_rep_part(krb5_enc_kdc_rep_part *ekr)166{167ekr->session = ealloc(sizeof(krb5_keyblock));168ktest_make_sample_keyblock(ekr->session);169ktest_make_sample_last_req(&ekr->last_req);170ekr->nonce = SAMPLE_NONCE;171ekr->key_exp = SAMPLE_TIME;172ekr->flags = SAMPLE_FLAGS;173ekr->times.authtime = SAMPLE_TIME;174ekr->times.starttime = SAMPLE_TIME;175ekr->times.endtime = SAMPLE_TIME;176ekr->times.renew_till = SAMPLE_TIME;177ktest_make_sample_principal(&ekr->server);178ktest_make_sample_addresses(&ekr->caddrs);179}180181void182ktest_make_sample_last_req(krb5_last_req_entry ***lr)183{184int i;185186*lr = ealloc(3 * sizeof(krb5_last_req_entry *));187for (i = 0; i <= 1; i++)188ktest_make_sample_last_req_entry(&(*lr)[i]);189(*lr)[2] = NULL;190}191192void193ktest_make_sample_last_req_entry(krb5_last_req_entry **lre)194{195*lre = ealloc(sizeof(krb5_last_req_entry));196(*lre)->lr_type = -5;197(*lre)->value = SAMPLE_TIME;198}199200void201ktest_make_sample_kdc_rep(krb5_kdc_rep *kdcr)202{203ktest_make_sample_pa_data_array(&kdcr->padata);204ktest_make_sample_principal(&kdcr->client);205kdcr->ticket = ealloc(sizeof(krb5_ticket));206ktest_make_sample_ticket(kdcr->ticket);207ktest_make_sample_enc_data(&kdcr->enc_part);208kdcr->enc_part2 = NULL;209}210211void212ktest_make_sample_pa_data_array(krb5_pa_data ***pad)213{214int i;215216*pad = ealloc(3 * sizeof(krb5_pa_data *));217for (i = 0; i <= 1; i++) {218(*pad)[i] = ealloc(sizeof(krb5_pa_data));219ktest_make_sample_pa_data((*pad)[i]);220}221(*pad)[2] = NULL;222}223224void225ktest_make_sample_empty_pa_data_array(krb5_pa_data ***pad)226{227*pad = ealloc(sizeof(krb5_pa_data *));228(*pad)[0] = NULL;229}230231void232ktest_make_sample_pa_data(krb5_pa_data *pad)233{234pad->pa_type = 13;235pad->length = 7;236pad->contents = ealloc(7);237memcpy(pad->contents, "pa-data", 7);238}239240void241ktest_make_sample_ap_req(krb5_ap_req *ar)242{243ar->ap_options = SAMPLE_FLAGS;244ar->ticket = ealloc(sizeof(krb5_ticket));245ktest_make_sample_ticket(ar->ticket);246ktest_make_sample_enc_data(&(ar->authenticator));247}248249void250ktest_make_sample_ap_rep(krb5_ap_rep *ar)251{252ktest_make_sample_enc_data(&ar->enc_part);253}254255void256ktest_make_sample_ap_rep_enc_part(krb5_ap_rep_enc_part *arep)257{258arep->ctime = SAMPLE_TIME;259arep->cusec = SAMPLE_USEC;260arep->subkey = ealloc(sizeof(krb5_keyblock));261ktest_make_sample_keyblock(arep->subkey);262arep->seq_number = SAMPLE_SEQ_NUMBER;263}264265void266ktest_make_sample_kdc_req(krb5_kdc_req *kr)267{268/* msg_type is left up to the calling procedure */269ktest_make_sample_pa_data_array(&kr->padata);270kr->kdc_options = SAMPLE_FLAGS;271ktest_make_sample_principal(&(kr->client));272ktest_make_sample_principal(&(kr->server));273kr->from = SAMPLE_TIME;274kr->till = SAMPLE_TIME;275kr->rtime = SAMPLE_TIME;276kr->nonce = SAMPLE_NONCE;277kr->nktypes = 2;278kr->ktype = ealloc(2 * sizeof(krb5_enctype));279kr->ktype[0] = 0;280kr->ktype[1] = 1;281ktest_make_sample_addresses(&kr->addresses);282ktest_make_sample_enc_data(&kr->authorization_data);283ktest_make_sample_authorization_data(&kr->unenc_authdata);284ktest_make_sample_sequence_of_ticket(&kr->second_ticket);285}286287void288ktest_make_sample_kdc_req_body(krb5_kdc_req *krb)289{290krb->kdc_options = SAMPLE_FLAGS;291ktest_make_sample_principal(&krb->client);292ktest_make_sample_principal(&krb->server);293krb->from = SAMPLE_TIME;294krb->till = SAMPLE_TIME;295krb->rtime = SAMPLE_TIME;296krb->nonce = SAMPLE_NONCE;297krb->nktypes = 2;298krb->ktype = (krb5_enctype*)calloc(2,sizeof(krb5_enctype));299krb->ktype[0] = 0;300krb->ktype[1] = 1;301ktest_make_sample_addresses(&krb->addresses);302ktest_make_sample_enc_data(&krb->authorization_data);303ktest_make_sample_authorization_data(&krb->unenc_authdata);304ktest_make_sample_sequence_of_ticket(&krb->second_ticket);305}306307void308ktest_make_sample_safe(krb5_safe *s)309{310ktest_make_sample_data(&s->user_data);311s->timestamp = SAMPLE_TIME;312s->usec = SAMPLE_USEC;313s->seq_number = SAMPLE_SEQ_NUMBER;314s->s_address = ealloc(sizeof(krb5_address));315ktest_make_sample_address(s->s_address);316s->r_address = ealloc(sizeof(krb5_address));317ktest_make_sample_address(s->r_address);318s->checksum = ealloc(sizeof(krb5_checksum));319ktest_make_sample_checksum(s->checksum);320}321322void323ktest_make_sample_priv(krb5_priv *p)324{325ktest_make_sample_enc_data(&p->enc_part);326}327328void329ktest_make_sample_priv_enc_part(krb5_priv_enc_part *pep)330{331ktest_make_sample_data(&(pep->user_data));332pep->timestamp = SAMPLE_TIME;333pep->usec = SAMPLE_USEC;334pep->seq_number = SAMPLE_SEQ_NUMBER;335pep->s_address = ealloc(sizeof(krb5_address));336ktest_make_sample_address(pep->s_address);337pep->r_address = ealloc(sizeof(krb5_address));338ktest_make_sample_address(pep->r_address);339}340341void342ktest_make_sample_cred(krb5_cred *c)343{344ktest_make_sample_sequence_of_ticket(&c->tickets);345ktest_make_sample_enc_data(&c->enc_part);346}347348void349ktest_make_sample_sequence_of_ticket(krb5_ticket ***sot)350{351int i;352353*sot = ealloc(3 * sizeof(krb5_ticket *));354for (i = 0; i < 2; i++) {355(*sot)[i] = ealloc(sizeof(krb5_ticket));356ktest_make_sample_ticket((*sot)[i]);357}358(*sot)[2] = NULL;359}360361void362ktest_make_sample_cred_enc_part(krb5_cred_enc_part *cep)363{364cep->nonce = SAMPLE_NONCE;365cep->timestamp = SAMPLE_TIME;366cep->usec = SAMPLE_USEC;367cep->s_address = ealloc(sizeof(krb5_address));368ktest_make_sample_address(cep->s_address);369cep->r_address = ealloc(sizeof(krb5_address));370ktest_make_sample_address(cep->r_address);371ktest_make_sequence_of_cred_info(&cep->ticket_info);372}373374void375ktest_make_sequence_of_cred_info(krb5_cred_info ***soci)376{377int i;378379*soci = ealloc(3 * sizeof(krb5_cred_info *));380for (i = 0; i < 2; i++) {381(*soci)[i] = ealloc(sizeof(krb5_cred_info));382ktest_make_sample_cred_info((*soci)[i]);383}384(*soci)[2] = NULL;385}386387void388ktest_make_sample_cred_info(krb5_cred_info *ci)389{390ci->session = ealloc(sizeof(krb5_keyblock));391ktest_make_sample_keyblock(ci->session);392ktest_make_sample_principal(&ci->client);393ktest_make_sample_principal(&ci->server);394ci->flags = SAMPLE_FLAGS;395ci->times.authtime = SAMPLE_TIME;396ci->times.starttime = SAMPLE_TIME;397ci->times.endtime = SAMPLE_TIME;398ci->times.renew_till = SAMPLE_TIME;399ktest_make_sample_addresses(&ci->caddrs);400}401402void403ktest_make_sample_error(krb5_error *kerr)404{405kerr->ctime = SAMPLE_TIME;406kerr->cusec = SAMPLE_USEC;407kerr->susec = SAMPLE_USEC;408kerr->stime = SAMPLE_TIME;409kerr->error = SAMPLE_ERROR;410ktest_make_sample_principal(&kerr->client);411ktest_make_sample_principal(&kerr->server);412ktest_make_sample_data(&kerr->text);413ktest_make_sample_data(&kerr->e_data);414}415416void417ktest_make_sample_data(krb5_data *d)418{419krb5_data_parse(d, "krb5data");420}421422void423ktest_make_sample_etype_info(krb5_etype_info_entry ***p)424{425krb5_etype_info_entry **info;426int i, len;427char *str;428429info = ealloc(4 * sizeof(krb5_etype_info_entry *));430for (i = 0; i < 3; i++) {431info[i] = ealloc(sizeof(krb5_etype_info_entry));432info[i]->etype = i;433len = asprintf(&str, "Morton's #%d", i);434if (len < 0)435abort();436info[i]->salt = (krb5_octet *)str;437info[i]->length = len;438info[i]->s2kparams.data = NULL;439info[i]->s2kparams.length = 0;440info[i]->magic = KV5M_ETYPE_INFO_ENTRY;441}442free(info[1]->salt);443info[1]->length = KRB5_ETYPE_NO_SALT;444info[1]->salt = 0;445*p = info;446}447448449void450ktest_make_sample_etype_info2(krb5_etype_info_entry ***p)451{452krb5_etype_info_entry **info;453int i, len;454char *str;455456info = ealloc(4 * sizeof(krb5_etype_info_entry *));457for (i = 0; i < 3; i++) {458info[i] = ealloc(sizeof(krb5_etype_info_entry));459info[i]->etype = i;460len = asprintf(&str, "Morton's #%d", i);461if (len < 0)462abort();463info[i]->salt = (krb5_octet *)str;464info[i]->length = (unsigned int)len;465len = asprintf(&info[i]->s2kparams.data, "s2k: %d", i);466if (len < 0)467abort();468info[i]->s2kparams.length = (unsigned int) len;469info[i]->magic = KV5M_ETYPE_INFO_ENTRY;470}471free(info[1]->salt);472info[1]->length = KRB5_ETYPE_NO_SALT;473info[1]->salt = 0;474*p = info;475}476477478void479ktest_make_sample_pa_enc_ts(krb5_pa_enc_ts *pa_enc)480{481pa_enc->patimestamp = SAMPLE_TIME;482pa_enc->pausec = SAMPLE_USEC;483}484485void486ktest_make_sample_sam_challenge_2(krb5_sam_challenge_2 *p)487{488/* Need a valid DER sequence encoding here; this one contains the OCTET489* STRING "challenge". */490krb5_data_parse(&p->sam_challenge_2_body, "\x30\x0B\x04\x09" "challenge");491p->sam_cksum = ealloc(2 * sizeof(krb5_checksum *));492p->sam_cksum[0] = ealloc(sizeof(krb5_checksum));493ktest_make_sample_checksum(p->sam_cksum[0]);494p->sam_cksum[1] = NULL;495}496497void498ktest_make_sample_sam_challenge_2_body(krb5_sam_challenge_2_body *p)499{500p->sam_type = 42;501p->sam_flags = KRB5_SAM_USE_SAD_AS_KEY;502krb5_data_parse(&p->sam_type_name, "type name");503p->sam_track_id = empty_data();504krb5_data_parse(&p->sam_challenge_label, "challenge label");505krb5_data_parse(&p->sam_challenge, "challenge ipse");506krb5_data_parse(&p->sam_response_prompt, "response_prompt ipse");507p->sam_pk_for_sad = empty_data();508p->sam_nonce = 0x543210;509p->sam_etype = ENCTYPE_AES256_CTS_HMAC_SHA384_192;510}511512void513ktest_make_sample_sam_response_2(krb5_sam_response_2 *p)514{515p->magic = KV5M_SAM_RESPONSE;516p->sam_type = 43; /* information */517p->sam_flags = KRB5_SAM_USE_SAD_AS_KEY; /* KRB5_SAM_* values */518krb5_data_parse(&p->sam_track_id, "track data");519krb5_data_parse(&p->sam_enc_nonce_or_sad.ciphertext, "nonce or sad");520p->sam_enc_nonce_or_sad.enctype = ENCTYPE_AES256_CTS_HMAC_SHA384_192;521p->sam_enc_nonce_or_sad.kvno = 3382;522p->sam_nonce = 0x543210;523}524525void526ktest_make_sample_enc_sam_response_enc_2(krb5_enc_sam_response_enc_2 *p)527{528p->magic = 83;529p->sam_nonce = 88;530krb5_data_parse(&p->sam_sad, "enc_sam_response_enc_2");531}532533void534ktest_make_sample_pa_for_user(krb5_pa_for_user *p)535{536ktest_make_sample_principal(&p->user);537ktest_make_sample_checksum(&p->cksum);538ktest_make_sample_data(&p->auth_package);539}540541void542ktest_make_sample_pa_s4u_x509_user(krb5_pa_s4u_x509_user *p)543{544krb5_s4u_userid *u = &p->user_id;545546u->nonce = 13243546;547ktest_make_sample_principal(&u->user);548krb5_data_parse(&u->subject_cert, "pa_s4u_x509_user");549u->options = 0x80000000;550ktest_make_sample_checksum(&p->cksum);551}552553void554ktest_make_sample_ad_kdcissued(krb5_ad_kdcissued *p)555{556ktest_make_sample_checksum(&p->ad_checksum);557ktest_make_sample_principal(&p->i_principal);558ktest_make_sample_authorization_data(&p->elements);559}560561void562ktest_make_sample_iakerb_header(krb5_iakerb_header *ih)563{564ktest_make_sample_data(&(ih->target_realm));565ih->cookie = ealloc(sizeof(krb5_data));566ktest_make_sample_data(ih->cookie);567}568569void570ktest_make_sample_iakerb_finished(krb5_iakerb_finished *ih)571{572ktest_make_sample_checksum(&ih->checksum);573}574575static void576ktest_make_sample_fast_finished(krb5_fast_finished *p)577{578p->timestamp = SAMPLE_TIME;579p->usec = SAMPLE_USEC;580ktest_make_sample_principal(&p->client);581ktest_make_sample_checksum(&p->ticket_checksum);582}583584void585ktest_make_sample_fast_response(krb5_fast_response *p)586{587ktest_make_sample_pa_data_array(&p->padata);588p->strengthen_key = ealloc(sizeof(krb5_keyblock));589ktest_make_sample_keyblock(p->strengthen_key);590p->finished = ealloc(sizeof(krb5_fast_finished));591ktest_make_sample_fast_finished(p->finished);592p->nonce = SAMPLE_NONCE;593}594595void596ktest_make_sha256_alg(krb5_algorithm_identifier *p)597{598/* { 2 16 840 1 101 3 4 2 1 } */599krb5_data_parse(&p->algorithm, "\x60\x86\x48\x01\x65\x03\x04\x02\x01");600p->parameters = empty_data();601}602603void604ktest_make_sha1_alg(krb5_algorithm_identifier *p)605{606/* { 1 3 14 3 2 26 } */607krb5_data_parse(&p->algorithm, "\x2b\x0e\x03\x02\x1a");608p->parameters = empty_data();609}610611void612ktest_make_minimal_otp_tokeninfo(krb5_otp_tokeninfo *p)613{614memset(p, 0, sizeof(*p));615p->length = p->format = p->iteration_count = -1;616}617618void619ktest_make_maximal_otp_tokeninfo(krb5_otp_tokeninfo *p)620{621p->flags = KRB5_OTP_FLAG_NEXTOTP | KRB5_OTP_FLAG_COMBINE |622KRB5_OTP_FLAG_COLLECT_PIN | KRB5_OTP_FLAG_ENCRYPT_NONCE |623KRB5_OTP_FLAG_SEPARATE_PIN | KRB5_OTP_FLAG_CHECK_DIGIT;624krb5_data_parse(&p->vendor, "Examplecorp");625krb5_data_parse(&p->challenge, "hark!");626p->length = 10;627p->format = 2;628krb5_data_parse(&p->token_id, "yourtoken");629krb5_data_parse(&p->alg_id, "urn:ietf:params:xml:ns:keyprov:pskc:hotp");630p->supported_hash_alg = ealloc(3 * sizeof(*p->supported_hash_alg));631p->supported_hash_alg[0] = ealloc(sizeof(*p->supported_hash_alg[0]));632ktest_make_sha256_alg(p->supported_hash_alg[0]);633p->supported_hash_alg[1] = ealloc(sizeof(*p->supported_hash_alg[1]));634ktest_make_sha1_alg(p->supported_hash_alg[1]);635p->supported_hash_alg[2] = NULL;636p->iteration_count = 1000;637}638639void640ktest_make_minimal_pa_otp_challenge(krb5_pa_otp_challenge *p)641{642memset(p, 0, sizeof(*p));643krb5_data_parse(&p->nonce, "minnonce");644p->tokeninfo = ealloc(2 * sizeof(*p->tokeninfo));645p->tokeninfo[0] = ealloc(sizeof(*p->tokeninfo[0]));646ktest_make_minimal_otp_tokeninfo(p->tokeninfo[0]);647p->tokeninfo[1] = NULL;648}649650void651ktest_make_maximal_pa_otp_challenge(krb5_pa_otp_challenge *p)652{653krb5_data_parse(&p->nonce, "maxnonce");654krb5_data_parse(&p->service, "testservice");655p->tokeninfo = ealloc(3 * sizeof(*p->tokeninfo));656p->tokeninfo[0] = ealloc(sizeof(*p->tokeninfo[0]));657ktest_make_minimal_otp_tokeninfo(p->tokeninfo[0]);658p->tokeninfo[1] = ealloc(sizeof(*p->tokeninfo[1]));659ktest_make_maximal_otp_tokeninfo(p->tokeninfo[1]);660p->tokeninfo[2] = NULL;661krb5_data_parse(&p->salt, "keysalt");662krb5_data_parse(&p->s2kparams, "1234");663}664665void666ktest_make_minimal_pa_otp_req(krb5_pa_otp_req *p)667{668memset(p, 0, sizeof(*p));669p->iteration_count = -1;670p->format = -1;671ktest_make_sample_enc_data(&p->enc_data);672}673674void675ktest_make_maximal_pa_otp_req(krb5_pa_otp_req *p)676{677p->flags = KRB5_OTP_FLAG_NEXTOTP | KRB5_OTP_FLAG_COMBINE;678krb5_data_parse(&p->nonce, "nonce");679ktest_make_sample_enc_data(&p->enc_data);680p->hash_alg = ealloc(sizeof(*p->hash_alg));681ktest_make_sha256_alg(p->hash_alg);682p->iteration_count = 1000;683krb5_data_parse(&p->otp_value, "frogs");684krb5_data_parse(&p->pin, "myfirstpin");685krb5_data_parse(&p->challenge, "hark!");686p->time = SAMPLE_TIME;687krb5_data_parse(&p->counter, "346");688p->format = 2;689krb5_data_parse(&p->token_id, "yourtoken");690krb5_data_parse(&p->alg_id, "urn:ietf:params:xml:ns:keyprov:pskc:hotp");691krb5_data_parse(&p->vendor, "Examplecorp");692}693694#ifndef DISABLE_PKINIT695696static void697ktest_make_sample_pk_authenticator(krb5_pk_authenticator *p)698{699p->cusec = SAMPLE_USEC;700p->ctime = SAMPLE_TIME;701p->nonce = SAMPLE_NONCE;702ktest_make_sample_data(&p->paChecksum);703p->freshnessToken = ealloc(sizeof(krb5_data));704ktest_make_sample_data(p->freshnessToken);705}706707static void708ktest_make_sample_oid(krb5_data *p)709{710krb5_data_parse(p, "\052\206\110\206\367\022\001\002\002");711}712713static void714ktest_make_sample_algorithm_identifier(krb5_algorithm_identifier *p)715{716ktest_make_sample_oid(&p->algorithm);717/* Need a valid DER encoding here; this is the OCTET STRING "params". */718krb5_data_parse(&p->parameters, "\x04\x06" "params");719}720721static void722ktest_make_sample_algorithm_identifier_no_params(krb5_algorithm_identifier *p)723{724ktest_make_sample_oid(&p->algorithm);725p->parameters = empty_data();726}727728static void729ktest_make_sample_external_principal_identifier(730krb5_external_principal_identifier *p)731{732ktest_make_sample_data(&p->subjectName);733ktest_make_sample_data(&p->issuerAndSerialNumber);734ktest_make_sample_data(&p->subjectKeyIdentifier);735}736737void738ktest_make_sample_pa_pk_as_req(krb5_pa_pk_as_req *p)739{740ktest_make_sample_data(&p->signedAuthPack);741p->trustedCertifiers =742ealloc(2 * sizeof(krb5_external_principal_identifier *));743p->trustedCertifiers[0] =744ealloc(sizeof(krb5_external_principal_identifier));745ktest_make_sample_external_principal_identifier(p->trustedCertifiers[0]);746p->trustedCertifiers[1] = NULL;747ktest_make_sample_data(&p->kdcPkId);748}749750static void751ktest_make_sample_dh_rep_info(krb5_dh_rep_info *p)752{753ktest_make_sample_data(&p->dhSignedData);754ktest_make_sample_data(&p->serverDHNonce);755p->kdfID = ealloc(sizeof(krb5_data));756ktest_make_sample_data(p->kdfID);757}758759void760ktest_make_sample_pa_pk_as_rep_dhInfo(krb5_pa_pk_as_rep *p)761{762p->choice = choice_pa_pk_as_rep_dhInfo;763ktest_make_sample_dh_rep_info(&p->u.dh_Info);764}765766void767ktest_make_sample_pa_pk_as_rep_encKeyPack(krb5_pa_pk_as_rep *p)768{769p->choice = choice_pa_pk_as_rep_encKeyPack;770ktest_make_sample_data(&p->u.encKeyPack);771}772773void774ktest_make_sample_auth_pack(krb5_auth_pack *p)775{776ktest_make_sample_pk_authenticator(&p->pkAuthenticator);777/* Need a valid DER encoding here; this is the OCTET STRING "pvalue". */778krb5_data_parse(&p->clientPublicValue, "\x04\x06" "pvalue");779p->supportedCMSTypes = ealloc(3 * sizeof(krb5_algorithm_identifier *));780p->supportedCMSTypes[0] = ealloc(sizeof(krb5_algorithm_identifier));781ktest_make_sample_algorithm_identifier(p->supportedCMSTypes[0]);782p->supportedCMSTypes[1] = ealloc(sizeof(krb5_algorithm_identifier));783ktest_make_sample_algorithm_identifier_no_params(p->supportedCMSTypes[1]);784p->supportedCMSTypes[2] = NULL;785ktest_make_sample_data(&p->clientDHNonce);786p->supportedKDFs = ealloc(2 * sizeof(krb5_data *));787p->supportedKDFs[0] = ealloc(sizeof(krb5_data));788ktest_make_sample_data(p->supportedKDFs[0]);789p->supportedKDFs[1] = NULL;790}791792void793ktest_make_sample_kdc_dh_key_info(krb5_kdc_dh_key_info *p)794{795ktest_make_sample_data(&p->subjectPublicKey);796p->nonce = SAMPLE_NONCE;797p->dhKeyExpiration = SAMPLE_TIME;798}799800void801ktest_make_sample_reply_key_pack(krb5_reply_key_pack *p)802{803ktest_make_sample_keyblock(&p->replyKey);804ktest_make_sample_checksum(&p->asChecksum);805}806807void808ktest_make_sample_sp80056a_other_info(krb5_sp80056a_other_info *p)809{810ktest_make_sample_algorithm_identifier_no_params(&p->algorithm_identifier);811ktest_make_sample_principal(&p->party_u_info);812ktest_make_sample_principal(&p->party_v_info);813ktest_make_sample_data(&p->supp_pub_info);814}815816void817ktest_make_sample_pkinit_supp_pub_info(krb5_pkinit_supp_pub_info *p)818{819p->enctype = ENCTYPE_AES256_CTS_HMAC_SHA384_192;820ktest_make_sample_data(&p->as_req);821ktest_make_sample_data(&p->pk_as_rep);822}823824#endif /* not DISABLE_PKINIT */825826#ifdef ENABLE_LDAP827static void828ktest_make_sample_key_data(krb5_key_data *p, int i)829{830char *str;831int len;832833len = asprintf(&str, "key%d", i);834if (len < 0)835abort();836p->key_data_ver = 2;837p->key_data_type[0] = 2;838p->key_data_length[0] = (unsigned int) len;839p->key_data_contents[0] = (krb5_octet *)str;840len = asprintf(&str, "salt%d", i);841if (len < 0)842abort();843p->key_data_type[1] = i;844p->key_data_length[1] = (unsigned int) len;845p->key_data_contents[1] = (krb5_octet *)str;846}847848void849ktest_make_sample_ldap_seqof_key_data(ldap_seqof_key_data *p)850{851int i;852853p->mkvno = 14;854p->n_key_data = 3;855p->key_data = calloc(3,sizeof(krb5_key_data));856p->kvno = 42;857for (i = 0; i < 3; i++)858ktest_make_sample_key_data(&p->key_data[i], i);859}860#endif861862void863ktest_make_sample_kkdcp_message(krb5_kkdcp_message *p)864{865krb5_kdc_req req;866krb5_data *message;867868ktest_make_sample_kdc_req(&req);869req.msg_type = KRB5_AS_REQ;870encode_krb5_as_req(&req, &message);871p->kerb_message = *message;872free(message);873ktest_empty_kdc_req(&req);874ktest_make_sample_data(&(p->target_domain));875p->dclocator_hint = 0;876}877878static krb5_authdata *879make_ad_element(krb5_authdatatype ad_type, const char *str)880{881krb5_authdata *ad;882883ad = ealloc(sizeof(*ad));884ad->ad_type = ad_type;885ad->length = strlen(str);886ad->contents = ealloc(ad->length);887memcpy(ad->contents, str, ad->length);888return ad;889}890891static krb5_verifier_mac *892make_vmac(krb5_boolean include_princ, krb5_kvno kvno, krb5_enctype enctype,893const char *cksumstr)894{895krb5_verifier_mac *vmac;896897vmac = ealloc(sizeof(*vmac));898if (include_princ) {899ktest_make_sample_principal(&vmac->princ);900(void)krb5_set_principal_realm(NULL, vmac->princ, "");901} else {902vmac->princ = NULL;903}904vmac->kvno = kvno;905vmac->enctype = enctype;906vmac->checksum.checksum_type = 1;907vmac->checksum.length = strlen(cksumstr);908vmac->checksum.contents = ealloc(vmac->checksum.length);909memcpy(vmac->checksum.contents, cksumstr, vmac->checksum.length);910return vmac;911}912913void914ktest_make_minimal_cammac(krb5_cammac *p)915{916memset(p, 0, sizeof(*p));917p->elements = ealloc(2 * sizeof(*p->elements));918p->elements[0] = make_ad_element(1, "ad1");919p->elements[1] = NULL;920}921922void923ktest_make_maximal_cammac(krb5_cammac *p)924{925p->elements = ealloc(3 * sizeof(*p->elements));926p->elements[0] = make_ad_element(1, "ad1");927p->elements[1] = make_ad_element(2, "ad2");928p->elements[2] = NULL;929p->kdc_verifier = make_vmac(TRUE, 5, 16, "cksumkdc");930p->svc_verifier = make_vmac(TRUE, 5, 16, "cksumsvc");931p->other_verifiers = ealloc(3 * sizeof(*p->other_verifiers));932p->other_verifiers[0] = make_vmac(FALSE, 0, 0, "cksum1");933p->other_verifiers[1] = make_vmac(TRUE, 5, 16, "cksum2");934p->other_verifiers[2] = NULL;935}936937void938ktest_make_sample_secure_cookie(krb5_secure_cookie *p)939{940ktest_make_sample_pa_data_array(&p->data);941p->time = SAMPLE_TIME;942}943944void945ktest_make_minimal_spake_factor(krb5_spake_factor *p)946{947p->type = 1;948p->data = NULL;949}950951void952ktest_make_maximal_spake_factor(krb5_spake_factor *p)953{954p->type = 2;955p->data = ealloc(sizeof(*p->data));956krb5_data_parse(p->data, "fdata");957}958959void960ktest_make_support_pa_spake(krb5_pa_spake *p)961{962krb5_spake_support *s = &p->u.support;963964s->ngroups = 2;965s->groups = ealloc(s->ngroups * sizeof(*s->groups));966s->groups[0] = 1;967s->groups[1] = 2;968p->choice = SPAKE_MSGTYPE_SUPPORT;969}970971void972ktest_make_challenge_pa_spake(krb5_pa_spake *p)973{974krb5_spake_challenge *c = &p->u.challenge;975976c->group = 1;977krb5_data_parse(&c->pubkey, "T value");978c->factors = ealloc(3 * sizeof(*c->factors));979c->factors[0] = ealloc(sizeof(*c->factors[0]));980ktest_make_minimal_spake_factor(c->factors[0]);981c->factors[1] = ealloc(sizeof(*c->factors[1]));982ktest_make_maximal_spake_factor(c->factors[1]);983c->factors[2] = NULL;984p->choice = SPAKE_MSGTYPE_CHALLENGE;985}986987void988ktest_make_response_pa_spake(krb5_pa_spake *p)989{990krb5_spake_response *r = &p->u.response;991992krb5_data_parse(&r->pubkey, "S value");993ktest_make_sample_enc_data(&r->factor);994p->choice = SPAKE_MSGTYPE_RESPONSE;995}996997void998ktest_make_encdata_pa_spake(krb5_pa_spake *p)999{1000ktest_make_sample_enc_data(&p->u.encdata);1001p->choice = SPAKE_MSGTYPE_ENCDATA;1002}10031004/****************************************************************/1005/* destructors */10061007void1008ktest_destroy_data(krb5_data **d)1009{1010if (*d != NULL) {1011free((*d)->data);1012free(*d);1013*d = NULL;1014}1015}10161017void1018ktest_empty_data(krb5_data *d)1019{1020if (d->data != NULL) {1021free(d->data);1022d->data = NULL;1023d->length = 0;1024}1025}10261027static void1028ktest_empty_checksum(krb5_checksum *cs)1029{1030free(cs->contents);1031cs->contents = NULL;1032}10331034void1035ktest_destroy_checksum(krb5_checksum **cs)1036{1037if (*cs != NULL) {1038free((*cs)->contents);1039free(*cs);1040*cs = NULL;1041}1042}10431044void1045ktest_empty_keyblock(krb5_keyblock *kb)1046{1047if (kb != NULL) {1048if (kb->contents) {1049free(kb->contents);1050kb->contents = NULL;1051}1052}1053}10541055void1056ktest_destroy_keyblock(krb5_keyblock **kb)1057{1058if (*kb != NULL) {1059free((*kb)->contents);1060free(*kb);1061*kb = NULL;1062}1063}10641065void1066ktest_empty_authorization_data(krb5_authdata **ad)1067{1068size_t i;10691070if (*ad != NULL) {1071for (i=0; ad[i] != NULL; i++)1072ktest_destroy_authdata(&ad[i]);1073}1074}10751076void1077ktest_destroy_authorization_data(krb5_authdata ***ad)1078{1079ktest_empty_authorization_data(*ad);1080free(*ad);1081*ad = NULL;1082}10831084void1085ktest_destroy_authdata(krb5_authdata **ad)1086{1087if (*ad != NULL) {1088free((*ad)->contents);1089free(*ad);1090*ad = NULL;1091}1092}10931094void1095ktest_empty_pa_data_array(krb5_pa_data **pad)1096{1097size_t i;10981099for (i=0; pad[i] != NULL; i++)1100ktest_destroy_pa_data(&pad[i]);1101}11021103void1104ktest_destroy_pa_data_array(krb5_pa_data ***pad)1105{1106ktest_empty_pa_data_array(*pad);1107free(*pad);1108*pad = NULL;1109}11101111void1112ktest_destroy_pa_data(krb5_pa_data **pad)1113{1114if (*pad != NULL) {1115free((*pad)->contents);1116free(*pad);1117*pad = NULL;1118}1119}11201121void1122ktest_destroy_address(krb5_address **a)1123{1124if (*a != NULL) {1125free((*a)->contents);1126free(*a);1127*a = NULL;1128}1129}11301131void1132ktest_empty_addresses(krb5_address **a)1133{1134size_t i;11351136for (i=0; a[i] != NULL; i++)1137ktest_destroy_address(&a[i]);1138}11391140void1141ktest_destroy_addresses(krb5_address ***a)1142{1143ktest_empty_addresses(*a);1144free(*a);1145*a = NULL;1146}11471148void1149ktest_destroy_principal(krb5_principal *p)1150{1151int i;11521153if (*p == NULL)1154return;1155for (i=0; i<(*p)->length; i++)1156ktest_empty_data(&(*p)->data[i]);1157ktest_empty_data(&(*p)->realm);1158free((*p)->data);1159free(*p);1160*p = NULL;1161}11621163void1164ktest_destroy_sequence_of_integer(long **soi)1165{1166free(*soi);1167*soi = NULL;1168}11691170void1171ktest_destroy_sequence_of_ticket(krb5_ticket ***sot)1172{1173size_t i;11741175for (i=0; (*sot)[i] != NULL; i++)1176ktest_destroy_ticket(&(*sot)[i]);1177free(*sot);1178*sot = NULL;1179}11801181void1182ktest_destroy_ticket(krb5_ticket **tkt)1183{1184ktest_destroy_principal(&(*tkt)->server);1185ktest_destroy_enc_data(&(*tkt)->enc_part);1186/* ktest_empty_enc_tkt_part(((*tkt)->enc_part2));*/1187free(*tkt);1188*tkt = NULL;1189}11901191void1192ktest_empty_ticket(krb5_ticket *tkt)1193{1194if (tkt->server)1195ktest_destroy_principal(&tkt->server);1196ktest_destroy_enc_data(&tkt->enc_part);1197if (tkt->enc_part2)1198ktest_destroy_enc_tkt_part(&tkt->enc_part2);1199}12001201void1202ktest_destroy_enc_data(krb5_enc_data *ed)1203{1204ktest_empty_data(&ed->ciphertext);1205ed->kvno = 0;1206}12071208void1209ktest_destroy_etype_info_entry(krb5_etype_info_entry *i)1210{1211if (i->salt)1212free(i->salt);1213ktest_empty_data(&i->s2kparams);1214free(i);1215}12161217void1218ktest_destroy_etype_info(krb5_etype_info_entry **info)1219{1220size_t i;12211222for (i = 0; info[i] != NULL; i++)1223ktest_destroy_etype_info_entry(info[i]);1224free(info);1225}12261227void1228ktest_empty_kdc_req(krb5_kdc_req *kr)1229{1230if (kr->padata)1231ktest_destroy_pa_data_array(&kr->padata);12321233if (kr->client)1234ktest_destroy_principal(&kr->client);12351236if (kr->server)1237ktest_destroy_principal(&kr->server);1238free(kr->ktype);1239if (kr->addresses)1240ktest_destroy_addresses(&kr->addresses);1241ktest_destroy_enc_data(&kr->authorization_data);1242if (kr->unenc_authdata)1243ktest_destroy_authorization_data(&kr->unenc_authdata);1244if (kr->second_ticket)1245ktest_destroy_sequence_of_ticket(&kr->second_ticket);12461247}12481249void1250ktest_empty_kdc_rep(krb5_kdc_rep *kr)1251{1252if (kr->padata)1253ktest_destroy_pa_data_array(&kr->padata);12541255if (kr->client)1256ktest_destroy_principal(&kr->client);12571258if (kr->ticket)1259ktest_destroy_ticket(&kr->ticket);12601261ktest_destroy_enc_data(&kr->enc_part);12621263if (kr->enc_part2) {1264ktest_empty_enc_kdc_rep_part(kr->enc_part2);1265free(kr->enc_part2);1266kr->enc_part2 = NULL;1267}1268}12691270void1271ktest_empty_authenticator(krb5_authenticator *a)1272{1273if (a->client)1274ktest_destroy_principal(&a->client);1275if (a->checksum)1276ktest_destroy_checksum(&a->checksum);1277if (a->subkey)1278ktest_destroy_keyblock(&a->subkey);1279if (a->authorization_data)1280ktest_destroy_authorization_data(&a->authorization_data);1281}12821283void1284ktest_empty_enc_tkt_part(krb5_enc_tkt_part *etp)1285{1286if (etp->session)1287ktest_destroy_keyblock(&etp->session);1288if (etp->client)1289ktest_destroy_principal(&etp->client);1290if (etp->caddrs)1291ktest_destroy_addresses(&etp->caddrs);1292if (etp->authorization_data)1293ktest_destroy_authorization_data(&etp->authorization_data);1294ktest_destroy_transited(&etp->transited);1295}12961297void1298ktest_destroy_enc_tkt_part(krb5_enc_tkt_part **etp)1299{1300if (*etp) {1301ktest_empty_enc_tkt_part(*etp);1302free(*etp);1303*etp = NULL;1304}1305}13061307void1308ktest_empty_enc_kdc_rep_part(krb5_enc_kdc_rep_part *ekr)1309{1310if (ekr->session)1311ktest_destroy_keyblock(&ekr->session);13121313if (ekr->server)1314ktest_destroy_principal(&ekr->server);13151316if (ekr->caddrs)1317ktest_destroy_addresses(&ekr->caddrs);1318ktest_destroy_last_req(&ekr->last_req);1319}13201321void1322ktest_destroy_transited(krb5_transited *t)1323{1324if (t->tr_contents.data)1325ktest_empty_data(&t->tr_contents);1326}13271328void1329ktest_empty_ap_rep(krb5_ap_rep *ar)1330{1331ktest_destroy_enc_data(&ar->enc_part);1332}13331334void1335ktest_empty_ap_req(krb5_ap_req *ar)1336{1337if (ar->ticket)1338ktest_destroy_ticket(&ar->ticket);1339ktest_destroy_enc_data(&ar->authenticator);1340}13411342void1343ktest_empty_cred_enc_part(krb5_cred_enc_part *cep)1344{1345if (cep->s_address)1346ktest_destroy_address(&cep->s_address);1347if (cep->r_address)1348ktest_destroy_address(&cep->r_address);1349if (cep->ticket_info)1350ktest_destroy_sequence_of_cred_info(&cep->ticket_info);1351}13521353void1354ktest_destroy_cred_info(krb5_cred_info **ci)1355{1356if ((*ci)->session)1357ktest_destroy_keyblock(&(*ci)->session);1358if ((*ci)->client)1359ktest_destroy_principal(&(*ci)->client);1360if ((*ci)->server)1361ktest_destroy_principal(&(*ci)->server);1362if ((*ci)->caddrs)1363ktest_destroy_addresses(&(*ci)->caddrs);1364free(*ci);1365*ci = NULL;1366}13671368void1369ktest_destroy_sequence_of_cred_info(krb5_cred_info ***soci)1370{1371size_t i;13721373for (i = 0; (*soci)[i] != NULL; i++)1374ktest_destroy_cred_info(&(*soci)[i]);1375free(*soci);1376*soci = NULL;1377}13781379void1380ktest_empty_safe(krb5_safe *s)1381{1382ktest_empty_data(&s->user_data);1383ktest_destroy_address(&s->s_address);1384ktest_destroy_address(&s->r_address);1385ktest_destroy_checksum(&s->checksum);1386}13871388void1389ktest_empty_priv_enc_part(krb5_priv_enc_part *pep)1390{1391ktest_empty_data(&pep->user_data);1392ktest_destroy_address(&pep->s_address);1393ktest_destroy_address(&pep->r_address);1394}13951396void1397ktest_empty_priv(krb5_priv *p)1398{1399ktest_destroy_enc_data(&p->enc_part);1400}14011402void1403ktest_empty_cred(krb5_cred *c)1404{1405ktest_destroy_sequence_of_ticket(&c->tickets);1406ktest_destroy_enc_data(&c->enc_part);1407/* enc_part2 */1408}14091410void1411ktest_destroy_last_req(krb5_last_req_entry ***lr)1412{1413size_t i;14141415if (*lr) {1416for (i=0; (*lr)[i] != NULL; i++)1417free((*lr)[i]);14181419free(*lr);1420}1421}14221423void1424ktest_empty_error(krb5_error *kerr)1425{1426if (kerr->client)1427ktest_destroy_principal(&kerr->client);1428if (kerr->server)1429ktest_destroy_principal(&kerr->server);1430ktest_empty_data(&kerr->text);1431ktest_empty_data(&kerr->e_data);1432}14331434void1435ktest_empty_ap_rep_enc_part(krb5_ap_rep_enc_part *arep)1436{1437ktest_destroy_keyblock(&(arep)->subkey);1438}14391440void1441ktest_empty_sam_challenge_2(krb5_sam_challenge_2 *p)1442{1443krb5_checksum **ck;14441445ktest_empty_data(&p->sam_challenge_2_body);1446if (p->sam_cksum != NULL) {1447for (ck = p->sam_cksum; *ck != NULL; ck++)1448ktest_destroy_checksum(ck);1449free(p->sam_cksum);1450p->sam_cksum = NULL;1451}1452}14531454void1455ktest_empty_sam_challenge_2_body(krb5_sam_challenge_2_body *p)1456{1457ktest_empty_data(&p->sam_type_name);1458ktest_empty_data(&p->sam_track_id);1459ktest_empty_data(&p->sam_challenge_label);1460ktest_empty_data(&p->sam_challenge);1461ktest_empty_data(&p->sam_response_prompt);1462ktest_empty_data(&p->sam_pk_for_sad);1463}14641465void1466ktest_empty_sam_response_2(krb5_sam_response_2 *p)1467{1468ktest_empty_data(&p->sam_track_id);1469ktest_empty_data(&p->sam_enc_nonce_or_sad.ciphertext);1470}14711472void1473ktest_empty_enc_sam_response_enc_2(krb5_enc_sam_response_enc_2 *p)1474{1475ktest_empty_data(&p->sam_sad);1476}14771478void1479ktest_empty_pa_for_user(krb5_pa_for_user *p)1480{1481ktest_destroy_principal(&p->user);1482ktest_empty_checksum(&p->cksum);1483ktest_empty_data(&p->auth_package);1484}14851486void1487ktest_empty_pa_s4u_x509_user(krb5_pa_s4u_x509_user *p)1488{1489ktest_destroy_principal(&p->user_id.user);1490ktest_empty_data(&p->user_id.subject_cert);1491free(p->cksum.contents);1492}14931494void1495ktest_empty_ad_kdcissued(krb5_ad_kdcissued *p)1496{1497free(p->ad_checksum.contents);1498ktest_destroy_principal(&p->i_principal);1499ktest_destroy_authorization_data(&p->elements);1500}15011502void1503ktest_empty_iakerb_header(krb5_iakerb_header *p)1504{1505krb5_free_data_contents(NULL, &p->target_realm);1506krb5_free_data(NULL, p->cookie);1507}15081509void1510ktest_empty_iakerb_finished(krb5_iakerb_finished *p)1511{1512krb5_free_checksum_contents(NULL, &p->checksum);1513}15141515static void1516ktest_empty_fast_finished(krb5_fast_finished *p)1517{1518ktest_destroy_principal(&p->client);1519ktest_empty_checksum(&p->ticket_checksum);1520}15211522void1523ktest_empty_fast_response(krb5_fast_response *p)1524{1525ktest_destroy_pa_data_array(&p->padata);1526ktest_destroy_keyblock(&p->strengthen_key);1527if (p->finished != NULL) {1528ktest_empty_fast_finished(p->finished);1529free(p->finished);1530p->finished = NULL;1531}1532}15331534static void1535ktest_empty_algorithm_identifier(krb5_algorithm_identifier *p)1536{1537ktest_empty_data(&p->algorithm);1538ktest_empty_data(&p->parameters);1539}15401541void1542ktest_empty_otp_tokeninfo(krb5_otp_tokeninfo *p)1543{1544krb5_algorithm_identifier **alg;15451546p->flags = 0;1547krb5_free_data_contents(NULL, &p->vendor);1548krb5_free_data_contents(NULL, &p->challenge);1549krb5_free_data_contents(NULL, &p->token_id);1550krb5_free_data_contents(NULL, &p->alg_id);1551for (alg = p->supported_hash_alg; alg != NULL && *alg != NULL; alg++) {1552ktest_empty_algorithm_identifier(*alg);1553free(*alg);1554}1555free(p->supported_hash_alg);1556p->supported_hash_alg = NULL;1557p->length = p->format = p->iteration_count = -1;1558}15591560void1561ktest_empty_pa_otp_challenge(krb5_pa_otp_challenge *p)1562{1563krb5_otp_tokeninfo **ti;15641565krb5_free_data_contents(NULL, &p->nonce);1566krb5_free_data_contents(NULL, &p->service);1567for (ti = p->tokeninfo; *ti != NULL; ti++) {1568ktest_empty_otp_tokeninfo(*ti);1569free(*ti);1570}1571free(p->tokeninfo);1572p->tokeninfo = NULL;1573krb5_free_data_contents(NULL, &p->salt);1574krb5_free_data_contents(NULL, &p->s2kparams);1575}15761577void1578ktest_empty_pa_otp_req(krb5_pa_otp_req *p)1579{1580p->flags = 0;1581krb5_free_data_contents(NULL, &p->nonce);1582ktest_destroy_enc_data(&p->enc_data);1583if (p->hash_alg != NULL)1584ktest_empty_algorithm_identifier(p->hash_alg);1585free(p->hash_alg);1586p->hash_alg = NULL;1587p->iteration_count = -1;1588krb5_free_data_contents(NULL, &p->otp_value);1589krb5_free_data_contents(NULL, &p->pin);1590krb5_free_data_contents(NULL, &p->challenge);1591p->time = 0;1592krb5_free_data_contents(NULL, &p->counter);1593p->format = -1;1594krb5_free_data_contents(NULL, &p->token_id);1595krb5_free_data_contents(NULL, &p->alg_id);1596krb5_free_data_contents(NULL, &p->vendor);1597}15981599#ifndef DISABLE_PKINIT16001601static void1602ktest_empty_pk_authenticator(krb5_pk_authenticator *p)1603{1604ktest_empty_data(&p->paChecksum);1605krb5_free_data(NULL, p->freshnessToken);1606p->freshnessToken = NULL;1607}16081609static void1610ktest_empty_external_principal_identifier(1611krb5_external_principal_identifier *p)1612{1613ktest_empty_data(&p->subjectName);1614ktest_empty_data(&p->issuerAndSerialNumber);1615ktest_empty_data(&p->subjectKeyIdentifier);1616}16171618void1619ktest_empty_pa_pk_as_req(krb5_pa_pk_as_req *p)1620{1621krb5_external_principal_identifier **pi;16221623ktest_empty_data(&p->signedAuthPack);1624for (pi = p->trustedCertifiers; *pi != NULL; pi++) {1625ktest_empty_external_principal_identifier(*pi);1626free(*pi);1627}1628free(p->trustedCertifiers);1629p->trustedCertifiers = NULL;1630ktest_empty_data(&p->kdcPkId);1631}16321633static void1634ktest_empty_dh_rep_info(krb5_dh_rep_info *p)1635{1636ktest_empty_data(&p->dhSignedData);1637ktest_empty_data(&p->serverDHNonce);1638ktest_destroy_data(&p->kdfID);1639}16401641void1642ktest_empty_pa_pk_as_rep(krb5_pa_pk_as_rep *p)1643{1644if (p->choice == choice_pa_pk_as_rep_dhInfo)1645ktest_empty_dh_rep_info(&p->u.dh_Info);1646else if (p->choice == choice_pa_pk_as_rep_encKeyPack)1647ktest_empty_data(&p->u.encKeyPack);1648p->choice = choice_pa_pk_as_rep_UNKNOWN;1649}16501651void1652ktest_empty_auth_pack(krb5_auth_pack *p)1653{1654krb5_algorithm_identifier **ai;1655krb5_data **d;16561657ktest_empty_pk_authenticator(&p->pkAuthenticator);1658ktest_empty_data(&p->clientPublicValue);1659if (p->supportedCMSTypes != NULL) {1660for (ai = p->supportedCMSTypes; *ai != NULL; ai++) {1661ktest_empty_algorithm_identifier(*ai);1662free(*ai);1663}1664free(p->supportedCMSTypes);1665p->supportedCMSTypes = NULL;1666}1667ktest_empty_data(&p->clientDHNonce);1668if (p->supportedKDFs != NULL) {1669for (d = p->supportedKDFs; *d != NULL; d++) {1670ktest_empty_data(*d);1671free(*d);1672}1673free(p->supportedKDFs);1674p->supportedKDFs = NULL;1675}1676}16771678void1679ktest_empty_kdc_dh_key_info(krb5_kdc_dh_key_info *p)1680{1681ktest_empty_data(&p->subjectPublicKey);1682}16831684void1685ktest_empty_reply_key_pack(krb5_reply_key_pack *p)1686{1687ktest_empty_keyblock(&p->replyKey);1688ktest_empty_checksum(&p->asChecksum);1689}16901691void ktest_empty_sp80056a_other_info(krb5_sp80056a_other_info *p)1692{1693ktest_empty_algorithm_identifier(&p->algorithm_identifier);1694ktest_destroy_principal(&p->party_u_info);1695ktest_destroy_principal(&p->party_v_info);1696ktest_empty_data(&p->supp_pub_info);1697}16981699void ktest_empty_pkinit_supp_pub_info(krb5_pkinit_supp_pub_info *p)1700{1701ktest_empty_data(&p->as_req);1702ktest_empty_data(&p->pk_as_rep);1703}17041705#endif /* not DISABLE_PKINIT */17061707#ifdef ENABLE_LDAP1708void1709ktest_empty_ldap_seqof_key_data(ldap_seqof_key_data *p)1710{1711int i;17121713for (i = 0; i < p->n_key_data; i++) {1714free(p->key_data[i].key_data_contents[0]);1715free(p->key_data[i].key_data_contents[1]);1716}1717free(p->key_data);1718}1719#endif17201721void1722ktest_empty_kkdcp_message(krb5_kkdcp_message *p)1723{1724ktest_empty_data(&p->kerb_message);1725ktest_empty_data(&p->target_domain);1726p->dclocator_hint = -1;1727}17281729static void1730destroy_verifier_mac(krb5_verifier_mac **vmac)1731{1732if (*vmac == NULL)1733return;1734ktest_destroy_principal(&(*vmac)->princ);1735ktest_empty_checksum(&(*vmac)->checksum);1736free(*vmac);1737*vmac = NULL;1738}17391740void1741ktest_empty_cammac(krb5_cammac *p)1742{1743krb5_verifier_mac **vmacp;17441745ktest_destroy_authorization_data(&p->elements);1746destroy_verifier_mac(&p->kdc_verifier);1747destroy_verifier_mac(&p->svc_verifier);1748for (vmacp = p->other_verifiers; vmacp != NULL && *vmacp != NULL; vmacp++)1749destroy_verifier_mac(vmacp);1750free(p->other_verifiers);1751p->other_verifiers = NULL;1752}17531754void1755ktest_empty_secure_cookie(krb5_secure_cookie *p)1756{1757ktest_destroy_pa_data_array(&p->data);1758}17591760void1761ktest_empty_spake_factor(krb5_spake_factor *p)1762{1763krb5_free_data(NULL, p->data);1764p->data = NULL;1765}17661767void1768ktest_empty_pa_spake(krb5_pa_spake *p)1769{1770krb5_spake_factor **f;17711772switch (p->choice) {1773case SPAKE_MSGTYPE_SUPPORT:1774free(p->u.support.groups);1775break;1776case SPAKE_MSGTYPE_CHALLENGE:1777ktest_empty_data(&p->u.challenge.pubkey);1778for (f = p->u.challenge.factors; *f != NULL; f++) {1779ktest_empty_spake_factor(*f);1780free(*f);1781}1782free(p->u.challenge.factors);1783break;1784case SPAKE_MSGTYPE_RESPONSE:1785ktest_empty_data(&p->u.response.pubkey);1786ktest_destroy_enc_data(&p->u.response.factor);1787break;1788case SPAKE_MSGTYPE_ENCDATA:1789ktest_destroy_enc_data(&p->u.encdata);1790break;1791default:1792break;1793}1794p->choice = SPAKE_MSGTYPE_UNKNOWN;1795}179617971798