Skip to content

Drop rust-crypto support and implement aes+cbc#1

Merged
devttys0 merged 1 commit intodevttys0:mainfrom
andrewgigena:main
Jan 8, 2025
Merged

Drop rust-crypto support and implement aes+cbc#1
devttys0 merged 1 commit intodevttys0:mainfrom
andrewgigena:main

Conversation

@andrewgigena
Copy link
Contributor

@andrewgigena andrewgigena commented Dec 25, 2024

This PR removes rust-crypto and migrates to aes and cbc. The change is motivated by the related work in binwalk, which is needed to add CI support there, due to rust-crypto seems to be outdated and unmaintained state.. I tested this change with firmware binaries from D-Link. However, I’d greatly appreciate feedback or further testing.

The new code is 3x faster.

$ cd ~/Downloads/D-Link/firmware/

$ time find ./ \( -name "*.bin" -o -name "*.BIN" \) -exec delink-old {} {}.old.dec \; > /dev/null 2>&1
find ./ \( -name "*.bin" -o -name "*.BIN" \) -exec delink-old {} {}.old.dec \  54.37s user 17.67s system 99% cpu 1:12.45 total

$ time find ./ \( -name "*.bin" -o -name "*.BIN" \) -exec delink-new {} {}.new.dec \; > /dev/null 2>&1
find ./ \( -name "*.bin" -o -name "*.BIN" \) -exec delink-new {} {}.new.dec \  10.71s user 12.20s system 98% cpu 23.147 total

I also did a sha256 comparison between the output files before and after this commit to check if it matches fine.

 shadows@kepler  ~/Downloads/D-Link/firmware   master  bat ../compare.sh
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
printf "%-10s %-50s %-64s %-16s\n" "STATUS" "BASE FILE" "SHA-256 HASH" "MAGIC BYTES"
printf "%-10s %-50s %-64s %-16s\n" "----------" "--------------------------------------------------" "------------------------
----------------------------------------" "----------------"

find . -name "*.old.dec" -print0 | while IFS= read -r -d '' old_file; do
  base="${old_file%.old.dec}"
  base_hash=$(sha256sum "$base" | awk '{print $1}')
  old_hash=$(sha256sum "$old_file" | awk '{print $1}')
  
  # Extract the first 16 bytes as a string
  magic_bytes=$(head -c 16 "$base" 2>/dev/null | tr -cd '[:print:]' || echo "N/A")
  
  if [ ! -f "$base.new.dec" ]; then
    printf "%-10s %-50s %-64s %-16s\n" "MISSING" "$base" "$base_hash" "$magic_bytes"
    continue
  fi
  
  new_hash=$(sha256sum "$base.new.dec" | awk '{print $1}')
  if [ "$new_hash" = "$old_hash" ]; then
    printf "%-10s %-50s %-64s %-16s\n" "IDENTICAL" "$base" "$base_hash" "$magic_bytes"
  else
    printf "%-10s %-50s %-64s %-16s\n" "DIFFERENT" "$base" "$base_hash" "$magic_bytes"
  fi
done | sort
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

 shadows@kepler  ~/Downloads/D-Link/firmware   master  ../compare.sh
STATUS     BASE FILE                                          SHA-256 HASH                                                     MAGIC BYTES     
---------- -------------------------------------------------- ---------------------------------------------------------------- ----------------
IDENTICAL  ./DAP1620B1_FW200B28.bin                           4e95fb282e553a65bfb4cdabb519814189adf133fb0c6769c28a0d5bafd047f8 d@DAP-1620      
IDENTICAL  ./DAP1620B1_FW201B09.bin                           996aabe594b4e2a08bf7861cc0bc689b9786813f68792465890cdd308af5aa97 d@DAP-1620      
IDENTICAL  ./DAP1620B1_FW202B03.bin                           30eefffa4ff282088757b7cd97f244e27fc2d79c1adc562daa0bb276582f8632 d@DAP-1620      
IDENTICAL  ./DAP1620B1_FW210B10.bin                           42fe26e1141e4cdb28f9565eb2318480e2423ad36110df2e8c1148495aadfea6 d@DAP-1620      
IDENTICAL  ./DAP1620B1_FW211B04.bin                           c3aa2c8f52654327c81d0da62be229c68713d69ae410b8003a7de6ff8e64c23a d@DAP-1620      
IDENTICAL  ./DAP1620B1_FW212B03.bin                           3229d8774188287ce25226872991c5a96be44adb1de477856b5c95ae9add9011 d@DAP-1620      
IDENTICAL  ./DAP-1665 B1_v2.06b01_20190117.bin                d7dc5d500b879df063950fccd43ca561fcf25d814a7e74618ab10360a685a650 5foh4O!N        
IDENTICAL  ./DAP1665_FW203WWb03.bin                           49a0c3bed91752fd7006145db5f2626d18a39a042b65b35a5becd9b64185b0cc 5foh4O!N        
IDENTICAL  ./DAP-1755A2_FW1.02B01.bin                         eb9e095d66121616c3c9c090328081d146269ba0521cf19af59fbf896b13d121 d@DAP-1755      
IDENTICAL  ./DAP-1755A2_FW1.03B04.bin                         d511b15e9f4317789e535c5563acfc7762d8f85bc120a8a551ac04a5dd632311 d@DAP-1755      
IDENTICAL  ./DAP-1755A2_FW1.04B04.bin                         c0707a3bf06e557c66dd91d63965045d00b633e0694ead78587cbcc81a0cbdff d@DAP-1755      
IDENTICAL  ./DAP-1820A1_FW101B02.BIN                          e3f812c544f3e47171510520048f75bf5159284280ea306d2d9975033eba56f7 SHRSgis         
IDENTICAL  ./DAP-1820A1_FW102B04.BIN                          91e092137632aea98de3a10e09e2e8d028fafe515a4faccf16e3bd66609c6758 SHRSW`gis       
IDENTICAL  ./DAP-1820A1_FW110B03.BIN                          b77494080b8593b923893701d9bee23fe822d5cdbf20bb1936f6dca2890fde11 SHRSfggis       
IDENTICAL  ./DAP-1820A1_FW111B01.BIN                          31a02c40fbc3bb963c59cd13aaabd041271d603ace1775009aebac5e8cfb99ab SHRSV`gis       
IDENTICAL  ./DAP-1950A2_FW1.02B01.bin                         6934eeaa0b26004c89613a9ff6d28295a82929cebd1debbe7aa63af968fd792e d@DAP-1950      
IDENTICAL  ./DAP-1950A2_FW1.03B07.bin                         c578a55fe7a2878cc16274a01f10e5d9aa8565e80f56d93a66680e66feae210a d@DAP-1950      
IDENTICAL  ./DAP-1950A2_FW1.04B03.bin                         57750554936d81de8b10a95c929a12c666e7d22c283bfbe92873139ceb5cdaaa d@DAP-1950      
IDENTICAL  ./DAP-1955A2_FW1.02B01.bin                         cde05b6a796f6d06bfc1600459ec95cd1e8b769ddd9b381f7c21ee269f5cedc7 d@DAP-1955      
IDENTICAL  ./DAP-1955A2_FW1.03B04.bin                         0735904dd572f1e86b81a12c516cd8a1090afe8213b6cb3b18b3be165e9addd7 d@DAP-1955      
IDENTICAL  ./DAP-1955A2_FW1.04B04.bin                         1a470fcf5e07076ede9841169103b6bd58daad0f14e9f9e11e93bfbf63fec2de d@DAP-1955      
IDENTICAL  ./DAP-2610_firmware_v2.06r089.bin                  eb9905124f8ffebd7f02dd42d4865a282124cea8154edae9650e4a6dad864fd0 wapac30_dkbs_dap
IDENTICAL  ./DAP2680-firmware-v100-rc011.bin                  83ed54d88b3ea1591d86598646f95d1a6959870c798e40d8782b6a09454fefb3 wapac36_dkbs_dap
IDENTICAL  ./DAP-2680_firmware_v2.00r044.bin                  2b4354299e7bea17a9ca144f00caef746ebbc536a93af96f0d33c5c1071176f2 wapac36_dkbs_dap
IDENTICAL  ./DAP2682-firmware-v100-r022.bin                   7adc37dc2f2bbd3efc5766130045195aeb6d79c7dc92a822c8527f6ddd535cac wapac40_dkbs_dap
IDENTICAL  ./DAP-LX1880Ax_FW103B07.bin                        f4fe1788cc8a3936d51bf4fe090f38f95b3041984281b0d1ad4baafac43a7719 encrpted_img    
IDENTICAL  ./DAP-X1870A1_FW101B01.bin                         e52aa56a5820fbcf80e7a4f0fc0079f172e4686165a5ac3f8115622f13dde611 encrpted_img    
IDENTICAL  ./DAP-X1870Ax_FW103B07.bin                         2b6bd27904e5b5da24ce2929244d5f7f872c5deadf1ff0d0836262bd503b6589 encrpted_img    
IDENTICAL  ./DIR1260_A1_FW101B01.bin                          16a2eb5273854b20e725cf1ff8c33e618b738ff7fc27fa33e089117acd5b7403 SHRSgis         
IDENTICAL  ./DIR1260_A1_FW102B06.bin                          fc6860239ca40283f5b5ac412e4deb68eb836d068bb15c0184e872cda6612b70 SHRSgis         
IDENTICAL  ./DIR821V2__FWv1.01B01.bin                         e01b6a8ff3e35b545ce28d122e0160fd3e65375fe8c0c0413c855b00cad84b3c SHRSgis         
IDENTICAL  ./DIR_853_A1_FW110B04.BIN                          7299edbf392425cead85e993d7b3338d9c9d07a03762536fe74bea51d0db423c SHRS\f\pgis     
IDENTICAL  ./DIR-LX1870A1_FW100B18.bin                        238f1a667ef026dd949925923743ed6944d4a84708891f15a97130dbc880d4b0 encrpted_img@   
IDENTICAL  ./DIR-LX1870A1_FW101B06.bin                        4d7456da1534c2732bc44f25fdf715a8b73c600a7a4bb9460c969434c673db97 encrpted_imgB   
IDENTICAL  ./DIRLX1870Ax_FW102B12.bin                         b54c4949c146c50d7a654970e16f050e0862eddaea759688823714da295b1d4c encrpted_img    
IDENTICAL  ./DIRX1560A1_FW101B03.bin                          8b5241ef339fe9e103c2d09ee21336d05e3b0809c3080a077ea8d74924a9eeb1 encrpted_img    
IDENTICAL  ./DIRX1560A1_FW102B01.bin                          216575c36ab62def5e74599053fd03e1497bad06e6b53b7a20ad49d22edf5b69 encrpted_img    
IDENTICAL  ./DIRX1560A1_FW103B02.bin                          5b6f47cd4972b6555d79333f92b2f6c72895f122df07b7b47258530124c2776b encrpted_img    
IDENTICAL  ./DIRx1560_FW104B04.bin                            c1cd4d9a6d1d2dcf26c9cf41bec5f6d606dc08d3543ea88bd06c36dfe76d306e encrpted_img    
IDENTICAL  ./DIR-X1870A1_FW100B05.bin                         c5e520225e8a05519adb1f60efe323435e0493baef592d061d8912f6e5dfbb51 encrpted_imgZ   
IDENTICAL  ./DIR-X1870A1_FW1.01B03.bin                        a293e359ffb8ceb8b5ee492c5e467d4aa361be1f2847fb6e66ac2bc9a884086e encrpted_img    
IDENTICAL  ./DRA1360A1_FW102B03.bin                           c00f07bc4b6734f135a51c5efbe0e9020864445d337417f99998cee1960039b4 d@DRA-1360      
IDENTICAL  ./DRA1360A1_FW110B10.bin                           511093be67e5daeaf14a869f8d7e772637a27372c994ac85044291e72d0f303f d@DRA-1360      
IDENTICAL  ./DRA1360A1_FW112B03.bin                           dc5fb3c7f477bd4e965ed7815b3e4be0f5a3ca1cea431e5e8f02202923e5e05a d@DRA-1360      
IDENTICAL  ./DRA-2060A1_FW100B17.BIN                          e8e009ac7cd3c9e0438df6c5fb65556adab07b6d63c67fbb11754b828fef3f86 SHRSgis         
IDENTICAL  ./DRA2060A1_FW101B02.bin                           474a92555b4426c0d1223cb08e2a1c43c38ea67337b8ad324d5d644bddeb5065 SHRSopgis       
IDENTICAL  ./DRA-2060A1_FW110B02.BIN                          0f33b398c50f29b25e908d6b9fb8119eeb825ad112c96fd6f4e089b1456c066e SHRSK"K0gis     
IDENTICAL  ./DRA-2060A1_FW111B01.BIN                          fcd2d116d70a14f98492db6f81256bd9b95d56405321a4a865517d6a18347bc2 SHRSfpgis       
IDENTICAL  ./E15A1_FW102B10.bin                               9357010173dbdc8da5d76b8beb378ecd5f93123a764d65620c4e92c2fb76b66b MH01+           
IDENTICAL  ./E15A1_FW103B04.bin                               f4e6defd8a6a59ba500f689ee451e6176959dea526b76cfd508aafcc71ad926f MH01+3          
IDENTICAL  ./E15A1_FW105B05.bin                               797bf98c10fc1f387a3f998e9860bfe483a5dd3e8d36446a02c68bd098e762ea MH01+           
IDENTICAL  ./E15A1_FW106B10.bin                               2d2823ac4a506e58b1764dd3d45c9a853fe2034602f0fa5f40d65ea60469b4c9 MH01n+          
IDENTICAL  ./E15A1_FW107B01.bin                               4194d576653d14521884ec7c1cce1de33f4c174dbad9d7e6dec8a860a8911219 MH01+           
IDENTICAL  ./E15A1_FW108B05.bin                               9a0121d216fb147f012338f35abfe39e14cad199f594c2139cb1c828f8b46a85 MH01>+M         
IDENTICAL  ./E15A1_FW109B03.bin                               e24fa3a11a2cd903579f07a5f7a33bdd5879368d3722b5ffb79d92fb250a9df7 MH01>+M         
IDENTICAL  ./E15A1_FW110B01.bin                               0eed3f76ee636e27ada81ca7c471e1062979926f8074e1226881d28b23657fcd MH01>+M         
IDENTICAL  ./E15A1_FW120B01.bin                               c4f6a7ee4f1ec6bce2b2942bbd95cecfa914dd39f47ebabbc4d809469a36201d MH01N+3]        
IDENTICAL  ./E30A1_FW110B02.bin                               ead84b28bd953abfb2769e07cee75c8fa17f0fdc144afeb0f0f2d8032f1323fb DLK6E6110002n   
IDENTICAL  ./M18A1_FW102B01.bin                               762fba1e303bbe75cb75747199d99eed950ab17001f070cb790272557e201dd8 MH01=+U         
IDENTICAL  ./M18A1_FW110B01.bin                               2e280bfbe7195ccb5ce685df7749b3fd9095b1fd2c5b468e2e2b3a97e35ec77d MH01=+          
IDENTICAL  ./M30A1_FW102B03.bin                               43708d23eb8fa353dff988bd2897acf83c819406140997e998c48b5ee9e2e877 MH01P+~         
IDENTICAL  ./M30A1_FW110B02.bin                               71570b472116eb939d1d6026fceecf49b8c240025174ed2698ea050378b69a39 MH01!Q+a        
IDENTICAL  ./M30A1_FW111B02.bin                               d660a432116f025be57bf11c66ac3b736d8c5b84cb24f544926c7029ccb2bc70 MH01JQ+         
IDENTICAL  ./M32A1_FW100B34.bin                               3db720c9f2187368d776cf82100ed8e259677d8bd9e8a91fd24a95123a497b5c MH01:+{         
IDENTICAL  ./M32A1_FW102B09.bin                               e7f5a3ffbcb7e00ec388aee1c8b03cc396c9d49828c2cb56617ae1bb77717c8e MH01.+o         
IDENTICAL  ./M32A1_FW103B01.bin                               d1a75f3797bd17681d9f8e056ce506a164c3761040c762473b2bcf27930e2d6e MH01.+o         
IDENTICAL  ./M32A1_FW110B02.bin                               539e9a6d68bb261a89a46a83fac203e538ec83aa7926a761cdfc17ddeaaa2b40 MH01l+Y         
IDENTICAL  ./M32A1_FW111B02.bin                               a3927fd82a8f985ad753a32b19ee944b28bd6e99761f28e71fcf7410daabe242 MH01l+Y         
IDENTICAL  ./M60A1_FW100B21.bin                               13146aa652a439de404a9d43d0c935b72c1c427ec31c55ad62c2712f9f1b8682 DLK6E8202001}H  
IDENTICAL  ./M60A1_FW101B03.bin                               51c2118b7933d7448906b74325ce9266ed10beb49f9e58a072240089726a7144 DLK6E8202001R   
IDENTICAL  ./M60A1_FW110B02.bin                               5967be59b35c6d2afdcc46dd1d6b546d07f67e5c0494e097bccd84444e7925af MH018+&         
IDENTICAL  ./M60A1_FW111B03.bin                               305f1b36015d7faa131e35b072796114bf8b4e084098f025edd956ad5527124c DLK6E8202001    
IDENTICAL  ./R12A1_FW110B01.bin                               8799d2e116ed96ac3dace0f274a67958b5a47a4b5b0ee1c6a13b79ca0cadad5a MH01+o          
IDENTICAL  ./R12A1_FW111B01.bin                               50ca0db730c3b14f2bedba6845231a236ab16d42788fd964d5c0e764464fde29 MH01+K          
IDENTICAL  ./R15A1_FW101B08.bin                               85e165f4b2c70d8abca93128316cf41f017cbf71501cf6cd904ae0c70338e225 MH01+@.         
IDENTICAL  ./R15A1_FW102B09.bin                               e3d315b4633cf3b852e250b7bf795386970617a57ce5c5f7d5f9657e920a7acf MH01+p          
IDENTICAL  ./R15A1_FW103B04.bin                               3548ff80a6c3081b00e55767ec24692671876c838ab3a1b586c656716b24e91c MH01!+!         
IDENTICAL  ./R15A1_FW105B05.bin                               8d14411b5a992e8ddf61cee5b6fd842b8329ea76dc869f7165fdc53f4a5d4baf MH01+           
IDENTICAL  ./R15A1_FW106B10.bin                               56075cc8b91c5d4c2b2fd08d894e71bab2e5ca05be4aba6777edf84285a2673c MH01+           
IDENTICAL  ./R15A1_FW107B01.bin                               690c7f53a40b0c6563a445447f961c6b39965971be2e01dc42394cdb2049689f MH01n+          
IDENTICAL  ./R15A1_FW108B05.bin                               ab4c2d55b8a0536799268dfa7b3d29532e3e17828866eeae91095865b3066592 MH01+s          
IDENTICAL  ./R15A1_FW109B03.bin                               cc2d040a5f53d3146cfd0be7fe9a1ec32358d8dd95a2de9da1596f39622e5c9a MH01+s          
IDENTICAL  ./R15A1_FW110B01.bin                               8ffe6f62d9ca7336cab42a9da0e0b5145705f2ec99b6bccdf36ccf3c91664c20 MH01+           
IDENTICAL  ./R15A1_FW120B01.bin                               3550305681900449f3efe33c84f4c88684f5855722e5596f0b7546f1ab672976 MH01+           
IDENTICAL  ./R18A1_FW102B01.bin                               a09910817769bbf25c78b432c3f86f330f6d3ebf5ffc2fef90d672fffba3a7e9 MH01=+          
IDENTICAL  ./R18A1_FW103B02.bin                               7641776bd6b8434bc2df2cd3232413a7990267e6f4b6a0aa6fa3c9b0be082687 MH01=+V         
IDENTICAL  ./R18A1_FW110B01.bin                               03d79f81283fee990f0a31ca48d2a02b5bb8374234acf99e4ee8e07317a79431 MH01Q5>+l     

Tested firmwares/devices:

  • DAP-1610 B1
  • DAP-1620 B1
  • DAP-1665
  • DAP-1755 (not in README.md)
  • DAP-1820
  • DAP-1950 (not in README.md)
  • DAP-1955
  • DAP-2610
  • DAP-2680
  • DAP-2682
  • DAP-LX1880
  • DAP-X1870 (not in README.md)
  • DIR-1750
  • DIR-2055
  • DIR-2150
  • DIR-3040
  • DIR-3060
  • DIR-822
  • DIR-842
  • DIR-850L A1
  • DIR-850L B1
  • DIR-878
  • DIR-LX1870
  • DIR-X1560
  • DIR-X1870
  • DIR-X4860
  • DIR-X5460
  • DRA-1360 A1
  • DRA-2060 A1
  • E15
  • E30
  • M18
  • M30
  • M32
  • M60
  • R12
  • R15
  • R18

Looking forward to your comments!

@andrewgigena
Copy link
Contributor Author

Without these changes the result of the release.yml ends up link this:
https://github.com/andrewgigena/binwalk/actions/runs/12496255076

@andrewgigena andrewgigena force-pushed the main branch 2 times, most recently from 4db6c23 to c99c877 Compare December 27, 2024 09:46
@andrewgigena andrewgigena changed the title Drop rust-crypto support Drop rust-crypto support and implement aes+cbc Dec 27, 2024
@devttys0 devttys0 merged commit 8e4d36b into devttys0:main Jan 8, 2025
@devttys0
Copy link
Owner

devttys0 commented Jan 8, 2025

Thank you! This fixes an issue I ran into with rust-crypto while fixing another bug. :) So far this works on all firmware I've tested it on.

@andrewgigena
Copy link
Contributor Author

Glad to help you!

Dr-Emann pushed a commit to Dr-Emann/delink that referenced this pull request Mar 1, 2026
* Add CI quality checks
* Fix clippy warning
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants