17,7 → 17,7 |
''' |
# Relevation Password Printer |
# |
# Copyright (c) 2011,2012,2013,2014,2020,2024 Toni Corvera |
# Copyright (c) 2011,2012,2013,2014,2020 Toni Corvera |
# All rights reserved. |
# |
# Redistribution and use in source and binary forms, with or without |
61,15 → 61,17 |
# PBKDF2 stolen from Revelation |
from relevation import PBKDF2, __version__, __author__, RELEASE |
|
# Note PyCryptodome uses Crypto but the debian package uses Cryptodome |
# TODO: Figure out a cleaner way to handle this? |
USE_PYCRYPTO = True |
|
try: |
from Crypto.Cipher import AES |
except (ImportError, ModuleNotFoundError): |
except ImportError: |
USE_PYCRYPTO = False |
try: |
from Cryptodome.Cipher import AES |
except (ImportError, ModuleNotFoundError): |
sys.stderr.write('PyCryptodome is required\n') |
from crypto.cipher import rijndael, cbc |
from crypto.cipher.base import noPadding |
except ImportError: |
sys.stderr.write('Either PyCrypto or cryptopy is required\n') |
raise |
|
RELEASE=True |
76,7 → 78,7 |
__author__ = 'Toni Corvera' |
__date__ = '$Date$' |
__revision__ = '$Rev$' |
__version_info__ = ( 1, 3, 2 ) #, 0 ) # Note: For x.y.0, only x and y are kept |
__version_info__ = ( 1, 3, 1 ) #, 0 ) # Note: For x.y.0, only x and y are kept |
if not RELEASE: |
import traceback |
__version_info__ += ( '0-pre1', ) |
382,8 → 384,12 |
|
This function will use the underlying, available, cipher module. |
''' |
if USE_PYCRYPTO: |
c = AES.new(key) |
cleardata = c.decrypt(data) |
else: |
c = rijndael.Rijndael(key, keySize=len(key), padding=noPadding()) |
cleardata = c.decrypt(data) |
return cleardata |
def _aes_decrypt_cbc(self, key, iv, data): |
''' Decrypt AES cipher text in CBC mode |
391,8 → 397,13 |
|
This function will use the underlying, available, cipher module. |
''' |
if USE_PYCRYPTO: |
c = AES.new(key, AES.MODE_CBC, iv) |
cleardata = c.decrypt(data) |
else: |
bc = rijndael.Rijndael(key, keySize=len(key), padding=noPadding()) |
c = cbc.CBC(bc, padding=noPadding()) |
cleardata = c.decrypt(data, iv=iv) |
return cleardata |
def get_xml(self, data, password): |
''' Extract the XML contents from the encrypted and compressed input. |
547,7 → 558,7 |
dump_xml = False |
mode = None |
|
printe('Relevation v%s, (c) 2011-2024 Toni Corvera\n' % __version__) |
printe('Relevation v%s, (c) 2011-2020 Toni Corvera\n' % __version__) |
|
# ---------- OPTIONS ---------- # |
( datafile, password, mode ) = load_config() |
574,8 → 585,12 |
release=' [DEBUG]' |
print('Relevation version %s%s' % ( __version__, release )) |
print('Python version %s' % sys.version) |
if USE_PYCRYPTO: |
import Crypto |
print('PyCryptodome version %s' % Crypto.__version__) |
print('PyCrypto version %s' % Crypto.__version__) |
else: |
# AFAIK cryptopy doesn't export version info |
print('cryptopy') |
sys.exit(os.EX_OK) |
|
for opt, arg in ops: |