wireshark/epan/dissectors/packet-oscore.h
Mališa Vučinić 093efd9c30 OSCORE: Decrypt responses and dissect plaintext with CoAP functions
Add support for decrypting Observe responses with Partial IV within the
response. CoAP prioritizes the Partial IV from the response if present,
if not it passes Partial IV from the corresponding request.

Bug: 14417
Change-Id: Icb0f782de67bd0507db4f1f2a2ea90c72a4b6f0a
Reviewed-on: https://code.wireshark.org/review/25483
Petri-Dish: Peter Wu <peter@lekensteyn.nl>
Reviewed-by: Peter Wu <peter@lekensteyn.nl>
2018-03-16 15:02:48 +00:00

74 lines
2.2 KiB
C

/* packet-oscore.h
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef __PACKET_OSCORE_H__
#define __PACKET_OSCORE_H__
/* OSCORE uses AEAD algorithms defined in RFC8152 (COSE)
* We only implement the default algorithm which corresponds to CCM*
* */
typedef enum {
COSE_AES_CCM_16_64_128 = 10,
} cose_aead_alg_t;
typedef enum {
STATUS_ERROR_DECRYPT_FAILED = 0,
STATUS_ERROR_CBCMAC_FAILED,
STATUS_ERROR_TAG_CHECK_FAILED,
STATUS_ERROR_MESSAGE_TOO_SMALL,
STATUS_SUCCESS_DECRYPTED_TAG_TRUNCATED,
STATUS_SUCCESS_DECRYPTED_TAG_CHECKED,
} oscore_decryption_status_t;
/* Structure containing information regarding all necessary OSCORE message fields. */
typedef struct oscore_context {
/* Pre-Shared Parameters as Strings */
gchar *master_secret_prefs;
gchar *master_salt_prefs;
gchar *sender_id_prefs;
gchar *recipient_id_prefs;
cose_aead_alg_t algorithm;
/* Pre-Shared Parameters as Byte Arrays */
GByteArray *master_secret;
GByteArray *master_salt;
GByteArray *sender_id;
GByteArray *recipient_id;
/* Derived Parameters */
GByteArray *request_decryption_key;
GByteArray *response_decryption_key;
GByteArray *common_iv; /* IV used to generate the nonce */
} oscore_context_t;
/* Data from the lower layer (CoAP/HTTP) necessary for OSCORE to decrypt the packet */
typedef struct oscore_info {
guint8 *kid;
guint8 kid_len;
guint8 *kid_context;
guint8 kid_context_len;
guint8 *piv;
guint8 piv_len;
gboolean piv_in_response;
gboolean response;
} oscore_info_t;
#endif /* __PACKET_OSCORE_H__ */
/*
* Editor modelines - https://www.wireshark.org/tools/modelines.html
*
* Local variables:
* c-basic-offset: 4
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* vi: set shiftwidth=4 tabstop=8 expandtab:
* :indentSize=4:tabSize=8:noTabs=true:
*/