Annotation of embedaddon/strongswan/src/libipsec/esp_packet.h, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2012 Tobias Brunner
! 3: * Copyright (C) 2012 Giuliano Grassi
! 4: * Copyright (C) 2012 Ralf Sager
! 5: * HSR Hochschule fuer Technik Rapperswil
! 6: *
! 7: * This program is free software; you can redistribute it and/or modify it
! 8: * under the terms of the GNU General Public License as published by the
! 9: * Free Software Foundation; either version 2 of the License, or (at your
! 10: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
! 11: *
! 12: * This program is distributed in the hope that it will be useful, but
! 13: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 14: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! 15: * for more details.
! 16: */
! 17:
! 18: /**
! 19: * @defgroup esp_packet esp_packet
! 20: * @{ @ingroup libipsec
! 21: */
! 22:
! 23: #ifndef ESP_PACKET_H_
! 24: #define ESP_PACKET_H_
! 25:
! 26: #include "ip_packet.h"
! 27: #include "esp_context.h"
! 28:
! 29: #include <library.h>
! 30: #include <networking/host.h>
! 31: #include <networking/packet.h>
! 32:
! 33: typedef struct esp_packet_t esp_packet_t;
! 34:
! 35: /**
! 36: * ESP packet
! 37: */
! 38: struct esp_packet_t {
! 39:
! 40: /**
! 41: * Implements packet_t interface to access the raw ESP packet
! 42: */
! 43: packet_t packet;
! 44:
! 45: /**
! 46: * Get the source address of this packet
! 47: *
! 48: * @return source host
! 49: */
! 50: host_t *(*get_source)(esp_packet_t *this);
! 51:
! 52: /**
! 53: * Get the destination address of this packet
! 54: *
! 55: * @return destination host
! 56: */
! 57: host_t *(*get_destination)(esp_packet_t *this);
! 58:
! 59: /**
! 60: * Parse the packet header before decryption. Tries to read the SPI
! 61: * from the packet to find a corresponding SA.
! 62: *
! 63: * @param spi parsed SPI, in network byte order
! 64: * @return TRUE when successful, FALSE otherwise (e.g. when the
! 65: * length of the packet is invalid)
! 66: */
! 67: bool (*parse_header)(esp_packet_t *this, uint32_t *spi);
! 68:
! 69: /**
! 70: * Authenticate and decrypt the packet. Also verifies the sequence number
! 71: * using the supplied ESP context and updates the anti-replay window.
! 72: *
! 73: * @param esp_context ESP context of corresponding inbound IPsec SA
! 74: * @return - SUCCESS if successfully authenticated,
! 75: * decrypted and parsed
! 76: * - PARSE_ERROR if the length of the packet or the
! 77: * padding is invalid
! 78: * - VERIFY_ERROR if the sequence number
! 79: * verification failed
! 80: * - FAILED if the ICV (MAC) check or the actual
! 81: * decryption failed
! 82: */
! 83: status_t (*decrypt)(esp_packet_t *this, esp_context_t *esp_context);
! 84:
! 85: /**
! 86: * Encapsulate and encrypt the packet. The sequence number will be generated
! 87: * using the supplied ESP context.
! 88: *
! 89: * @param esp_context ESP context of corresponding outbound IPsec SA
! 90: * @param spi SPI value to use, in network byte order
! 91: * @return - SUCCESS if encrypted
! 92: * - FAILED if sequence number cycled or any of the
! 93: * cryptographic functions failed
! 94: * - NOT_FOUND if no suitable IV generator provided
! 95: */
! 96: status_t (*encrypt)(esp_packet_t *this, esp_context_t *esp_context,
! 97: uint32_t spi);
! 98:
! 99: /**
! 100: * Get the next header field of a packet.
! 101: *
! 102: * @note Packet has to be in the decrypted state.
! 103: *
! 104: * @return next header field
! 105: */
! 106: uint8_t (*get_next_header)(esp_packet_t *this);
! 107:
! 108: /**
! 109: * Get the plaintext payload of this packet.
! 110: *
! 111: * @return plaintext payload (internal data),
! 112: * NULL if not decrypted
! 113: */
! 114: ip_packet_t *(*get_payload)(esp_packet_t *this);
! 115:
! 116: /**
! 117: * Extract the plaintext payload from this packet.
! 118: *
! 119: * @return plaintext payload (has to be destroyed),
! 120: * NULL if not decrypted
! 121: */
! 122: ip_packet_t *(*extract_payload)(esp_packet_t *this);
! 123:
! 124: /**
! 125: * Destroy an esp_packet_t
! 126: */
! 127: void (*destroy)(esp_packet_t *this);
! 128:
! 129: };
! 130:
! 131: /**
! 132: * Create an ESP packet out of data from the wire.
! 133: *
! 134: * @param packet the packet data as received, gets owned
! 135: * @return esp_packet_t instance
! 136: */
! 137: esp_packet_t *esp_packet_create_from_packet(packet_t *packet);
! 138:
! 139: /**
! 140: * Create an ESP packet from a plaintext payload
! 141: *
! 142: * @param src source address
! 143: * @param dst destination address
! 144: * @param payload plaintext payload, gets owned
! 145: * @return esp_packet_t instance
! 146: */
! 147: esp_packet_t *esp_packet_create_from_payload(host_t *src, host_t *dst,
! 148: ip_packet_t *payload);
! 149:
! 150: #endif /** ESP_PACKET_H_ @}*/
! 151:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>