Provisionally implement -n as -a.
[cnetworkmanager.git] / mkconmap.py
blob34ff1346a986853bcbfa8da71c146e8f70428781
1 import hashlib
2 import dbus
3 import uuid
4 import math
5 from binascii import hexlify
7 import pbkdf2
9 def mkconmap_wifi(ssid):
10 return {
11 'connection': {
12 'id': '_cnm_handcrafted_',
13 'uuid': str(uuid.uuid1()), # new in oS 11.1
14 'type': '802-11-wireless',
16 '802-11-wireless': {
17 'ssid': dbus.ByteArray(ssid),
18 'mode': 'infrastructure',
22 def _elongate(s, tlen):
23 "repeat string s to target length tlen"
24 if s == "":
25 return ""
26 copies_needed = int(math.ceil(tlen / float(len(s))))
27 return (s * copies_needed)[:tlen]
29 # http://www.mail-archive.com/networkmanager-list@gnome.org/msg07935.html
30 def _wep_passphrase_to_hash(p):
31 return hashlib.md5(_elongate(p, 64)).hexdigest()
33 def mkconmap_wep_pass(ssid, key):
34 cm = mkconmap_wifi(ssid)
35 cm["802-11-wireless"]["security"] = "802-11-wireless-security"
36 cm["802-11-wireless-security"] = {}
37 cm["802-11-wireless-security"]["key-mgmt"] = "none"
38 cm["802-11-wireless-security"]["wep-tx-keyidx"] = 0
39 cm["802-11-wireless-security"]["wep-key0"] = _wep_passphrase_to_hash(key)
40 return cm
42 def mkconmap_wep(ssid, key):
43 cm = mkconmap_wifi(ssid)
44 cm["802-11-wireless"]["security"] = "802-11-wireless-security"
45 cm["802-11-wireless-security"] = {}
46 cm["802-11-wireless-security"]["key-mgmt"] = "none"
47 cm["802-11-wireless-security"]["wep-tx-keyidx"] = 0
48 cm["802-11-wireless-security"]["wep-key0"] = key
49 return cm
51 def mkconmap_psk(ssid, key):
52 cm = mkconmap_wifi(ssid)
53 cm["802-11-wireless"]["security"] = "802-11-wireless-security"
54 cm["802-11-wireless-security"] = {}
55 cm["802-11-wireless-security"]["key-mgmt"] = "wpa-psk"
56 cm["802-11-wireless-security"]["psk"] = hexlify(pbkdf2.pbkdf2(key, ssid, 4096, 32))
57 cm["802-11-wireless-security"]["group"] = ["tkip", "ccmp"]
58 cm["802-11-wireless-security"]["pairwise"] = ["tkip", "ccmp"]
59 return cm