На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

CryptGetKeyParam



[New - Windows NT]

[New - Windows 95, OEM Service Release 2]
The CryptGetKeyParam function lets applications retrieve data that governs of the operations of a key. Note that the base keying material is not obtainable by this function or any other function.

BOOL CRYPTFUNC CryptGetKeyParam(

HCRYPTKEY hKey,
DWORD dwParam,
BYTE *pbData,
DWORD *pdwDataLen,
DWORD dwFlags
);


Parameters

hKey

[in] A handle to the key on which to query parameters.

dwParam

[in] The parameter number. See the "Remarks" section for a list of valid parameters.

pbData

[out] The parameter data buffer. The function will copy the specified parameter data to this buffer. The form of this data will vary, depending on the parameter number.
This parameter can be NULL if all you are doing is determining the number of bytes required for the returned parameter data.

pdwDataLen

[in/out] The address of the parameter data length. Before calling this function, the caller should set this parameter to the length, in bytes, of the pbData buffer. Upon return, this address will contain the number of bytes of parameter data copied to the buffer.
If the buffer specified by pbData is not large enough to hold the data, the function returns the ERROR_MORE_DATA error code (through GetLastError) and stores the required buffer size, in bytes, into the variable pointed to by pdwDataLen.

If pbData is NULL, then no error is returned and the function stores the size of the data, in bytes, in the variable pointed to by pdwDataLen.

dwFlags

[in] The flag values. This parameter is reserved for future use and should always be zero.



Remarks

For all key types, the dwParam value can be set to one of the following key parameter types:

Parameter Description
KP_ALGID Key algorithm. The pbData buffer will contain an ALG_ID value indicating that the algorithm was specified when the key was created.
KP_BLOCKLEN If a session key is specified by hKey, this parameter returns the block length, in bits, of the cipher. The pbData buffer will contain a DWORD value indicating the block length. For stream ciphers, this value will always be zero.If a public/private key pair is specified by hKey, this parameter returns the key pair's encryption granularity in bits. For example, the Microsoft RSA Base Provider generates 512-bit RSA key pairs, so a value of 512 is returned for these keys. If the public-key algorithm does not support encryption, the value returned by this parameter is undefined.
KP_SALT The salt value. The pbData buffer will contain a BYTE array indicating the current salt value. The size of the salt value will vary depending on the CSP and algorithm being used. Before setting this parameter, it should be read using CryptGetKeyParam in order to determine the size.Salt values do not apply to public/private key pairs.
KP_PERMISSIONS Key permissions. The pbData buffer will contain a DWORD value with zero or more permission flags set. Refer to the table at the end of this section for a description of each of these flags.


If a block cipher session key is specified by hKey, the dwParam value can also be set to one of the following parameter types.

Parameter Description
KP_IV The initialization vector. The pbData buffer will contain a BYTE array indicating the current initialization vector. This array contains /8 elements. For example, if the block length is 64 bits, the initialization vector will consist of 8 bytes.
KP_PADDING The padding mode. The pbData buffer will contain a DWORD value indicating the padding method used by the cipher. Following are the padding modes currently defined:PKCS5_PADDING ѕ PKCS 5 (sec 6.2) padding method.
KP_MODE The cipher mode. The pbData buffer will contain a DWORD value indicating the mode of the cipher. Refer to the following table for a list of valid cipher modes.
KP_MODE_BITS The number of bits to feed back. The pbData buffer will contain a DWORD value indicating the number of bits that are processed per cycle when the OFB or CFB cipher modes are used.


The following table lists the possible values for the KP_MODE parameter. These cipher modes are discussed in the section Encrypting and Decrypting Data.

Cipher Mode Description
CRYPT_MODE_ECB Electronic codebook.
CRYPT_MODE_CBC Cipher block chaining.
CRYPT_MODE_OFB Output feedback mode.
CRYPT_MODE_CFB Cipher feedback mode.


The following table lists the flags in the bit field that are obtained when the KP_PERMISSIONS parameter is read. These permission flags are ignored by the Microsoft RSA Base Provider. However, custom CSPs can use these flags to restrict operations on keys.

Permission Flag Description
CRYPT_ENCRYPT Allow encryption.
CRYPT_DECRYPT Allow decryption.
CRYPT_EXPORT Allow key to be exported.
CRYPT_READ Allow parameters to be read.
CRYPT_WRITE Allow parameters to be set.
CRYPT_MAC Allow MACs to be used with key.


Return Values

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To retrieve extended error information, use the GetLastError function.
The following table lists the error codes most commonly returned by the GetLastError function. The error codes prefaced by "NTE" are generated by the particular CSP you are using.

Error Description
ERROR_INVALID_HANDLE One of the parameters specifies an invalid handle.
ERROR_INVALID_PARAMETER One of the parameters contains an invalid value. This is most often an illegal pointer.
NTE_BAD_FLAGS The dwFlags parameter is nonzero.
NTE_BAD_KEY or NTE_NO_KEY The key specified by the hKey parameter is invalid.
NTE_BAD_TYPE The dwParam parameter specifies an unknown parameter number.
NTE_BAD_UID The CSP context that was specified when the key was created cannot be found.


Example

#include

HCRYPTPROV hProv = 0;
HCRYPTKEY hKey = 0;
DWORD dwMode;
BYTE pbData[16];
DWORD dwCount;
DWORD i;

// Get handle to user default provider.
if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) {
printf("Error %x during CryptAcquireContext!\n", GetLastError());
goto done;
}

// Create random block cipher session key.
if(!CryptGenKey(hProv, CALG_RC2, CRYPT_EXPORTABLE, &hKey)) {
printf("Error %x during CryptGenKey!\n", GetLastError());

goto done;
}

// Read the cipher mode.
dwCount = sizeof(DWORD);
if(!CryptGetKeyParam(hKey, KP_MODE, &dwMode, &dwCount, 0)) {
printf("Error %x during CryptGetKeyParam!\n", GetLastError());
goto done;
}
assert(dwCount==sizeof(BYTE));

// Print out cipher mode.
printf("Default cipher mode:%d\n", dwMode);

// Read initialization vector.
dwCount = 16;
if(!CryptGetKeyParam(hKey, KP_IV, pbData, &dwCount, 0)) {
printf("Error %x during CryptGetKeyParam!\n", GetLastError());

goto done;
}

// Print out initialization vector.
printf("Default IV:");
for(i=0;iprintf("\n");

done:

// Destroy session key.
if(hKey != 0) CryptDestroyKey(hKey);

// Release provider handle.
if(hProv != 0) CryptReleaseContext(hProv, 0);


See Also

CryptSetKeyParam


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

CryptGetKeyParam



[Новый - Windows NT]

[Новый - Окно 95, Выпуск Услуги OEM 2]
Функция CryptGetKeyParam позволяет, приложения извлекают данные, которые управляют операций клавиши. Отметьте, что базовый материал автоматического переключения не доступен этой функциональной или любой другой функцией.

BOOL CRYPTFUNC CryptGetKeyParam(

HCRYPTKEY hKey, DWORD dwParam, БАЙТ *pbData, DWORD *pdwDataLen, DWORD dwFlags
);


Параметры

hKey

[in] ручка на включает какое в параметры запроса.

dwParam

[in] номер параметра. Смотри секцию "Замечаний" для списка правильных параметров.

pbData

[out] буфер данных параметра. Функция скопирует определенные данные параметра в этот буфер. Форма этих данных поменяет, в зависимости от номера параметра.
Этот параметр может быть НЕДЕЙСТВИТЕЛЕН если все Вы - занятие определяет количество байтов необходимое для возвращанных данных параметра.

pdwDataLen

[в/] адрес длины данных параметра. Перед вызовом этой функции, вызывающий оператор должен устанавливать этот параметр на длину, в байтах, буфера pbData. В возврате, этот адрес будет содержать количество байтов данных параметра скопированного в буфер.
Если буфер определенный pbData - не большой достаточно, чтобы держать данные, функция возвращает код ошибки ERROR_MORE_DATA (через GetLastError) и загрузка необходимый буферный размер, в байтах, в переменную указанную, чтобы pdwDataLen.

Если pbData НЕДЕЙСТВИТЕЛЕН, тогда никакая ошибка не возвращана и функция загружает размер данных, в байтах, в переменной указанной, чтобы pdwDataLen.

dwFlags

[in] величины флага. Этот параметр зарезервирован для будущего использования и должно всегда - нулевым.



Замечания

Для всех ключевых типов, величина dwParam может быть установлена в один из следующих ключевых типов параметра:

Описание Параметра
алгоритм Клавиши KP_ALGID. Буфер pbData будет содержать величину ALG_ID, указывающую, что алгоритм был определен когда клавиша была создана.
KP_BLOCKLEN Если сеансовая клавиша определена hKey, этот параметр возвращает блочную длину, на битах, шифра. Буфер pbData будет содержать величину DWORD, указывающую блочную длину. Для шифра потока, эта величина всегда будет нулевой.Если публика/частная ключевая пара определена hKey, этот параметр возвращает шифровальную степень детализации ключевой пары на биты. Например, Базовый Поставщик Микрософт RSA генерирует 512- битовые ключевые пары RSA, так что величина 512 возвращана для этих клавиш. Если общественный-ключевой алгоритм не поддерживает шифрование, величина возвращанные этим параметром неопределенное.
KP_SALT соленая величина. Буфер pbData будет содержать массив БАЙТА, указывающий текущую соленую величину. Размер соленой величины изменится в зависимости от CSP и алгоритма, использованного. Перед установкой этого параметра, это должно быть прочитано используя CryptGetKeyParam для того, чтобы определять размер.Соленые величины не относятся к публике/частные ключевые пары.
разрешения Клавиши KP_PERMISSIONS. Буфер pbData будет содержать величине DWORD с нулем или более флагами разрешения установленными. Посмотрите таблицу в конце этой секции для описания каждого из этих флагов.


Если сеансовая клавиша блочного шифра определена hKey, величина dwParam может также установлена в один из следующих типов параметра.

Описание Параметра
KP_IV вектор инициализации. Буфер pbData будет содержать массив БАЙТА, указывающий текущий вектор инициализации. Этот массив содержит <блока length>/8 элементов. Например, если блочная длина - 64 битов, вектор инициализации будет состоять из 8 байтов.
KP_PADDING заполняющий режим. Буфер pbData будет содержать величину DWORD, указывающую, что заполнение метода использовалось шифром. Следующее является заполняющими режимами к настоящему времени определенными:PKCS5_PADDING U PKCS 5 (сек 6.2) заполняя метод.
KP_MODE режим шифра. Буфер pbData будет содержать величину DWORD, указывающую режим шифра. Посмотрите следующую таблицу для списка правильных режимов шифра.
KP_MODE_BITS количество битов, чтобы питаться. Буфер pbData будет содержать величину DWORD, указывающую количество битов, которые обработаны за цикл когда OFB или режимы шифра CFB использованы.


Следующая таблица включает возможные величины для параметра KP_MODE. Эти шифруют режимы обсуждены в Кодировать секции и Декодирующих Данных.

Шифр Mode Description CRYPT_MODE_ECB Электронный codebook.
блочное соединение Шифра CRYPT_MODE_CBC.
Выходной режим обратной связи CRYPT_MODE_OFB.
режим обратной связи Шифра CRYPT_MODE_CFB.


Следующая таблица включает флаги в битовую область, которая получена когда параметр KP_PERMISSIONS прочитан. Эти флаги разрешения проигнорированы Базовым Поставщиком Микрософт RSA. Тем не менее, обычай CSPs может использовать эти флаги, чтобы ограничивать операции на клавишах.

Флаг Разрешения Description CRYPT_ENCRYPT Допускает шифрование.
CRYPT_DECRYPT Допускает расшифровку.
CRYPT_EXPORT Допускает клавишу, которая нужно экспортироваться.
CRYPT_READ Допускает параметры, которые нужно быть прочитаны.
CRYPT_WRITE Допускает параметры, которые нужно быть установлены.
CRYPT_MAC Позволяет MACs, чтобы быть использованн клавишей.


Обратные Величины

Если функция добивается успеха, обратная величина ненулевая.
Если функция терпит неудачу, обратная величина нулевая. Для того, чтобы извлекать расширенную информацию ошибки, используйте функцию GetLastError.
Следующая таблица включает коды наиболее общей ошибки возвращанные функцией GetLastError. Ошибка кодирует prefaced "NTE" сгенерированы конкретным CSP, которое Вы используете.

Описание Ошибки
ERROR_INVALID_HANDLE Один из параметров определяет неправильную ручку.
ERROR_INVALID_PARAMETER Один из параметров содержит неправильную величину. Это - чаще всего незаконный указатель.
NTE_BAD_FLAGS параметр dwFlags ненулевой.
NTE_BAD_KEY или NTE_NO_KEY клавиша определенная параметром hKey недействительна.
NTE_BAD_TYPE параметр dwParam определяет неизвестный номер параметра.
NTE_BAD_UID контекст CSP, который был определен когда клавиша была создана, не мочь быть обнаружено.


Пример

#include

HCRYPTPROV hProv = 0;
HCRYPTKEY hKey = 0;
DWORD dwMode;
БАЙТ pbData[16];
DWORD dwCount;
i DWORD;

// Получите ручку по умолчанию поставщику пользователя.
если(!CryptAcquireContext(&hProv, НЕДЕЙСТВИТЕЛЬНЫЙ, НЕДЕЙСТВИТЕЛЬНЫЙ, PROV_RSA_FULL, 0)) { printf("Error %x в течение CryptAcquireContext!\n", GetLastError());
goto сделанным;
}

// Создайте произвольную сеансовую клавишу блочного шифра.
если(!CryptGenKey(hProv, CALG_RC2, CRYPT_EXPORTABLE, &hKey)) { printf("Error %x В ТЕЧЕНИЕ CryptGenKey!\n", GetLastError());

goto сделанным;
}

// Прочитанный режим шифра.
dwCount = sizeof(DWORD);
если(!CryptGetKeyParam(hKey, KP_MODE, &dwMode, &dwCount, 0)) { printf("Error %x В ТЕЧЕНИЕ CryptGetKeyParam!\n", GetLastError());
goto сделанным;
}
утвердите(dwCount==sizeof(БАЙТ));

// Распечатайте режим шифра.
printf(режим шифра "Default:%d\n", dwMode);

// Прочитанный вектор инициализации.
dwCount = 16;
если(!CryptGetKeyParam(hKey, KP_IV, pbData, &dwCount, 0)) { printf("Error %x В ТЕЧЕНИЕ CryptGetKeyParam!\n", GetLastError());

goto сделанным;
}

// Распечатайте вектор инициализации.
printf("Default IV:");
для(i=0;iprintf("\n");

сделанным:

// Уничтожьте сеансовую клавишу.
если(hKey != 0) CryptDestroyKey(hKey);

// Ручка поставщика Версии.
если(hProv != 0) CryptReleaseContext(hProv, 0);


Смотри Также

CryptSetKeyParam


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz