Annotation of embedaddon/strongswan/src/libsimaka/simaka_provider.h, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2008-2011 Martin Willi
! 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: /**
! 17: * @defgroup simaka_provider simaka_provider
! 18: * @{ @ingroup libsimaka
! 19: */
! 20:
! 21: #ifndef SIMAKA_PROVIDER_H_
! 22: #define SIMAKA_PROVIDER_H_
! 23:
! 24: typedef struct simaka_provider_t simaka_provider_t;
! 25:
! 26: #include "simaka_manager.h"
! 27:
! 28: #include <utils/identification.h>
! 29:
! 30: /**
! 31: * Interface for a triplet/quintuplet provider (used as EAP server).
! 32: *
! 33: * A SIM provider hands out triplets for SIM authentication and quintuplets
! 34: * for AKA authentication. Multiple SIM provider instances can serve as
! 35: * authentication backend to authenticate clients using SIM/AKA.
! 36: * An implementation supporting only one of SIM/AKA authentication may
! 37: * implement the other methods with return_false().
! 38: */
! 39: struct simaka_provider_t {
! 40:
! 41: /**
! 42: * Create a challenge for SIM authentication.
! 43: *
! 44: * @param id permanent identity of peer to gen triplet for
! 45: * @param rand RAND output buffer, fixed size 16 bytes
! 46: * @param sres SRES output buffer, fixed size 4 byte
! 47: * @param kc KC output buffer, fixed size 8 bytes
! 48: * @return TRUE if triplet received, FALSE otherwise
! 49: */
! 50: bool (*get_triplet)(simaka_provider_t *this, identification_t *id,
! 51: char rand[SIM_RAND_LEN], char sres[SIM_SRES_LEN],
! 52: char kc[SIM_KC_LEN]);
! 53:
! 54: /**
! 55: * Create a challenge for AKA authentication.
! 56: *
! 57: * The XRES value is the only one with variable length. Pass a buffer
! 58: * of at least AKA_RES_MAX, the actual number of bytes is written to the
! 59: * xres_len value. While the standard would allow any bit length between
! 60: * 32 and 128 bits, we support only full bytes for now.
! 61: *
! 62: * @param id permanent identity of peer to create challenge for
! 63: * @param rand buffer receiving random value rand
! 64: * @param xres buffer receiving expected authentication result xres
! 65: * @param xres_len number of bytes written to xres buffer
! 66: * @param ck buffer receiving encryption key ck
! 67: * @param ik buffer receiving integrity key ik
! 68: * @param autn authentication token autn
! 69: * @return TRUE if quintuplet generated successfully
! 70: */
! 71: bool (*get_quintuplet)(simaka_provider_t *this, identification_t *id,
! 72: char rand[AKA_RAND_LEN],
! 73: char xres[AKA_RES_MAX], int *xres_len,
! 74: char ck[AKA_CK_LEN], char ik[AKA_IK_LEN],
! 75: char autn[AKA_AUTN_LEN]);
! 76:
! 77: /**
! 78: * Process AKA resynchronization request of a peer.
! 79: *
! 80: * @param id permanent identity of peer requesting resynchronization
! 81: * @param rand random value rand
! 82: * @param auts synchronization parameter auts
! 83: * @return TRUE if resynchronized successfully
! 84: */
! 85: bool (*resync)(simaka_provider_t *this, identification_t *id,
! 86: char rand[AKA_RAND_LEN], char auts[AKA_AUTS_LEN]);
! 87:
! 88: /**
! 89: * Check if peer uses a pseudonym, get permanent identity.
! 90: *
! 91: * @param id pseudonym identity candidate
! 92: * @return permanent identity, NULL if id not a pseudonym
! 93: */
! 94: identification_t* (*is_pseudonym)(simaka_provider_t *this,
! 95: identification_t *id);
! 96:
! 97: /**
! 98: * Generate a pseudonym identity for a given peer identity.
! 99: *
! 100: * @param id permanent identity to generate a pseudonym for
! 101: * @return generated pseudonym, NULL to not use a pseudonym identity
! 102: */
! 103: identification_t* (*gen_pseudonym)(simaka_provider_t *this,
! 104: identification_t *id);
! 105:
! 106: /**
! 107: * Check if peer uses reauthentication, retrieve reauth parameters.
! 108: *
! 109: * @param id reauthentication identity (candidate)
! 110: * @param mk buffer receiving master key MK
! 111: * @param counter pointer receiving current counter value, host order
! 112: * @return permanent identity, NULL if id not a reauth identity
! 113: */
! 114: identification_t* (*is_reauth)(simaka_provider_t *this, identification_t *id,
! 115: char mk[HASH_SIZE_SHA1], uint16_t *counter);
! 116:
! 117: /**
! 118: * Generate a fast reauthentication identity, associated to a master key.
! 119: *
! 120: * @param id permanent peer identity
! 121: * @param mk master key to store along with generated identity
! 122: * @return fast reauthentication identity, NULL to not use reauth
! 123: */
! 124: identification_t* (*gen_reauth)(simaka_provider_t *this, identification_t *id,
! 125: char mk[HASH_SIZE_SHA1]);
! 126: };
! 127:
! 128: #endif /** SIMAKA_CARD_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>