libosmogsm 1.9.0.196-9975
Osmocom GSM library
a5.c File Reference
#include <errno.h>
#include <string.h>
#include <stdbool.h>
#include <osmocom/gsm/a5.h>
#include <osmocom/gsm/kasumi.h>
#include <osmocom/crypt/auth.h>

Macros

#define ENOTSUP   EINVAL
 
#define A5_R1_LEN   19
 
#define A5_R2_LEN   22
 
#define A5_R3_LEN   23
 
#define A5_R4_LEN   17 /* A5/2 only */
 
#define A5_R1_MASK   ((1<<A5_R1_LEN)-1)
 
#define A5_R2_MASK   ((1<<A5_R2_LEN)-1)
 
#define A5_R3_MASK   ((1<<A5_R3_LEN)-1)
 
#define A5_R4_MASK   ((1<<A5_R4_LEN)-1)
 
#define A5_R1_TAPS   0x072000 /* x^19 + x^18 + x^17 + x^14 + 1 */
 
#define A5_R2_TAPS   0x300000 /* x^22 + x^21 + 1 */
 
#define A5_R3_TAPS   0x700080 /* x^23 + x^22 + x^21 + x^8 + 1 */
 
#define A5_R4_TAPS   0x010800 /* x^17 + x^12 + 1 */
 
#define A51_R1_CLKBIT   0x000100
 
#define A51_R2_CLKBIT   0x000400
 
#define A51_R3_CLKBIT   0x000400
 
#define A52_R4_CLKBIT0   0x000400
 
#define A52_R4_CLKBIT1   0x000008
 
#define A52_R4_CLKBIT2   0x000080
 

Functions

void _a5_4 (const uint8_t *ck, uint32_t fn, ubit_t *dl, ubit_t *ul, bool fn_correct)
 Generate a GSM A5/4 cipher stream. More...
 
void _a5_3 (const uint8_t *key, uint32_t fn, ubit_t *dl, ubit_t *ul, bool fn_correct)
 Generate a GSM A5/3 cipher stream. More...
 
static uint32_t _a5_12_parity (uint32_t x)
 Computes parity of a 32-bit word. More...
 
static uint32_t _a5_12_majority (uint32_t v1, uint32_t v2, uint32_t v3)
 Compute majority bit from 3 taps. More...
 
static uint32_t _a5_12_clock (uint32_t r, uint32_t mask, uint32_t taps)
 Compute the next LFSR state. More...
 
static void _a5_1_clock (uint32_t r[], int force)
 GSM A5/1 Clocking function. More...
 
static uint8_t _a5_1_get_output (uint32_t r[])
 GSM A5/1 Output function. More...
 
void _a5_1 (const uint8_t *key, uint32_t fn, ubit_t *dl, ubit_t *ul)
 Generate a GSM A5/1 cipher stream. More...
 
void osmo_a5_1 (const uint8_t *key, uint32_t fn, ubit_t *dl, ubit_t *ul) OSMO_DEPRECATED("Use generic osmo_a5() instead")
 
static void _a5_2_clock (uint32_t r[], int force)
 GSM A5/2 Clocking function. More...
 
static uint8_t _a5_2_get_output (uint32_t r[])
 GSM A5/2 Output function. More...
 
void _a5_2 (const uint8_t *key, uint32_t fn, ubit_t *dl, ubit_t *ul)
 Generate a GSM A5/1 cipher stream. More...
 
void osmo_a5_2 (const uint8_t *key, uint32_t fn, ubit_t *dl, ubit_t *ul) OSMO_DEPRECATED("Use generic osmo_a5() instead")
 
int osmo_a5 (int n, const uint8_t *key, uint32_t fn, ubit_t *dl, ubit_t *ul)
 Main method to generate a A5/x cipher stream. More...