134 lines
2.9 KiB
C
134 lines
2.9 KiB
C
|
//+-----------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
//
|
||
|
// Copyright (c) Microsoft Corporation 1992 - 1996
|
||
|
//
|
||
|
// File: kerbcred.h
|
||
|
//
|
||
|
// Contents: structures for kerberos primary and supplemental credentials
|
||
|
//
|
||
|
//
|
||
|
// History: 20-Aug-1996 MikeSw Created
|
||
|
//
|
||
|
//------------------------------------------------------------------------
|
||
|
|
||
|
#ifndef __KERBCRED_H__
|
||
|
#define __KERBCRED_H__
|
||
|
|
||
|
|
||
|
//
|
||
|
// Kerberos primary credentials store keys suitable for different
|
||
|
// encryption types.
|
||
|
//
|
||
|
#ifndef _KRB5_Module_H_
|
||
|
typedef struct _KERB_RPC_OCTET_STRING {
|
||
|
unsigned long length;
|
||
|
#ifdef MIDL_PASS
|
||
|
[size_is(length)]
|
||
|
#endif // MIDL_PASS
|
||
|
unsigned char *value;
|
||
|
} KERB_RPC_OCTET_STRING;
|
||
|
|
||
|
typedef struct _KERB_ENCRYPTION_KEY {
|
||
|
long keytype;
|
||
|
KERB_RPC_OCTET_STRING keyvalue;
|
||
|
} KERB_ENCRYPTION_KEY;
|
||
|
#endif // _KRB5_Module_H_
|
||
|
|
||
|
|
||
|
typedef struct _KERB_KEY_DATA {
|
||
|
UNICODE_STRING Salt;
|
||
|
KERB_ENCRYPTION_KEY Key;
|
||
|
} KERB_KEY_DATA, *PKERB_KEY_DATA;
|
||
|
|
||
|
typedef struct _KERB_STORED_CREDENTIAL {
|
||
|
USHORT Revision;
|
||
|
USHORT Flags;
|
||
|
USHORT CredentialCount;
|
||
|
USHORT OldCredentialCount;
|
||
|
UNICODE_STRING DefaultSalt;
|
||
|
#ifdef MIDL_PASS
|
||
|
[size_is(CredentialCount + OldCredentialCount)]
|
||
|
KERB_KEY_DATA Credentials[*];
|
||
|
#else
|
||
|
KERB_KEY_DATA Credentials[ANYSIZE_ARRAY];
|
||
|
#endif // MIDL_PASS
|
||
|
|
||
|
} KERB_STORED_CREDENTIAL, *PKERB_STORED_CREDENTIAL;
|
||
|
|
||
|
|
||
|
#define KERB_PRIMARY_CRED_OWF_ONLY 2
|
||
|
#define KERB_PRIMARY_CRED_REVISION 3
|
||
|
|
||
|
//
|
||
|
// Flags for setting account keys
|
||
|
//
|
||
|
|
||
|
#define KERB_SET_KEYS_REPLACE 0x1
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// KERB_STORED_CREDENTIALS are stored in the DS (blob), so
|
||
|
// they've got to be stored in 32 bit format, for W2k and
|
||
|
// 32bit DC compatibility. 7/6/2000 - TS
|
||
|
//
|
||
|
|
||
|
#define KERB_KEY_DATA32_SIZE 20
|
||
|
#define KERB_STORED_CREDENTIAL32_SIZE 16
|
||
|
|
||
|
#pragma pack(4)
|
||
|
|
||
|
typedef struct _KERB_ENCRYPTION_KEY32 {
|
||
|
LONG keytype;
|
||
|
ULONG keyvaluelength; // KERB_RPC_OCTET_STRING32
|
||
|
ULONG keyvaluevalue;
|
||
|
} KERB_ENCRYPTION_KEY32;
|
||
|
|
||
|
typedef struct _KERB_KEY_DATA32 {
|
||
|
UNICODE_STRING32 Salt;
|
||
|
KERB_ENCRYPTION_KEY32 Key; // KERB_ENCRYPTION_KEY32
|
||
|
} KERB_KEY_DATA32, *PKERB_KEY_DATA32;
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct _KERB_STORED_CREDENTIAL32 {
|
||
|
USHORT Revision;
|
||
|
USHORT Flags;
|
||
|
USHORT CredentialCount;
|
||
|
USHORT OldCredentialCount;
|
||
|
UNICODE_STRING32 DefaultSalt;
|
||
|
#ifdef MIDL_PASS
|
||
|
[size_is(CredentialCount + OldCredentialCount)]
|
||
|
KERB_KEY_DATA32 Credentials[*]; // KERB_KEY_DATA32
|
||
|
#else
|
||
|
KERB_KEY_DATA32 Credentials[ANYSIZE_ARRAY];
|
||
|
#endif // MIDL_PASS
|
||
|
|
||
|
} KERB_STORED_CREDENTIAL32, *PKERB_STORED_CREDENTIAL32;
|
||
|
|
||
|
#pragma pack()
|
||
|
|
||
|
#ifdef _WIN64
|
||
|
|
||
|
NTSTATUS
|
||
|
KdcPack32BitStoredCredential(
|
||
|
IN PKERB_STORED_CREDENTIAL Cred64,
|
||
|
OUT PKERB_STORED_CREDENTIAL32 * ppCred32,
|
||
|
OUT PULONG pCredSize
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
KdcUnpack32BitStoredCredential(
|
||
|
IN PKERB_STORED_CREDENTIAL32 Cred32,
|
||
|
IN OUT PKERB_STORED_CREDENTIAL * ppCred64,
|
||
|
IN OUT PULONG CredLength
|
||
|
);
|
||
|
#endif // WIN64
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#endif // __KERBCRED_H__
|