You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
781 lines
19 KiB
781 lines
19 KiB
/*++
|
|
|
|
Copyright (c) 1989 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
owdcrypt.c
|
|
|
|
Abstract:
|
|
|
|
Contains functions that reversibly encrypt OwfPasswords
|
|
|
|
RtlEncryptLmOwfPwdWithLmOwfPwd
|
|
RtlDecryptLmOwfPwdWithLmOwfPwd
|
|
|
|
RtlEncryptLmOwfPwdWithLmSesKey
|
|
RtlDecryptLmOwfPwdWithLmSesKey
|
|
|
|
RtlEncryptLmOwfPwdWithUserKey
|
|
RtlDecryptLmOwfPwdWithUserKey
|
|
|
|
RtlEncryptLmOwfPwdWithIndex
|
|
RtlDecryptLmOwfPwdWithIndex
|
|
|
|
RtlEncryptNtOwfPwdWithNtOwfPwd
|
|
RtlDecryptNtOwfPwdWithNtOwfPwd
|
|
|
|
RtlEncryptNtOwfPwdWithNtSesKey
|
|
RtlDecryptNtOwfPwdWithNtSesKey
|
|
|
|
RtlEncryptNtOwfPwdWithUserKey
|
|
RtlDecryptNtOwfPwdWithUserKey
|
|
|
|
RtlEncryptNtOwfPwdWithIndex
|
|
RtlDecryptNtOwfPwdWithIndex
|
|
|
|
|
|
Author:
|
|
|
|
David Chalmers (Davidc) 10-21-91
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include <nt.h>
|
|
#include <ntrtl.h>
|
|
#include <crypt.h>
|
|
|
|
|
|
NTSTATUS
|
|
RtlEncryptLmOwfPwdWithLmOwfPwd(
|
|
IN PLM_OWF_PASSWORD DataLmOwfPassword,
|
|
IN PLM_OWF_PASSWORD KeyLmOwfPassword,
|
|
OUT PENCRYPTED_LM_OWF_PASSWORD EncryptedLmOwfPassword
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Encrypts one OwfPassword with another
|
|
|
|
Arguments:
|
|
|
|
DataLmOwfPassword - OwfPassword to be encrypted
|
|
|
|
KeyLmOwfPassword - OwfPassword to be used as a key to the encryption
|
|
|
|
EncryptedLmOwfPassword - The encrypted OwfPassword is returned here.
|
|
|
|
|
|
Return Values:
|
|
|
|
STATUS_SUCCESS - The function completed successfully. The encrypted
|
|
OwfPassword is in EncryptedLmOwfPassword
|
|
|
|
STATUS_UNSUCCESSFUL - Something failed. The EncryptedLmOwfPassword is undefined.
|
|
--*/
|
|
|
|
{
|
|
NTSTATUS Status;
|
|
|
|
Status = RtlEncryptBlock((PCLEAR_BLOCK)&(DataLmOwfPassword->data[0]),
|
|
&(((PBLOCK_KEY)(KeyLmOwfPassword->data))[0]),
|
|
&(EncryptedLmOwfPassword->data[0]));
|
|
if (!NT_SUCCESS(Status)) {
|
|
return(Status);
|
|
}
|
|
|
|
Status = RtlEncryptBlock((PCLEAR_BLOCK)&(DataLmOwfPassword->data[1]),
|
|
&(((PBLOCK_KEY)(KeyLmOwfPassword->data))[1]),
|
|
&(EncryptedLmOwfPassword->data[1]));
|
|
|
|
return(Status);
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
|
RtlDecryptLmOwfPwdWithLmOwfPwd(
|
|
IN PENCRYPTED_LM_OWF_PASSWORD EncryptedLmOwfPassword,
|
|
IN PLM_OWF_PASSWORD KeyLmOwfPassword,
|
|
OUT PLM_OWF_PASSWORD DataLmOwfPassword
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Decrypts one OwfPassword with another
|
|
|
|
Arguments:
|
|
|
|
EncryptedLmOwfPassword - The ecnrypted OwfPassword to be decrypted
|
|
|
|
KeyLmOwfPassword - OwfPassword to be used as a key to the encryption
|
|
|
|
DataLmOwfPassword - The decrpted OwfPassword is returned here.
|
|
|
|
|
|
Return Values:
|
|
|
|
STATUS_SUCCESS - The function completed successfully. The decrypted
|
|
OwfPassword is in DataLmOwfPassword
|
|
|
|
STATUS_UNSUCCESSFUL - Something failed. The DataLmOwfPassword is undefined.
|
|
--*/
|
|
|
|
{
|
|
NTSTATUS Status;
|
|
|
|
Status = RtlDecryptBlock(&(EncryptedLmOwfPassword->data[0]),
|
|
&(((PBLOCK_KEY)(KeyLmOwfPassword->data))[0]),
|
|
(PCLEAR_BLOCK)&(DataLmOwfPassword->data[0]));
|
|
if (!NT_SUCCESS(Status)) {
|
|
return(Status);
|
|
}
|
|
|
|
Status = RtlDecryptBlock(&(EncryptedLmOwfPassword->data[1]),
|
|
&(((PBLOCK_KEY)(KeyLmOwfPassword->data))[1]),
|
|
(PCLEAR_BLOCK)&(DataLmOwfPassword->data[1]));
|
|
|
|
return(Status);
|
|
}
|
|
|
|
|
|
|
|
|
|
NTSTATUS
|
|
RtlEncryptNtOwfPwdWithNtOwfPwd(
|
|
IN PNT_OWF_PASSWORD DataNtOwfPassword,
|
|
IN PNT_OWF_PASSWORD KeyNtOwfPassword,
|
|
OUT PENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Encrypts one OwfPassword with another
|
|
|
|
Arguments:
|
|
|
|
DataLmOwfPassword - OwfPassword to be encrypted
|
|
|
|
KeyLmOwfPassword - OwfPassword to be used as a key to the encryption
|
|
|
|
EncryptedLmOwfPassword - The encrypted OwfPassword is returned here.
|
|
|
|
|
|
Return Values:
|
|
|
|
STATUS_SUCCESS - The function completed successfully. The encrypted
|
|
OwfPassword is in EncryptedLmOwfPassword
|
|
|
|
STATUS_UNSUCCESSFUL - Something failed. The EncryptedLmOwfPassword is undefined.
|
|
--*/
|
|
{
|
|
return(RtlEncryptLmOwfPwdWithLmOwfPwd(
|
|
(PLM_OWF_PASSWORD)DataNtOwfPassword,
|
|
(PLM_OWF_PASSWORD)KeyNtOwfPassword,
|
|
(PENCRYPTED_LM_OWF_PASSWORD)EncryptedNtOwfPassword));
|
|
}
|
|
|
|
|
|
NTSTATUS
|
|
RtlDecryptNtOwfPwdWithNtOwfPwd(
|
|
IN PENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword,
|
|
IN PNT_OWF_PASSWORD KeyNtOwfPassword,
|
|
OUT PNT_OWF_PASSWORD DataNtOwfPassword
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Decrypts one OwfPassword with another
|
|
|
|
Arguments:
|
|
|
|
EncryptedLmOwfPassword - The ecnrypted OwfPassword to be decrypted
|
|
|
|
KeyLmOwfPassword - OwfPassword to be used as a key to the encryption
|
|
|
|
DataLmOwfPassword - The decrpted OwfPassword is returned here.
|
|
|
|
|
|
Return Values:
|
|
|
|
STATUS_SUCCESS - The function completed successfully. The decrypted
|
|
OwfPassword is in DataLmOwfPassword
|
|
|
|
STATUS_UNSUCCESSFUL - Something failed. The DataLmOwfPassword is undefined.
|
|
--*/
|
|
|
|
{
|
|
return(RtlDecryptLmOwfPwdWithLmOwfPwd(
|
|
(PENCRYPTED_LM_OWF_PASSWORD)EncryptedNtOwfPassword,
|
|
(PLM_OWF_PASSWORD)KeyNtOwfPassword,
|
|
(PLM_OWF_PASSWORD)DataNtOwfPassword));
|
|
}
|
|
|
|
|
|
|
|
|
|
NTSTATUS
|
|
RtlEncryptLmOwfPwdWithLmSesKey(
|
|
IN PLM_OWF_PASSWORD LmOwfPassword,
|
|
IN PLM_SESSION_KEY LmSessionKey,
|
|
OUT PENCRYPTED_LM_OWF_PASSWORD EncryptedLmOwfPassword
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Encrypts an OwfPassword with a session key
|
|
|
|
Arguments:
|
|
|
|
LmOwfPassword - OwfPassword to be encrypted
|
|
|
|
LmSessionKey - key to the encryption
|
|
|
|
EncryptedLmOwfPassword - The ecnrypted OwfPassword is returned here.
|
|
|
|
|
|
Return Values:
|
|
|
|
STATUS_SUCCESS - The function completed successfully. The encrypted
|
|
OwfPassword is in EncryptedLmOwfPassword
|
|
|
|
STATUS_UNSUCCESSFUL - Something failed. The LMEncryptedLmOwfPassword is undefined.
|
|
--*/
|
|
{
|
|
NTSTATUS Status;
|
|
|
|
Status = RtlEncryptBlock((PCLEAR_BLOCK)&(LmOwfPassword->data[0]),
|
|
(PBLOCK_KEY)LmSessionKey,
|
|
&(EncryptedLmOwfPassword->data[0]));
|
|
if (!NT_SUCCESS(Status)) {
|
|
return(Status);
|
|
}
|
|
|
|
Status = RtlEncryptBlock((PCLEAR_BLOCK)&(LmOwfPassword->data[1]),
|
|
(PBLOCK_KEY)LmSessionKey,
|
|
&(EncryptedLmOwfPassword->data[1]));
|
|
|
|
return(Status);
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
|
RtlDecryptLmOwfPwdWithLmSesKey(
|
|
IN PENCRYPTED_LM_OWF_PASSWORD EncryptedLmOwfPassword,
|
|
IN PLM_SESSION_KEY LmSessionKey,
|
|
OUT PLM_OWF_PASSWORD LmOwfPassword
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Decrypts one OwfPassword with a session key
|
|
|
|
Arguments:
|
|
|
|
EncryptedLmOwfPassword - The ecnrypted OwfPassword to be decrypted
|
|
|
|
LmSessionKey - key to the encryption
|
|
|
|
LmOwfPassword - The decrypted OwfPassword is returned here.
|
|
|
|
|
|
Return Values:
|
|
|
|
STATUS_SUCCESS - The function completed successfully. The decrypted
|
|
OwfPassword is in LmOwfPassword
|
|
|
|
STATUS_UNSUCCESSFUL - Something failed. The LmOwfPassword is undefined.
|
|
--*/
|
|
{
|
|
NTSTATUS Status;
|
|
|
|
|
|
Status = RtlDecryptBlock(&(EncryptedLmOwfPassword->data[0]),
|
|
(PBLOCK_KEY)LmSessionKey,
|
|
(PCLEAR_BLOCK)&(LmOwfPassword->data[0]));
|
|
if (!NT_SUCCESS(Status)) {
|
|
return(Status);
|
|
}
|
|
|
|
Status = RtlDecryptBlock(&(EncryptedLmOwfPassword->data[1]),
|
|
(PBLOCK_KEY)LmSessionKey,
|
|
(PCLEAR_BLOCK)&(LmOwfPassword->data[1]));
|
|
|
|
return(Status);
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
|
RtlEncryptNtOwfPwdWithNtSesKey(
|
|
IN PNT_OWF_PASSWORD NtOwfPassword,
|
|
IN PNT_SESSION_KEY NtSessionKey,
|
|
OUT PENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Encrypts an OwfPassword with a session key
|
|
|
|
Arguments:
|
|
|
|
NtOwfPassword - OwfPassword to be encrypted
|
|
|
|
NtSessionKey - key to the encryption
|
|
|
|
EncryptedNtOwfPassword - The encrypted OwfPassword is returned here.
|
|
|
|
|
|
Return Values:
|
|
|
|
STATUS_SUCCESS - The function completed successfully. The encrypted
|
|
OwfPassword is in EncryptedNtOwfPassword
|
|
|
|
STATUS_UNSUCCESSFUL - Something failed. The EncryptedNtOwfPassword is undefined.
|
|
--*/
|
|
{
|
|
ASSERT(sizeof(LM_OWF_PASSWORD) == sizeof(NT_OWF_PASSWORD));
|
|
ASSERT(sizeof(LM_SESSION_KEY) == sizeof(NT_SESSION_KEY));
|
|
ASSERT(sizeof(ENCRYPTED_LM_OWF_PASSWORD) == sizeof(ENCRYPTED_NT_OWF_PASSWORD));
|
|
|
|
return(RtlEncryptLmOwfPwdWithLmSesKey(
|
|
(PLM_OWF_PASSWORD)NtOwfPassword,
|
|
(PLM_SESSION_KEY)NtSessionKey,
|
|
(PENCRYPTED_LM_OWF_PASSWORD)EncryptedNtOwfPassword));
|
|
}
|
|
|
|
|
|
NTSTATUS
|
|
RtlDecryptNtOwfPwdWithNtSesKey(
|
|
IN PENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword,
|
|
IN PNT_SESSION_KEY NtSessionKey,
|
|
OUT PNT_OWF_PASSWORD NtOwfPassword
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Decrypts one OwfPassword with a session key
|
|
|
|
Arguments:
|
|
|
|
EncryptedNtOwfPassword - The ecnrypted OwfPassword to be decrypted
|
|
|
|
NtSessionKey - key to the encryption
|
|
|
|
NtOwfPassword - The decrypted OwfPassword is returned here.
|
|
|
|
|
|
Return Values:
|
|
|
|
STATUS_SUCCESS - The function completed successfully. The decrypted
|
|
OwfPassword is in NtOwfPassword
|
|
|
|
STATUS_UNSUCCESSFUL - Something failed. The NtOwfPassword is undefined.
|
|
--*/
|
|
{
|
|
ASSERT(sizeof(LM_OWF_PASSWORD) == sizeof(NT_OWF_PASSWORD));
|
|
ASSERT(sizeof(LM_SESSION_KEY) == sizeof(NT_SESSION_KEY));
|
|
ASSERT(sizeof(ENCRYPTED_LM_OWF_PASSWORD) == sizeof(ENCRYPTED_NT_OWF_PASSWORD));
|
|
|
|
return(RtlDecryptLmOwfPwdWithLmSesKey(
|
|
(PENCRYPTED_LM_OWF_PASSWORD)EncryptedNtOwfPassword,
|
|
(PLM_SESSION_KEY)NtSessionKey,
|
|
(PLM_OWF_PASSWORD)NtOwfPassword));
|
|
}
|
|
|
|
|
|
|
|
VOID
|
|
KeysFromIndex(
|
|
IN PCRYPT_INDEX Index,
|
|
OUT BLOCK_KEY Key[2])
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Helper function - generates 2 keys from an index value
|
|
|
|
--*/
|
|
{
|
|
PCHAR pKey, pIndex;
|
|
PCHAR IndexStart = (PCHAR)&(Index[0]);
|
|
PCHAR IndexEnd = (PCHAR)&(Index[1]);
|
|
PCHAR KeyStart = (PCHAR)&(Key[0]);
|
|
PCHAR KeyEnd = (PCHAR)&(Key[2]);
|
|
|
|
// Calculate the keys by concatenating the index with itself
|
|
|
|
pKey = KeyStart;
|
|
pIndex = IndexStart;
|
|
|
|
while (pKey < KeyEnd) {
|
|
|
|
*pKey++ = *pIndex++;
|
|
|
|
if (pIndex == IndexEnd) {
|
|
|
|
// Start at beginning of index again
|
|
pIndex = IndexStart;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
|
RtlEncryptLmOwfPwdWithIndex(
|
|
IN PLM_OWF_PASSWORD LmOwfPassword,
|
|
IN PCRYPT_INDEX Index,
|
|
OUT PENCRYPTED_LM_OWF_PASSWORD EncryptedLmOwfPassword
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Encrypts an OwfPassword with an index
|
|
|
|
Arguments:
|
|
|
|
LmOwfPassword - OwfPassword to be encrypted
|
|
|
|
INDEX - value to be used as encryption key
|
|
|
|
EncryptedLmOwfPassword - The ecnrypted OwfPassword is returned here.
|
|
|
|
|
|
Return Values:
|
|
|
|
STATUS_SUCCESS - The function completed successfully. The encrypted
|
|
OwfPassword is in EncryptedLmOwfPassword
|
|
|
|
STATUS_UNSUCCESSFUL - Something failed. The EncryptedLmOwfPassword is undefined.
|
|
--*/
|
|
{
|
|
NTSTATUS Status;
|
|
BLOCK_KEY Key[2];
|
|
|
|
// Calculate the keys
|
|
|
|
KeysFromIndex(Index, &(Key[0]));
|
|
|
|
// Use the keys
|
|
|
|
Status = RtlEncryptBlock((PCLEAR_BLOCK)&(LmOwfPassword->data[0]),
|
|
&(Key[0]),
|
|
&(EncryptedLmOwfPassword->data[0]));
|
|
if (!NT_SUCCESS(Status)) {
|
|
return(Status);
|
|
}
|
|
|
|
Status = RtlEncryptBlock((PCLEAR_BLOCK)&(LmOwfPassword->data[1]),
|
|
&(Key[1]),
|
|
&(EncryptedLmOwfPassword->data[1]));
|
|
|
|
return(Status);
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
|
RtlDecryptLmOwfPwdWithIndex(
|
|
IN PENCRYPTED_LM_OWF_PASSWORD EncryptedLmOwfPassword,
|
|
IN PCRYPT_INDEX Index,
|
|
OUT PLM_OWF_PASSWORD LmOwfPassword
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Decrypts an OwfPassword with an index
|
|
|
|
Arguments:
|
|
|
|
EncryptedLmOwfPassword - The encrypted OwfPassword to be decrypted
|
|
|
|
INDEX - value to be used as decryption key
|
|
|
|
LmOwfPassword - Decrypted OwfPassword is returned here
|
|
|
|
|
|
Return Values:
|
|
|
|
STATUS_SUCCESS - The function completed successfully. The decrypted
|
|
OwfPassword is in LmOwfPassword
|
|
|
|
STATUS_UNSUCCESSFUL - Something failed. The LmOwfPassword is undefined.
|
|
--*/
|
|
{
|
|
NTSTATUS Status;
|
|
BLOCK_KEY Key[2];
|
|
|
|
// Calculate the keys
|
|
|
|
KeysFromIndex(Index, &(Key[0]));
|
|
|
|
// Use the keys
|
|
|
|
Status = RtlDecryptBlock(&(EncryptedLmOwfPassword->data[0]),
|
|
&(Key[0]),
|
|
(PCLEAR_BLOCK)&(LmOwfPassword->data[0]));
|
|
if (!NT_SUCCESS(Status)) {
|
|
return(Status);
|
|
}
|
|
|
|
Status = RtlDecryptBlock(&(EncryptedLmOwfPassword->data[1]),
|
|
&(Key[1]),
|
|
(PCLEAR_BLOCK)&(LmOwfPassword->data[1]));
|
|
|
|
return(Status);
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
|
RtlEncryptNtOwfPwdWithIndex(
|
|
IN PNT_OWF_PASSWORD NtOwfPassword,
|
|
IN PCRYPT_INDEX Index,
|
|
OUT PENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Encrypts an OwfPassword with an index
|
|
|
|
Arguments:
|
|
|
|
NtOwfPassword - OwfPassword to be encrypted
|
|
|
|
Index - value to be used as encryption key
|
|
|
|
EncryptedNtOwfPassword - The encrypted OwfPassword is returned here.
|
|
|
|
|
|
Return Values:
|
|
|
|
STATUS_SUCCESS - The function completed successfully. The encrypted
|
|
OwfPassword is in EncryptedNtOwfPassword
|
|
|
|
STATUS_UNSUCCESSFUL - Something failed. The EncryptedNtOwfPassword is undefined.
|
|
--*/
|
|
{
|
|
ASSERT(sizeof(LM_OWF_PASSWORD) == sizeof(NT_OWF_PASSWORD));
|
|
ASSERT(sizeof(ENCRYPTED_LM_OWF_PASSWORD) == sizeof(ENCRYPTED_NT_OWF_PASSWORD));
|
|
|
|
return(RtlEncryptLmOwfPwdWithIndex(
|
|
(PLM_OWF_PASSWORD)NtOwfPassword,
|
|
Index,
|
|
(PENCRYPTED_LM_OWF_PASSWORD)EncryptedNtOwfPassword));
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
|
RtlDecryptNtOwfPwdWithIndex(
|
|
IN PENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword,
|
|
IN PCRYPT_INDEX Index,
|
|
OUT PNT_OWF_PASSWORD NtOwfPassword
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Decrypts an NtOwfPassword with an index
|
|
|
|
Arguments:
|
|
|
|
EncryptedNtOwfPassword - The encrypted OwfPassword to be decrypted
|
|
|
|
Index - value to be used as decryption key
|
|
|
|
NtOwfPassword - Decrypted NtOwfPassword is returned here
|
|
|
|
|
|
Return Values:
|
|
|
|
STATUS_SUCCESS - The function completed successfully. The decrypted
|
|
OwfPassword is in NtOwfPassword
|
|
|
|
STATUS_UNSUCCESSFUL - Something failed. The NtOwfPassword is undefined.
|
|
--*/
|
|
{
|
|
ASSERT(sizeof(LM_OWF_PASSWORD) == sizeof(NT_OWF_PASSWORD));
|
|
ASSERT(sizeof(ENCRYPTED_LM_OWF_PASSWORD) == sizeof(ENCRYPTED_NT_OWF_PASSWORD));
|
|
|
|
return(RtlDecryptLmOwfPwdWithIndex(
|
|
(PENCRYPTED_LM_OWF_PASSWORD)EncryptedNtOwfPassword,
|
|
Index,
|
|
(PLM_OWF_PASSWORD)NtOwfPassword));
|
|
}
|
|
|
|
|
|
|
|
|
|
NTSTATUS
|
|
RtlEncryptLmOwfPwdWithUserKey(
|
|
IN PLM_OWF_PASSWORD LmOwfPassword,
|
|
IN PUSER_SESSION_KEY UserSessionKey,
|
|
OUT PENCRYPTED_LM_OWF_PASSWORD EncryptedLmOwfPassword
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Encrypts an OwfPassword with a session key
|
|
|
|
Arguments:
|
|
|
|
LmOwfPassword - OwfPassword to be encrypted
|
|
|
|
UserSessionKey - key to the encryption
|
|
|
|
EncryptedLmOwfPassword - The encrypted OwfPassword is returned here.
|
|
|
|
|
|
Return Values:
|
|
|
|
STATUS_SUCCESS - The function completed successfully. The encrypted
|
|
OwfPassword is in EncryptedLmOwfPassword
|
|
|
|
STATUS_UNSUCCESSFUL - Something failed. The EncryptedLmOwfPassword is undefined.
|
|
--*/
|
|
{
|
|
ASSERT(sizeof(USER_SESSION_KEY) == sizeof(LM_OWF_PASSWORD));
|
|
|
|
return(RtlEncryptLmOwfPwdWithLmOwfPwd(LmOwfPassword,
|
|
(PLM_OWF_PASSWORD)UserSessionKey,
|
|
EncryptedLmOwfPassword));
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
|
RtlDecryptLmOwfPwdWithUserKey(
|
|
IN PENCRYPTED_LM_OWF_PASSWORD EncryptedLmOwfPassword,
|
|
IN PUSER_SESSION_KEY UserSessionKey,
|
|
OUT PLM_OWF_PASSWORD LmOwfPassword
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Decrypts one OwfPassword with a session key
|
|
|
|
Arguments:
|
|
|
|
EncryptedLmOwfPassword - The ecnrypted OwfPassword to be decrypted
|
|
|
|
UserSessionKey - key to the encryption
|
|
|
|
LmOwfPassword - The decrypted OwfPassword is returned here.
|
|
|
|
|
|
Return Values:
|
|
|
|
STATUS_SUCCESS - The function completed successfully. The decrypted
|
|
OwfPassword is in LmOwfPassword
|
|
|
|
STATUS_UNSUCCESSFUL - Something failed. The LmOwfPassword is undefined.
|
|
--*/
|
|
{
|
|
ASSERT(sizeof(USER_SESSION_KEY) == sizeof(LM_OWF_PASSWORD));
|
|
|
|
return(RtlDecryptLmOwfPwdWithLmOwfPwd(EncryptedLmOwfPassword,
|
|
(PLM_OWF_PASSWORD)UserSessionKey,
|
|
LmOwfPassword));
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
|
RtlEncryptNtOwfPwdWithUserKey(
|
|
IN PNT_OWF_PASSWORD NtOwfPassword,
|
|
IN PUSER_SESSION_KEY UserSessionKey,
|
|
OUT PENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Encrypts an OwfPassword with a user session key
|
|
|
|
Arguments:
|
|
|
|
NtOwfPassword - OwfPassword to be encrypted
|
|
|
|
UserSessionKey - key to the encryption
|
|
|
|
EncryptedNtOwfPassword - The encrypted OwfPassword is returned here.
|
|
|
|
|
|
Return Values:
|
|
|
|
STATUS_SUCCESS - The function completed successfully. The encrypted
|
|
OwfPassword is in EncryptedNtOwfPassword
|
|
|
|
STATUS_UNSUCCESSFUL - Something failed. The EncryptedNtOwfPassword is undefined.
|
|
--*/
|
|
{
|
|
ASSERT(sizeof(NT_OWF_PASSWORD) == sizeof(LM_OWF_PASSWORD));
|
|
ASSERT(sizeof(ENCRYPTED_NT_OWF_PASSWORD) == sizeof(ENCRYPTED_LM_OWF_PASSWORD));
|
|
|
|
return(RtlEncryptLmOwfPwdWithUserKey(
|
|
(PLM_OWF_PASSWORD)NtOwfPassword,
|
|
UserSessionKey,
|
|
(PENCRYPTED_LM_OWF_PASSWORD)EncryptedNtOwfPassword));
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
|
RtlDecryptNtOwfPwdWithUserKey(
|
|
IN PENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword,
|
|
IN PUSER_SESSION_KEY UserSessionKey,
|
|
OUT PNT_OWF_PASSWORD NtOwfPassword
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Decrypts one OwfPassword with a user session key
|
|
|
|
Arguments:
|
|
|
|
EncryptedNtOwfPassword - The ecnrypted OwfPassword to be decrypted
|
|
|
|
UserSessionKey - key to the encryption
|
|
|
|
NtOwfPassword - The decrypted OwfPassword is returned here.
|
|
|
|
|
|
Return Values:
|
|
|
|
STATUS_SUCCESS - The function completed successfully. The decrypted
|
|
OwfPassword is in NtOwfPassword
|
|
|
|
STATUS_UNSUCCESSFUL - Something failed. The NtOwfPassword is undefined.
|
|
--*/
|
|
{
|
|
ASSERT(sizeof(NT_OWF_PASSWORD) == sizeof(LM_OWF_PASSWORD));
|
|
ASSERT(sizeof(ENCRYPTED_NT_OWF_PASSWORD) == sizeof(ENCRYPTED_LM_OWF_PASSWORD));
|
|
|
|
return(RtlDecryptLmOwfPwdWithUserKey(
|
|
(PENCRYPTED_LM_OWF_PASSWORD)EncryptedNtOwfPassword,
|
|
UserSessionKey,
|
|
(PLM_OWF_PASSWORD)NtOwfPassword));
|
|
}
|
|
|