Commit 82c0c4fdd2
("Fallback to hashlib instead of deprecated libs")
had changed the hmac import to try the import from
the hashlib module, but there appears to be 'hmac'
underneath hashlib in neither Python 2 nor Python 3, but
it's a separate module.
Test on Debian testing with Python 2.7.18:
$ python2
Python 2.7.18 (default, Aug 1 2022, 06:23:55)
[GCC 12.1.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Jedi is not installed, falling back to readline
>>> from hashlib import hmac as HMAC
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name hmac
>>> import hmac as HMAC
>>>
The same with Python 3.10.6:
$ python3
Python 3.10.6 (main, Aug 10 2022, 11:19:32) [GCC 12.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
Using Jedi for tab completion.
>>> from hashlib import hmac as HMAC
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name 'hmac' from 'hashlib' (/usr/lib/python3.10/hashlib.py)
>>> import hmac as HMAC
>>>
Even the official Python 3.10.6 documentation for the hashlib
module use plain hmac import [1] in its example:
>>> import hmac, hashlib
>>> m = hmac.new(b'secret key', digestmod=hashlib.blake2s)
>>> m.update(b'message')
>>> m.hexdigest()
'e3c8102868d28b5ff85fc35dda07329970d1a01e273c37481326fe0c861c8142'
Therefore, revert that change to the import and use the direct hmac
import again to make the case where PyCrypto is not installed work
again.
[1] https://docs.python.org/3/library/hashlib.htmlFixes: #223
This should fix the appveyor build failure:
C:\projects\vsmartcard\virtualsmartcard\src\vpcd\vpcd.c(183): error C4700: uninitialized local variable 'rfds' used [C:\projects\vsmartcard\virtualsmartcard\win32\BixVReader\BixVReader.vcxproj]
Some additional code linting
- remove unused imports
- remove unecessary parenthesis from if statements
- created TLVutils TAG dictionary in creation time
- Use pycryptodome instead of pycrypto
- Fixed some unit tests asserts
- fixed some instances that sending message to vpcd the msg is considered a string object instead of byte array
- make TLVutils.pack work in python 3
There is no longer an external (or stable) interface for libopensc.
Linking this program with an existing version of libopensc that is
pre-installed in the system library paths is not practical.
However, a specific snapshot of the OpenSC source code is embedded
here as a Git submodule (and included in the source distributions).
Build libopensc from this and statically link it into this program.
(Options such as '--enable-openpace' that are passed to ./configure
will be forwarded to control the build configuration of libopensc.)
Remove code that existed for compatibility when dynamically linking
with older versions of libopensc.
Fix prerequisites and Automake variables in the Makefiles, so that
running "make dist" does not fail if the program is not built. When
running help2man, have it execute "gengetopt --show-help" instead
of the built program to obtain the help message.