summaryrefslogtreecommitdiff
path: root/libcli/auth
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2012-11-29 21:23:30 +0100
committerStefan Metzmacher <metze@samba.org>2012-12-09 19:39:07 +0100
commit429600c5f3079c8433d5a542383908d6ff61fe60 (patch)
tree03a27acf7668602e4147bb9cec6bbd2f2b51ac32 /libcli/auth
parentb6e2be8e147b4d34a0424a8851b03b24f180048c (diff)
downloadsamba-429600c5f3079c8433d5a542383908d6ff61fe60.tar.gz
samba-429600c5f3079c8433d5a542383908d6ff61fe60.tar.bz2
samba-429600c5f3079c8433d5a542383908d6ff61fe60.zip
libcli/auth: add netlogon_creds_aes_{en|de}crypt routines.
Guenther Signed-off-by: Günther Deschner <gd@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
Diffstat (limited to 'libcli/auth')
-rw-r--r--libcli/auth/credentials.c28
-rw-r--r--libcli/auth/proto.h2
2 files changed, 30 insertions, 0 deletions
diff --git a/libcli/auth/credentials.c b/libcli/auth/credentials.c
index dfbfdb356a..be43c95be9 100644
--- a/libcli/auth/credentials.c
+++ b/libcli/auth/credentials.c
@@ -222,6 +222,34 @@ void netlogon_creds_arcfour_crypt(struct netlogon_creds_CredentialState *creds,
data_blob_free(&session_key);
}
+/*
+ AES encrypt a password buffer using the session key
+*/
+void netlogon_creds_aes_encrypt(struct netlogon_creds_CredentialState *creds, uint8_t *data, size_t len)
+{
+ AES_KEY key;
+ uint8_t iv[AES_BLOCK_SIZE];
+
+ AES_set_encrypt_key(creds->session_key, 128, &key);
+ ZERO_STRUCT(iv);
+
+ aes_cfb8_encrypt(data, data, len, &key, iv, AES_ENCRYPT);
+}
+
+/*
+ AES decrypt a password buffer using the session key
+*/
+void netlogon_creds_aes_decrypt(struct netlogon_creds_CredentialState *creds, uint8_t *data, size_t len)
+{
+ AES_KEY key;
+ uint8_t iv[AES_BLOCK_SIZE];
+
+ AES_set_encrypt_key(creds->session_key, 128, &key);
+ ZERO_STRUCT(iv);
+
+ aes_cfb8_encrypt(data, data, len, &key, iv, AES_DECRYPT);
+}
+
/*****************************************************************
The above functions are common to the client and server interface
next comes the client specific functions
diff --git a/libcli/auth/proto.h b/libcli/auth/proto.h
index 37c87b4a74..b9d91d04ea 100644
--- a/libcli/auth/proto.h
+++ b/libcli/auth/proto.h
@@ -16,6 +16,8 @@ void netlogon_creds_des_decrypt_LMKey(struct netlogon_creds_CredentialState *cre
void netlogon_creds_des_encrypt(struct netlogon_creds_CredentialState *creds, struct samr_Password *pass);
void netlogon_creds_des_decrypt(struct netlogon_creds_CredentialState *creds, struct samr_Password *pass);
void netlogon_creds_arcfour_crypt(struct netlogon_creds_CredentialState *creds, uint8_t *data, size_t len);
+void netlogon_creds_aes_encrypt(struct netlogon_creds_CredentialState *creds, uint8_t *data, size_t len);
+void netlogon_creds_aes_decrypt(struct netlogon_creds_CredentialState *creds, uint8_t *data, size_t len);
/*****************************************************************
The above functions are common to the client and server interface