|
|
/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
encrypt.c
Abstract:
Helper functions to work with string representations of OWF hashed passwords.
Author:
Ovidiu Temereanca (ovidiut) 27-Mar-2000
Revision History:
<alias> <date> <comments>
--*/
// // Includes //
#pragma once
typedef struct { USHORT Length; USHORT MaximumLength; PWSTR Buffer; } ENCRYPT_UNICODE_STRING, *PENCRYPT_UNICODE_STRING;
#define UNICODE_STRING ENCRYPT_UNICODE_STRING #define PUNICODE_STRING PENCRYPT_UNICODE_STRING #define NTSTATUS LONG
#include <crypt.h>
#undef NTSTATUS #undef UNICODE_STRING #undef PUNICODE_STRING
#include <lmcons.h>
// // Strings //
// None
// // Constants //
// // maximum length in Tchars of a LM password // #define LM_PASSWORD_SIZE_MAX (LM20_PWLEN + 1)
// // length in Tchars of the string-encoded format of *_OWF_PASSWORD // #define STRING_ENCODED_LM_OWF_PWD_LENGTH (sizeof(LM_OWF_PASSWORD) * 2) #define STRING_ENCODED_NT_OWF_PWD_LENGTH (sizeof(NT_OWF_PASSWORD) * 2) #define STRING_ENCODED_PASSWORD_LENGTH (STRING_ENCODED_LM_OWF_PWD_LENGTH + STRING_ENCODED_NT_OWF_PWD_LENGTH) // // size in Tchars of the string-encoded format of *_OWF_PASSWORD // may be used for static allocations // #define STRING_ENCODED_LM_OWF_PWD_SIZE (STRING_ENCODED_LM_OWF_PWD_LENGTH + 1) #define STRING_ENCODED_NT_OWF_PWD_SIZE (STRING_ENCODED_NT_OWF_PWD_LENGTH + 1) // // size in Tchars of the string-encoded format of // LM_OWF_PASSWORD joined with NT_OWF_PASSWORD // may be used for static allocations // #define STRING_ENCODED_PASSWORD_SIZE (STRING_ENCODED_PASSWORD_LENGTH + 1)
// // Macros //
// None
// // Types //
// None
// // Globals //
// None
// // Macro expansion list //
// None
// // Public function prototypes //
DWORD SetLocalUserEncryptedPassword ( IN PCWSTR User, IN PCWSTR OldPassword, IN BOOL OldIsEncrypted, IN PCWSTR NewPassword, IN BOOL NewIsEncrypted );
BOOL CalculateLmOwfPassword ( IN PLM_PASSWORD LmPassword, OUT PLM_OWF_PASSWORD LmOwfPassword );
BOOL CalculateNtOwfPassword ( IN PNT_PASSWORD NtPassword, OUT PNT_OWF_PASSWORD NtOwfPassword );
INT CompareNtPasswords ( IN PNT_OWF_PASSWORD NtOwfPassword1, IN PNT_OWF_PASSWORD NtOwfPassword2 );
INT CompareLmPasswords ( IN PLM_OWF_PASSWORD LmOwfPassword1, IN PLM_OWF_PASSWORD LmOwfPassword2 );
BOOL EncodeLmOwfPasswordA ( IN PCSTR AnsiPassword, OUT PLM_OWF_PASSWORD OwfPassword, OUT PBOOL ComplexNtPassword OPTIONAL );
BOOL EncodeLmOwfPasswordW ( IN PCWSTR Password, OUT PLM_OWF_PASSWORD OwfPassword, OUT PBOOL ComplexNtPassword OPTIONAL );
BOOL EncodeNtOwfPasswordA ( IN PCSTR Password, OUT PNT_OWF_PASSWORD OwfPassword );
BOOL EncodeNtOwfPasswordW ( IN PCWSTR Password, OUT PNT_OWF_PASSWORD OwfPassword );
BOOL StringEncodeOwfPasswordA ( IN PCSTR Password, OUT PSTR EncodedPassword, OUT PBOOL ComplexNtPassword OPTIONAL );
BOOL StringEncodeOwfPasswordW ( IN PCWSTR Password, OUT PWSTR EncodedPassword, OUT PBOOL ComplexNtPassword OPTIONAL );
BOOL StringEncodeLmOwfPasswordA ( IN PCSTR Password, OUT PSTR EncodedPassword, OUT PBOOL ComplexNtPassword OPTIONAL );
BOOL StringEncodeLmOwfPasswordW ( IN PCWSTR Password, OUT PWSTR EncodedPassword, OUT PBOOL ComplexNtPassword OPTIONAL );
BOOL StringEncodeNtOwfPasswordA ( IN PCSTR Password, OUT PSTR EncodedPassword );
BOOL StringEncodeNtOwfPasswordW ( IN PCWSTR Password, OUT PWSTR EncodedPassword );
BOOL StringDecodeOwfPasswordA ( IN PCSTR EncodedOwfPassword, OUT PLM_OWF_PASSWORD LmOwfPassword, OUT PNT_OWF_PASSWORD NtOwfPassword, OUT PBOOL ComplexNtPassword OPTIONAL );
BOOL StringDecodeOwfPasswordW ( IN PCWSTR EncodedOwfPassword, OUT PLM_OWF_PASSWORD LmOwfPassword, OUT PNT_OWF_PASSWORD NtOwfPassword, OUT PBOOL ComplexNtPassword OPTIONAL );
BOOL StringDecodeLmOwfPasswordA ( IN PCSTR EncodedOwfPassword, OUT PLM_OWF_PASSWORD OwfPassword );
BOOL StringDecodeLmOwfPasswordW ( IN PCWSTR EncodedOwfPassword, OUT PLM_OWF_PASSWORD OwfPassword );
BOOL StringDecodeNtOwfPasswordA ( IN PCSTR EncodedOwfPassword, OUT PNT_OWF_PASSWORD OwfPassword );
BOOL StringDecodeNtOwfPasswordW ( IN PCWSTR EncodedOwfPassword, OUT PNT_OWF_PASSWORD OwfPassword );
// // Function name macros //
#ifndef UNICODE
#define EncodeLmOwfPassword EncodeLmOwfPasswordA #define EncodeNtOwfPassword EncodeNtOwfPasswordA #define StringEncodeOwfPassword StringEncodeOwfPasswordA #define StringEncodeLmOwfPassword StringEncodeLmOwfPasswordA #define StringEncodeNtOwfPassword StringEncodeNtOwfPasswordA #define StringDecodeOwfPassword StringDecodeOwfPasswordA #define StringDecodeLmOwfPassword StringDecodeLmOwfPasswordA #define StringDecodeNtOwfPassword StringDecodeNtOwfPasswordA
#else
#define EncodeLmOwfPassword EncodeLmOwfPasswordW #define EncodeNtOwfPassword EncodeNtOwfPasswordW #define StringEncodeOwfPassword StringEncodeOwfPasswordW #define StringEncodeLmOwfPassword StringEncodeLmOwfPasswordW #define StringEncodeNtOwfPassword StringEncodeNtOwfPasswordW #define StringDecodeOwfPassword StringDecodeOwfPasswordW #define StringDecodeLmOwfPassword StringDecodeLmOwfPasswordW #define StringDecodeNtOwfPassword StringDecodeNtOwfPasswordW
#endif
|