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.
102 lines
2.8 KiB
102 lines
2.8 KiB
#pragma once
|
|
|
|
#include "wincrypt.h"
|
|
#include "fusionarray.h"
|
|
#include "fusionhandle.h"
|
|
|
|
//
|
|
// If someone invents a hash with more than 512 bytes, ?JonWis will eat his socks.
|
|
//
|
|
#define MAX_HASH_BYTES ( 512 )
|
|
#define STRONG_NAME_BYTE_LENGTH ( 8 )
|
|
|
|
|
|
BOOL
|
|
SxspHashStringToBytes(
|
|
IN PCWSTR pszHashString,
|
|
IN SIZE_T cchHashString,
|
|
OUT CFusionArray<BYTE> &dest
|
|
);
|
|
|
|
BOOL
|
|
SxspHashBytesToString(
|
|
IN const BYTE* pbSource,
|
|
IN SIZE_T cbSource,
|
|
OUT CBaseStringBuffer &sbDestination
|
|
);
|
|
|
|
BOOL
|
|
SxspHashBytesToString(
|
|
IN const BYTE* pbSource,
|
|
IN SIZE_T cbSource,
|
|
OUT CBaseStringBuffer &rsbDestination
|
|
);
|
|
|
|
BOOL
|
|
SxspGetStrongNameOfKey(
|
|
IN const CFusionArray<BYTE>& PublicKeyBits,
|
|
OUT CFusionArray<BYTE>& StrongNameBits
|
|
);
|
|
|
|
BOOL
|
|
SxspDoesStrongNameMatchKey(
|
|
IN const CBaseStringBuffer &rsbKeyString,
|
|
IN const CBaseStringBuffer &rsbStrongNameString,
|
|
OUT BOOL &rfKeyMatchesStrongName
|
|
);
|
|
|
|
BOOL
|
|
SxspGetStrongNameOfKey(
|
|
IN const CBaseStringBuffer &sbKeyString,
|
|
OUT CBaseStringBuffer &sbStrongNameOutput
|
|
);
|
|
|
|
BOOL
|
|
SxspAcquireStrongNameFromCertContext(
|
|
CBaseStringBuffer &rbuffStrongNameString,
|
|
CBaseStringBuffer &rbuffPublicKeyString,
|
|
PCCERT_CONTEXT pCertContext
|
|
);
|
|
|
|
typedef struct _SXS_PUBLIC_KEY_INFO
|
|
{
|
|
unsigned int SigAlgID;
|
|
unsigned int HashAlgID;
|
|
ULONG KeyLength;
|
|
BYTE pbKeyInfo[1];
|
|
} SXS_PUBLIC_KEY_INFO, *PSXS_PUBLIC_KEY_INFO;
|
|
|
|
|
|
class CPublicKeyInformation
|
|
{
|
|
private:
|
|
CFusionArray<BYTE> m_StrongNameBytes;
|
|
CSmallStringBuffer m_StrongNameString;
|
|
CFusionArray<BYTE> m_PublicKeyBytes;
|
|
CSmallStringBuffer m_PublicKeyByteString;
|
|
CStringBuffer m_SignerDisplayName;
|
|
CStringBuffer m_CatalogSourceFileName;
|
|
bool m_fInitialized;
|
|
ULONG m_KeyLength;
|
|
|
|
public:
|
|
BOOL GetStrongNameString(OUT CBaseStringBuffer &rsbStrongNameString ) const;
|
|
BOOL GetStrongNameBytes(OUT CFusionArray<BYTE> &cbStrongNameBytes ) const;
|
|
BOOL GetPublicKeyBitLength(OUT ULONG& ulKeyLength ) const;
|
|
BOOL GetWrappedPublicKeyBytes(OUT CFusionArray<BYTE> &cbPublicKeyBytes ) const;
|
|
BOOL GetSignerNiceName(OUT CBaseStringBuffer &rsbSignerNameString );
|
|
BOOL DoesStrongNameMatchSigner( IN const CBaseStringBuffer &rsbToTest, OUT BOOL &rfFoundInCatalog ) const;
|
|
|
|
CPublicKeyInformation();
|
|
~CPublicKeyInformation();
|
|
|
|
BOOL Initialize(IN const CBaseStringBuffer &rsbCatalogName);
|
|
BOOL Initialize(IN PCWSTR pszCatalogName);
|
|
BOOL Initialize(IN CFusionFile &rFileHandle);
|
|
BOOL Initialize(IN const PCCERT_CONTEXT pContext);
|
|
|
|
private:
|
|
CPublicKeyInformation( const CPublicKeyInformation &);
|
|
CPublicKeyInformation& operator=( const CPublicKeyInformation & );
|
|
};
|
|
|