Path: blob/main/MC/2. Implement GSM Security algorithms/A5.c
426 views
#include <stdio.h>1#define SIZEX 192#define SIZEY 223#define SIZEZ 2345int maj(int, int, int);67int main(){8int x[SIZEX] = {1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1};9int y[SIZEY] = {1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1};10int z[SIZEZ] = {1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0};1112int i,j = 0;13int m;1415printf("\n");16for(i = 0; i < 9; i++){17m = maj(x[8], y[10], z[10]);1819printf("X: ");20if(x[8] == m){21int t = x[13] ^ x[16] ^ x[17] ^ x[18];22for(j = SIZEX-1 ; j >= 0; j--){23if(j == 0){24x[j] = t;25}else{26x[j] = x[j-1];27}2829}30}3132for(j = 0; j < SIZEX; j++){33printf("%d", x[j]);34}353637printf("\nY: ");38if(y[10] == m){39int t = y[20] ^ y[21];40for(j = SIZEY-1 ; j >= 0; j--){41if(j == 0){42y[j] = t;43}else{44y[j] = y[j-1];45}46}4748}49for(j = 0; j < SIZEY; j++){50printf("%d",y[j]);51}5253printf("\nZ: ");54if(z[10] == m){55int t = z[7] ^ z[20] ^ z[21] ^ z[22];56for(j = SIZEZ-1 ; j >= 0; j--){57if(j == 0){58z[j] = t;59}else{60z[j] = z[j-1];61}62}63}64for(j = 0; j < SIZEZ; j++){65printf("%d",z[j]);66}6768if(i < 8){69int key = x[SIZEX-1] ^ y[SIZEY-1] ^ z[SIZEZ-1];70printf("\nKeystream bit = %d ^ %d ^ %d = %d",x[SIZEX-1],y[SIZEY-1],z[SIZEZ-1],key);71printf("\n\n");72}73}74}7576int maj(x ,y, z){77int m;78if(x == 0){79if(y == 0 || z == 0){80m = 0;81}else{82m = 1;83}84}else{85if(y == 1 || z == 1){86m = 1;87}else{88m = 0;89}90}91return m;92}939495