use native string type for option values
those are comprehended as strings
This commit is contained in:
parent
ea535c74b2
commit
6e84b308bd
6 changed files with 54 additions and 80 deletions
|
@ -66,9 +66,7 @@ def load_openssl():
|
||||||
|
|
||||||
|
|
||||||
def load_cipher(cipher_name):
|
def load_cipher(cipher_name):
|
||||||
func_name = b'EVP_' + cipher_name.replace(b'-', b'_')
|
func_name = 'EVP_' + cipher_name.replace('-', '_')
|
||||||
if bytes != str:
|
|
||||||
func_name = str(func_name, 'utf-8')
|
|
||||||
cipher = getattr(libcrypto, func_name, None)
|
cipher = getattr(libcrypto, func_name, None)
|
||||||
if cipher:
|
if cipher:
|
||||||
cipher.restype = c_void_p
|
cipher.restype = c_void_p
|
||||||
|
@ -119,31 +117,31 @@ class CtypesCrypto(object):
|
||||||
|
|
||||||
|
|
||||||
ciphers = {
|
ciphers = {
|
||||||
b'aes-128-cfb': (16, 16, CtypesCrypto),
|
'aes-128-cfb': (16, 16, CtypesCrypto),
|
||||||
b'aes-192-cfb': (24, 16, CtypesCrypto),
|
'aes-192-cfb': (24, 16, CtypesCrypto),
|
||||||
b'aes-256-cfb': (32, 16, CtypesCrypto),
|
'aes-256-cfb': (32, 16, CtypesCrypto),
|
||||||
b'aes-128-ofb': (16, 16, CtypesCrypto),
|
'aes-128-ofb': (16, 16, CtypesCrypto),
|
||||||
b'aes-192-ofb': (24, 16, CtypesCrypto),
|
'aes-192-ofb': (24, 16, CtypesCrypto),
|
||||||
b'aes-256-ofb': (32, 16, CtypesCrypto),
|
'aes-256-ofb': (32, 16, CtypesCrypto),
|
||||||
b'aes-128-ctr': (16, 16, CtypesCrypto),
|
'aes-128-ctr': (16, 16, CtypesCrypto),
|
||||||
b'aes-192-ctr': (24, 16, CtypesCrypto),
|
'aes-192-ctr': (24, 16, CtypesCrypto),
|
||||||
b'aes-256-ctr': (32, 16, CtypesCrypto),
|
'aes-256-ctr': (32, 16, CtypesCrypto),
|
||||||
b'aes-128-cfb8': (16, 16, CtypesCrypto),
|
'aes-128-cfb8': (16, 16, CtypesCrypto),
|
||||||
b'aes-192-cfb8': (24, 16, CtypesCrypto),
|
'aes-192-cfb8': (24, 16, CtypesCrypto),
|
||||||
b'aes-256-cfb8': (32, 16, CtypesCrypto),
|
'aes-256-cfb8': (32, 16, CtypesCrypto),
|
||||||
b'aes-128-cfb1': (16, 16, CtypesCrypto),
|
'aes-128-cfb1': (16, 16, CtypesCrypto),
|
||||||
b'aes-192-cfb1': (24, 16, CtypesCrypto),
|
'aes-192-cfb1': (24, 16, CtypesCrypto),
|
||||||
b'aes-256-cfb1': (32, 16, CtypesCrypto),
|
'aes-256-cfb1': (32, 16, CtypesCrypto),
|
||||||
b'bf-cfb': (16, 8, CtypesCrypto),
|
'bf-cfb': (16, 8, CtypesCrypto),
|
||||||
b'camellia-128-cfb': (16, 16, CtypesCrypto),
|
'camellia-128-cfb': (16, 16, CtypesCrypto),
|
||||||
b'camellia-192-cfb': (24, 16, CtypesCrypto),
|
'camellia-192-cfb': (24, 16, CtypesCrypto),
|
||||||
b'camellia-256-cfb': (32, 16, CtypesCrypto),
|
'camellia-256-cfb': (32, 16, CtypesCrypto),
|
||||||
b'cast5-cfb': (16, 8, CtypesCrypto),
|
'cast5-cfb': (16, 8, CtypesCrypto),
|
||||||
b'des-cfb': (8, 8, CtypesCrypto),
|
'des-cfb': (8, 8, CtypesCrypto),
|
||||||
b'idea-cfb': (16, 8, CtypesCrypto),
|
'idea-cfb': (16, 8, CtypesCrypto),
|
||||||
b'rc2-cfb': (16, 8, CtypesCrypto),
|
'rc2-cfb': (16, 8, CtypesCrypto),
|
||||||
b'rc4': (16, 0, CtypesCrypto),
|
'rc4': (16, 0, CtypesCrypto),
|
||||||
b'seed-cfb': (16, 16, CtypesCrypto),
|
'seed-cfb': (16, 16, CtypesCrypto),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -52,19 +52,19 @@ def err(alg, key, iv, op, key_as_bytes=0, d=None, salt=None, i=1, padding=1):
|
||||||
|
|
||||||
if has_m2:
|
if has_m2:
|
||||||
ciphers = {
|
ciphers = {
|
||||||
b'aes-128-cfb': (16, 16, create_cipher),
|
'aes-128-cfb': (16, 16, create_cipher),
|
||||||
b'aes-192-cfb': (24, 16, create_cipher),
|
'aes-192-cfb': (24, 16, create_cipher),
|
||||||
b'aes-256-cfb': (32, 16, create_cipher),
|
'aes-256-cfb': (32, 16, create_cipher),
|
||||||
b'bf-cfb': (16, 8, create_cipher),
|
'bf-cfb': (16, 8, create_cipher),
|
||||||
b'camellia-128-cfb': (16, 16, create_cipher),
|
'camellia-128-cfb': (16, 16, create_cipher),
|
||||||
b'camellia-192-cfb': (24, 16, create_cipher),
|
'camellia-192-cfb': (24, 16, create_cipher),
|
||||||
b'camellia-256-cfb': (32, 16, create_cipher),
|
'camellia-256-cfb': (32, 16, create_cipher),
|
||||||
b'cast5-cfb': (16, 8, create_cipher),
|
'cast5-cfb': (16, 8, create_cipher),
|
||||||
b'des-cfb': (8, 8, create_cipher),
|
'des-cfb': (8, 8, create_cipher),
|
||||||
b'idea-cfb': (16, 8, create_cipher),
|
'idea-cfb': (16, 8, create_cipher),
|
||||||
b'rc2-cfb': (16, 8, create_cipher),
|
'rc2-cfb': (16, 8, create_cipher),
|
||||||
b'rc4': (16, 0, create_cipher),
|
'rc4': (16, 0, create_cipher),
|
||||||
b'seed-cfb': (16, 16, create_cipher),
|
'seed-cfb': (16, 16, create_cipher),
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
ciphers = {}
|
ciphers = {}
|
||||||
|
|
|
@ -47,7 +47,7 @@ def create_cipher(alg, key, iv, op, key_as_bytes=0, d=None, salt=None,
|
||||||
|
|
||||||
|
|
||||||
ciphers = {
|
ciphers = {
|
||||||
b'rc4-md5': (16, 16, create_cipher),
|
'rc4-md5': (16, 16, create_cipher),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -123,7 +123,7 @@ class Salsa20Cipher(object):
|
||||||
|
|
||||||
|
|
||||||
ciphers = {
|
ciphers = {
|
||||||
b'salsa20-ctr': (32, 8, Salsa20Cipher),
|
'salsa20-ctr': (32, 8, Salsa20Cipher),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,7 @@ class TableCipher(object):
|
||||||
|
|
||||||
|
|
||||||
ciphers = {
|
ciphers = {
|
||||||
b'table': (0, 0, TableCipher)
|
'table': (0, 0, TableCipher)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -21,19 +21,22 @@
|
||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
# SOFTWARE.
|
# SOFTWARE.
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function, \
|
from __future__ import (
|
||||||
with_statement
|
absolute_import, division, print_function, with_statement,
|
||||||
|
)
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
import sys
|
import sys
|
||||||
import getopt
|
import getopt
|
||||||
import logging
|
import logging
|
||||||
from shadowsocks.common import to_bytes
|
|
||||||
|
|
||||||
|
|
||||||
VERBOSE_LEVEL = 5
|
VERBOSE_LEVEL = 5
|
||||||
|
|
||||||
|
if sys.version_info[0] == 2:
|
||||||
|
import codecs
|
||||||
|
open = codecs.open
|
||||||
|
|
||||||
def check_python():
|
def check_python():
|
||||||
info = sys.version_info
|
info = sys.version_info
|
||||||
|
@ -110,10 +113,9 @@ def get_config(is_local):
|
||||||
|
|
||||||
if config_path:
|
if config_path:
|
||||||
logging.info('loading config from %s' % config_path)
|
logging.info('loading config from %s' % config_path)
|
||||||
with open(config_path, 'rb') as f:
|
with open(config_path, 'r', encoding='utf-8') as f:
|
||||||
try:
|
try:
|
||||||
config = json.loads(f.read().decode('utf8'),
|
config = json.load(f)
|
||||||
object_hook=_decode_dict)
|
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
logging.error('found an error in config.json: %s',
|
logging.error('found an error in config.json: %s',
|
||||||
e.message)
|
e.message)
|
||||||
|
@ -127,15 +129,15 @@ def get_config(is_local):
|
||||||
if key == '-p':
|
if key == '-p':
|
||||||
config['server_port'] = int(value)
|
config['server_port'] = int(value)
|
||||||
elif key == '-k':
|
elif key == '-k':
|
||||||
config['password'] = to_bytes(value)
|
config['password'] = value
|
||||||
elif key == '-l':
|
elif key == '-l':
|
||||||
config['local_port'] = int(value)
|
config['local_port'] = int(value)
|
||||||
elif key == '-s':
|
elif key == '-s':
|
||||||
config['server'] = to_bytes(value)
|
config['server'] = value
|
||||||
elif key == '-m':
|
elif key == '-m':
|
||||||
config['method'] = to_bytes(value)
|
config['method'] = value
|
||||||
elif key == '-b':
|
elif key == '-b':
|
||||||
config['local_address'] = to_bytes(value)
|
config['local_address'] = value
|
||||||
elif key == '-v':
|
elif key == '-v':
|
||||||
v_count += 1
|
v_count += 1
|
||||||
# '-vv' turns on more verbose mode
|
# '-vv' turns on more verbose mode
|
||||||
|
@ -271,29 +273,3 @@ optional arguments:
|
||||||
|
|
||||||
Online help: <https://github.com/clowwindy/shadowsocks>
|
Online help: <https://github.com/clowwindy/shadowsocks>
|
||||||
''')
|
''')
|
||||||
|
|
||||||
|
|
||||||
def _decode_list(data):
|
|
||||||
rv = []
|
|
||||||
for item in data:
|
|
||||||
if hasattr(item, 'encode'):
|
|
||||||
item = item.encode('utf-8')
|
|
||||||
elif isinstance(item, list):
|
|
||||||
item = _decode_list(item)
|
|
||||||
elif isinstance(item, dict):
|
|
||||||
item = _decode_dict(item)
|
|
||||||
rv.append(item)
|
|
||||||
return rv
|
|
||||||
|
|
||||||
|
|
||||||
def _decode_dict(data):
|
|
||||||
rv = {}
|
|
||||||
for key, value in data.items():
|
|
||||||
if hasattr(value, 'encode'):
|
|
||||||
value = value.encode('utf-8')
|
|
||||||
elif isinstance(value, list):
|
|
||||||
value = _decode_list(value)
|
|
||||||
elif isinstance(value, dict):
|
|
||||||
value = _decode_dict(value)
|
|
||||||
rv[key] = value
|
|
||||||
return rv
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue