def do_init(email, password_b64, db_server, do_network, scrypt_server): UK_b64 = b64encode(os.urandom(2*KEYLEN)) print "UK created:", UK_b64 keys = build_PWK(email, password_b64, scrypt_server, do_network) PWK_b64, MAC_b64, SRPpw_b64 = keys SRPv_b64 = do_SRP_setup(SRPpw_b64, email) MAGIC_SEND_SAFELY(db_server, [email, SRPv_b64], do_network) WUK_b64 = encrypt_and_mac(PWK_b64, MAC_b64, UK_b64) SRPsession = do_SRP(db_server, email, SRPpw_b64, do_network) resp = do_request(SRPsession, ["set", WUK_b64], do_network, db_server) if resp[0] != "ok": raise Oops("server reject") return UK_b64
def do_change(email, old_password_b64, new_password_b64, db_server, do_network, scrypt_server): # read the old password, compute the new secrets, send a change request UK_b64, old_SRPpw_b64 = read(email, old_password_b64, db_server, do_network, scrypt_server) keys = build_PWK(email, new_password_b64, scrypt_server, do_network) (new_PWK_b64, new_MAC_b64, new_SRPpw_b64) = keys new_SRPv_b64 = do_SRP_setup(new_SRPpw_b64, email) new_WUK_b64 = encrypt_and_mac(new_PWK_b64, new_MAC_b64, UK_b64) SRPsession = do_SRP(db_server, email, old_SRPpw_b64, do_network) resp = do_request(SRPsession, ["change", new_SRPv_b64, new_WUK_b64], do_network, db_server) if resp[0] != "ok": raise Oops("server reject")