blob: c6304db04dcf6b3ed6a169b7f0931e0e0714c53f [file] [log] [blame]
ptrkrysik8038b2e2014-12-15 23:10:48 +01001/*
2 The Hacker's Choice - http://www.thc.org
3 Part of THC's GSM SCANNER PROJECT
4*/
5
piotrfaacc722014-07-20 23:48:32 +02006#include <stdlib.h>
7#include <stdio.h>
8#include "interleave.h"
9
10int
11interleave_init(INTERLEAVE_CTX *ictx, int size, int block_size)
12{
13 ictx->trans_size = size;
14 ictx->trans = (unsigned short *)malloc(size * sizeof *ictx->trans);
15
16// DEBUGF("size: %d\n", size);
17// DEBUGF("Block size: %d\n", block_size);
18 int j, k, B;
19 for (k = 0; k < size; k++)
20 {
21 B = k % 4;
22 j = 2 * ((49 * k) % 57) + ((k % 8) / 4);
23 ictx->trans[k] = B * block_size + j;
24 /* Mapping: pos1 goes to pos2: pos1 -> pos2 */
25 //printf("%d -> %d\n", ictx->trans[k], k);
26 }
27// exit(0);
28 return 0;
29}
30
31int
32interleave_init_facch_f(INTERLEAVE_CTX *ictx, int size, int block_size, int block_offset)
33{
34 ictx->trans_size = size;
35 ictx->trans = (unsigned short *)malloc(size * sizeof *ictx->trans);
36
37// DEBUGF("size: %d\n", size);
38// DEBUGF("Block size: %d\n", block_size);
39 int j, k, B;
40 for (k = 0; k < size; k++)
41 {
42 B = (k + block_offset) % 8;
43 j = 2 * ((49 * k) % 57) + ((k % 8) / 4);
44 ictx->trans[k] = B * block_size + j;
45 /* Mapping: pos1 goes to pos2: pos1 -> pos2 */
46// DEBUGF("%d -> %d\n", ictx->trans[k], k);
47 }
48// exit(0);
49 return 0;
50}
51
52int
53interleave_deinit(INTERLEAVE_CTX *ictx)
54{
55 if (ictx->trans != NULL)
56 {
57 free(ictx->trans);
58 ictx->trans = NULL;
59 }
60
61 return 0;
62}
63
64void
65interleave_decode(INTERLEAVE_CTX *ictx, unsigned char *dst, unsigned char *src)
66{
67 printf("Lol\n");
68 int k;
69 for (k = 0; k < ictx->trans_size; k++)
70 {
71 printf("k=%d, ictx->trans[k]=%d\n", k, ictx->trans[k]);
72 dst[k] = src[ictx->trans[k]];
73 }
74}
75