You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
srs/trunk/3rdparty/srt-1-fit/haicrypt/hcrypt_ctx.h

98 lines
3.1 KiB
C

/*
* SRT - Secure, Reliable, Transport
* Copyright (c) 2018 Haivision Systems Inc.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
*/
/*****************************************************************************
written by
Haivision Systems Inc.
2011-06-23 (jdube)
HaiCrypt initial implementation.
2014-03-11 (jdube)
Adaptation for SRT.
*****************************************************************************/
#ifndef HCRYPT_CTX_H
#define HCRYPT_CTX_H
#include <stdbool.h>
#include <sys/types.h>
#include "hcrypt.h"
#if !defined(HAISRT_VERSION_INT)
#include "haicrypt.h"
#include "hcrypt_msg.h"
#else
// Included by haisrt.h or similar
#include "haisrt/haicrypt.h"
#include "haisrt/hcrypt_msg.h"
#endif
typedef struct {
unsigned char *pfx; //Prefix described by transport msg info (in ctx)
unsigned char *payload;
size_t len; //Payload size
}hcrypt_DataDesc;
typedef struct tag_hcrypt_Ctx {
struct tag_hcrypt_Ctx * alt; /* Alternative ctx (even/odd) */
#define HCRYPT_CTX_F_MSG 0x00FF /* Aligned wiht message header flags */
#define HCRYPT_CTX_F_eSEK HCRYPT_MSG_F_eSEK
#define HCRYPT_CTX_F_oSEK HCRYPT_MSG_F_oSEK
#define HCRYPT_CTX_F_xSEK HCRYPT_MSG_F_xSEK
#define HCRYPT_CTX_F_ENCRYPT 0x0100 /* 0:decrypt 1:encrypt */
#define HCRYPT_CTX_F_ANNOUNCE 0x0200 /* Announce KM */
#define HCRYPT_CTX_F_TTSEND 0x0400 /* time to send */
unsigned flags;
#define hcryptCtx_GetKeyFlags(ctx) ((ctx)->flags & HCRYPT_CTX_F_xSEK)
#define hcryptCtx_GetKeyIndex(ctx) (((ctx)->flags & HCRYPT_CTX_F_xSEK)>>1)
#define HCRYPT_CTX_S_INIT 1
#define HCRYPT_CTX_S_SARDY 2 /* Security Association (KEK) ready */
#define HCRYPT_CTX_S_KEYED 3 /* Media Stream Encrypting Key (SEK) ready */
#define HCRYPT_CTX_S_ACTIVE 4 /* Announced and in use */
#define HCRYPT_CTX_S_DEPRECATED 5 /* Still announced but no longer used */
unsigned status;
#define HCRYPT_CTX_MODE_CLRTXT 0 /* NULL cipher (for tests) */
#define HCRYPT_CTX_MODE_AESECB 1 /* Electronic Code Book mode */
#define HCRYPT_CTX_MODE_AESCTR 2 /* Counter mode */
#define HCRYPT_CTX_MODE_AESCBC 3 /* Cipher-block chaining mode */
unsigned mode;
struct {
size_t key_len;
size_t pwd_len;
char pwd[HAICRYPT_PWD_MAX_SZ];
} cfg;
size_t salt_len;
unsigned char salt[HAICRYPT_SALT_SZ];
size_t sek_len;
unsigned char sek[HAICRYPT_KEY_MAX_SZ];
hcrypt_MsgInfo * msg_info; /* Transport message handler */
unsigned pkt_cnt; /* Key usage counter */
#define HCRYPT_CTX_MAX_KM_PFX_SZ 16
size_t KMmsg_len;
unsigned char KMmsg_cache[HCRYPT_CTX_MAX_KM_PFX_SZ + HCRYPT_MSG_KM_MAX_SZ];
#define HCRYPT_CTX_MAX_MS_PFX_SZ 16
unsigned char MSpfx_cache[HCRYPT_CTX_MAX_MS_PFX_SZ];
} hcrypt_Ctx;
#endif /* HCRYPT_CTX_H */