I am trying to write a Python program that calculates a WPA handshake, but I have problems with hashes. For comparison, I installed cowpatty (to see where I start to make mistakes).
My PMK generation works fine, but PTK calculation always seems wrong. I'm not sure if I need to format my input (macadresses and noces) or just pass them into a function as a string.
I will give you my router information, which is not a problem, as I just set it up for testing.
My program is as follows:
import hmac,hashlib,binascii passPhrase = "10zZz10ZZzZ" ssid = "Netgear 2/158" A = "Pairwise key expansion" APmac = "001e2ae0bdd0" Clientmac = "cc08e0620bc8" ANonce = "61c9a3f5cdcdf5fae5fd760836b8008c863aa2317022c7a202434554fb38452b" SNonce = "60eff10088077f8b03a0e2fc2fc37e1fe1f30f9f7cfbcfb2826f26f3379c4318" B = min(APmac,Clientmac)+max(APmac,Clientmac)+min(ANonce,SNonce)+max(ANonce,SNonce) data="0103005ffe010900200000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" def customPRF512(key,A,B): blen = 64 i = 0 R = '' while i<=((blen*8+159)/160): hmacsha1 = hmac.new(key,A+chr(0x00)+B+chr(i),sha) i+=1 R = R+hmacsha1.digest() return R[:blen] pmk = pbkdf2(passPhrase, ssid, 4096, 32)
required outputs (confirmed party):
PMK is 01b8 09f9 ab2f b5dc 4798 4f52 fb2d 112e 13d8 4ccb 6b86 d4a7 193e c529 9f85 1c48 Calculated PTK for "10zZz10ZZzZ" is bf49 a95f 0494 f444 2716 2f38 696e f8b6 428b cf8b a3c6 f0d7 245a d314 a14c 0d18 efd6 38aa e653 c908 a7ab c648 0a7f 4068 2479 c970 8aaa abc3 eb7e da28 9d06 d535 Calculated MIC with "10zZz10ZZzZ" is 4528 2522 bc67 07d6 a70a 0317 a3ed 48f0
Perhaps some of you could tell me why my program simply does not work. Are hmac functions performed correctly? Is my input wrong? Should I be enthusiastic anywhere? Thanks for your time in advance, I would appreciate any help!