Functions for encrypt and decrypt

This commit is contained in:
Mauricio Baeza 2020-11-06 20:43:07 -06:00
parent bb3a3c8bf7
commit 3c9f0cc0f9
3 changed files with 48 additions and 59 deletions

View File

@ -13,6 +13,3 @@
**LTC**: `MBcgQ3LQJA4W2wsXknTdm2fxRSysLaBJHS`
**ETH**: `0x61a4f614a30ff686445751ed8328b82b77ecfc69`
PayPal :( donate ATT elmau DOT net

View File

@ -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):

View File

@ -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):