Functions for encrypt and decrypt
This commit is contained in:
parent
bb3a3c8bf7
commit
3c9f0cc0f9
|
@ -13,6 +13,3 @@
|
|||
**LTC**: `MBcgQ3LQJA4W2wsXknTdm2fxRSysLaBJHS`
|
||||
|
||||
**ETH**: `0x61a4f614a30ff686445751ed8328b82b77ecfc69`
|
||||
|
||||
|
||||
PayPal :( donate ATT elmau DOT net
|
||||
|
|
|
@ -4146,37 +4146,6 @@ def render(template, data):
|
|||
return s.safe_substitute(**data)
|
||||
|
||||
|
||||
def _to_date(value):
|
||||
new_value = value
|
||||
if isinstance(value, Time):
|
||||
new_value = datetime.time(value.Hours, value.Minutes, value.Seconds)
|
||||
elif isinstance(value, Date):
|
||||
new_value = datetime.date(value.Year, value.Month, value.Day)
|
||||
elif isinstance(value, DateTime):
|
||||
new_value = datetime.datetime(
|
||||
value.Year, value.Month, value.Day,
|
||||
value.Hours, value.Minutes, value.Seconds)
|
||||
return new_value
|
||||
|
||||
|
||||
def date_to_struct(value):
|
||||
# ~ print(type(value))
|
||||
if isinstance(value, datetime.datetime):
|
||||
d = DateTime()
|
||||
d.Seconds = value.second
|
||||
d.Minutes = value.minute
|
||||
d.Hours = value.hour
|
||||
d.Day = value.day
|
||||
d.Month = value.month
|
||||
d.Year = value.year
|
||||
elif isinstance(value, datetime.date):
|
||||
d = Date()
|
||||
d.Day = value.day
|
||||
d.Month = value.month
|
||||
d.Year = value.year
|
||||
return d
|
||||
|
||||
|
||||
# ~ Export ok
|
||||
def format(template, data):
|
||||
"""
|
||||
|
@ -4198,30 +4167,6 @@ def format(template, data):
|
|||
return result
|
||||
|
||||
|
||||
def _get_key(password):
|
||||
digest = hashlib.sha256(password.encode()).digest()
|
||||
key = base64.urlsafe_b64encode(digest)
|
||||
return key
|
||||
|
||||
|
||||
# ~ Export ok
|
||||
def encrypt(data, password):
|
||||
f = Fernet(_get_key(password))
|
||||
token = f.encrypt(data).decode()
|
||||
return token
|
||||
|
||||
|
||||
# ~ Export ok
|
||||
def decrypt(token, password):
|
||||
data = ''
|
||||
f = Fernet(_get_key(password))
|
||||
try:
|
||||
data = f.decrypt(token.encode()).decode()
|
||||
except InvalidToken as e:
|
||||
error('Invalid Token')
|
||||
return data
|
||||
|
||||
|
||||
class SmtpServer(object):
|
||||
|
||||
def __init__(self, config):
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
# ~ You should have received a copy of the GNU General Public License
|
||||
# ~ along with ZAZ. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
import base64
|
||||
import csv
|
||||
import datetime
|
||||
import getpass
|
||||
|
@ -48,6 +48,15 @@ from pathlib import Path
|
|||
from pprint import pprint
|
||||
from typing import Any
|
||||
|
||||
import smtplib
|
||||
from smtplib import SMTPException, SMTPAuthenticationError
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
from email.mime.base import MIMEBase
|
||||
from email.mime.text import MIMEText
|
||||
from email.utils import formatdate
|
||||
from email import encoders
|
||||
import mailbox
|
||||
|
||||
import uno
|
||||
import unohelper
|
||||
from com.sun.star.awt import MessageBoxButtons as MSG_BUTTONS
|
||||
|
@ -89,6 +98,12 @@ logging.addLevelName(logging.INFO, '\x1b[32mINFO\033[1;0m')
|
|||
logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT, datefmt=LOG_DATE)
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# ~ You can get custom salt
|
||||
# ~ codecs.encode(os.urandom(16), 'hex')
|
||||
SALT = b'c9548699d4e432dfd2b46adddafbb06d'
|
||||
|
||||
TIMEOUT = 10
|
||||
LOG_NAME = 'ZAZ'
|
||||
FILE_NAME_CONFIG = 'zaz-{}.json'
|
||||
|
||||
|
@ -633,6 +648,38 @@ def set_config(key, value, prefix='conf'):
|
|||
return result
|
||||
|
||||
|
||||
def _get_key(password):
|
||||
from cryptography.hazmat.primitives import hashes
|
||||
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
|
||||
|
||||
kdf = PBKDF2HMAC(algorithm=hashes.SHA256(), length=32, salt=SALT,
|
||||
iterations=100000)
|
||||
key = base64.urlsafe_b64encode(kdf.derive(password.encode()))
|
||||
return key
|
||||
|
||||
|
||||
def encrypt(data, password):
|
||||
from cryptography.fernet import Fernet
|
||||
|
||||
f = Fernet(_get_key(password))
|
||||
if isinstance(data, str):
|
||||
data = data.encode()
|
||||
token = f.encrypt(data).decode()
|
||||
return token
|
||||
|
||||
|
||||
def decrypt(token, password):
|
||||
from cryptography.fernet import Fernet, InvalidToken
|
||||
|
||||
data = ''
|
||||
f = Fernet(_get_key(password))
|
||||
try:
|
||||
data = f.decrypt(token.encode()).decode()
|
||||
except InvalidToken as e:
|
||||
error('Invalid Token')
|
||||
return data
|
||||
|
||||
|
||||
# ~ Classes
|
||||
|
||||
class LOBaseObject(object):
|
||||
|
|
Loading…
Reference in New Issue