289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/*
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Copyright (C) 2006, 2007, 2012, 2013, 2015, 2016 Internet Systems Consortium, Inc. ("ISC")
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews *
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * This Source Code Form is subject to the terms of the Mozilla Public
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * License, v. 2.0. If a copy of the MPL was not distributed with this
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * file, You can obtain one at http://mozilla.org/MPL/2.0/.
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
70e5a7403f0e0a3bd292b8287c5fed5772c15270Automatic Updater/* $Id: spnego_asn1.c,v 1.4 2007/06/19 23:47:16 tbox Exp $ */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/*! \file
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews * \brief Method routines generated from SPNEGO ASN.1 module.
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews * See spnego_asn1.pl for details. Do not edit.
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* Generated from spnego.asn1 */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* Do not edit */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews#ifndef __asn1_h__
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews#define __asn1_h__
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews#ifndef __asn1_common_definitions__
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews#define __asn1_common_definitions__
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewstypedef struct octet_string {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t length;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews void *data;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews} octet_string;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewstypedef char *general_string;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewstypedef char *utf8_string;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewstypedef struct oid {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t length;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews unsigned *components;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews} oid;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews#define ASN1_MALLOC_ENCODE(T, B, BL, S, L, R) \
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews do { \
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (BL) = length_##T((S)); \
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (B) = malloc((BL)); \
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if((B) == NULL) { \
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (R) = ENOMEM; \
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews } else { \
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (R) = encode_##T(((unsigned char*)(B)) + (BL) - 1, (BL), \
aae306e914255e5fb477295f67e5e13201ded6d1Tinderbox User (S), (L)); \
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if((R) != 0) { \
aae306e914255e5fb477295f67e5e13201ded6d1Tinderbox User free((B)); \
aae306e914255e5fb477295f67e5e13201ded6d1Tinderbox User (B) = NULL; \
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews } \
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews } \
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews } while (0)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews#endif
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/*
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews * MechType ::= OBJECT IDENTIFIER
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewstypedef oid MechType;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int encode_MechType(unsigned char *, size_t, const MechType *, size_t *);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int decode_MechType(const unsigned char *, size_t, MechType *, size_t *);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic void free_MechType(MechType *);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused declaration: length_MechType */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused declaration: copy_MechType */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/*
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews * MechTypeList ::= SEQUENCE OF MechType
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewstypedef struct MechTypeList {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews unsigned int len;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews MechType *val;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews} MechTypeList;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int encode_MechTypeList(unsigned char *, size_t, const MechTypeList *, size_t *);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int decode_MechTypeList(const unsigned char *, size_t, MechTypeList *, size_t *);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic void free_MechTypeList(MechTypeList *);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused declaration: length_MechTypeList */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused declaration: copy_MechTypeList */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/*
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews * ContextFlags ::= BIT STRING { delegFlag(0), mutualFlag(1), replayFlag(2),
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews * sequenceFlag(3), anonFlag(4), confFlag(5), integFlag(6) }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewstypedef struct ContextFlags {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews unsigned int delegFlag:1;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews unsigned int mutualFlag:1;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews unsigned int replayFlag:1;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews unsigned int sequenceFlag:1;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews unsigned int anonFlag:1;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews unsigned int confFlag:1;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews unsigned int integFlag:1;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews} ContextFlags;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int encode_ContextFlags(unsigned char *, size_t, const ContextFlags *, size_t *);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int decode_ContextFlags(const unsigned char *, size_t, ContextFlags *, size_t *);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic void free_ContextFlags(ContextFlags *);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused declaration: length_ContextFlags */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused declaration: copy_ContextFlags */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused declaration: ContextFlags2int */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused declaration: int2ContextFlags */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused declaration: asn1_ContextFlags_units */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/*
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews * NegTokenInit ::= SEQUENCE { mechTypes[0] MechTypeList, reqFlags[1]
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews * ContextFlags OPTIONAL, mechToken[2] OCTET STRING OPTIONAL,
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews * mechListMIC[3] OCTET STRING OPTIONAL }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewstypedef struct NegTokenInit {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews MechTypeList mechTypes;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ContextFlags *reqFlags;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews octet_string *mechToken;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews octet_string *mechListMIC;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews} NegTokenInit;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int encode_NegTokenInit(unsigned char *, size_t, const NegTokenInit *, size_t *);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int decode_NegTokenInit(const unsigned char *, size_t, NegTokenInit *, size_t *);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic void free_NegTokenInit(NegTokenInit *);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused declaration: length_NegTokenInit */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused declaration: copy_NegTokenInit */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/*
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews * NegTokenResp ::= SEQUENCE { negState[0] ENUMERATED {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews * accept-completed(0), accept-incomplete(1), reject(2), request-mic(3) }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews * OPTIONAL, supportedMech[1] MechType OPTIONAL, responseToken[2] OCTET
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews * STRING OPTIONAL, mechListMIC[3] OCTET STRING OPTIONAL }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewstypedef struct NegTokenResp {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews enum {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews accept_completed = 0,
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews accept_incomplete = 1,
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews reject = 2,
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews request_mic = 3
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews } *negState;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews MechType *supportedMech;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews octet_string *responseToken;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews octet_string *mechListMIC;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews} NegTokenResp;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int encode_NegTokenResp(unsigned char *, size_t, const NegTokenResp *, size_t *);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int decode_NegTokenResp(const unsigned char *, size_t, NegTokenResp *, size_t *);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic void free_NegTokenResp(NegTokenResp *);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused declaration: length_NegTokenResp */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused declaration: copy_NegTokenResp */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews#endif /* __asn1_h__ */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* Generated from spnego.asn1 */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* Do not edit */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
444f2a8efd07b9b4472781fbab89208eb1c4c5f5Mark Andrews#define BACK if (e) return e; p -= l; len -= l; ret += l; POST(p); POST(len); POST(ret)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsencode_MechType(unsigned char *p, size_t len, const MechType * data, size_t * size)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews{
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t ret = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t l;
6018bd957da614dc95c21a788fd783147504e596Mark Andrews int e;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = encode_oid(p, len, data, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews *size = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews}
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
444f2a8efd07b9b4472781fbab89208eb1c4c5f5Mark Andrews#define FORW if(e) goto fail; p += l; len -= l; ret += l; POST(p); POST(len); POST(ret)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsdecode_MechType(const unsigned char *p, size_t len, MechType * data, size_t * size)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews{
6018bd957da614dc95c21a788fd783147504e596Mark Andrews size_t ret = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews int e;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews memset(data, 0, sizeof(*data));
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = decode_oid(p, len, data, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (size)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews *size = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsfail:
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free_MechType(data);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return e;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews}
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic void
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsfree_MechType(MechType * data)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews{
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free_oid(data);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews}
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused function: length_MechType */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused function: copy_MechType */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* Generated from spnego.asn1 */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* Do not edit */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsencode_MechTypeList(unsigned char *p, size_t len, const MechTypeList * data, size_t * size)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews{
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t ret = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews int i, e;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews for (i = (data)->len - 1; i >= 0; --i) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews size_t oldret = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = encode_MechType(p, len, &(data)->val[i], &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += oldret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_put_length_and_tag(p, len, ret, ASN1_C_UNIV, CONS, UT_Sequence, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews *size = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews}
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsdecode_MechTypeList(const unsigned char *p, size_t len, MechTypeList * data, size_t * size)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews{
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t ret = 0, reallen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews int e;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews memset(data, 0, sizeof(*data));
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews reallen = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag_and_length(p, len, ASN1_C_UNIV, CONS, UT_Sequence, &reallen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (len < reallen)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ASN1_OVERRUN;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len = reallen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t origlen = len;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews size_t oldret = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->len = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->val = NULL;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews while (ret < origlen) {
45f36932943c02159a8907380fc79dd70e2184f1Evan Hunt void *old = (data)->val;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->len++;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->val = realloc((data)->val, sizeof(*((data)->val)) * (data)->len);
45f36932943c02159a8907380fc79dd70e2184f1Evan Hunt if ((data)->val == NULL) {
45f36932943c02159a8907380fc79dd70e2184f1Evan Hunt (data)->val = old;
45f36932943c02159a8907380fc79dd70e2184f1Evan Hunt (data)->len--;
45f36932943c02159a8907380fc79dd70e2184f1Evan Hunt return ENOMEM;
45f36932943c02159a8907380fc79dd70e2184f1Evan Hunt }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = decode_MechType(p, len, &(data)->val[(data)->len - 1], &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len = origlen - ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += oldret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (size)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews *size = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsfail:
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free_MechTypeList(data);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return e;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews}
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic void
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsfree_MechTypeList(MechTypeList * data)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews{
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews while ((data)->len) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free_MechType(&(data)->val[(data)->len - 1]);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->len--;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free((data)->val);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->val = NULL;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews}
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused function: length_MechTypeList */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused function: copy_MechTypeList */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* Generated from spnego.asn1 */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* Do not edit */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsencode_ContextFlags(unsigned char *p, size_t len, const ContextFlags * data, size_t * size)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews{
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t ret = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t l;
6018bd957da614dc95c21a788fd783147504e596Mark Andrews int e;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews unsigned char c = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews *p-- = c;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len--;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret++;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews c = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews *p-- = c;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len--;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret++;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews c = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews *p-- = c;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len--;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret++;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews c = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (data->integFlag)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews c |= 1 << 1;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (data->confFlag)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews c |= 1 << 2;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (data->anonFlag)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews c |= 1 << 3;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (data->sequenceFlag)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews c |= 1 << 4;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (data->replayFlag)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews c |= 1 << 5;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (data->mutualFlag)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews c |= 1 << 6;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (data->delegFlag)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews c |= 1 << 7;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews *p-- = c;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews *p-- = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len -= 2;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += 2;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_put_length_and_tag(p, len, ret, ASN1_C_UNIV, PRIM, UT_BitString, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews *size = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews}
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsdecode_ContextFlags(const unsigned char *p, size_t len, ContextFlags * data, size_t * size)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews{
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t ret = 0, reallen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews int e;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews memset(data, 0, sizeof(*data));
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews reallen = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag_and_length(p, len, ASN1_C_UNIV, PRIM, UT_BitString, &reallen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (len < reallen)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ASN1_OVERRUN;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews p++;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len--;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews reallen--;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret++;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews data->delegFlag = (*p >> 7) & 1;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews data->mutualFlag = (*p >> 6) & 1;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews data->replayFlag = (*p >> 5) & 1;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews data->sequenceFlag = (*p >> 4) & 1;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews data->anonFlag = (*p >> 3) & 1;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews data->confFlag = (*p >> 2) & 1;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews data->integFlag = (*p >> 1) & 1;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += reallen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (size)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews *size = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsfail:
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free_ContextFlags(data);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return e;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews}
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic void
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsfree_ContextFlags(ContextFlags * data)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews{
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (void)data;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews}
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused function: length_ContextFlags */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused function: copy_ContextFlags */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused function: ContextFlags2int */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused function: int2ContextFlags */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused variable: ContextFlags_units */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused function: asn1_ContextFlags_units */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* Generated from spnego.asn1 */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* Do not edit */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsencode_NegTokenInit(unsigned char *p, size_t len, const NegTokenInit * data, size_t * size)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews{
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t ret = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t l;
6018bd957da614dc95c21a788fd783147504e596Mark Andrews int e;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->mechListMIC) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews size_t oldret = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = encode_octet_string(p, len, (data)->mechListMIC, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_put_length_and_tag(p, len, ret, ASN1_C_CONTEXT, CONS, 3, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += oldret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->mechToken) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews size_t oldret = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = encode_octet_string(p, len, (data)->mechToken, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_put_length_and_tag(p, len, ret, ASN1_C_CONTEXT, CONS, 2, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += oldret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->reqFlags) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews size_t oldret = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = encode_ContextFlags(p, len, (data)->reqFlags, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_put_length_and_tag(p, len, ret, ASN1_C_CONTEXT, CONS, 1, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += oldret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews } {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews size_t oldret = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = encode_MechTypeList(p, len, &(data)->mechTypes, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_put_length_and_tag(p, len, ret, ASN1_C_CONTEXT, CONS, 0, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += oldret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_put_length_and_tag(p, len, ret, ASN1_C_UNIV, CONS, UT_Sequence, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews *size = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews}
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsdecode_NegTokenInit(const unsigned char *p, size_t len, NegTokenInit * data, size_t * size)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews{
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t ret = 0, reallen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews int e;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews memset(data, 0, sizeof(*data));
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews reallen = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag_and_length(p, len, ASN1_C_UNIV, CONS, UT_Sequence, &reallen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews int dce_fix;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((dce_fix = fix_dce(reallen, &len)) < 0)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ASN1_BAD_FORMAT;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t newlen, oldlen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag(p, len, ASN1_C_CONTEXT, CONS, 0, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (e)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return e;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews else {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews p += l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len -= l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_get_length(p, len, &newlen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt int mydce_fix;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews oldlen = len;
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt if ((mydce_fix = fix_dce(newlen, &len)) < 0)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ASN1_BAD_FORMAT;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = decode_MechTypeList(p, len, &(data)->mechTypes, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt if (mydce_fix) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag_and_length(p, len, (Der_class) 0, (Der_type) 0, 0, &reallen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews } else
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len = oldlen - newlen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t newlen, oldlen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag(p, len, ASN1_C_CONTEXT, CONS, 1, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (e)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->reqFlags = NULL;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews else {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews p += l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len -= l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_get_length(p, len, &newlen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt int mydce_fix;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews oldlen = len;
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt if ((mydce_fix = fix_dce(newlen, &len)) < 0)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ASN1_BAD_FORMAT;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->reqFlags = malloc(sizeof(*(data)->reqFlags));
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->reqFlags == NULL)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ENOMEM;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = decode_ContextFlags(p, len, (data)->reqFlags, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt if (mydce_fix) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag_and_length(p, len, (Der_class) 0, (Der_type) 0, 0, &reallen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews } else
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len = oldlen - newlen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t newlen, oldlen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag(p, len, ASN1_C_CONTEXT, CONS, 2, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (e)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->mechToken = NULL;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews else {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews p += l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len -= l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_get_length(p, len, &newlen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt int mydce_fix;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews oldlen = len;
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt if ((mydce_fix = fix_dce(newlen, &len)) < 0)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ASN1_BAD_FORMAT;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->mechToken = malloc(sizeof(*(data)->mechToken));
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->mechToken == NULL)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ENOMEM;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = decode_octet_string(p, len, (data)->mechToken, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt if (mydce_fix) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag_and_length(p, len, (Der_class) 0, (Der_type) 0, 0, &reallen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews } else
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len = oldlen - newlen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t newlen, oldlen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag(p, len, ASN1_C_CONTEXT, CONS, 3, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (e)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->mechListMIC = NULL;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews else {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews p += l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len -= l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_get_length(p, len, &newlen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt int mydce_fix;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews oldlen = len;
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt if ((mydce_fix = fix_dce(newlen, &len)) < 0)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ASN1_BAD_FORMAT;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->mechListMIC = malloc(sizeof(*(data)->mechListMIC));
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->mechListMIC == NULL)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ENOMEM;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = decode_octet_string(p, len, (data)->mechListMIC, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt if (mydce_fix) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag_and_length(p, len, (Der_class) 0, (Der_type) 0, 0, &reallen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews } else
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len = oldlen - newlen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (dce_fix) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag_and_length(p, len, (Der_class) 0, (Der_type) 0, 0, &reallen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (size)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews *size = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsfail:
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free_NegTokenInit(data);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return e;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews}
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic void
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsfree_NegTokenInit(NegTokenInit * data)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews{
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free_MechTypeList(&(data)->mechTypes);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->reqFlags) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free_ContextFlags((data)->reqFlags);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free((data)->reqFlags);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->reqFlags = NULL;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->mechToken) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free_octet_string((data)->mechToken);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free((data)->mechToken);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->mechToken = NULL;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->mechListMIC) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free_octet_string((data)->mechListMIC);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free((data)->mechListMIC);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->mechListMIC = NULL;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews}
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused function: length_NegTokenInit */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused function: copy_NegTokenInit */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* Generated from spnego.asn1 */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* Do not edit */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsencode_NegTokenResp(unsigned char *p, size_t len, const NegTokenResp * data, size_t * size)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews{
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t ret = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t l;
6018bd957da614dc95c21a788fd783147504e596Mark Andrews int e;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->mechListMIC) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews size_t oldret = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = encode_octet_string(p, len, (data)->mechListMIC, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_put_length_and_tag(p, len, ret, ASN1_C_CONTEXT, CONS, 3, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += oldret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->responseToken) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews size_t oldret = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = encode_octet_string(p, len, (data)->responseToken, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_put_length_and_tag(p, len, ret, ASN1_C_CONTEXT, CONS, 2, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += oldret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->supportedMech) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews size_t oldret = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = encode_MechType(p, len, (data)->supportedMech, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_put_length_and_tag(p, len, ret, ASN1_C_CONTEXT, CONS, 1, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += oldret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->negState) {
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews size_t oldret = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = encode_enumerated(p, len, (data)->negState, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_put_length_and_tag(p, len, ret, ASN1_C_CONTEXT, CONS, 0, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += oldret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_put_length_and_tag(p, len, ret, ASN1_C_UNIV, CONS, UT_Sequence, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews BACK;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews *size = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews}
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic int
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsdecode_NegTokenResp(const unsigned char *p, size_t len, NegTokenResp * data, size_t * size)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews{
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t ret = 0, reallen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews int e;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews memset(data, 0, sizeof(*data));
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews reallen = 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag_and_length(p, len, ASN1_C_UNIV, CONS, UT_Sequence, &reallen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews int dce_fix;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((dce_fix = fix_dce(reallen, &len)) < 0)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ASN1_BAD_FORMAT;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t newlen, oldlen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag(p, len, ASN1_C_CONTEXT, CONS, 0, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (e)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->negState = NULL;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews else {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews p += l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len -= l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_get_length(p, len, &newlen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt int mydce_fix;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews oldlen = len;
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt if ((mydce_fix = fix_dce(newlen, &len)) < 0)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ASN1_BAD_FORMAT;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->negState = malloc(sizeof(*(data)->negState));
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->negState == NULL)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ENOMEM;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = decode_enumerated(p, len, (data)->negState, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt if (mydce_fix) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag_and_length(p, len, (Der_class) 0, (Der_type) 0, 0, &reallen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews } else
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len = oldlen - newlen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t newlen, oldlen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag(p, len, ASN1_C_CONTEXT, CONS, 1, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (e)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->supportedMech = NULL;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews else {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews p += l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len -= l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_get_length(p, len, &newlen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt int mydce_fix;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews oldlen = len;
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt if ((mydce_fix = fix_dce(newlen, &len)) < 0)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ASN1_BAD_FORMAT;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->supportedMech = malloc(sizeof(*(data)->supportedMech));
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->supportedMech == NULL)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ENOMEM;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = decode_MechType(p, len, (data)->supportedMech, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt if (mydce_fix) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag_and_length(p, len, (Der_class) 0, (Der_type) 0, 0, &reallen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews } else
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len = oldlen - newlen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t newlen, oldlen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag(p, len, ASN1_C_CONTEXT, CONS, 2, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (e)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->responseToken = NULL;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews else {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews p += l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len -= l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_get_length(p, len, &newlen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt int mydce_fix;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews oldlen = len;
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt if ((mydce_fix = fix_dce(newlen, &len)) < 0)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ASN1_BAD_FORMAT;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->responseToken = malloc(sizeof(*(data)->responseToken));
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->responseToken == NULL)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ENOMEM;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = decode_octet_string(p, len, (data)->responseToken, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt if (mydce_fix) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag_and_length(p, len, (Der_class) 0, (Der_type) 0, 0, &reallen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews } else
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len = oldlen - newlen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews size_t newlen, oldlen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag(p, len, ASN1_C_CONTEXT, CONS, 3, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (e)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->mechListMIC = NULL;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews else {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews p += l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len -= l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews ret += l;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_get_length(p, len, &newlen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews {
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt int mydce_fix;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews oldlen = len;
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt if ((mydce_fix = fix_dce(newlen, &len)) < 0)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ASN1_BAD_FORMAT;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->mechListMIC = malloc(sizeof(*(data)->mechListMIC));
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->mechListMIC == NULL)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return ENOMEM;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = decode_octet_string(p, len, (data)->mechListMIC, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
11463c0ac24692e229ec87f307f5e7df3c0a7e10Evan Hunt if (mydce_fix) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag_and_length(p, len, (Der_class) 0, (Der_type) 0, 0, &reallen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews } else
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews len = oldlen - newlen;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (dce_fix) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews e = der_match_tag_and_length(p, len, (Der_class) 0, (Der_type) 0, 0, &reallen, &l);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews FORW;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if (size)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews *size = ret;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return 0;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsfail:
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free_NegTokenResp(data);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews return e;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews}
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsstatic void
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrewsfree_NegTokenResp(NegTokenResp * data)
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews{
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->negState) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free((data)->negState);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->negState = NULL;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->supportedMech) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free_MechType((data)->supportedMech);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free((data)->supportedMech);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->supportedMech = NULL;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->responseToken) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free_octet_string((data)->responseToken);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free((data)->responseToken);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->responseToken = NULL;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews if ((data)->mechListMIC) {
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free_octet_string((data)->mechListMIC);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews free((data)->mechListMIC);
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews (data)->mechListMIC = NULL;
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews }
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews}
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused function: length_NegTokenResp */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused function: copy_NegTokenResp */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* Generated from spnego.asn1 */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* Do not edit */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* CHOICE */
289ae548d52bc8f982d9823af64cafda7bd92232Mark Andrews/* unused variable: asn1_NegotiationToken_dummy_holder */