Add encryption support.
This commit is contained in:
		
							parent
							
								
									a5b9e4612f
								
							
						
					
					
						commit
						35d0b4753f
					
				| @ -29,5 +29,9 @@ Available commands: | |||||||
| 
 | 
 | ||||||
| * q: Exit. | * q: Exit. | ||||||
| 
 | 
 | ||||||
|  | * e: Toggle encryption | ||||||
|  | 
 | ||||||
|  | * E: Set encryption password. (Can also be set via "DOBROHO_VECHORA_ENCRYPTION_PASSWORD" environment variable.) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| Client prints "?" on unknown commands. | Client prints "?" on unknown commands. | ||||||
|  | |||||||
| @ -62,10 +62,34 @@ case "${mode}" in | |||||||
| 		exit | 		exit | ||||||
| esac | esac | ||||||
| 
 | 
 | ||||||
|  | encrypt() { | ||||||
|  | 	if [ "${enc}" -eq 1 ] | [ -z "${DOBROHO_VECHORA_ENCRYPTION_PASSWORD}" ]; then | ||||||
|  | 		cat | ||||||
|  | 		return 0 | ||||||
|  | 	fi | ||||||
|  | 	echo "ENCRYPTED"'!'"<$(openssl enc -pbkdf2 -a -aes256 -pass env:DOBROHO_VECHORA_ENCRYPTION_PASSWORD)>" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | decrypt() { | ||||||
|  | 	if [ "${enc}" -eq 1 ] | [ -z "${DOBROHO_VECHORA_ENCRYPTION_PASSWORD}" ]; then | ||||||
|  | 		cat | ||||||
|  | 		return 0 | ||||||
|  | 	fi | ||||||
|  | 	while IFS="" read -r i || [ -n "${i}" ] | ||||||
|  | 	do | ||||||
|  | 		echo "${i}" | ||||||
|  | 		cipher="$(echo "${i}" | grep -Po 'ENCRYPTED!<\K([a-zA-Z0-9\=\+\/]*)(?=\>)')" || : | ||||||
|  | 		if [ -n "${cipher}" ]; then | ||||||
|  | 			echo -n "Decrypted: " | ||||||
|  | 			echo "${cipher}" | openssl enc -pbkdf2 -d -a -aes256 -pass env:DOBROHO_VECHORA_ENCRYPTION_PASSWORD || : | ||||||
|  | 		fi | ||||||
|  | 	done | ||||||
|  | } | ||||||
|  | 
 | ||||||
| print_messages() { | print_messages() { | ||||||
| 	open_socket | 	open_socket | ||||||
| 	echo -n 2 >&3 | 	echo -n 2 >&3 | ||||||
| 	head -c "${1}" <&3 | sed -e 's/\x1B/ESC/g'  | 	head -c "${1}" <&3 | decrypt | sed -e 's/\x1B/ESC/g'  | ||||||
| 	close_socket | 	close_socket | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -89,18 +113,19 @@ wait_for_messages() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| length=0 | length=0 | ||||||
|  | enc=0 | ||||||
| while :; do | while :; do | ||||||
| 	read cmd | 	read cmd | ||||||
| 	case "${cmd}" in | 	case "${cmd}" in | ||||||
| 		I) | 		I) | ||||||
| 			tmp="$(mktemp)" | 			tmp="$(mktemp)" | ||||||
| 			"${VISUAL:-"${EDITOR:-"$(which vi)"}"}" "${tmp}" | 			"${VISUAL:-"${EDITOR:-"$(which vi)"}"}" "${tmp}" | ||||||
| 			[ -s "${tmp}" ] && send_message 0"${nick}$(cat "${tmp}")" | 			[ -s "${tmp}" ] && send_message 0"${nick}$(cat "${tmp}" | encrypt)" | ||||||
| 			rm "${tmp}" | 			rm "${tmp}" | ||||||
| 			;; | 			;; | ||||||
| 		i) | 		i) | ||||||
| 			read a | 			read a | ||||||
| 			send_message 0"${nick}${a}" | 			send_message 0"${nick}$(echo "${a}" | encrypt)" | ||||||
| 			;; | 			;; | ||||||
| 		L) | 		L) | ||||||
| 			length="$(get_message 1)" | 			length="$(get_message 1)" | ||||||
| @ -125,6 +150,19 @@ while :; do | |||||||
| 		q) | 		q) | ||||||
| 			exit | 			exit | ||||||
| 			;; | 			;; | ||||||
|  | 		E) | ||||||
|  | 			read -s DOBROHO_VECHORA_ENCRYPTION_PASSWORD | ||||||
|  | 			export DOBROHO_VECHORA_ENCRYPTION_PASSWORD | ||||||
|  | 			;; | ||||||
|  | 		e) | ||||||
|  | 			if [ "${enc}" -eq 0 ]; then | ||||||
|  | 				enc=1 | ||||||
|  | 				echo 1 | ||||||
|  | 			else | ||||||
|  | 				enc=0 | ||||||
|  | 				echo 0 | ||||||
|  | 			fi | ||||||
|  | 			;; | ||||||
| 		*) | 		*) | ||||||
| 			echo '?' | 			echo '?' | ||||||
| 			;; | 			;; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user