diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/CryptoUtils.py b/virtualsmartcard/src/vpicc/virtualsmartcard/CryptoUtils.py index e7ee3e7..5b3138e 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/CryptoUtils.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/CryptoUtils.py @@ -16,7 +16,7 @@ # You should have received a copy of the GNU General Public License along with # virtualsmartcard. If not, see . # -import sys, binascii, random, logging, unittest +import sys, binascii, random, logging from Crypto.Cipher import DES3, DES, AES, ARC4#@UnusedImport from struct import pack from binascii import b2a_hex, a2b_hex @@ -604,24 +604,3 @@ def test_pbkdf2(): if result != expected: raise RuntimeError("self-test failed") print "PBKDF2 self test successfull" - -class TestCryptoUtils(unittest.TestCase): - - def setUp(self): - self.teststring = "DEADBEEFistatsyksdvhwohfwoehcowc8hw8rogfq8whv75tsgohsav8wress" - self.testpass = "SomeRandomPassphrase" - - def test_padding(self): - padded = append_padding(16, self.teststring) - unpadded = strip_padding(16, padded) - self.assertEqual(unpadded, self.teststring) - - def test_protect_string(self): - protectedString = protect_string(self.teststring, self.testpass) - unprotectedString = read_protected_string(protectedString, self.testpass) - self.assertEqual(self.teststring, unprotectedString) - - -if __name__ == "__main__": - unittest.main() - #test_pbkdf2() diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/SmartcardSAM.py b/virtualsmartcard/src/vpicc/virtualsmartcard/SmartcardSAM.py index d0e171f..4670951 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/SmartcardSAM.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/SmartcardSAM.py @@ -17,7 +17,7 @@ # virtualsmartcard. If not, see . # -import logging, unittest +import logging from pickle import dumps, loads from os import urandom @@ -355,62 +355,4 @@ class SAM(object): def manage_security_environment(self, p1, p2, data): return self.current_SE.manage_security_environment(p1, p2, data) - -#Unit Tests -class TestSmartcardSAM(unittest.TestCase): - def setUp(self): - self.password = "DUMMYKEYDUMMYKEY" - self.myCard = SAM("1234", "1234567890") - - def test_incorrect_pin(self): - with self.assertRaises(SwError): - self.myCard.verify(0x00, 0x00, "5678") - - def test_counter_decrement(self): - ctr1 = self.myCard.counter - try: - self.myCard.verify(0x00, 0x00, "3456") - except SwError as e: - pass - self.assertEquals(self.myCard.counter, ctr1 - 1) - - def test_internal_authenticate(self): - sw, challenge = self.myCard.get_challenge(0x00, 0x00, "") - print("Before encryption: " + challenge) - blocklen = vsCrypto.get_cipher_blocklen("DES3-ECB") - padded = vsCrypto.append_padding(blocklen, challenge) - sw, result_data = self.myCard.internal_authenticate(0x00, 0x00, padded) - print("Internal Authenticate status code: %x" % sw) - self.assertEquals(sw, SW["NORMAL"]) - - def test_external_authenticate(self): - sw, challenge = self.myCard.get_challenge(0x00, 0x00, "") - print("Before encryption: " + challenge) - blocklen = vsCrypto.get_cipher_blocklen("DES3-ECB") - padded = vsCrypto.append_padding(blocklen, challenge) - sw, result_data = self.myCard.internal_authenticate(0x00, 0x00, padded) - sw, result_data = self.myCard.external_authenticate(0x00, 0x00, result_data) - print ("After external authenticate: " + result_data) - self.assertEquals(sw, SW["NORMAL"]) - -if __name__ == "__main__": - unittest.main() - - #SE = Security_Environment(None) - #testvektor = "foobar" - #print "Testvektor = %s" % testvektor - #sw, hash = SE.hash(0x90,0x80,testvektor) - #print "SW after hashing = %s" % sw - #print "Hash = %s" % hash - #sw, crypted = SE.encipher(0x00, 0x00, testvektor) - #print "SW after encryption = %s" % sw - #sw, plain = SE.decipher(0x00, 0x00, crypted) - #print "SW after encryption = %s" % sw - #print "Testvektor after en- and deciphering: %s" % plain - #sw, pk = SE.generate_public_key_pair(0x02, 0x00, "") - #print "SW after keygen = %s" % sw - #print "Public Key = %s" % pk - #CF = CryptoflexSE(None) - #print CF.generate_public_key_pair(0x00, 0x80, "\x01\x00\x01\x00") - #print MyCard._get_referenced_key(0x01) diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/tests/CryptoUtils_test.py b/virtualsmartcard/src/vpicc/virtualsmartcard/tests/CryptoUtils_test.py new file mode 100644 index 0000000..05acf1b --- /dev/null +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/tests/CryptoUtils_test.py @@ -0,0 +1,23 @@ +import unittest +from virtualsmartcard.CryptoUtils import * + +class TestCryptoUtils(unittest.TestCase): + + def setUp(self): + self.teststring = "DEADBEEFistatsyksdvhwohfwoehcowc8hw8rogfq8whv75tsgohsav8wress" + self.testpass = "SomeRandomPassphrase" + + def test_padding(self): + padded = append_padding(16, self.teststring) + unpadded = strip_padding(16, padded) + self.assertEqual(unpadded, self.teststring) + + def test_protect_string(self): + protectedString = protect_string(self.teststring, self.testpass) + unprotectedString = read_protected_string(protectedString, self.testpass) + self.assertEqual(self.teststring, unprotectedString) + + +if __name__ == "__main__": + unittest.main() + #test_pbkdf2() diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/tests/SmartcardSAM_test.py b/virtualsmartcard/src/vpicc/virtualsmartcard/tests/SmartcardSAM_test.py new file mode 100644 index 0000000..0f30241 --- /dev/null +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/tests/SmartcardSAM_test.py @@ -0,0 +1,60 @@ +import unittest +from virtualsmartcard.SmartcardSAM import * + +#Unit Tests +class TestSmartcardSAM(unittest.TestCase): + + def setUp(self): + self.password = "DUMMYKEYDUMMYKEY" + self.myCard = SAM("1234", "1234567890") + + def test_incorrect_pin(self): + with self.assertRaises(SwError): + self.myCard.verify(0x00, 0x00, "5678") + + def test_counter_decrement(self): + ctr1 = self.myCard.counter + try: + self.myCard.verify(0x00, 0x00, "3456") + except SwError as e: + pass + self.assertEquals(self.myCard.counter, ctr1 - 1) + + def test_internal_authenticate(self): + sw, challenge = self.myCard.get_challenge(0x00, 0x00, "") + print("Before encryption: " + challenge) + blocklen = vsCrypto.get_cipher_blocklen("DES3-ECB") + padded = vsCrypto.append_padding(blocklen, challenge) + sw, result_data = self.myCard.internal_authenticate(0x00, 0x00, padded) + print("Internal Authenticate status code: %x" % sw) + self.assertEquals(sw, SW["NORMAL"]) + + def test_external_authenticate(self): + sw, challenge = self.myCard.get_challenge(0x00, 0x00, "") + print("Before encryption: " + challenge) + blocklen = vsCrypto.get_cipher_blocklen("DES3-ECB") + padded = vsCrypto.append_padding(blocklen, challenge) + sw, result_data = self.myCard.internal_authenticate(0x00, 0x00, padded) + sw, result_data = self.myCard.external_authenticate(0x00, 0x00, result_data) + print ("After external authenticate: " + result_data) + self.assertEquals(sw, SW["NORMAL"]) + +if __name__ == "__main__": + unittest.main() + #SE = Security_Environment(None) + #testvektor = "foobar" + #print "Testvektor = %s" % testvektor + #sw, hash = SE.hash(0x90,0x80,testvektor) + #print "SW after hashing = %s" % sw + #print "Hash = %s" % hash + #sw, crypted = SE.encipher(0x00, 0x00, testvektor) + #print "SW after encryption = %s" % sw + #sw, plain = SE.decipher(0x00, 0x00, crypted) + #print "SW after encryption = %s" % sw + #print "Testvektor after en- and deciphering: %s" % plain + #sw, pk = SE.generate_public_key_pair(0x02, 0x00, "") + #print "SW after keygen = %s" % sw + #print "Public Key = %s" % pk + #CF = CryptoflexSE(None) + #print CF.generate_public_key_pair(0x00, 0x80, "\x01\x00\x01\x00") + #print MyCard._get_referenced_key(0x01) diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/tests/__init__.py b/virtualsmartcard/src/vpicc/virtualsmartcard/tests/__init__.py new file mode 100644 index 0000000..e69de29