support for ntlm proxy
This commit is contained in:
parent
5428942ccf
commit
1fd6169f53
31 changed files with 3029 additions and 58 deletions
51
wakatime/packages/ntlm_auth/rc4.py
Normal file
51
wakatime/packages/ntlm_auth/rc4.py
Normal file
|
@ -0,0 +1,51 @@
|
|||
# This library is free software: you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation, either
|
||||
# version 3 of the License, or (at your option) any later version.
|
||||
|
||||
# This library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library. If not, see <http://www.gnu.org/licenses/> or <http://www.gnu.org/licenses/lgpl.txt>.
|
||||
|
||||
class ARC4(object):
|
||||
state = None
|
||||
i = 0
|
||||
j = 0
|
||||
|
||||
def __init__(self, key):
|
||||
# Split up the key into a list
|
||||
if isinstance(key, str):
|
||||
key = [ord(c) for c in key]
|
||||
else:
|
||||
key = [c for c in key]
|
||||
|
||||
#Key-scheduling algorithm (KSA)
|
||||
self.state = [n for n in range(256)]
|
||||
j = 0
|
||||
for i in range(256):
|
||||
j = (j + self.state[i] + key[i % len(key)]) % 256
|
||||
self.state[i], self.state[j] = self.state[j], self.state[i]
|
||||
|
||||
def update(self, value):
|
||||
chars = []
|
||||
random_gen = self._random_generator()
|
||||
for char in value:
|
||||
if isinstance(value, str):
|
||||
byte = ord(char)
|
||||
else:
|
||||
byte = char
|
||||
updated_byte = byte ^ next(random_gen)
|
||||
chars.append(updated_byte)
|
||||
return bytes(bytearray(chars))
|
||||
|
||||
def _random_generator(self):
|
||||
#Pseudo-Random Generation Algorithm (PRGA)
|
||||
while True:
|
||||
self.i = (self.i + 1) % 256
|
||||
self.j = (self.j + self.state[self.i]) % 256
|
||||
self.state[self.i], self.state[self.j] = self.state[self.j], self.state[self.i]
|
||||
yield self.state[(self.state[self.i] + self.state[self.j]) % 256]
|
Loading…
Add table
Add a link
Reference in a new issue