base-files: add mtd_get_mac_encrypted_arcadyan function
Some Arcadyan devices (e.g. MTS WG430223) keep their config in encrypted mtd. This adds mtd_get_mac_encrypted_arcadyan() function to get the MAC address from the encrypted partition. Function uses uencrypt utility for decryption (and openssl if the uencrypt wasn't found). Signed-off-by: Mikhail Zhilkin <csharper2005@gmail.com>
This commit is contained in:
		 Mikhail Zhilkin
					Mikhail Zhilkin
				
			
				
					committed by
					
						 Christian Marangi
						Christian Marangi
					
				
			
			
				
	
			
			
			 Christian Marangi
						Christian Marangi
					
				
			
						parent
						
							9c8605dee2
						
					
				
				
					commit
					12c971bc26
				
			| @@ -79,6 +79,37 @@ mtd_get_mac_ascii() { | |||||||
| 	[ -n "$mac_dirty" ] && macaddr_canonicalize "$mac_dirty" | 	[ -n "$mac_dirty" ] && macaddr_canonicalize "$mac_dirty" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | mtd_get_mac_encrypted_arcadyan() { | ||||||
|  | 	local iv="00000000000000000000000000000000" | ||||||
|  | 	local key="2A4B303D7644395C3B2B7053553C5200" | ||||||
|  | 	local mac_dirty | ||||||
|  | 	local mtdname="$1" | ||||||
|  | 	local part | ||||||
|  | 	local size | ||||||
|  |  | ||||||
|  | 	part=$(find_mtd_part "$mtdname") | ||||||
|  | 	if [ -z "$part" ]; then | ||||||
|  | 		echo "mtd_get_mac_encrypted_arcadyan: partition $mtdname not found!" >&2 | ||||||
|  | 		return | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	# Config decryption and getting mac. Trying uencrypt and openssl utils. | ||||||
|  | 	size=$((0x$(dd if=$part skip=9 bs=1 count=4 2>/dev/null | hexdump -v -e '1/4 "%08x"'))) | ||||||
|  | 	if [[ -f  "/usr/bin/uencrypt" ]]; then | ||||||
|  | 		mac_dirty=$(dd if=$part bs=1 count=$size skip=$((0x100)) 2>/dev/null | \ | ||||||
|  | 			uencrypt -d -n -k $key -i $iv | grep mac | cut -c 5-) | ||||||
|  | 	elif [[ -f  "/usr/bin/openssl" ]]; then | ||||||
|  | 		mac_dirty=$(dd if=$part bs=1 count=$size skip=$((0x100)) 2>/dev/null | \ | ||||||
|  | 			openssl aes-128-cbc -d -nopad -K $key -iv $iv | grep mac | cut -c 5-) | ||||||
|  | 	else | ||||||
|  | 		echo "mtd_get_mac_encrypted_arcadyan: Neither uencrypt nor openssl was found!" >&2 | ||||||
|  | 		return | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	# "canonicalize" mac | ||||||
|  | 	[ -n "$mac_dirty" ] && macaddr_canonicalize "$mac_dirty" | ||||||
|  | } | ||||||
|  |  | ||||||
| mtd_get_mac_text() { | mtd_get_mac_text() { | ||||||
| 	local mtdname=$1 | 	local mtdname=$1 | ||||||
| 	local offset=$(($2)) | 	local offset=$(($2)) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user