void encrypt_stdio(char* key) {
    
    
    rc4_state_t *state = (rc4_state_t*) malloc(sizeof(rc4_state_t));
    rc4_initialize(state, key, strlen(key));
    
    
    char to_encrypt;
    char encrypted;
    
    clearerr(stdin);
    while( !feof(stdin) ) {
        to_encrypt = getchar();
        rc4_cipher(state, &to_encrypt, &encrypted, sizeof(char));
        printf("%c", encrypted);
    }
}
Exemple #2
0
static int dev_xmit(struct netdev* dev,struct socket *sk)
{
	fd_set in;
	int ret,maxfd;
	struct mbuf mb;
	struct rc4_context ctx;
	
	rc4_prepare_shared_key(&ctx,shr_key);
	memset(&mb,0,sizeof(struct mbuf));
	
	mb.mb_data = (u_int8_t*)malloc(dev->nd_mtu * sizeof(u_int8_t));
	if(!mb.mb_data) {
		perror("dev_xmit:malloc");
		return -1;
	}
	memset(mb.mb_data,0,sizeof(dev->nd_mtu*sizeof(u_int8_t)));
	printf("[+] Connected ... OK\n");
	
	FD_ZERO(&in);
	
	maxfd = (sk->sk_fd > dev->nd_fd)? sk->sk_fd:dev->nd_fd;
	for(;;) {
		FD_SET(dev->nd_fd,&in);
		FD_SET(sk->sk_fd,&in);

		ret = select(maxfd+1,&in,NULL,NULL,NULL);
		if(ret == -1 || errno == EINTR)
			continue;
		
		/* we got something from tun/tap inetface */
		if(FD_ISSET(dev->nd_fd,&in)) {
			mb.mb_len = read(dev->nd_fd,mb.mb_data,dev->nd_mtu);
			if(mb.mb_len == 0) 
				break;
			if(mb.mb_len < 0) {
				if(verbose) 
					perrx("[-] TAP read error");
				goto bad;
			}
			
			rc4_cipher(mb.mb_data,mb.mb_len,&ctx);
			if (verbose)
				printf("[+] Received %d bytes from %s \n",
				       (unsigned int)mb.mb_len,dev->nd_name);
			mb.mb_len = write(sk->sk_fd,mb.mb_data,mb.mb_len);
			if(mb.mb_len <= 0) {
				if(verbose)
					perrx("[-] TAP write error");
				goto bad;
			}	
		}
		
		if(FD_ISSET(sk->sk_fd,&in)) {
			mb.mb_len = read(sk->sk_fd,mb.mb_data,dev->nd_mtu);
			if(mb.mb_len == 0) 
				break;
			if(mb.mb_len < 0) {
				if(verbose) 
					perrx("[-] Socket read error\n");
				goto bad;

			}
				
			if (verbose)
				printf("[+] Received %d bytes from socket\n",(unsigned int)mb.mb_len);
			rc4_cipher(mb.mb_data,mb.mb_len,&ctx);
			mb.mb_len = write(dev->nd_fd,mb.mb_data,mb.mb_len);
			if(mb.mb_len <= 0) {
				if(verbose)
					perrx("[-] Socket write error");
				goto bad;
			}	

		}
		
	}
	return 0;

bad:
	close(sk->sk_fd);
	close(dev->nd_fd);
	if(mb.mb_data)
		free(mb.mb_data);
	return -1;
	
}