mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-04 06:54:27 -05:00 
			
		
		
		
	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:
		
							parent
							
								
									9c8605dee2
								
							
						
					
					
						commit
						12c971bc26
					
				@ -79,6 +79,37 @@ mtd_get_mac_ascii() {
 | 
			
		||||
	[ -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() {
 | 
			
		||||
	local mtdname=$1
 | 
			
		||||
	local offset=$(($2))
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user