libcli/auth: add netlogon_creds_aes_{en|de}crypt routines.
authorGünther Deschner <gd@samba.org>
Thu, 29 Nov 2012 20:23:30 +0000 (21:23 +0100)
committerStefan Metzmacher <metze@samba.org>
Sun, 9 Dec 2012 18:39:07 +0000 (19:39 +0100)
Guenther

Signed-off-by: Günther Deschner <gd@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
libcli/auth/credentials.c
libcli/auth/proto.h

index dfbfdb356aa65abc3027f4581491a685a15d43f1..be43c95be9d593b2ff9021cfaad00bc0b330e417 100644 (file)
@@ -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
index 37c87b4a74f9a5cba1387f75a400238e55d3822c..b9d91d04ea58efe881a922090a30a7309c92e5a5 100644 (file)
@@ -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