forked from wolfSSL/wolfssl
Merge pull request #616 from moisesguimaraes/fixes-wolfcrypt-py
Fixes wolfcrypt py
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@ -186,3 +186,6 @@ wolfcrypt/user-crypto/lib/libusercrypto.*
|
|||||||
|
|
||||||
# wolfSSL CSharp wrapper
|
# wolfSSL CSharp wrapper
|
||||||
wrapper/CSharp/x64/
|
wrapper/CSharp/x64/
|
||||||
|
|
||||||
|
# Visual Studio Code Workspace Files
|
||||||
|
*.vscode
|
@ -1,3 +1,8 @@
|
|||||||
|
# vim:ft=automake
|
||||||
|
# included from Top Level Makefile.am
|
||||||
|
# All paths should be given relative to the root
|
||||||
|
|
||||||
|
include wrapper/python/wolfcrypt/include.am
|
||||||
|
|
||||||
# wolfSSL CSharp wrapper files
|
# wolfSSL CSharp wrapper files
|
||||||
EXTRA_DIST+= wrapper/CSharp/wolfSSL-DTLS-PSK-Server/App.config
|
EXTRA_DIST+= wrapper/CSharp/wolfSSL-DTLS-PSK-Server/App.config
|
||||||
@ -28,31 +33,3 @@ EXTRA_DIST+= wrapper/CSharp/wolfSSL_CSharp/Properties/Resources.Designer.cs
|
|||||||
EXTRA_DIST+= wrapper/CSharp/wolfSSL_CSharp/Properties/Resources.resx
|
EXTRA_DIST+= wrapper/CSharp/wolfSSL_CSharp/Properties/Resources.resx
|
||||||
EXTRA_DIST+= wrapper/CSharp/wolfSSL_CSharp/wolfSSL.cs
|
EXTRA_DIST+= wrapper/CSharp/wolfSSL_CSharp/wolfSSL.cs
|
||||||
EXTRA_DIST+= wrapper/CSharp/wolfSSL_CSharp/wolfSSL_CSharp.csproj
|
EXTRA_DIST+= wrapper/CSharp/wolfSSL_CSharp/wolfSSL_CSharp.csproj
|
||||||
|
|
||||||
# wolfcrypt python wrapper files
|
|
||||||
EXTRA_DIST+= wrapper/python/.gitignore
|
|
||||||
EXTRA_DIST+= wrapper/python/docs/asymmetric.rst
|
|
||||||
EXTRA_DIST+= wrapper/python/docs/conf.py
|
|
||||||
EXTRA_DIST+= wrapper/python/docs/digest.rst
|
|
||||||
EXTRA_DIST+= wrapper/python/docs/index.rst
|
|
||||||
EXTRA_DIST+= wrapper/python/docs/mac.rst
|
|
||||||
EXTRA_DIST+= wrapper/python/docs/Makefile
|
|
||||||
EXTRA_DIST+= wrapper/python/docs/random.rst
|
|
||||||
EXTRA_DIST+= wrapper/python/docs/symmetric.rst
|
|
||||||
EXTRA_DIST+= wrapper/python/LICENSING.rst
|
|
||||||
EXTRA_DIST+= wrapper/python/MANIFEST.in
|
|
||||||
EXTRA_DIST+= wrapper/python/README.rst
|
|
||||||
EXTRA_DIST+= wrapper/python/requirements-testing.txt
|
|
||||||
EXTRA_DIST+= wrapper/python/setup.py
|
|
||||||
EXTRA_DIST+= wrapper/python/test/test_ciphers.py
|
|
||||||
EXTRA_DIST+= wrapper/python/test/test_hashes.py
|
|
||||||
EXTRA_DIST+= wrapper/python/test/test_random.py
|
|
||||||
EXTRA_DIST+= wrapper/python/tox.ini
|
|
||||||
EXTRA_DIST+= wrapper/python/wolfcrypt/__about__.py
|
|
||||||
EXTRA_DIST+= wrapper/python/wolfcrypt/__init__.py
|
|
||||||
EXTRA_DIST+= wrapper/python/wolfcrypt/build_ffi.py
|
|
||||||
EXTRA_DIST+= wrapper/python/wolfcrypt/ciphers.py
|
|
||||||
EXTRA_DIST+= wrapper/python/wolfcrypt/exceptions.py
|
|
||||||
EXTRA_DIST+= wrapper/python/wolfcrypt/hashes.py
|
|
||||||
EXTRA_DIST+= wrapper/python/wolfcrypt/random.py
|
|
||||||
EXTRA_DIST+= wrapper/python/wolfcrypt/utils.py
|
|
||||||
|
@ -117,8 +117,8 @@ Testing ``wolfcrypt``'s source code with ``tox`` :
|
|||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
To run the unit tests in the source code, you'll need ``tox`` and a few other
|
To run the unit tests in the source code, you'll need ``tox`` and a few other
|
||||||
requirements. The source code relies at 'WOLFSSL_DIR/wrapper/python' where
|
requirements. The source code relies at 'WOLFSSL_DIR/wrapper/python/wolfcrypt'
|
||||||
WOLFSSL_DIR is the path of ``wolfssl``'s source code.
|
where WOLFSSL_DIR is the path of ``wolfssl``'s source code.
|
||||||
|
|
||||||
1. Make sure that the testing requirements are installed:
|
1. Make sure that the testing requirements are installed:
|
||||||
|
|
30
wrapper/python/wolfcrypt/include.am
Normal file
30
wrapper/python/wolfcrypt/include.am
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# vim:ft=automake
|
||||||
|
# included from Top Level Makefile.am
|
||||||
|
# All paths should be given relative to the root
|
||||||
|
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/.gitignore
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/docs/asymmetric.rst
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/docs/conf.py
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/docs/digest.rst
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/docs/index.rst
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/docs/mac.rst
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/docs/Makefile
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/docs/random.rst
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/docs/symmetric.rst
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/LICENSING.rst
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/MANIFEST.in
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/README.rst
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/requirements-testing.txt
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/setup.py
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/test/test_ciphers.py
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/test/test_hashes.py
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/test/test_random.py
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/tox.ini
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/wolfcrypt/__about__.py
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/wolfcrypt/__init__.py
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/wolfcrypt/build_ffi.py
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/wolfcrypt/ciphers.py
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/wolfcrypt/exceptions.py
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/wolfcrypt/hashes.py
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/wolfcrypt/random.py
|
||||||
|
EXTRA_DIST+= wrapper/python/wolfcrypt/wolfcrypt/utils.py
|
@ -21,61 +21,6 @@ import unittest
|
|||||||
from wolfcrypt.ciphers import *
|
from wolfcrypt.ciphers import *
|
||||||
from wolfcrypt.utils import t2b, h2b
|
from wolfcrypt.utils import t2b, h2b
|
||||||
|
|
||||||
class TestDes3(unittest.TestCase):
|
|
||||||
key = h2b("0123456789abcdeffedeba987654321089abcdef01234567")
|
|
||||||
IV = h2b("1234567890abcdef")
|
|
||||||
plain = t2b("Now is the time for all ")
|
|
||||||
cipher = h2b("43a0297ed184f80e8964843212d508981894157487127db0")
|
|
||||||
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
self.des3 = Des3.new(self.key, MODE_CBC, self.IV)
|
|
||||||
|
|
||||||
|
|
||||||
def test_raises(self):
|
|
||||||
# invalid key length
|
|
||||||
self.assertRaises(ValueError, Des3.new, "key", MODE_CBC, self.IV)
|
|
||||||
|
|
||||||
# invalid mode
|
|
||||||
self.assertRaises(ValueError, Des3.new, self.key, MODE_ECB, self.IV)
|
|
||||||
|
|
||||||
# invalid iv length
|
|
||||||
self.assertRaises(ValueError, Des3.new, self.key, MODE_CBC, "IV")
|
|
||||||
|
|
||||||
# invalid data length
|
|
||||||
self.assertRaises(ValueError, self.des3.encrypt, "foo")
|
|
||||||
self.assertRaises(ValueError, self.des3.decrypt, "bar")
|
|
||||||
|
|
||||||
|
|
||||||
def test_single_encryption(self):
|
|
||||||
assert self.des3.encrypt(self.plain) == self.cipher
|
|
||||||
|
|
||||||
|
|
||||||
def test_multi_encryption(self):
|
|
||||||
result = t2b("")
|
|
||||||
segments = tuple(self.plain[i:i + Des3.block_size] \
|
|
||||||
for i in range(0, len(self.plain), Des3.block_size))
|
|
||||||
|
|
||||||
for segment in segments:
|
|
||||||
result += self.des3.encrypt(segment)
|
|
||||||
|
|
||||||
assert result == self.cipher
|
|
||||||
|
|
||||||
|
|
||||||
def test_single_decryption(self):
|
|
||||||
assert self.des3.decrypt(self.cipher) == self.plain
|
|
||||||
|
|
||||||
|
|
||||||
def test_multi_decryption(self):
|
|
||||||
result = t2b("")
|
|
||||||
segments = tuple(self.cipher[i:i + Des3.block_size] \
|
|
||||||
for i in range(0, len(self.cipher), Des3.block_size))
|
|
||||||
|
|
||||||
for segment in segments:
|
|
||||||
result += self.des3.decrypt(segment)
|
|
||||||
|
|
||||||
assert result == self.plain
|
|
||||||
|
|
||||||
|
|
||||||
class TestAes(unittest.TestCase):
|
class TestAes(unittest.TestCase):
|
||||||
key = "0123456789abcdef"
|
key = "0123456789abcdef"
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
metadata = dict(
|
metadata = dict(
|
||||||
__name__ = "wolfcrypt",
|
__name__ = "wolfcrypt",
|
||||||
__version__ = "0.1.8",
|
__version__ = "0.1.9",
|
||||||
__license__ = "GPLv2 or Commercial License",
|
__license__ = "GPLv2 or Commercial License",
|
||||||
__author__ = "wolfSSL Inc.",
|
__author__ = "wolfSSL Inc.",
|
||||||
__author_email__ = "info@wolfssl.com",
|
__author_email__ = "info@wolfssl.com",
|
@ -94,13 +94,6 @@ ffi.cdef(
|
|||||||
int wc_AesCbcDecrypt(Aes*, byte*, const byte*, word32);
|
int wc_AesCbcDecrypt(Aes*, byte*, const byte*, word32);
|
||||||
|
|
||||||
|
|
||||||
typedef struct { ...; } Des3;
|
|
||||||
|
|
||||||
int wc_Des3_SetKey(Des3*, const byte*, const byte*, int);
|
|
||||||
int wc_Des3_CbcEncrypt(Des3*, byte*, const byte*, word32);
|
|
||||||
int wc_Des3_CbcDecrypt(Des3*, byte*, const byte*, word32);
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct { ...; } WC_RNG;
|
typedef struct { ...; } WC_RNG;
|
||||||
|
|
||||||
int wc_InitRng(WC_RNG*);
|
int wc_InitRng(WC_RNG*);
|
||||||
@ -112,6 +105,7 @@ ffi.cdef(
|
|||||||
typedef struct {...; } RsaKey;
|
typedef struct {...; } RsaKey;
|
||||||
|
|
||||||
int wc_InitRsaKey(RsaKey* key, void*);
|
int wc_InitRsaKey(RsaKey* key, void*);
|
||||||
|
int wc_RsaSetRNG(RsaKey* key, WC_RNG* rng);
|
||||||
int wc_FreeRsaKey(RsaKey* key);
|
int wc_FreeRsaKey(RsaKey* key);
|
||||||
|
|
||||||
int wc_RsaPrivateKeyDecode(const byte*, word32*, RsaKey*, word32);
|
int wc_RsaPrivateKeyDecode(const byte*, word32*, RsaKey*, word32);
|
@ -178,33 +178,6 @@ class Aes(_Cipher):
|
|||||||
return _lib.wc_AesCbcDecrypt(self._dec, destination, source,len(source))
|
return _lib.wc_AesCbcDecrypt(self._dec, destination, source,len(source))
|
||||||
|
|
||||||
|
|
||||||
class Des3(_Cipher):
|
|
||||||
"""
|
|
||||||
**Triple DES** (3DES) is the common name for the **Triple Data
|
|
||||||
Encryption Algorithm** (TDEA or Triple DEA) symmetric-key block
|
|
||||||
cipher, which applies the **Data Encryption Standard** (DES)
|
|
||||||
cipher algorithm three times to each data block.
|
|
||||||
"""
|
|
||||||
block_size = 8
|
|
||||||
key_size = 24
|
|
||||||
_native_type = "Des3 *"
|
|
||||||
|
|
||||||
|
|
||||||
def _set_key(self, direction):
|
|
||||||
if direction == _ENCRYPTION:
|
|
||||||
return _lib.wc_Des3_SetKey(self._enc,self._key,self._IV,_ENCRYPTION)
|
|
||||||
else:
|
|
||||||
return _lib.wc_Des3_SetKey(self._dec,self._key,self._IV,_DECRYPTION)
|
|
||||||
|
|
||||||
|
|
||||||
def _encrypt(self, destination, source):
|
|
||||||
return _lib.wc_Des3_CbcEncrypt(self._enc,destination,source,len(source))
|
|
||||||
|
|
||||||
|
|
||||||
def _decrypt(self, destination, source):
|
|
||||||
return _lib.wc_Des3_CbcDecrypt(self._dec,destination,source,len(source))
|
|
||||||
|
|
||||||
|
|
||||||
class _Rsa(object):
|
class _Rsa(object):
|
||||||
RSA_MIN_PAD_SIZE = 11
|
RSA_MIN_PAD_SIZE = 11
|
||||||
|
|
||||||
@ -215,6 +188,9 @@ class _Rsa(object):
|
|||||||
raise WolfCryptError("Invalid key error (%d)" % ret)
|
raise WolfCryptError("Invalid key error (%d)" % ret)
|
||||||
|
|
||||||
self._random = Random()
|
self._random = Random()
|
||||||
|
ret = _lib.wc_RsaSetRNG(self.native_object, self._random.native_object)
|
||||||
|
if ret < 0:
|
||||||
|
raise WolfCryptError("Key initialization error (%d)" % ret)
|
||||||
|
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
Reference in New Issue
Block a user