Add chacha20-ietf crypto (#590)
* Add chacha20-ietf crypto * fix chacha20-ietf * PEP8 * Update sodium.py (#1) pep8
This commit is contained in:
parent
8e8ee5d490
commit
6ef14e56db
4 changed files with 36 additions and 7 deletions
2
setup.py
2
setup.py
|
@ -7,7 +7,7 @@ with codecs.open('README.rst', encoding='utf-8') as f:
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="shadowsocks",
|
name="shadowsocks",
|
||||||
version="2.8.2",
|
version="2.9.0",
|
||||||
license='http://www.apache.org/licenses/LICENSE-2.0',
|
license='http://www.apache.org/licenses/LICENSE-2.0',
|
||||||
description="A fast tunnel proxy that help you get through firewalls",
|
description="A fast tunnel proxy that help you get through firewalls",
|
||||||
author='clowwindy',
|
author='clowwindy',
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
from __future__ import absolute_import, division, print_function, \
|
from __future__ import absolute_import, division, print_function, \
|
||||||
with_statement
|
with_statement
|
||||||
|
|
||||||
from ctypes import c_char_p, c_int, c_ulonglong, byref, \
|
from ctypes import c_char_p, c_int, c_ulonglong, byref, c_ulong, \
|
||||||
create_string_buffer, c_void_p
|
create_string_buffer, c_void_p
|
||||||
|
|
||||||
from shadowsocks.crypto import util
|
from shadowsocks.crypto import util
|
||||||
|
@ -29,7 +29,7 @@ loaded = False
|
||||||
|
|
||||||
buf_size = 2048
|
buf_size = 2048
|
||||||
|
|
||||||
# for salsa20 and chacha20
|
# for salsa20 and chacha20 and chacha20-ietf
|
||||||
BLOCK_SIZE = 64
|
BLOCK_SIZE = 64
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,6 +51,13 @@ def load_libsodium():
|
||||||
c_ulonglong,
|
c_ulonglong,
|
||||||
c_char_p, c_ulonglong,
|
c_char_p, c_ulonglong,
|
||||||
c_char_p)
|
c_char_p)
|
||||||
|
libsodium.crypto_stream_chacha20_ietf_xor_ic.restype = c_int
|
||||||
|
libsodium.crypto_stream_chacha20_ietf_xor_ic.argtypes = (c_void_p,
|
||||||
|
c_char_p,
|
||||||
|
c_ulonglong,
|
||||||
|
c_char_p,
|
||||||
|
c_ulong,
|
||||||
|
c_char_p)
|
||||||
|
|
||||||
buf = create_string_buffer(buf_size)
|
buf = create_string_buffer(buf_size)
|
||||||
loaded = True
|
loaded = True
|
||||||
|
@ -68,6 +75,8 @@ class SodiumCrypto(object):
|
||||||
self.cipher = libsodium.crypto_stream_salsa20_xor_ic
|
self.cipher = libsodium.crypto_stream_salsa20_xor_ic
|
||||||
elif cipher_name == 'chacha20':
|
elif cipher_name == 'chacha20':
|
||||||
self.cipher = libsodium.crypto_stream_chacha20_xor_ic
|
self.cipher = libsodium.crypto_stream_chacha20_xor_ic
|
||||||
|
elif cipher_name == 'chacha20-ietf':
|
||||||
|
self.cipher = libsodium.crypto_stream_chacha20_ietf_xor_ic
|
||||||
else:
|
else:
|
||||||
raise Exception('Unknown cipher')
|
raise Exception('Unknown cipher')
|
||||||
# byte counter, not block counter
|
# byte counter, not block counter
|
||||||
|
@ -97,6 +106,7 @@ class SodiumCrypto(object):
|
||||||
ciphers = {
|
ciphers = {
|
||||||
'salsa20': (32, 8, SodiumCrypto),
|
'salsa20': (32, 8, SodiumCrypto),
|
||||||
'chacha20': (32, 8, SodiumCrypto),
|
'chacha20': (32, 8, SodiumCrypto),
|
||||||
|
'chacha20-ietf': (32, 12, SodiumCrypto),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -115,6 +125,15 @@ def test_chacha20():
|
||||||
util.run_cipher(cipher, decipher)
|
util.run_cipher(cipher, decipher)
|
||||||
|
|
||||||
|
|
||||||
|
def test_chacha20_ietf():
|
||||||
|
|
||||||
|
cipher = SodiumCrypto('chacha20-ietf', b'k' * 32, b'i' * 16, 1)
|
||||||
|
decipher = SodiumCrypto('chacha20-ietf', b'k' * 32, b'i' * 16, 0)
|
||||||
|
|
||||||
|
util.run_cipher(cipher, decipher)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
test_chacha20()
|
test_chacha20()
|
||||||
test_salsa20()
|
test_salsa20()
|
||||||
|
test_chacha20_ietf()
|
||||||
|
|
10
tests/chacha20-ietf.json
Normal file
10
tests/chacha20-ietf.json
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"server":"127.0.0.1",
|
||||||
|
"server_port":8388,
|
||||||
|
"local_port":1081,
|
||||||
|
"password":"salsa20_password",
|
||||||
|
"timeout":60,
|
||||||
|
"method":"chacha20-ietf",
|
||||||
|
"local_address":"127.0.0.1",
|
||||||
|
"fast_open":false
|
||||||
|
}
|
|
@ -1,10 +1,10 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
if [ ! -d libsodium-1.0.1 ]; then
|
if [ ! -d libsodium-1.0.11 ]; then
|
||||||
wget https://github.com/jedisct1/libsodium/releases/download/1.0.1/libsodium-1.0.1.tar.gz || exit 1
|
wget https://github.com/jedisct1/libsodium/releases/download/1.0.11/libsodium-1.0.11.tar.gz || exit 1
|
||||||
tar xf libsodium-1.0.1.tar.gz || exit 1
|
tar xf libsodium-1.0.11.tar.gz || exit 1
|
||||||
fi
|
fi
|
||||||
pushd libsodium-1.0.1
|
pushd libsodium-1.0.11
|
||||||
./configure && make -j2 && make install || exit 1
|
./configure && make -j2 && make install || exit 1
|
||||||
sudo ldconfig
|
sudo ldconfig
|
||||||
popd
|
popd
|
||||||
|
|
Loading…
Reference in a new issue