void rfbDesText(unsigned char *inblock, unsigned char *outblock, unsigned long length, unsigned char *key) { for (unsigned int i = 0; i < 8; i++) { inblock[i] ^= key[i]; } rfbDes(inblock, outblock); for (unsigned int i = 8; i < length; i += 8) { for (int j = 0; j < 8; j++) { inblock[i + j] ^= outblock[i + j - 8]; } rfbDes(inblock + i, outblock + i); } }
void rfbEncryptBytes(unsigned char *bytes, char *passwd) { unsigned char key[8]; unsigned int i; /* key is simply password padded with nulls */ for (i = 0; i < 8; i++) { if (i < strlen(passwd)) { key[i] = passwd[i]; } else { key[i] = 0; } } rfbDesKey(key, EN0); for (i = 0; i < CHALLENGESIZE; i += 8) { rfbDes(bytes+i, bytes+i); } }
int DEFAULT_CC env_check_password_file(char* filename, char* password) { char encryptedPasswd[16]; int fd; g_memset(encryptedPasswd, 0, 16); g_strncpy(encryptedPasswd, password, 8); rfbDesKey(g_fixedkey, 0); rfbDes((unsigned char*)encryptedPasswd, (unsigned char*)encryptedPasswd); fd = g_file_open(filename); if (fd == -1) { log_message(&(g_cfg->log), LOG_LEVEL_WARNING, "can't read vnc password file - %s", filename); return 1; } g_file_write(fd, encryptedPasswd, 8); g_file_close(fd); return 0; }