xbox-kernel/private/inc/xcabinet.h

157 lines
3.9 KiB
C
Raw Normal View History

2001-01-01 00:00:00 +01:00
// ---------------------------------------------------------------------------------------
// util.h
//
// Copyright (C) Microsoft Corporation
// ---------------------------------------------------------------------------------------
#ifndef __UTIL_H__
#define __UTIL_H__
// ---------------------------------------------------------------------------------------
// Includes
// ---------------------------------------------------------------------------------------
#ifdef __cplusplus
extern "C" {
#endif
#include <xcrypt.h>
#ifdef __cplusplus
}
#endif
// ---------------------------------------------------------------------------------------
//
// Define the real RC4 SHA1 structures and functions
//
#define RC4_CONFOUNDER_LEN 8
typedef struct _RC4_SHA_HEADER {
BYTE Checksum[XC_DIGEST_LEN];
BYTE Confounder[RC4_CONFOUNDER_LEN];
} RC4_SHA_HEADER, *PRC4_SHA_HEADER;
//
// Define a structure that describes an extended CFFOLDER entry
// that also has an associated HMAC (per-folder reserved data)
//
typedef struct
{
CFFOLDER cffolder; // CFFOLDER
RC4_SHA_HEADER hmac; // RC4 SHA1 Hmac
} CFFOLDER_HMAC, *PCFFOLDER_HMAC;
//
// Define a union of all known CAB flags
//
#define cfhdrFLAGS_ALL (cfhdrPREV_CABINET | \
cfhdrNEXT_CABINET | \
cfhdrRESERVE_PRESENT)
//
// Define our header cache structure
//
typedef struct
{
CFHEADER cfheader; // Cabinet file header
CFRESERVE cfreserve; // Reserved data specification
RC4_SHA_HEADER digestFolders; // CFFOLDERS digest
RC4_SHA_HEADER digestFiles; // CFFILES digest
} XONLINECONTENT_HEADER, *PXONLINECONTENT_HEADER;
//
// Define sizes related to the fixed header
//
#define XONLINECONTENT_FIXED_HEADER_SIZE \
(sizeof(XONLINECONTENT_HEADER))
#define XONLINECONTENT_FIXED_HEADER_SIZE_WITH_HMAC \
(XONLINECONTENT_FIXED_HEADER_SIZE + \
sizeof(RC4_SHA_HEADER))
#define XONLINECONTENT_FIXED_HEADER_SIZE_WITH_HMAC_AND_CHECKPOINT \
(XONLINECONTENT_FIXED_HEADER_SIZE + \
sizeof(RC4_SHA_HEADER) + sizeof(DWORD))
#define XONLINECONTENT_COMPLETE_HEADER_SIZE \
(XONLINECONTENT_FIXED_HEADER_SIZE_WITH_HMAC_AND_CHECKPOINT + \
XONLINECONTENT_PK_SIGNATURE_SIZE)
#define XONLINECONTENT_CHECKPOINT \
(XONLINECONTENT_FIXED_HEADER_SIZE + \
sizeof(RC4_SHA_HEADER))
#define XONLINECONTENT_RESUME_MAX_READ_SIZE \
(XONLINECONTENT_COMPLETE_HEADER_SIZE + \
XONLINECONTENT_MAX_CFFOLDER * sizeof(CFFOLDER_HMAC))
//
// Define the maximum number of CFFOLDER entries allowed in a
// content package
//
#define XONLINECONTENT_MAX_CFFOLDER ((DWORD)100)
//
// Define the size of a PK signature
//
#define XONLINECONTENT_PK_SIGNATURE_SIZE 256
//
// Define the max size of a public key
//
#define XONLINECONTENT_MAX_PUBLIC_KEY_SIZE \
(XONLINECONTENT_PK_SIGNATURE_SIZE + \
sizeof(BSAFE_PUB_KEY) + \
(sizeof(DWORD) * 4))
//
// Define the various reserve values
//
#define XONLINECONTENT_HEADER_RESERVE_SIZE \
((sizeof(RC4_SHA_HEADER) * 3) + sizeof(DWORD) + \
XONLINECONTENT_PK_SIGNATURE_SIZE)
#define XONLINECONTENT_PERFOLDER_RESERVE_SIZE \
(sizeof(RC4_SHA_HEADER))
//
// Define the smallest possible size for a content package
//
#define XONLINECONTENT_MIN_CONTENT_SIZE \
(sizeof(CFHEADER) + sizeof(CFRESERVE) + \
XONLINECONTENT_HEADER_RESERVE_SIZE)
//
// Define the name of the manifest file
//
#define XONLINECONTENT_MANIFEST_FILE_NAME "manifest.xbx"
//
// Define the name of the special target manifest file
//
#define XONLINEAUTOUPD_TARGET_MANIFEST_FILE_NAME "target.xbx"
//
// We deal with clusters a lot, so define the size of a cluster
//
#define XBOX_CLUSTER_SIZE (1 << 14)
//
// Define a reasonable upper bound for the manifest size (1MB)
//
#define XONLINECONTENT_MANIFEST_MAX_FILE_SIZE (1<<20)
// ---------------------------------------------------------------------------------------
#endif