Annotation of embedaddon/strongswan/src/libtncif/tncif_identity.c, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2013 Andreas Steffen
! 3: * HSR Hochschule fuer Technik Rapperswil
! 4: *
! 5: * This program is free software; you can redistribute it and/or modify it
! 6: * under the terms of the GNU General Public License as published by the
! 7: * Free Software Foundation; either version 2 of the License, or (at your
! 8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
! 9: *
! 10: * This program is distributed in the hope that it will be useful, but
! 11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! 13: * for more details.
! 14: */
! 15:
! 16: #include "tncif_identity.h"
! 17:
! 18: #include <bio/bio_writer.h>
! 19: #include <bio/bio_reader.h>
! 20: #include <pen/pen.h>
! 21: #include <utils/debug.h>
! 22:
! 23: typedef struct private_tncif_identity_t private_tncif_identity_t;
! 24:
! 25: /**
! 26: * TNC Identity List Attribute Format (TCG TNC IF-IMV 1.4 Draft)
! 27: *
! 28: * 1 2 3
! 29: * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
! 30: * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
! 31: * | Identity Count |
! 32: * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
! 33: * | RESERVED | Identity Type Vendor ID |
! 34: * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
! 35: * | Identity Type |
! 36: * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
! 37: * | Identity Value Length |
! 38: * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
! 39: * | |
! 40: * ~ Identity Value ~
! 41: * | |
! 42: * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
! 43: * | RESERVED | Subject Type Vendor ID |
! 44: * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
! 45: * | Subject Type |
! 46: * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
! 47: * | RESERVED | Authentication Method Vendor ID |
! 48: * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
! 49: * | Authentication Method |
! 50: * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
! 51: */
! 52:
! 53: /**
! 54: * Private data of a tncif_identity_t object.
! 55: *
! 56: */
! 57: struct private_tncif_identity_t {
! 58:
! 59: /**
! 60: * Public tncif_identity_t interface.
! 61: */
! 62: tncif_identity_t public;
! 63:
! 64: /**
! 65: * Identity Type
! 66: */
! 67: pen_type_t identity_type;
! 68:
! 69: /**
! 70: * Identity Value
! 71: */
! 72: chunk_t identity_value;
! 73:
! 74: /**
! 75: * Subject Type
! 76: */
! 77: pen_type_t subject_type;
! 78:
! 79: /**
! 80: * Authentication Type
! 81: */
! 82: pen_type_t auth_type;
! 83: };
! 84:
! 85: METHOD(tncif_identity_t, get_identity_type, pen_type_t,
! 86: private_tncif_identity_t *this)
! 87: {
! 88: return this->identity_type;
! 89: }
! 90:
! 91: METHOD(tncif_identity_t, get_identity_value, chunk_t,
! 92: private_tncif_identity_t *this)
! 93: {
! 94: return this->identity_value;
! 95: }
! 96:
! 97: METHOD(tncif_identity_t, get_subject_type, pen_type_t,
! 98: private_tncif_identity_t *this)
! 99: {
! 100: return this->subject_type;
! 101: }
! 102:
! 103: METHOD(tncif_identity_t, get_auth_type, pen_type_t,
! 104: private_tncif_identity_t *this)
! 105: {
! 106: return this->auth_type;
! 107: }
! 108:
! 109: METHOD(tncif_identity_t, build, void,
! 110: private_tncif_identity_t *this, bio_writer_t *writer)
! 111: {
! 112: writer->write_uint32(writer, this->identity_type.vendor_id);
! 113: writer->write_uint32(writer, this->identity_type.type);
! 114: writer->write_data32(writer, this->identity_value);
! 115: writer->write_uint32(writer, this->subject_type.vendor_id);
! 116: writer->write_uint32(writer, this->subject_type.type);
! 117: writer->write_uint32(writer, this->auth_type.vendor_id);
! 118: writer->write_uint32(writer, this->auth_type.type);
! 119: }
! 120:
! 121: METHOD(tncif_identity_t, process, bool,
! 122: private_tncif_identity_t *this, bio_reader_t *reader)
! 123: {
! 124: uint8_t reserved;
! 125: uint32_t vendor_id, type;
! 126: chunk_t identity_value;
! 127:
! 128: if (reader->remaining(reader) < TNCIF_IDENTITY_MIN_SIZE)
! 129: {
! 130: return FALSE;
! 131: }
! 132: reader->read_uint8 (reader, &reserved);
! 133: reader->read_uint24(reader, &vendor_id);
! 134: reader->read_uint32(reader, &type);
! 135: this->identity_type = pen_type_create(vendor_id, type);
! 136:
! 137: if (!reader->read_data32(reader, &identity_value) ||
! 138: reader->remaining(reader) < 16)
! 139: {
! 140: return FALSE;
! 141: }
! 142: this->identity_value = chunk_clone(identity_value);
! 143:
! 144: reader->read_uint8 (reader, &reserved);
! 145: reader->read_uint24(reader, &vendor_id);
! 146: reader->read_uint32(reader, &type);
! 147: this->subject_type = pen_type_create(vendor_id, type);
! 148:
! 149: reader->read_uint8 (reader, &reserved);
! 150: reader->read_uint24(reader, &vendor_id);
! 151: reader->read_uint32(reader, &type);
! 152: this->auth_type = pen_type_create(vendor_id, type);
! 153:
! 154: return TRUE;
! 155: }
! 156:
! 157: METHOD(tncif_identity_t, destroy, void,
! 158: private_tncif_identity_t *this)
! 159: {
! 160: free(this->identity_value.ptr);
! 161: free(this);
! 162: }
! 163:
! 164:
! 165: /**
! 166: * See header
! 167: */
! 168: tncif_identity_t *tncif_identity_create_empty(void)
! 169: {
! 170: private_tncif_identity_t *this;
! 171:
! 172: INIT(this,
! 173: .public = {
! 174: .get_identity_type = _get_identity_type,
! 175: .get_identity_value = _get_identity_value,
! 176: .get_subject_type = _get_subject_type,
! 177: .get_auth_type = _get_auth_type,
! 178: .build = _build,
! 179: .process = _process,
! 180: .destroy = _destroy,
! 181: },
! 182: );
! 183:
! 184: return &this->public;
! 185: }
! 186:
! 187: /**
! 188: * See header
! 189: */
! 190: tncif_identity_t *tncif_identity_create(pen_type_t identity_type,
! 191: chunk_t identity_value,
! 192: pen_type_t subject_type,
! 193: pen_type_t auth_type)
! 194: {
! 195: private_tncif_identity_t *this;
! 196:
! 197: this = (private_tncif_identity_t*)tncif_identity_create_empty();
! 198: this->identity_type = identity_type;
! 199: this->identity_value = identity_value;
! 200: this->subject_type = subject_type;
! 201: this->auth_type = auth_type;
! 202:
! 203: return &this->public;
! 204: }
! 205:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>