clphrase.c
来自「PGP8.0源码 请认真阅读您的文件包然后写出其具体功能」· C语言 代码 · 共 827 行 · 第 1/2 页
C
827 行
PGPKeyDBRef keydbMain,
PGPKeyDBObjRef key,
char** ppszPhrase,
PGPByte** ppPasskeyBuffer,
PGPInt32* piPasskeyLength)
{
PGPError err = kPGPError_BadParams;
PGPBoolean bSplit = FALSE;
LPSTR psz;
UINT uFlags;
if (!ppPasskeyBuffer)
return err;
if (!piPasskeyLength)
return err;
psz = NULL;
*ppPasskeyBuffer = NULL;
*piPasskeyLength = 0;
if (key)
{
PGPGetKeyDBObjBooleanProperty (key,
kPGPKeyProperty_IsSecretShared, &bSplit);
}
do
{
if (bSplit)
{
err=PGPclReconstituteKey(
context, // in context
tlsContext, // in TLS context
hwnd, // in hwnd of parent
keydbMain, // in keydb
key, // in key
ppPasskeyBuffer, // out passkey buffer
piPasskeyLength); // out passkey length
}
else
{
if (key)
uFlags = kPGPclKeyPassphrase;
else
uFlags = kPGPclDecryption;
err = PGPclGetPhrase (
context, // in context
keydbMain, // in main keydb
hwnd, // in hwnd of parent
szPrompt, // in prompt
&psz, // out phrase
NULL, // in keyset
NULL, // in keyids
0, // in keyid count
&key, // in/out key
NULL, // out options
uFlags, // in flags
ppPasskeyBuffer, // out passkey buffer
piPasskeyLength, // out passkey length
0,0, // in min length/quality
tlsContext, // in tlsContext,
NULL, // out AddedKeys
NULL);
}
if (IsPGPError (err))
{
if (psz)
{
PGPFreeData (psz);
psz = NULL;
}
if (*ppPasskeyBuffer)
{
PGPFreeData (*ppPasskeyBuffer);
*ppPasskeyBuffer = NULL;
}
PGPclErrorBox (hwnd, err);
}
else
{
PGPclCachePhrase (context, key,
psz, *ppPasskeyBuffer, *piPasskeyLength);
if (ppszPhrase)
*ppszPhrase = psz;
else
PGPclFreePhrase (psz);
}
} while (err == kPGPError_BadPassphrase);
return err;
}
// _______________________________________________________
//
// get passphrase for decryption from user
PGPError PGPclExport
PGPclGetDecryptionPhrase (
PGPContextRef context,
PGPtlsContextRef tlsContext,
HWND hwnd,
char* szPrompt,
PGPKeyDBRef keydbMain,
PGPKeyDBObjRef* pkey,
PGPKeySetRef keysetDecryption,
PGPInt32 iKeyIDCount,
PGPKeyID* keyidsDecryption,
PGPKeyDBRef* pkeydbToAdd,
char** ppszPhrase,
PGPByte** ppPasskeyBuffer,
PGPInt32* piPasskeyLength)
{
PGPError err = kPGPError_BadParams;
PGPBoolean bSplit = FALSE;
LPSTR psz;
if (!ppPasskeyBuffer) return err;
if (!piPasskeyLength) return err;
psz = NULL;
*ppPasskeyBuffer = NULL;
*piPasskeyLength = 0;
if (pkey)
{
if (*pkey)
{
PGPGetKeyDBObjBooleanProperty (*pkey,
kPGPKeyProperty_IsSecretShared, &bSplit);
}
}
do {
if (bSplit)
{
err=PGPclReconstituteKey(
context, // in context
tlsContext, // in TLS context
hwnd, // in hwnd of parent
keydbMain, // in keyset
*pkey, // in key
ppPasskeyBuffer, // out passkey buffer
piPasskeyLength); // out passkey length
}
else
{
err = PGPclGetPhrase (
context, // in context
keydbMain, // in main keyset
hwnd, // in hwnd of parent
szPrompt, // in prompt
&psz, // out phrase
keysetDecryption, // in keyset
keyidsDecryption, // in keyids
iKeyIDCount, // in keyid count
pkey, // in/out key
NULL, // out options
kPGPclDecryption, // in flags
ppPasskeyBuffer, // out passkey buffer
piPasskeyLength, // out passkey length
0,0, // in min length/quality
tlsContext, // in tlsContext,
pkeydbToAdd, // out AddedKeys
NULL);
}
if (IsPGPError (err))
{
if (psz)
{
PGPFreeData (psz);
psz = NULL;
}
if (*ppPasskeyBuffer)
{
PGPFreeData (*ppPasskeyBuffer);
*ppPasskeyBuffer = NULL;
}
PGPclErrorBox (hwnd, err);
}
else
{
if (pkey)
{
PGPclCachePhrase (context, *pkey,
psz, *ppPasskeyBuffer, *piPasskeyLength);
}
if (ppszPhrase)
*ppszPhrase = psz;
else
PGPclFreePhrase (psz);
}
} while (err == kPGPError_BadPassphrase);
return err;
}
// _______________________________________________________
//
// get passphrase for signing key from user
PGPError PGPclExport
PGPclGetSigningKeyPhrase (
PGPContextRef context,
PGPtlsContextRef tlsContext,
HWND hwnd,
char* szPrompt,
PGPKeyDBRef keydbMain,
PGPBoolean bRejectSplitKeys,
PGPKeyDBObjRef* pkey,
char** ppszPhrase,
PGPByte** ppPasskeyBuffer,
PGPInt32* piPasskeyLength)
{
PGPError err = kPGPError_BadParams;
LPSTR psz;
UINT uFlags;
if (!ppPasskeyBuffer)
return err;
if (!piPasskeyLength)
return err;
psz = NULL;
*ppPasskeyBuffer = NULL;
*piPasskeyLength = 0;
if (bRejectSplitKeys)
uFlags = kPGPclRejectSplitKeys;
else
uFlags = 0;
err = PGPclGetPhrase (
context, // in context
keydbMain, // in main keydb
hwnd, // in hwnd of parent
szPrompt, // in prompt
&psz, // out phrase
NULL, // in keyset
NULL, // in keyids
0, // in keyid count
pkey, // in/out key
NULL, // out options
uFlags, // in flags
ppPasskeyBuffer, // out passkey buffer
piPasskeyLength, // out passkey length
0,0, // in min length/quality
tlsContext, // in tlsContext
NULL,NULL); // out AddedKeys
if (IsPGPError (err))
{
if (psz)
{
PGPFreeData (psz);
psz = NULL;
}
if (*ppPasskeyBuffer)
{
PGPFreeData (*ppPasskeyBuffer);
*ppPasskeyBuffer = NULL;
}
}
else
{
if (pkey)
{
PGPclCachePhrase (context, *pkey,
psz, *ppPasskeyBuffer, *piPasskeyLength);
}
if (ppszPhrase)
*ppszPhrase = psz;
else
PGPclFreePhrase (psz);
}
if (bRejectSplitKeys)
{
if (err == kPGPError_KeyUnusableForSignature)
{
PGPclMessageBox (hwnd, IDS_CAPTIONINFO,
IDS_SPLITKEYSNOTALLOWED, MB_OK|MB_ICONINFORMATION);
err = kPGPError_UserAbort;
}
}
return err;
}
// _______________________________________________________
//
// get passphrase with confirmation from user
PGPError PGPclExport
PGPclGetConfirmationPhrase (
PGPContextRef context,
HWND hwnd,
LPSTR szPrompt,
PGPKeyDBRef keydbMain,
INT iMinLen,
INT iMinQual,
LPSTR* ppszPhrase)
{
PGPError err = kPGPError_BadParams;
PGPUInt32 uFlags = kPGPclEncryption;
if (iMinQual < 0)
{
iMinQual = 0;
uFlags |= kPGPclHideQualityIndicator;
}
if (!ppszPhrase)
return err;
err = PGPclGetPhrase (
context, // in context
keydbMain, // in main keydb
hwnd, // in hwnd of parent
szPrompt, // in prompt
ppszPhrase, // out phrase
NULL, // in keyset
NULL, // in keyids
0, // in keyid count
NULL, // in/out key
NULL, // out options
uFlags, // in flags
NULL, // out passkey buffer
NULL, // out passkey length
iMinLen,iMinQual, // min length/quality
NULL,NULL,NULL); // tlsContext/Added Keys
if (IsPGPError (err))
{
if (*ppszPhrase)
{
PGPFreeData (*ppszPhrase);
*ppszPhrase = NULL;
}
}
return err;
}
// _______________________________________________________
//
// get conventional passphrase from user
PGPError PGPclExport
PGPclGetConventionalPhrase (
PGPContextRef context,
HWND hwnd,
LPSTR pszPrompt,
LPSTR* ppszPhrase)
{
PGPError err = kPGPError_BadParams;
PGPOptionListRef optionList = kInvalidPGPOptionListRef;
if (!ppszPhrase)
return err;
err = PGPBuildOptionList (context, &optionList,
PGPOUIOutputPassphrase (context, ppszPhrase),
PGPOUIParentWindowHandle (context, hwnd),
PGPOLastOption (context));
if (IsntPGPError (err))
{
// If we have a prompt, use it
if (IsntNull (pszPrompt))
{
err = PGPAppendOptionList (optionList,
PGPOUIDialogPrompt (context, pszPrompt),
PGPOLastOption (context));
}
if (IsntPGPError (err))
{
err = PGPConventionalDecryptionPassphraseDialog (context,
optionList,
PGPOLastOption (context));
}
}
if (IsPGPError (err))
{
if (*ppszPhrase)
{
PGPFreeData (*ppszPhrase);
*ppszPhrase = NULL;
}
}
if (PGPOptionListRefIsValid (optionList))
PGPFreeOptionList (optionList);
return err;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?