/*! \file gprs_cipher.h */

#pragma once

#include <osmocom/core/linuxlist.h>
#include <osmocom/core/utils.h>

#include <stdint.h>

#define GSM0464_CIPH_MAX_BLOCK	1523

/* 3GPP TS 24.008 § 10.5.5.3 */
enum gprs_ciph_algo {
	GPRS_ALGO_GEA0 = 0,
	GPRS_ALGO_GEA1 = 1,
	GPRS_ALGO_GEA2 = 2,
	GPRS_ALGO_GEA3 = 3,
	GPRS_ALGO_GEA4 = 4,
	_GPRS_ALGO_NUM
};

/* 3GPP TS 04.64 Table A.1: */
enum gprs_cipher_direction {
	GPRS_CIPH_MS2SGSN = 0,
	GPRS_CIPH_SGSN2MS = 1,
};

extern const struct value_string gprs_cipher_names[];

/* An implementation of a GPRS cipher */
struct gprs_cipher_impl {
	struct llist_head list;
	enum gprs_ciph_algo algo;
	const char *name;
	unsigned int priority;

	/* As specified in 04.64 Annex A.  Uses Kc, IV and direction
	 * to generate the 1523 bytes cipher stream that need to be
	 * XORed wit the plaintext for encrypt / ciphertext for decrypt */
	int (*run)(uint8_t *out, uint16_t len, uint8_t *kc, uint32_t iv,
		   enum gprs_cipher_direction direction);
};

/* register a cipher with the core (from a plugin) */
int gprs_cipher_register(struct gprs_cipher_impl *ciph);

/* load all available GPRS cipher plugins */
int gprs_cipher_load(const char *path);

/* function to be called by core code */
int gprs_cipher_run(uint8_t *out, uint16_t len, enum gprs_ciph_algo algo,
		    uint8_t *kc, uint32_t iv, enum gprs_cipher_direction dir);

/* Do we have an implementation for this cipher? */
int gprs_cipher_supported(enum gprs_ciph_algo algo);

/* Return key length for supported cipher, in bytes */
unsigned gprs_cipher_key_length(enum gprs_ciph_algo algo);

/* GSM TS 04.64 / Section A.2.1 : Generation of 'input' */
uint32_t gprs_cipher_gen_input_ui(uint32_t iov_ui, uint8_t sapi, uint32_t lfn, uint32_t oc);

/* GSM TS 04.64 / Section A.2.1 : Generation of 'input' */
uint32_t gprs_cipher_gen_input_i(uint32_t iov_i, uint32_t lfn, uint32_t oc);
