Archived
62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
# coding: utf-8
|
|
import base64
|
|
import logging
|
|
|
|
from neuf_kerberos.utils import add_kerberos_principal
|
|
from neuf_userinfo import rijndael
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def add_new_user_sync(user):
|
|
"""
|
|
- Create kerberos principal and set password
|
|
- Create/set RADIUS user and password
|
|
"""
|
|
# Requires raw password
|
|
add_kerberos_principal(user['username'], user['password'])
|
|
|
|
"""
|
|
Rijndael stuff, thank you SO!
|
|
Ref: http://stackoverflow.com/questions/8217269/decrypting-strings-in-python-that-were-encrypted-with-mcrypt-rijndael-256-in-php#answers-header
|
|
"""
|
|
|
|
KEY_SIZE = 16
|
|
BLOCK_SIZE = 32
|
|
|
|
|
|
def encrypt_rijndael(key, plaintext):
|
|
padded_key = key.ljust(KEY_SIZE, '\0')
|
|
padded_text = plaintext + (BLOCK_SIZE - len(plaintext) % BLOCK_SIZE) * '\0'
|
|
|
|
# could also be one of
|
|
# if len(plaintext) % BLOCK_SIZE != 0:
|
|
# padded_text = plaintext.ljust((len(plaintext) / BLOCK_SIZE) + 1 * BLOCKSIZE), '\0')
|
|
# -OR-
|
|
# padded_text = plaintext.ljust((len(plaintext) + (BLOCK_SIZE - len(plaintext) % BLOCK_SIZE)), '\0')
|
|
|
|
r = rijndael.rijndael(padded_key, BLOCK_SIZE)
|
|
|
|
ciphertext = ''
|
|
for start in range(0, len(padded_text), BLOCK_SIZE):
|
|
ciphertext += r.encrypt(padded_text[start:start+BLOCK_SIZE])
|
|
|
|
encoded = base64.b64encode(ciphertext)
|
|
|
|
return encoded
|
|
|
|
|
|
def decrypt_rijndael(key, encoded):
|
|
padded_key = key.ljust(KEY_SIZE, '\0')
|
|
|
|
ciphertext = base64.b64decode(encoded)
|
|
|
|
r = rijndael.rijndael(padded_key, BLOCK_SIZE)
|
|
|
|
padded_text = ''
|
|
for start in range(0, len(ciphertext), BLOCK_SIZE):
|
|
padded_text += r.decrypt(ciphertext[start:start+BLOCK_SIZE])
|
|
|
|
plaintext = padded_text.split('\x00', 1)[0]
|
|
return plaintext
|