Beispiel #1
0
// display the current galois
void galois_show() {
    printf("\n");
    printf("b_n = ");
    int first = 1;
    for (int i=0;i<64;i++) {
        if (BIT(i,galois_taps) == 1) {
            if (first == 0) printf("+ ");
            printf("b_n-%d ", i+1);
            first = 0;
        }
    }
    printf("(taps: "); print_bin(galois_taps,galois_size); printf(")\n");
    printf("\n");
    printf("current state: 0x%lx (", galois_state);
    print_bin(galois_state,galois_size);printf(")\n");
    printf("\n");
}
Beispiel #2
0
void    print_memory(const void *addr, size_t size)
{
	unsigned int i;

	i = 0;
	while (addr && i < size)
	{
		print_bin(addr, i, size);
		ft_putchar2(' ');
		print_dump(addr, i, size);
		ft_putchar2('\n');
		i += 16;
	}
}
Beispiel #3
0
int main(void){
    print_bin(32);
 /*   for (int count = 0 ; count < 32;count ++){
        int number = (1<<count);
        int valor = 0;
        printf("%d\t",number);
        for (int count_bin = 0 ;count_bin < 32 ; count_bin ++){
            valor=number&(1<<(31-count_bin));
            printf("%d",valor>0?1:0);
        }
        printf("\n");
    }
    */
}
Beispiel #4
0
static void do_rev () {
	unsigned int v = 219;     // input bits to be reversed
	print_bin(v);
	unsigned int r = v; // r will be reversed bits of v; first get LSB of v
	int s = sizeof(v) * CHAR_BIT - 1; // extra shift needed at end
//
//	for (v >>= 1; v; v >>= 1)
//	{
//	  r <<= 1;
//	  r |= v & 1;
//	  s--;
//	}
	while(v) {
		v >>= 1;		//TODO:Use this method for rotation (n rotation) n times or O.M. use left_shift | right_shift(K-n)
						//K = total bits and n = no of rotation.
		r <<= 1;
		r |= v & 1;	//get only one bit of v every time/
		s--;
	}

	r <<= s; // shift when v's highest bits are zero
	printf("%d \n",r);
	print_bin(r);
}
Beispiel #5
0
void print_value_vakje(Sudoku* s, int r, int k){
	SudokuVakje *vakje=NULL;
	vakje = &(s->gegevens[r-1][k-1]);
	if(vakje->gevonden == T){
	
		printf("gevonden: (%i,%i)=%i\n", r,k, vakje->inhoud);

	}else{
	
		printf("nog niet gevoden\n");
		print_bin_Header(); printf("\n");
		print_bin(vakje->inhoud);printf("\n");
	}

	

}
Beispiel #6
0
static ssize_t vmnet_skyeye_write(struct file *file, const char __user *data, size_t len, loff_t *ppos)
{
	vmnet_private *my_vmnet_private = NULL;
	uint8_t       *mac_addr			= data + mac_addr_offset;
	uint8_t       *mac_saddr        = data + mac_saddr_offset;
	uint8_t       mac_broadcast[6]  = {0xff,0xff,0xff,0xff,0xff,0xff};

	print_bin_with_name("skyeye_write mac_taddr", mac_addr ,6);
	print_bin_with_name("skyeye_write mac_saddr", mac_saddr ,6);
	print_bin(data,len);

	if(vmnet_mac_match(mac_addr, mac_broadcast) == 0)
	{
		printk("this is broadcast\n");
		vmnet_data    *vmnet_data_new   =  kmalloc(sizeof(vmnet_data), GFP_KERNEL);
		vmnet_data_new->data   = (uint8_t *)kmalloc(len, GFP_KERNEL);
		vmnet_data_new->length = len;
		vmnet_data_new->next   = NULL;
		if(copy_from_user(vmnet_data_new->data, data, vmnet_data_new->length))
		{
			printk("write:error in write\n");
		}
		add_broad_to_vmnet_private(vmnet_private_head, vmnet_data_new, mac_saddr);
		return 0;
	}

	if((my_vmnet_private = search_vmnet_private(vmnet_private_head,mac_addr)) == NULL)
	{
		printk("write:can not find src vmnet\n");
		return 0;
	}
	//printk("search my_vmnet_private %p\n",my_vmnet_private);
	vmnet_data    *vmnet_data_head  =  my_vmnet_private->vmnet_data_head;
	vmnet_data    *vmnet_data_new   =  kmalloc(sizeof(vmnet_data), GFP_KERNEL);
	vmnet_data_new->data   = (uint8_t *)kmalloc(len, GFP_KERNEL);
	vmnet_data_new->length = len;
	vmnet_data_new->next   = NULL;
	if(copy_from_user(vmnet_data_new->data, data, vmnet_data_new->length))
	{
		printk("write:error in write\n");
	}
	printk("vmnet_skyeye_write\n");
	//add_to_vmnet_data(&vmnet_data_head, vmnet_data_new);
	add_to_vmnet_data(&my_vmnet_private->vmnet_data_head, vmnet_data_new);
	return 0;
}
Beispiel #7
0
/**
 * Método usado para mostrar os BINs que foram criados na lista de BINs.
 * Percorre a lista de BINs e para cada BIN exibe os números que existem nele,
 * Assim como o espaço restante "left" e outras informações.
 *
 * \param bins Lista de BINs para imprimir.
 * \see print_bin
 */
int print_list_bins (bin_list *bins)
{
   unsigned short int i;

   /**
    * Percorre os elementos que existem na lista de BINs e para cada um deles
    * Chama a função que imprime o BIN.
    */
   for (i = 0; i < bins->count; i++)
   {
      bin *aux = (bins->itens + i);
      printf(" {%04d} ", i);
      print_bin(aux);
   }

   printf("\n\n");

   return 0;
}
Beispiel #8
0
int main() {

	student john;

	//john->first = "John";
	strcpy(john.first, "John");

	printf("Name:\t%s\n", john.first);
	printf("Size:\t%zu\n", sizeof(john.first));
	printf("Address:\t%p\n\n", &john.first);

	printf("Address of struct:\t%p\n", &john);
	printf("Size of struct:\t%zu\n", sizeof(&john));

	printf("Binary of 5: ");
	print_bin(5);

	return 0;
}
int main(void) {
    
    char x, y;
    
    // 0bXX notation is a GNU extension (https://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html)
    x = 0b00011010;   
    y = 0b00000011;   

    printf("x:\n");
    print_bin(x);

    printf("y:\n");
    print_bin(y);

    // AND
    printf("LOGICAL AND: x&y\n");
    print_bin(x&y);
    
    // OR
    printf("LOGICAL OR: x|y\n");
    print_bin(x|y);
    
    // XOR
    printf("LOGICAL XOR: x^y\n");
    print_bin(x^y);
    
    // NOT
    printf("LOGICAL NOT: ~x\n");
    print_bin(~x);
    
    // LEFT SHIFT (1 BIT)
    printf("LEFT SHIFT (1 BIT): x<<1\n");
    print_bin(x<<1);
    
    // RIGHT SHIFT (1 BIT)
    printf("RIGHT SHIFT (1 BIT): x>>1\n");
    print_bin(x>>1);
    
    // LEFT SHIFT (2 BIT)
    printf("LEFT SHIFT (2 BIT): x<<2\n");
    print_bin(x<<2);
    
    // RIGHT SHIFT (2 BIT)
    printf("RIGHT SHIFT (2 BIT): x>>2\n");
    print_bin(x>>2);

    // SET A BIT ////////////////////////////////

    int N, M;

    printf("x:\n");
    print_bin(x);

    // SET THE Nth BIT OF x TO 1
    N = 2;
    printf("SET THE Nth BIT OF x TO 1 (WITH HERE N=2 IE THE THIRD BIT)\n");
    printf("- LONG VERSION:  x  = x | (1<<N)\n");
    printf("- SHORT VERSION: x |= (1<<N)\n");
    printf("USUALLY, x IS PORTB, PORTC or PORTD\n");
    print_bin(x | (1<<N));

    // SET THE Nth BIT OF x TO 0
    N = 3;
    printf("SET THE Nth BIT OF x TO 0 (WITH HERE N=3 IE THE FOURTH BIT)\n");
    printf("- LONG VERSION:  x  = x & ~(1<<N)\n");
    printf("- SHORT VERSION: x &= ~(1<<N)\n");
    printf("USUALLY, x IS PORTB, PORTC or PORTD\n");
    print_bin(x & ~(1<<N));

    // SET THE Nth AND THE Mth BIT OF x TO 1
    N = 2;
    M = 0;
    printf("SET THE Nth AND THE Mth BIT OF x TO 1 (WITH HERE N=2 IE THE THIRD BIT AND M=0 IE THE FIRST BIT)\n");
    printf("- LONG VERSION:  x  = x | ( (1<<N)|(1<<M) )\n");
    printf("- SHORT VERSION: x |= (1<<N)|(1<<M)\n");
    printf("USUALLY, x IS PORTB, PORTC or PORTD\n");
    print_bin(x | ( (1<<N)|(1<<M) ));

    // SET THE Nth AND THE Mth BIT OF x TO 0
    N = 3;
    M = 1;
    printf("SET THE Nth AND THE Mth BIT OF x TO 0 (WITH HERE N=3 IE THE FOURTH BIT AND M=1 IE THE SECOND BIT)\n");
    printf("- LONG VERSION:  x  = x & ~( (1<<N)|(1<<M) )\n");
    printf("- SHORT VERSION: x &= ~( (1<<N)|(1<<M) )\n");
    printf("USUALLY, x IS PORTB, PORTC or PORTD\n");
    print_bin(x & ~( (1<<N)|(1<<M) ));

    // TEST A BIT ///////////////////////////////

    printf("x:\n");
    print_bin(x);

    // TEST THE Nth BIT OF x
    N = 2;
    printf("TEST THE Nth BIT OF x (WITH HERE N=2 IE THE THIRD BIT)\n");
    printf("res = x & (1<<N)\n");
    printf("USUALLY, x IS PORTB, PORTC or PORTD\n");
    if(x & (1<<N)) printf(">>> true\n");
    else printf(">>> false\n");
    printf("\n");

    // TOGGLE A BIT /////////////////////////////

    printf("x:\n");
    print_bin(x);

    // TOGGLE THE Nth BIT OF x
    N = 2;
    printf("TOGGLE THE Nth BIT OF x (WITH HERE N=2 IE THE THIRD BIT)\n");
    printf("- LONG VERSION:  x  = x ^ (1<<N)\n");
    printf("- SHORT VERSION: x ^= (1<<N)\n");
    printf("USUALLY, x IS PORTB, PORTC or PORTD\n");
    print_bin(x ^ (1<<N));

    // TOGGLE THE Nth AND THE Mth BIT OF x
    N = 2;
    M = 1;
    printf("TOGGLE THE Nth AND THE Mth BIT OF x (WITH HERE N=2 IE THE THIRD BIT AND M=1 IE THE SECOND BIT)\n");
    printf("- LONG VERSION:  x  = x ^ ( (1<<N)|(1<<M) )\n");
    printf("- SHORT VERSION: x ^= (1<<N)|(1<<M)\n");
    printf("USUALLY, x IS PORTB, PORTC or PORTD\n");
    print_bin(x ^ ( (1<<N)|(1<<M) ));

    return 0;
}
Beispiel #10
0
int main(int argc, char *argv[])
{



    printf("MISD assembler, version 1.00. Copyright: Bauman State Technical University\n");
    printf("Usage: misdasm [options] asm_file [output_file] [map_file]\n");
    printf("Options: -m - Generate map file\n");

    if (argc > 1) {
        if (argv[1]=='-m'){
            make_map=true;
        } else {
            make_map=false;
            asm_filename=argv[1];
            asm_file = fopen(asm_filename, "r");
            if (asm_file == NULL) {
                printf("Failure to open asm file.");
                exit(EXIT_FAILURE);
            }
        }
    } else {
        printf("Error in argument list\n");
        exit(EXIT_FAILURE);
    }

    /////////////////////////////////////////
    //           Try to open files
    /////////////////////////////////////////

    if (argc > 2) {
        strcpy(output_filename,argv[2]);
     } else {
        chr = strchr(asm_filename, '.');
        if (chr==NULL) {
            strncat(output_filename,asm_filename,strlen(asm_filename));
            strcpy(map_filename,output_filename);
            strncat(output_filename,".mo",3);
            strncat(map_filename,".map",4);
        } else {
            strncpy(output_filename, asm_filename,(int)chr-(int)asm_filename);
            strcpy(map_filename,output_filename);
            strncat(output_filename,".mo",3);
            strncat(map_filename,".map",4);
        }

    }
    output_file = fopen(output_filename, "w");
    if (output_file == NULL) {
       printf("Failure to open output file.");
       exit(EXIT_FAILURE);
    }

    if (make_map) {
        if (argc > 3) {
            strcpy(map_filename[0],argv[3]);
        }
        map_file = fopen(map_filename, "rw");
        if (output_file == NULL) {
            printf("Failure to open map file.");
            exit(EXIT_FAILURE);
        }
    }

    /////////////////////////////////////////
    //           Start to translate
    /////////////////////////////////////////

    //Memory point
    mem_point = 0;
    //New opcode is ready
    new_opcode = false;
    s=0; //string number

    //Create program image
    while (!feof(asm_file)) {
        line[0]='\0';
        fgets(line, LINE_SIZE, asm_file);

        //Try to find comments
        j = (int)strchr(line,';')-(int)&line;
        if (j>=0) {line[j]='\0';}

        //Search spaces
        i=0; //translation pointer
        while ((line[i]==' ')||(line[i]=='\t')) {
            i++;
        }
        //Try to find label
        j = (int)strchr(line+i,' ')-(int)&line;
        if (j<0) {j=strlen(line);}
        k = (int)strchr(line+i,':')-(int)&line;
        if ((j>=k)&&(k>=0)) {
            strncpy(prog[mem_point].label,line+i,k-i);
            i=k+1;
        }
        while (((line[i]==' ')||(line[i]=='\t'))&&(line[i]!='\0')) {
            i++;
        }

        //Try to find opcode
        j = (int)strchr(line+i,' ')-(int)&line;
        if (j>0) {
            if ((j-i)>10) {
                printf("Error in string [%d] near: %s\n",s,line+i);
                exit(EXIT_FAILURE);
            }
            strncpy(opcode,line+i,j-i);
            opcode[j-i]='\0';
            i=j;
            new_opcode = true;
            prog[mem_point].tag[0]=true;
            prog[mem_point].tag[1]=true;
            prog[mem_point].tag[2]=true;
            op_count = 0;
            //printf("%s\n",prog[mem_point].opcode);
            if (strcmp(opcode,"add")==0) {
                 prog[mem_point].opcode=ADD;
                 op_count=ADD_C;
                 prog[mem_point].q=false;
            }
            if (strcmp(opcode,"del")==0) {
                 prog[mem_point].opcode=DEL;
                 op_count=DEL_C;
                 prog[mem_point].q=false;
            }
            if (strcmp(opcode,"search")==0) {
                prog[mem_point].opcode=SEARCH;
                op_count=SEARCH_C;
                prog[mem_point].q=false;
           }
            if (strcmp(opcode,"min")==0) {
                prog[mem_point].opcode=MIN;
                op_count=MIN_C;
                prog[mem_point].q=false;
           }
            if (strcmp(opcode,"max")==0) {
                prog[mem_point].opcode=MAX;
                op_count=MAX_C;
                prog[mem_point].q=false;
           }
            if (strcmp(opcode,"power")==0) {
                prog[mem_point].opcode=POWER;
                op_count=POWER_C;
                prog[mem_point].q=true; //power is queued mandatory
           }
            if (strcmp(opcode,"dels")==0) {
                prog[mem_point].opcode=DELS;
                op_count=DELS_C;
                prog[mem_point].q=false;
           }
            if (strcmp(opcode,"and")==0) {
                prog[mem_point].opcode=AND;
                op_count=AND_C;
                prog[mem_point].q=false;
           }
            if (strcmp(opcode,"or")==0) {
                prog[mem_point].opcode=OR;
                op_count=OR_C;
                prog[mem_point].q=false;
           }
            if (strcmp(opcode,"not")==0) {
                prog[mem_point].opcode=NOT;
                op_count=NOT_C;
                prog[mem_point].q=false;
           }
            if (strcmp(opcode,"gr")==0) {
                prog[mem_point].opcode=GR;
                op_count=GR_C;
                prog[mem_point].q=false;
           }
            if (strcmp(opcode,"greq")==0) {
                prog[mem_point].opcode=GREQ;
                op_count=GREQ_C;
                prog[mem_point].q=false;
           }
            if (strcmp(opcode,"ls")==0) {
                prog[mem_point].opcode=LS;
                op_count=LS_C;
                prog[mem_point].q=false;
           }
            if (strcmp(opcode,"lseq")==0) {
                prog[mem_point].opcode=LSEQ;
                op_count=LSEQ_C;
                prog[mem_point].q=false;
           }
            if (strcmp(opcode,"sq")==0) {
                prog[mem_point].opcode=SQUIZ;
                op_count=SQUIZ_C;
                prog[mem_point].q=false;
           }
            if (strcmp(opcode,"jwt")==0) {
                prog[mem_point].opcode=JWT;
                op_count=JWT_C;
                prog[mem_point].tag[0]=false;
           }
            if (strcmp(opcode,"jnw")==0) {
                prog[mem_point].opcode=JNW;
                op_count=JNW_C;
                prog[mem_point].tag[0]=true;
           }

            //for queueing commands


            if (strcmp(opcode,"addq")==0) {
                 prog[mem_point].opcode=ADD;
                 op_count=ADD_C;
                 prog[mem_point].q=true;
            }
            if (strcmp(opcode,"delq")==0) {
                 prog[mem_point].opcode=DEL;
                 op_count=DEL_C;
                 prog[mem_point].q=true;
            }
            if (strcmp(opcode,"searchq")==0) {
                prog[mem_point].opcode=SEARCH;
                op_count=SEARCH_C;
                prog[mem_point].q=true;
           }
            if (strcmp(opcode,"minq")==0) {
                prog[mem_point].opcode=MIN;
                op_count=MIN_C;
                prog[mem_point].q=true;
           }
            if (strcmp(opcode,"maxq")==0) {
                prog[mem_point].opcode=MAX;
                op_count=MAX_C;
                prog[mem_point].q=true;
           }
            if (strcmp(opcode,"powerq")==0) {
                prog[mem_point].opcode=POWER;
                op_count=POWER_C;
                prog[mem_point].q=true;
           }
            if (strcmp(opcode,"delsq")==0) {
                prog[mem_point].opcode=DELS;
                op_count=DELS_C;
                prog[mem_point].q=true;
           }
            if (strcmp(opcode,"andq")==0) {
                prog[mem_point].opcode=AND;
                op_count=AND_C;
                prog[mem_point].q=true;
           }
            if (strcmp(opcode,"orq")==0) {
                prog[mem_point].opcode=OR;
                op_count=OR_C;
                prog[mem_point].q=true;
           }
            if (strcmp(opcode,"notq")==0) {
                prog[mem_point].opcode=NOT;
                op_count=NOT_C;
                prog[mem_point].q=true;
           }
            if (strcmp(opcode,"grq")==0) {
                prog[mem_point].opcode=GR;
                op_count=GR_C;
                prog[mem_point].q=true;
           }
            if (strcmp(opcode,"greqq")==0) {
                prog[mem_point].opcode=GREQ;
                op_count=GREQ_C;
                prog[mem_point].q=true;
           }
            if (strcmp(opcode,"lsq")==0) {
                prog[mem_point].opcode=LS;
                op_count=LS_C;
                prog[mem_point].q=true;
           }
            if (strcmp(opcode,"lseqq")==0) {
                prog[mem_point].opcode=LSEQ;
                op_count=LSEQ_C;
                prog[mem_point].q=true;
           }
            if (strcmp(opcode,"sqq")==0) {
                prog[mem_point].opcode=SQUIZ;
                op_count=SQUIZ_C;
                prog[mem_point].q=true;
           }


            if (op_count==0) {
                printf("Unknown opcode in string [%d] near: %s\n",s,line+i);
                exit(EXIT_FAILURE);
            }


        //try to find ops

        for (k=0;k<op_count;k++) {
            while ((line[i]==' ')||(line[i]=="\t")) i++;
            if (i>=strlen(line)) {
                printf("Operands are not corresponds to opcode in string [%d]\n",s);
                exit(EXIT_FAILURE);

            }
            j = (int)strchr(line+i,' ')-(int)&line;
            l = (int)strchr(line+i,',')-(int)&line;

            //find minimum positive

            if (j<0) {j=strlen(line);}
            if ((l>0)&&(l<j)) {j=l;}
            if (j<=i) {
                    printf("Operands are not corresponds to opcode in string [%d]\n",s);
                    exit(EXIT_FAILURE);
            }


            if (prog[mem_point].opcode==JWT) {
                if (prog[mem_point].tag[0]) {
                // if jnw
                    strncpy(prog[mem_point].jmp_label,line+i,j-i);

                    l = (int)strchr(prog[mem_point].jmp_label,'\t')-(int)&(prog[mem_point].jmp_label);
                    if (l>=0) {prog[mem_point].jmp_label[l]='\0';}

                    l = (int)strchr(prog[mem_point].jmp_label,' ')-(int)&(prog[mem_point].jmp_label);
                    if (l>=0) {prog[mem_point].jmp_label[l]='\0';}


                    if (prog[mem_point].jmp_label[0]=='?') {
                        printf("JNW command should have operand in string [%d]\n",s);
                        exit(EXIT_FAILURE);

                    } else {
                        prog[mem_point].tag[1] = true;
                    }
                } else {
                // if jwt
                    strncpy(prog[mem_point].jmp_label,line+i,j-i);

                    l = (int)strchr(prog[mem_point].jmp_label,'\t')-(int)&(prog[mem_point].jmp_label);
                    if (l>=0) {prog[mem_point].jmp_label[l]='\0';}

                    l = (int)strchr(prog[mem_point].jmp_label,' ')-(int)&(prog[mem_point].jmp_label);
                    if (l>=0) {prog[mem_point].jmp_label[l]='\0';}


                    if (prog[mem_point].jmp_label[0]=='?') {
                        prog[mem_point].tag[1] = false;
                    } else {
                        prog[mem_point].tag[1] = true;
                    }
                }
                prog[mem_point].tag[2] = true;

            } else {
                //if a number
                strncpy(operand,line+i,j-i);
                if (operand[0]=='?') {
                    prog[mem_point].tag[k] = false;
                } else {
                    prog[mem_point].op[k] = atoi(operand);
                    prog[mem_point].tag[k] = true;
                }
            }
            i=j+1;
        }



        if (new_opcode) {
            new_opcode = false;
            mem_point++;
            opcode[0]='\0';
        }

        }

        s++;
    }

    //Solve internal links

    for (i=0; i<mem_point; i++) {
        if ((prog[i].opcode==JWT)&&(prog[i].jmp_label[0]!='?')) {
            flag=false;
            for (j=0; j<mem_point; j++) {
                if (strcmp(prog[i].jmp_label,prog[j].label)==0) {
                    prog[i].jmp_adr=j;
                    flag=true;
                }
            }
            if (!flag) {
                printf("Jump address unknown in string [%s]\n",prog[i].jmp_label);
                exit(EXIT_FAILURE);
            }
        }
    }


    //Make output bit file

    for (i=0; i<mem_point; i++) {
        switch (prog[i].opcode) {
        // format 1
        case DELS: case MAX: case MIN: case POWER: case SQUIZ: {
            print_bin(0,32);
            print_bin(0,32);
            //queue
            if (prog[i].q) {
                print_bin(1,1);
            } else {
                print_bin(0,1);
            }
            print_bin(prog[i].op[0],7);
            print_bin(prog[i].opcode,5);
            for (j=2;j>=0;j--) {
                if (prog[i].tag[j]) {
                    print_bin(1,1);
                } else {
                    print_bin(0,1);
                }

            }
            fprintf(output_file,"\n");
            break;
        }
        // format 2
        case DEL: case SEARCH: {
            print_bin(0,32);
            print_bin(prog[i].op[1],32);
            //queue
            if (prog[i].q) {
                print_bin(1,1);
            } else {
                print_bin(0,1);
            }
            print_bin(prog[i].op[0],7);
            print_bin(prog[i].opcode,5);
            for (j=2;j>=0;j--) {
                if (prog[i].tag[j]) {
                    print_bin(1,1);
                } else {
                    print_bin(0,1);
                }

            }
            fprintf(output_file,"\n");
            break;
        }
        // format 3
        case ADD: {
            print_bin(prog[i].op[2],32);
            print_bin(prog[i].op[1],32);
            //queue
            if (prog[i].q) {
                print_bin(1,1);
            } else {
                print_bin(0,1);
            }
            print_bin(prog[i].op[0],7);
            print_bin(prog[i].opcode,5);
            for (j=2;j>=0;j--) {
                if (prog[i].tag[j]) {
                    print_bin(1,1);
                } else {
                    print_bin(0,1);
                }

            }
            fprintf(output_file,"\n");
            break;
        }
        // format 4
        case AND: case OR: case NOT: {
            print_bin(0,32);
            print_bin(0,16);
            print_bin(prog[i].op[2],8);
            print_bin(prog[i].op[1],8);
            //queue
            if (prog[i].q) {
                print_bin(1,1);
            } else {
                print_bin(0,1);
            }
            print_bin(prog[i].op[0],7);
            print_bin(prog[i].opcode,5);
            for (j=2;j>=0;j--) {
                if (prog[i].tag[j]) {
                    print_bin(1,1);
                } else {
                    print_bin(0,1);
                }

            }
            fprintf(output_file,"\n");
            break;
        }
        // format 5
        case LS: case LSEQ: case GR: case GREQ: {
            print_bin(0,24);
            print_bin(prog[i].op[2],32);
            print_bin(prog[i].op[1],8);
            //queue
            if (prog[i].q) {
                print_bin(1,1);
            } else {
                print_bin(0,1);
            }
            print_bin(prog[i].op[0],7);
            print_bin(prog[i].opcode,5);
            for (j=2;j>=0;j--) {
                if (prog[i].tag[j]) {
                    print_bin(1,1);
                } else {
                    print_bin(0,1);
                }

            }
            fprintf(output_file,"\n");
            break;
        }
        // format 6
        case JNW: {
            print_bin(0,32);
            print_bin(0,8);
            print_bin(prog[i].jmp_adr,32);
            print_bin(prog[i].opcode,5);
            for (j=2;j>=0;j--) {
                if (prog[i].tag[j]) {
                    print_bin(1,1);
                } else {
                    print_bin(0,1);
                }

            }
            fprintf(output_file,"\n");
            break;
        }
      }

    }

    for (i=mem_point; i<255; i++) {
        for (j=0; j<80; j++) {
            fprintf(output_file,"0");
        }
        fprintf(output_file,"\n");
    }

    //Important! For ISE to avoid BRAM packing!!!
    fprintf(output_file,"11011100101110111100010011010101111001101111011111101110010111011110001001101010");


    //Make a map file



    /////////////////////////////////////////
    //           Try to close files
    /////////////////////////////////////////

    fclose(asm_file);
    fclose(output_file);
    if (make_map) {
       fclose(map_file);
    }
    return 0;
}
Beispiel #11
0
int 
ECPKParameters_print(BIO * bp, const EC_GROUP * x, int off)
{
	unsigned char *buffer = NULL;
	size_t buf_len = 0, i;
	int ret = 0, reason = ERR_R_BIO_LIB;
	BN_CTX *ctx = NULL;
	const EC_POINT *point = NULL;
	BIGNUM *p = NULL, *a = NULL, *b = NULL, *gen = NULL, *order = NULL,
	*cofactor = NULL;
	const unsigned char *seed;
	size_t seed_len = 0;
	const char *nname;

	static const char *gen_compressed = "Generator (compressed):";
	static const char *gen_uncompressed = "Generator (uncompressed):";
	static const char *gen_hybrid = "Generator (hybrid):";

	if (!x) {
		reason = ERR_R_PASSED_NULL_PARAMETER;
		goto err;
	}
	ctx = BN_CTX_new();
	if (ctx == NULL) {
		reason = ERR_R_MALLOC_FAILURE;
		goto err;
	}
	if (EC_GROUP_get_asn1_flag(x)) {
		/* the curve parameter are given by an asn1 OID */
		int nid;

		if (!BIO_indent(bp, off, 128))
			goto err;

		nid = EC_GROUP_get_curve_name(x);
		if (nid == 0)
			goto err;

		if (BIO_printf(bp, "ASN1 OID: %s", OBJ_nid2sn(nid)) <= 0)
			goto err;
		if (BIO_printf(bp, "\n") <= 0)
			goto err;

		nname = EC_curve_nid2nist(nid);
		if (nname) {
			if (!BIO_indent(bp, off, 128))
				goto err;
			if (BIO_printf(bp, "NIST CURVE: %s\n", nname) <= 0)
				goto err;
		}
	} else {
		/* explicit parameters */
		int is_char_two = 0;
		point_conversion_form_t form;
		int tmp_nid = EC_METHOD_get_field_type(EC_GROUP_method_of(x));

		if (tmp_nid == NID_X9_62_characteristic_two_field)
			is_char_two = 1;

		if ((p = BN_new()) == NULL || (a = BN_new()) == NULL ||
		    (b = BN_new()) == NULL || (order = BN_new()) == NULL ||
		    (cofactor = BN_new()) == NULL) {
			reason = ERR_R_MALLOC_FAILURE;
			goto err;
		}
#ifndef OPENSSL_NO_EC2M
		if (is_char_two) {
			if (!EC_GROUP_get_curve_GF2m(x, p, a, b, ctx)) {
				reason = ERR_R_EC_LIB;
				goto err;
			}
		} else		/* prime field */
#endif
		{
			if (!EC_GROUP_get_curve_GFp(x, p, a, b, ctx)) {
				reason = ERR_R_EC_LIB;
				goto err;
			}
		}

		if ((point = EC_GROUP_get0_generator(x)) == NULL) {
			reason = ERR_R_EC_LIB;
			goto err;
		}
		if (!EC_GROUP_get_order(x, order, NULL) ||
		    !EC_GROUP_get_cofactor(x, cofactor, NULL)) {
			reason = ERR_R_EC_LIB;
			goto err;
		}
		form = EC_GROUP_get_point_conversion_form(x);

		if ((gen = EC_POINT_point2bn(x, point,
			    form, NULL, ctx)) == NULL) {
			reason = ERR_R_EC_LIB;
			goto err;
		}
		buf_len = (size_t) BN_num_bytes(p);
		if (buf_len < (i = (size_t) BN_num_bytes(a)))
			buf_len = i;
		if (buf_len < (i = (size_t) BN_num_bytes(b)))
			buf_len = i;
		if (buf_len < (i = (size_t) BN_num_bytes(gen)))
			buf_len = i;
		if (buf_len < (i = (size_t) BN_num_bytes(order)))
			buf_len = i;
		if (buf_len < (i = (size_t) BN_num_bytes(cofactor)))
			buf_len = i;

		if ((seed = EC_GROUP_get0_seed(x)) != NULL)
			seed_len = EC_GROUP_get_seed_len(x);

		buf_len += 10;
		if ((buffer = malloc(buf_len)) == NULL) {
			reason = ERR_R_MALLOC_FAILURE;
			goto err;
		}
		if (!BIO_indent(bp, off, 128))
			goto err;

		/* print the 'short name' of the field type */
		if (BIO_printf(bp, "Field Type: %s\n", OBJ_nid2sn(tmp_nid))
		    <= 0)
			goto err;

		if (is_char_two) {
			/* print the 'short name' of the base type OID */
			int basis_type = EC_GROUP_get_basis_type(x);
			if (basis_type == 0)
				goto err;

			if (!BIO_indent(bp, off, 128))
				goto err;

			if (BIO_printf(bp, "Basis Type: %s\n",
				OBJ_nid2sn(basis_type)) <= 0)
				goto err;

			/* print the polynomial */
			if ((p != NULL) && !ASN1_bn_print(bp, "Polynomial:", p, buffer,
				off))
				goto err;
		} else {
			if ((p != NULL) && !ASN1_bn_print(bp, "Prime:", p, buffer, off))
				goto err;
		}
		if ((a != NULL) && !ASN1_bn_print(bp, "A:   ", a, buffer, off))
			goto err;
		if ((b != NULL) && !ASN1_bn_print(bp, "B:   ", b, buffer, off))
			goto err;
		if (form == POINT_CONVERSION_COMPRESSED) {
			if ((gen != NULL) && !ASN1_bn_print(bp, gen_compressed, gen,
				buffer, off))
				goto err;
		} else if (form == POINT_CONVERSION_UNCOMPRESSED) {
			if ((gen != NULL) && !ASN1_bn_print(bp, gen_uncompressed, gen,
				buffer, off))
				goto err;
		} else {	/* form == POINT_CONVERSION_HYBRID */
			if ((gen != NULL) && !ASN1_bn_print(bp, gen_hybrid, gen,
				buffer, off))
				goto err;
		}
		if ((order != NULL) && !ASN1_bn_print(bp, "Order: ", order,
			buffer, off))
			goto err;
		if ((cofactor != NULL) && !ASN1_bn_print(bp, "Cofactor: ", cofactor,
			buffer, off))
			goto err;
		if (seed && !print_bin(bp, "Seed:", seed, seed_len, off))
			goto err;
	}
	ret = 1;
err:
	if (!ret)
		ECerror(reason);
	BN_free(p);
	BN_free(a);
	BN_free(b);
	BN_free(gen);
	BN_free(order);
	BN_free(cofactor);
	BN_CTX_free(ctx);
	free(buffer);
	return (ret);
}
Beispiel #12
0
int main(int argc, char** argv)
{
    // error case
    if (argc != 2)
        return 1;

    // Seed random
    int seed = atoi(argv[1]);
    srand(seed);

    int byte0 = 0;
    unsigned char p[8];

    // Populate our array with random numbers
    int i;
    for (i = 0; i < 8; i++)
    {
        int num = (rand() % 256);
        p[i] = num;
    }

    // Can generate from [0 - 255]
    byte0 = rand() % 256;

    printf("The initial array in decimal is: \n");
    print_decimal(p);

    printf("Byte 0 in decimal is: %d\n", byte0);

    printf("-----------------------------------------------------------------------------------------------------------------------------------------------------------\n");

    printf("The initial array in bianary is: \n");
    print_bin(p);

    printf("Byte 0 in bianary is: ");
    PRINTBIN(byte0);
    printf("\n");

    printf("-----------------------------------------------------------------------------------------------------------------------------------------------------------\n");

    // Call setlsbs
    setlsbs(p, byte0);

    printf("The modified array in decimal is: \n");
    print_decimal(p);

    printf("-----------------------------------------------------------------------------------------------------------------------------------------------------------\n");

    printf("The modified array in bianary is: \n");
    print_bin(p);

    printf("-----------------------------------------------------------------------------------------------------------------------------------------------------------\n");

    // Get back our value
    unsigned char r = getlsbs(p);
    printf("The returned value from getlsbs is decimal is: %d\n", r);

    printf("The returned value from getlsbs in bianary is: ");
    PRINTBIN(r);
    printf("\n");
    return 0;
}
Beispiel #13
0
main ()
{
  sTest		src;
  sTest		trg;
  float		a = 1234567890.123456;
  float		b = 1.1;
  int		i;
  int		size;
  FILE		*fp;

  float		av[9];
  float		bv[9];
  av[0] = 0.19550715;
  av[1] = 1.9550715;
  av[2] = 19.550715;
  av[3] = 195.50715;
  av[4] = 1955.0715;
  av[5] = 19550.715;
  av[6] = 195507.15;
  av[7] = 1955071.5;
  av[8] = 19550715.;
  
  printf("a1 ..............:% 22.10f %12e %s\n", av[0], av[0], print_bin((int *)&av[0]));
  printf("a2 ..............:% 22.10f %12e %s\n", av[1], av[1], print_bin((int *)&av[1]));
  printf("a3 ..............:% 22.10f %12e %s\n", av[2], av[2], print_bin((int *)&av[2]));
  printf("a4 ..............:% 22.10f %12e %s\n", av[3], av[3], print_bin((int *)&av[3]));
  printf("a5 ..............:% 22.10f %12e %s\n", av[4], av[4], print_bin((int *)&av[4]));
  printf("a6 ..............:% 22.10f %12e %s\n", av[5], av[5], print_bin((int *)&av[5]));
  printf("a7 ..............:% 22.10f %12e %s\n", av[6], av[6], print_bin((int *)&av[6]));
  printf("a8 ..............:% 22.10f %12e %s\n", av[7], av[7], print_bin((int *)&av[7]));
  printf("a9 ..............:% 22.10f %12e %s\n", av[8], av[8], print_bin((int *)&av[8]));

#if !defined(__vms)

  for (i = 0; i < 10; i++) {
    src.b_int_v[i] = i*i * 2300000;
    printf("a_int_v[%3.3d] ..:% 12.12d %s\n", i, src.b_int_v[i], print_bin((int *)&src.b_int_v[i]));
  }

  for (i = 0; i < 100; i++) {
    a /= b;
    src.a_float_v[i] = a;
    printf("a_float_v[%3.3d] :% 22.10f %12e %s\n", i, a, a, print_bin((int *)&a));
  }        

  src.a_int = 1507153392;
  printf("a_int .........:% 12.12d %s\n", src.a_int, print_bin((int *)&src.a_int));

  for (i = 0; i < 5; i++) {
    src.a_short_v[i] = i*i * 32000;
    printf("a_short_v[%3.3d] :% 12.12d\n", i, src.a_short_v[i]);
  }

  for (i = 0; i < 5; i++) {
    src.a_int_v[i] = i*i * 23000000;
    printf("a_int_v[%3.3d] ..:% 12.12d %s\n", i, src.a_int_v[i], print_bin((int *)&src.a_int_v[i]));
  }

  src.a_char = 'L';
  printf("a_char ........: %c\n", src.a_char);

  src.a_float = 550715.3392;
  printf("a_float .......:% 22.10f %18e %s\n", src.a_float, src.a_float, print_bin((int *)&src.a_float));


  fp = fopen("/view/pwr_x2_3_1/vobs/pwr_src/src/lib/rt/tst/test_vms.dat", "wb");
  if (fp == NULL) exit(0);

  size = fwrite(av, sizeof(av), 1, fp);
  size = fwrite(&src, sizeof(src), 1, fp);

  fclose(fp);

  exit(1);  
#else
  fp = fopen("/pwr_root/src/lib/rt/tst/test_vms.dat", "rb");
  if (fp == NULL) exit(0);

  size = fread(av, sizeof(av), 1, fp);
  printf("\nRead %d bytes\n\n", size);

  printf("a1 ..............:% 22.10f %12e %s\n", av[0], av[0], print_bin((int *)&av[0]));
  printf("a2 ..............:% 22.10f %12e %s\n", av[1], av[1], print_bin((int *)&av[1]));
  printf("a3 ..............:% 22.10f %12e %s\n", av[2], av[2], print_bin((int *)&av[2]));
  printf("a4 ..............:% 22.10f %12e %s\n", av[3], av[3], print_bin((int *)&av[3]));
  printf("a5 ..............:% 22.10f %12e %s\n", av[4], av[4], print_bin((int *)&av[4]));
  printf("a6 ..............:% 22.10f %12e %s\n", av[5], av[5], print_bin((int *)&av[5]));
  printf("a7 ..............:% 22.10f %12e %s\n", av[6], av[6], print_bin((int *)&av[6]));
  printf("a8 ..............:% 22.10f %12e %s\n", av[7], av[7], print_bin((int *)&av[7]));
  printf("a9 ..............:% 22.10f %12e %s\n", av[8], av[8], print_bin((int *)&av[8]));

  size = 9 * sizeof(float);
  decode_sfloat(9, (char *)bv, (char *)&av, &size);
  printf("\ndeocde\n\n", size);

  printf("a1 ..............:% 22.10f %12e %s\n", bv[0], bv[0], print_bin((int *)&bv[0]));
  printf("a2 ..............:% 22.10f %12e %s\n", bv[1], bv[1], print_bin((int *)&bv[1]));
  printf("a3 ..............:% 22.10f %12e %s\n", bv[2], bv[2], print_bin((int *)&bv[2]));
  printf("a4 ..............:% 22.10f %12e %s\n", bv[3], bv[3], print_bin((int *)&bv[3]));
  printf("a5 ..............:% 22.10f %12e %s\n", bv[4], bv[4], print_bin((int *)&bv[4]));
  printf("a6 ..............:% 22.10f %12e %s\n", bv[5], bv[5], print_bin((int *)&bv[5]));
  printf("a7 ..............:% 22.10f %12e %s\n", bv[6], bv[6], print_bin((int *)&bv[6]));
  printf("a8 ..............:% 22.10f %12e %s\n", bv[7], bv[7], print_bin((int *)&bv[7]));
  printf("a9 ..............:% 22.10f %12e %s\n", bv[8], bv[8], print_bin((int *)&bv[8]));

  size = fread(&src, sizeof(src), 1, fp);
  printf("\nRead %d bytes\n\n", size);

  for (i = 0; i < 10; i++)
    CONVERT_INT(&trg.b_int_v[i], &src.b_int_v[i]);

  size = sizeof(trg.a_float_v);
  decode_sfloat(100, (char *) trg.a_float_v, (char *) src.a_float_v, &size);

  CONVERT_INT(&trg.a_int, &src.a_int);

  for (i = 0; i < 5; i++)
    CONVERT_SHORT(&trg.a_short_v[i], &src.a_short_v[i]);

  for (i = 0; i < 5; i++)
    CONVERT_INT(&trg.a_int_v[i], &src.a_int_v[i]);

  trg.a_char = src.a_char;

  size = sizeof(trg.a_float);
  decode_sfloat(1, (char *) &trg.a_float, (char *) &src.a_float, &size);

  for (i = 0; i < 10; i++) {
    printf("b_int_v[%3.3d] ..:% 12.12d %s\n", i, trg.b_int_v[i], print_bin(&trg.b_int_v[i]));
  }

  for (i = 0; i < 100; i++) {
    printf("a_float_v[%3.3d] :% 22.10f %15e %s\n", i, trg.a_float_v[i], trg.a_float_v[i], print_bin((int *)&trg.a_float_v[i]));
  }        

  printf("a_int .........:% 12.12d %s\n", trg.a_int, print_bin(&trg.a_int));

  for (i = 0; i < 5; i++) {
    printf("a_short_v[%3.3d] :% 12.12d\n", i, trg.a_short_v[i]);
  }

  for (i = 0; i < 5; i++) {
    printf("a_int_v[%3.3d] ..:% 12.12d %s\n", i, trg.a_int_v[i], print_bin(&trg.a_int_v[i]));
  }

  printf("a_char ........: %c\n", trg.a_char);

  printf("a_float .......:% 22.10f %15e %s\n", trg.a_float, trg.a_float, print_bin((int *)&trg.a_float));

  fclose(fp);

  exit(1);  

#endif
}
///////////////////////////////////////////////////////////////////////////
// Connect the mouse by opening a serial port (19200 baud, 8 data, 1 stop,
// no parity). Reset the mouse once connected and verify diagnostics.
//
// Return: file descriptor to serial port or -1 if error opening port
//////////////////////////////////////////////////////////////////////////
int ThreeDMouse::logitechOpen(const std::string& port_name)
{
   int fd;
   struct termios t;
   unsigned char data[DIAGNOSTIC_SIZE]; /* for diagnostics info */

   /* open a serial port, read/write */
   if ( (fd = open(port_name.c_str(), O_RDWR)) < 0 )
   {
      perror(port_name.c_str());
      return(-1);
   }

   /// Can now safely set the mouseFD value
   mouseFD = fd;

   /* disable all input mode processing */
   t.c_iflag = 0;

   /* disable all output mode processing */
   t.c_oflag = 0;

   /* hardware control flags: 19200 baud, 8 data bits, 1 stop bits,
      no parity, enable receiver */
   t.c_cflag = B19200 | CS8 | CSTOPB | CREAD;

   /* disable local control processing (canonical, control sigs, etc) */
   t.c_lflag = 0;

   /* set control characters for non-canonical reads */
   t.c_cc[VMIN] = 1;
   t.c_cc[VTIME]= 0;

   /* control port immediately (TCSANOW) */
   if ( tcsetattr(mouseFD, TCSANOW, &t) < 0 )
   {
      perror("error controlling serial port");
      return(-1);
   }

   /* reset the mouse */
   ThreeDMouse::resetControlUnit();

   /* do diagnostics */
   ThreeDMouse::getDiagnostics(data);

#ifdef DEBUG
   printf("diag[0]: %2x=", data[0]);
   print_bin(data[0]);
   printf("\n");
   printf("diag[1]: %2x=", data[1]);
   print_bin(data[1]);
   printf("\n");
#endif

   /* check diagnostic return */
   if ( (data[0] != 0xbf) || (data[1] != 0x3f) )
   {
      fprintf(stderr, "Mouse diagnostics failed\n");
      return(-1);
   }
   return(fd);
}
Beispiel #15
0
// Read DID from ID (GM)
// For now we are only setting this up to work with the BCM
// 244   [3]  02 1A 90
void handle_gm_read_did_by_id(int can, struct canfd_frame frame) {
  if(verbose) plog("Received GM Read DID by ID Request\n");
  char resp[300];
  char *buf;
  char *tracenum = "874602RA51950204";
  unsigned char chksum;
  int pktsize;
  switch(frame.data[2]) {
    case 0x90:  // VIN
      if(verbose) plog(" + Requested VIN\n");
      switch(fuzz_level) {
        case 0:
          if(verbose) plog("Sending VIN %s\n", vin);
          resp[0] = frame.data[1] + 0x40;
          resp[1] = frame.data[2];
          memcpy(&resp[2], vin, strlen(vin));
          isotp_send_to(can, resp, 3 + strlen(vin), 0x644);
          break;
        case 1:
          if(verbose) plog("Fuzzing VIN with printable chars\n");
          resp[0] = frame.data[1] + 0x40;
          resp[1] = frame.data[2];
          buf = gen_data(DATA_ALPHANUM, 17);
          chksum = calc_vin_checksum(buf, 17);
          buf[8] = chksum;
          if(verbose) plog("Using VIN: %s\n", buf);
          memcpy(&resp[2], buf, 17);
          free(buf);
          isotp_send_to(can, resp, 3 + 17, 0x644);
          break;
        case 2:
        case 3:  // At 3 the ISOTP spec gets flaky
          pktsize = rand() % 252;
          if(verbose) plog("Fuzzing big VIN with printable chars\n");
          resp[0] = frame.data[1] + 0x40;
          resp[1] = frame.data[2];
          buf = gen_data(DATA_ALPHANUM, pktsize);
          chksum = calc_vin_checksum(buf, pktsize);
          buf[8] = chksum;
          if(verbose) plog("Using big VIN (%d chars): %s\n",pktsize, buf);
          memcpy(&resp[2], buf, pktsize);
          free(buf);
          isotp_send_to(can, resp, 3 + pktsize, 0x644);
          break;
        case 4:
          if(verbose) plog("Fuzzing VIN with binary data\n");
          resp[0] = frame.data[1] + 0x40;
          resp[1] = frame.data[2];
          buf = gen_data(DATA_BINARY, 17);
          chksum = calc_vin_checksum(buf, 17);
          buf[8] = chksum;
          if(verbose) print_bin(buf, 17);
          memcpy(&resp[2], buf, 17);
          free(buf);
          isotp_send_to(can, resp, 3 + 17, 0x644);
          break;
        case 5:
        default:
          pktsize = rand() % 252;
          if(verbose) plog("Fuzzing VIN with binary data with size %d\n", pktsize);
          resp[0] = frame.data[1] + 0x40;
          resp[1] = frame.data[2];
          buf = gen_data(DATA_BINARY, pktsize);
          if(verbose) print_bin(buf, pktsize);
          memcpy(&resp[2], buf, pktsize);
          free(buf);
          isotp_send_to(can, resp, 3 + pktsize, 0x644);
          break;
       }
      break;
    case 0xA1:  // SDM Primary Key
      if(verbose) plog(" + Requested SDM Primary Key\n");
      switch(fuzz_level) {
        case 0:
        default:
          if(verbose) plog("Sending SDM Key %04X\n", 0x6966);
          resp[0] = frame.data[1] + 0x40;
          resp[1] = frame.data[2];
          resp[2] = 0x69;
          resp[3] = 0x66;
          isotp_send_to(can, resp, 5, 0x644);
          break;
      }
      break;
    case 0xB4:  // Traceability Number
      if(verbose) plog(" + Requested Traceability Number\n");
      switch(fuzz_level) {
        case 0:
        default:
          if(verbose) plog("Sending Traceabiliity number %s\n", tracenum);
          resp[0] = frame.data[1] + 0x40;
          resp[1] = frame.data[2];
          memcpy(&resp[2], tracenum, strlen(tracenum));
          isotp_send_to(can, resp, 3 + strlen(tracenum), 0x644);
          break;
      }
      break;
    case 0xB7:  // Software Number
      if(verbose) plog(" + Requested Software Number\n");
      switch(fuzz_level) {
        case 0:
        default:
          if(verbose) plog("Sending SW # %d\n", 600);
          resp[0] = frame.data[1] + 0x40;
          resp[1] = frame.data[2];
          resp[2] = 0x42;
          resp[3] = 0xAA;
          resp[4] = 6;
          resp[5] = 2; // 600
          resp[6] = 0x58;
          isotp_send_to(can, resp, 6, 0x644);
          break;
      }
      break;
    case 0xCB:  // End Model Part #
      if(verbose) plog(" + Requested End Model Part Number\n");
      switch(fuzz_level) {
        case 0:
        default:
          if(verbose) plog("Sending End Model Part Number %d\n", 15804602);
          resp[0] = frame.data[1] + 0x40;
          resp[1] = frame.data[2];
          resp[2] = 0x00;
          resp[3] = 0xF1;
          resp[4] = 0x28;
          resp[5] = 0xBA;
          isotp_send_to(can, resp, 6, 0x644);
          break;
      }
      break;
    default:
      break;
  }
}
Beispiel #16
0
void handle_vehicle_info(int can, struct canfd_frame frame) {
  char *buf;
  int pktsize = 0;
  unsigned char chksum;
  if(verbose) plog("Received Vehicle info request\n");
  char resp[300];
  switch(frame.data[2]) {
    case 0x00: // Supported PIDs
      if(verbose) plog("Replying with ALL Pids supported\n");
      resp[0] = frame.data[1] + 0x40;
      resp[1] = frame.data[2];
      resp[2] = 0x55;
      resp[3] = 0;
      resp[4] = 0;
      resp[5] = 0;
      isotp_send(can, resp, 6);
      break;
    case 0x02: // Get VIN
      switch(fuzz_level) {
        case 0:
          if(verbose) plog("Sending VIN %s\n", vin);
          resp[0] = frame.data[1] + 0x40;
          resp[1] = frame.data[2];
          resp[2] = 1;
          memcpy(&resp[3], vin, strlen(vin));
          isotp_send(can, resp, 4 + strlen(vin));
          break;
        case 1:
          if(verbose) plog("Fuzzing VIN with printable chars\n");
          resp[0] = frame.data[1] + 0x40;
          resp[1] = frame.data[2];
          resp[2] = 1;
          buf = gen_data(DATA_ALPHANUM, 17);
          chksum = calc_vin_checksum(buf, 17);
          buf[8] = chksum;
          if(verbose) plog("Using VIN: %s\n", buf);
          memcpy(&resp[3], buf, 17);
          free(buf);
          isotp_send(can, resp, 4 + 17);
          break;
        case 2:
        case 3:  // At 3 the ISOTP spec gets flaky
          pktsize = rand() % 252;
          if(verbose) plog("Fuzzing big VIN with printable chars\n");
          resp[0] = frame.data[1] + 0x40;
          resp[1] = frame.data[2];
          resp[2] = 1;
          buf = gen_data(DATA_ALPHANUM, pktsize);
          chksum = calc_vin_checksum(buf, pktsize);
          buf[8] = chksum;
          if(verbose) plog("Using big VIN (%d chars): %s\n",pktsize, buf);
          memcpy(&resp[3], buf, pktsize);
          free(buf);
          isotp_send(can, resp, 4 + pktsize);
          break;
        case 4:
          if(verbose) plog("Fuzzing VIN with binary data\n");
          resp[0] = frame.data[1] + 0x40;
          resp[1] = frame.data[2];
          resp[2] = 1;
          buf = gen_data(DATA_BINARY, 17);
          chksum = calc_vin_checksum(buf, 17);
          buf[8] = chksum;
          if(verbose) print_bin(buf, 17);
          memcpy(&resp[3], buf, 17);
          free(buf);
          isotp_send(can, resp, 4 + 17);
          break;
        case 5:
        default:
          pktsize = rand() % 252;
          if(verbose) plog("Fuzzing VIN with binary data with size %d\n", pktsize);
          resp[0] = frame.data[1] + 0x40;
          resp[1] = frame.data[2];
          resp[2] = 1;
          buf = gen_data(DATA_BINARY, pktsize);
          if(verbose) print_bin(buf, pktsize);
          memcpy(&resp[3], buf, pktsize);
          free(buf);
          isotp_send(can, resp, 4 + pktsize);
          break;
      }
      break;
    default:
      break;
  }
}