1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
/* Generated from spnego.asn1 */
/* Do not edit */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <errno.h>
#include <spnego_asn1.h>
#include <asn1_err.h>
#include <der.h>
#include <parse_units.h>
#define BACK if (e) return e; p -= l; len -= l; ret += l
int
encode_ContextFlags(unsigned char *p, size_t len, const ContextFlags *data, size_t *size)
{
size_t ret = 0;
size_t l;
int i, e;
i = 0;
{
unsigned char c = 0;
*p-- = c; len--; ret++;
c = 0;
*p-- = c; len--; ret++;
c = 0;
*p-- = c; len--; ret++;
c = 0;
if(data->integFlag) c |= 1<<1;
if(data->confFlag) c |= 1<<2;
if(data->anonFlag) c |= 1<<3;
if(data->sequenceFlag) c |= 1<<4;
if(data->replayFlag) c |= 1<<5;
if(data->mutualFlag) c |= 1<<6;
if(data->delegFlag) c |= 1<<7;
*p-- = c;
*p-- = 0;
len -= 2;
ret += 2;
}
e = der_put_length_and_tag (p, len, ret, UNIV, PRIM,UT_BitString, &l);
BACK;
*size = ret;
return 0;
}
#define FORW if(e) goto fail; p += l; len -= l; ret += l
int
decode_ContextFlags(const unsigned char *p, size_t len, ContextFlags *data, size_t *size)
{
size_t ret = 0, reallen;
size_t l;
int e;
memset(data, 0, sizeof(*data));
reallen = 0;
e = der_match_tag_and_length (p, len, UNIV, PRIM, UT_BitString,&reallen, &l);
FORW;
if(len < reallen)
return ASN1_OVERRUN;
p++;
len--;
reallen--;
ret++;
data->delegFlag = (*p >> 7) & 1;
data->mutualFlag = (*p >> 6) & 1;
data->replayFlag = (*p >> 5) & 1;
data->sequenceFlag = (*p >> 4) & 1;
data->anonFlag = (*p >> 3) & 1;
data->confFlag = (*p >> 2) & 1;
data->integFlag = (*p >> 1) & 1;
p += reallen; len -= reallen; ret += reallen;
if(size) *size = ret;
return 0;
fail:
free_ContextFlags(data);
return e;
}
void
free_ContextFlags(ContextFlags *data)
{
}
size_t
length_ContextFlags(const ContextFlags *data)
{
size_t ret = 0;
ret += 7;
return ret;
}
int
copy_ContextFlags(const ContextFlags *from, ContextFlags *to)
{
*(to) = *(from);
return 0;
}
unsigned ContextFlags2int(ContextFlags f)
{
unsigned r = 0;
if(f.delegFlag) r |= (1U << 0);
if(f.mutualFlag) r |= (1U << 1);
if(f.replayFlag) r |= (1U << 2);
if(f.sequenceFlag) r |= (1U << 3);
if(f.anonFlag) r |= (1U << 4);
if(f.confFlag) r |= (1U << 5);
if(f.integFlag) r |= (1U << 6);
return r;
}
ContextFlags int2ContextFlags(unsigned n)
{
ContextFlags flags;
flags.delegFlag = (n >> 0) & 1;
flags.mutualFlag = (n >> 1) & 1;
flags.replayFlag = (n >> 2) & 1;
flags.sequenceFlag = (n >> 3) & 1;
flags.anonFlag = (n >> 4) & 1;
flags.confFlag = (n >> 5) & 1;
flags.integFlag = (n >> 6) & 1;
return flags;
}
struct units ContextFlags_units[] = {
{"integFlag", 1U << 6},
{"confFlag", 1U << 5},
{"anonFlag", 1U << 4},
{"sequenceFlag", 1U << 3},
{"replayFlag", 1U << 2},
{"mutualFlag", 1U << 1},
{"delegFlag", 1U << 0},
{NULL, 0}
};
|