Smail/test/tools/decrypt_external.py

42 lines
1.4 KiB
Python

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('47.108.78.12', port=22, username='root', password='10102442Lb!', timeout=10)
s = '''import sqlite3, base64, glob
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
conn = sqlite3.connect('/opt/smail/data/smail.db')
c = conn.cursor()
c.execute('SELECT id, user_id, email_ciphertext, status, email_type FROM external_email')
rows = c.fetchall()
key_files = glob.glob('/opt/smail/ssl/external-email-encryption/*.key')
print('Key files:', key_files)
if key_files:
with open(key_files[0], 'rb') as f:
key = f.read()
aesgcm = AESGCM(key)
for r in rows:
enc_str = r[2]
parts = enc_str.split(':')
b64 = parts[3]
padded = b64 + '=' * (-len(b64) % 4)
raw = base64.urlsafe_b64decode(padded)
nonce = raw[:12]
ct = raw[12:]
try:
pt = aesgcm.decrypt(nonce, ct, b'smail-external-email-v1')
print(f'User {r[1]} ({r[4]}, {r[3]}): {pt.decode()}')
except Exception as e:
print(f'User {r[1]} decrypt error: {e}')
'''
sftp = ssh.open_sftp()
with sftp.file('/tmp/decrypt_emails.py', 'w') as f:
f.write(s)
sftp.close()
_, out, err = ssh.exec_command('python3 /tmp/decrypt_emails.py')
print('OUT:\n', out.read().decode())
print('ERR:\n', err.read().decode())
ssh.close()