Drops 3DES and adds int wc_RsaSetRNG(RsaKey* key, WC_RNG* rng); for RSA blinding

This commit is contained in:
Moisés Guimarães
2016-09-21 13:03:11 -03:00
parent 08f6d23e84
commit b50914f2c7
3 changed files with 4 additions and 89 deletions

View File

@@ -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"

View File

@@ -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);

View File

@@ -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):