Subversion Repositories pub

Compare Revisions

Ignore whitespace Rev 715 → Rev 716

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