Функция GrdTRU_DecryptQuestionTime расшифровывает число-вопрос и проверяет подлинность его и остальных присланных с удаленного компьютера параметров. Функция является аналогом GrdTRU_DecryptQuestion для ключа Guardant Time.

int  GRD_API GrdTRU_DecryptQuestionTime( 
		HANDLE	hGrd,			
		DWORD	dwAlgoNum_GSII64,
		DWORD	dwAlgoNum_HashS3,	
		void	*pQuestion,	
		DWORD	dwID,		 
		DWORD	dwPublic,	
		QWORD *pqwDongleTime,	
		QWORD	*pqwDeadTimes,
		DWORD	dwDeadTimesNumbers,
		void	*pHash			
	);	

hGrd

хэндл, через который будет выполнена данная операция

dwAlgoNum_GSII64

номер аппаратного алгоритма типа GSII64, который будет использоваться для расшифровывания числа-вопроса

dwAlgoNum_Hash64

номер аппаратного алгоритма Hash64, который будет использоваться для проверки подлинности числа-вопроса на основании MAC

pQuestion

буфер, содержащий присланное удаленным пользователем число-вопрос. Длина буфера 8 байт

dwID

ID ключа удаленного пользователя, для которого будет произведена операция

dwPublic

численное значение Public Code ключа удаленного пользователя, для которого будет произведена операция

pqwDongleTime

зашифрованное значение времени ключа. 8 байт.

pqwDeadTimes

зашифрованные значения времён жизни алгоритмов. По 8 байт

dwDeadTimesNumbers

количество 8 байтовых элементов в pqwDeadTimes

pHash

буфер, содержащий MAC, вычисленный на ключе удаленного пользователя. Длина буфера 8 байт

pQuestion

после выполнения функции в этот буфер возвращается расшифрованное число-вопрос. Длина буфера 8 байт

Возможные ошибки

GrdE_SystemDataCorrupted

Системные данные TRU повреждены. (Секретный ключ удаленного программирования отсутствует)

GrdE_NoQuestion

Число-вопрос не было сгенерировано или было перегенерировано до записи числа ответа

GrdE_InvalidData

Неверный формат данных для удаленного программирования

GrdE_QuestionOK

Число-вопрос уже было сгенерировано, ключ ожидает данных для удаленного программирования

GrdE_UpdateNotComplete

Ошибка при записи данных удаленного программирования. Операция не была завершена

GrdE_InvalidHash

Неверное значение MAC (Message Authentication Code)

 

Стандартный набор ошибок

Использование функции GrdTRU_DecryptQuestionTime позволяет получить число-вопрос в расшифрованном виде и убедиться в том, что оно действительно было сгенерировано на ключе с ID равным dwID и Public Code равным dwPublic. Функция является аналогом GrdTRU_DecryptQuestion для ключа Guardant Time и используется в случаях, когда необходимо продлевать время работы защищенного приложения.

Если число-вопрос расшифровано правильно и проверка подлинности прошла успешно, функция возвращает GrdE_OK.

Расшифрованное 8-байтовое число-вопрос помещается в тот же буфер pQuestion, в котором находилось зашифрованное число-вопрос. Расшифрованное число-вопрос необходимо для генерации ответа, поэтому его нужно сохранить для дальнейшего использования.

Расшифрование числа-вопроса производится аппаратным алгоритмом типа GSII64 с номером, задаваемым dwAlgoNum_GSII64. На момент расшифровывания этот алгоритм должен быть создан в ключе, находящемся у разработчика. В качестве определителя должен использоваться секретный 128-битовый ключ, который был сгенерирован и прошит в ключ удаленного пользователя при предпродажной подготовке функцией GrdTRU_SetKey для ключа с ID, равным dwID. При использовании GRDUTIL этот ключ берется из базы данных.

Проверка подлинности числа-вопроса производится аппаратным алгоритмом типа Hash64 с номером dwAlgoNum_Hash64. На момент проверки этот алгоритм должен быть создан в ключе, находящемся у разработчика. В качестве определителя должен использоваться секретный 128-битовый ключ, который был сгенерирован и прошит в ключ удаленного пользователя при предпродажной подготовке функцией GrdTRU_SetKey для ключа с ID равным dwID. При использовании GRDUTIL этот ключ берется из базы данных.

Рабочий ключ, находящийся у разработчика, инициализировать функцией GrdTRU_SetKey с секретным ключом, таким же как у удаленного пользователя, необязательно. Все преобразования делаются на заранее запрограммированных алгоритмах, номера которых указываются в параметрах указываемых в параметрах dwAlgoNum_GSII64 и dwAlgoNum_Hash64.

После расшифрования в pqwDongleTime содержится расшифрованное время ключа из микросхемы таймера, а в pqwDeadTimes расшифрованное время деактивации алгоритмов.

Два старших байта параметра pqwDongleTime - нули. 2 старших байта элементов массива pqwDeadTimes - числовое имя алгоритма. Остальные 6 байт - время жизни соответствующего алгоритма.

Время жизни (8 байт) имеет следующий формат:

1, 2 байтычисловое имя алгоритма (либо нули, если время из микросхемы таймера); 
3 байтгод от 2000 (08 для 2008 года); 
4 байт месяц года (01 - январь, 02 - февраль, ...);
5 байтдень месяца (1 - 31); 
6 байтчасы (0 - 23); 
7 байтминуты (0 - 59);
8 байтсекунды (0 - 59) 
public static GrdE GrdTRU_DecryptQuestionTime(Handle grdHandle, GrdAlgNum algNum_GSII64, GrdAlgNum algNum_HashS3, byte[] question,
	uint id, uint publicCode, ref ulong dongleTime, ulong[] deadTimes, int deadTimesNumbers, byte[] hash)

grdHandle [in] 

Тип: Handle

Нэндл, через который будет выполнена данная операция.

algNum_GSII64 [in] 

Тип: GrdAlgNum

Номер аппаратного алгоритма типа GSII64, который будет использоваться для расшифровывания числа-вопроса.

algNum_HashS3 [in] 

Тип: GrdAlgNum

Номер аппаратного алгоритма Hash64, который будет использоваться для проверки подлинности числа-вопроса на основании MAC.

question [in] 

Тип: byte [ ]

Буфер, содержащий присланное удаленным пользователем число-вопрос.

id [in]

Тип: uint

ID ключа удаленного пользователя, для которого будет произведена операция.

publicCode [in]

Тип: uint

Численное значение Public Code ключа удаленного пользователя, для которого будет произведена операция.

dongleTime [in]

Тип: ulong

Зашифрованное значение времени ключа.

deadTimes [in]

Тип: ulong [ ]

Зашифрованное значение времен жизни алгоритмов.

deadTimesNumbers [in]

Тип: int

Количество элементов, возвращаемых в deadTimes.

hash [in]

Тип: byte [ ]

Буфер, содержащий MAC, вычисленный на ключе удаленного пользователя.

pQuestion

после выполнения функции в этот буфер возвращается расшифрованное число-вопрос. Длина буфера 8 байт

Возможные ошибки

GrdE_SystemDataCorrupted

Системные данные TRU повреждены. (Секретный ключ удаленного программирования отсутствует)

GrdE_NoQuestion

Число-вопрос не было сгенерировано или было перегенерировано до записи числа ответа

GrdE_InvalidData

Неверный формат данных для удаленного программирования

GrdE_QuestionOK

Число-вопрос уже было сгенерировано, ключ ожидает данных для удаленного программирования

GrdE_UpdateNotComplete

Ошибка при записи данных удаленного программирования. Операция не была завершена

GrdE_InvalidHash

Неверное значение MAC (Message Authentication Code)

 

Стандартный набор ошибок

Использование функции GrdTRU_DecryptQuestionTime позволяет получить число-вопрос в расшифрованном виде и убедиться в том, что оно действительно было сгенерировано на ключе с ID равным dwID и Public Code равным dwPublic. Функция является аналогом GrdTRU_DecryptQuestion для ключа Guardant Time и используется в случаях, когда необходимо продлевать время работы защищенного приложения.

Если число-вопрос расшифровано правильно и проверка подлинности прошла успешно, функция возвращает GrdE_OK.

Расшифрованное 8-байтовое число-вопрос помещается в тот же буфер pQuestion, в котором находилось зашифрованное число-вопрос. Расшифрованное число-вопрос необходимо для генерации ответа, поэтому его нужно сохранить для дальнейшего использования.

Расшифрование числа-вопроса производится аппаратным алгоритмом типа GSII64 с номером, задаваемым dwAlgoNum_GSII64. На момент расшифровывания этот алгоритм должен быть создан в ключе, находящемся у разработчика. В качестве определителя должен использоваться секретный 128-битовый ключ, который был сгенерирован и прошит в ключ удаленного пользователя при предпродажной подготовке функцией GrdTRU_SetKey для ключа с ID, равным dwID. При использовании GRDUTIL этот ключ берется из базы данных.

Проверка подлинности числа-вопроса производится аппаратным алгоритмом типа Hash64 с номером dwAlgoNum_Hash64. На момент проверки этот алгоритм должен быть создан в ключе, находящемся у разработчика. В качестве определителя должен использоваться секретный 128-битовый ключ, который был сгенерирован и прошит в ключ удаленного пользователя при предпродажной подготовке функцией GrdTRU_SetKey для ключа с ID равным dwID. При использовании GRDUTIL этот ключ берется из базы данных.

Рабочий ключ, находящийся у разработчика, инициализировать функцией GrdTRU_SetKey с секретным ключом, таким же как у удаленного пользователя, необязательно. Все преобразования делаются на заранее запрограммированных алгоритмах, номера которых указываются в параметрах указываемых в параметрах dwAlgoNum_GSII64 и dwAlgoNum_Hash64.

После расшифрования в pqwDongleTime содержится расшифрованное время ключа из микросхемы таймера, а в pqwDeadTimes расшифрованное время деактивации алгоритмов.

Два старших байта параметра pqwDongleTime - нули. 2 старших байта элементов массива pqwDeadTimes - числовое имя алгоритма. Остальные 6 байт - время жизни соответствующего алгоритма.

Время жизни (8 байт) имеет следующий формат:

1, 2 байтычисловое имя алгоритма (либо нули, если время из микросхемы таймера); 
3 байтгод от 2000 (08 для 2008 года); 
4 байт месяц года (01 - январь, 02 - февраль, ...);
5 байтдень месяца (1 - 31); 
6 байтчасы (0 - 23); 
7 байтминуты (0 - 59);
8 байтсекунды (0 - 59) 
public static GrdE GrdTRU_DecryptQuestionTime(Handle grdHandle, int algoNum_GSII64, int algoNum_HashS3, 
	byte[] question, int id, int publicCode, long[] dongleTime, long[] deadTimes, int deadTimesNumbers, byte[] hash)

grdHandle [in] 

Тип: Handle

Нэндл, через который будет выполнена данная операция.

algoNum_GSII64 [in] 

Тип: int

Номер аппаратного алгоритма типа GSII64, который будет использоваться для расшифровывания числа-вопроса.

algoNum_HashS3 [in] 

Тип: int

Номер аппаратного алгоритма Hash64, который будет использоваться для проверки подлинности числа-вопроса на основании MAC.

question [in] 

Тип: byte [ ]

Буфер, содержащий присланное удаленным пользователем число-вопрос.

id [in]

Тип: int

ID ключа удаленного пользователя, для которого будет произведена операция.

publicCode [in]

Тип: int

Численное значение Public Code ключа удаленного пользователя, для которого будет произведена операция.

dongleTime [in]

Тип: long [ ]

Зашифрованное значение времени ключа.

deadTimes [in]

Тип: long [ ]

Зашифрованное значение времен жизни алгоритмов.

deadTimesNumbers [in]

Тип: int

Количество элементов, возвращаемых в deadTimes.

hash [in]

Тип: byte [ ]

Буфер, содержащий MAC, вычисленный на ключе удаленного пользователя.

pQuestion

после выполнения функции в этот буфер возвращается расшифрованное число-вопрос. Длина буфера 8 байт

Возможные ошибки

GrdE_SystemDataCorrupted

Системные данные TRU повреждены. (Секретный ключ удаленного программирования отсутствует)

GrdE_NoQuestion

Число-вопрос не было сгенерировано или было перегенерировано до записи числа ответа

GrdE_InvalidData

Неверный формат данных для удаленного программирования

GrdE_QuestionOK

Число-вопрос уже было сгенерировано, ключ ожидает данных для удаленного программирования

GrdE_UpdateNotComplete

Ошибка при записи данных удаленного программирования. Операция не была завершена

GrdE_InvalidHash

Неверное значение MAC (Message Authentication Code)

 

Стандартный набор ошибок

Использование функции GrdTRU_DecryptQuestionTime позволяет получить число-вопрос в расшифрованном виде и убедиться в том, что оно действительно было сгенерировано на ключе с ID равным dwID и Public Code равным dwPublic. Функция является аналогом GrdTRU_DecryptQuestion для ключа Guardant Time и используется в случаях, когда необходимо продлевать время работы защищенного приложения.

Если число-вопрос расшифровано правильно и проверка подлинности прошла успешно, функция возвращает GrdE_OK.

Расшифрованное 8-байтовое число-вопрос помещается в тот же буфер pQuestion, в котором находилось зашифрованное число-вопрос. Расшифрованное число-вопрос необходимо для генерации ответа, поэтому его нужно сохранить для дальнейшего использования.

Расшифрование числа-вопроса производится аппаратным алгоритмом типа GSII64 с номером, задаваемым dwAlgoNum_GSII64. На момент расшифровывания этот алгоритм должен быть создан в ключе, находящемся у разработчика. В качестве определителя должен использоваться секретный 128-битовый ключ, который был сгенерирован и прошит в ключ удаленного пользователя при предпродажной подготовке функцией GrdTRU_SetKey для ключа с ID, равным dwID. При использовании GRDUTIL этот ключ берется из базы данных.

Проверка подлинности числа-вопроса производится аппаратным алгоритмом типа Hash64 с номером dwAlgoNum_Hash64. На момент проверки этот алгоритм должен быть создан в ключе, находящемся у разработчика. В качестве определителя должен использоваться секретный 128-битовый ключ, который был сгенерирован и прошит в ключ удаленного пользователя при предпродажной подготовке функцией GrdTRU_SetKey для ключа с ID равным dwID. При использовании GRDUTIL этот ключ берется из базы данных.

Рабочий ключ, находящийся у разработчика, инициализировать функцией GrdTRU_SetKey с секретным ключом, таким же как у удаленного пользователя, необязательно. Все преобразования делаются на заранее запрограммированных алгоритмах, номера которых указываются в параметрах указываемых в параметрах dwAlgoNum_GSII64 и dwAlgoNum_Hash64.

После расшифрования в pqwDongleTime содержится расшифрованное время ключа из микросхемы таймера, а в pqwDeadTimes расшифрованное время деактивации алгоритмов.

Два старших байта параметра pqwDongleTime - нули. 2 старших байта элементов массива pqwDeadTimes - числовое имя алгоритма. Остальные 6 байт - время жизни соответствующего алгоритма.

Время жизни (8 байт) имеет следующий формат:

1, 2 байтычисловое имя алгоритма (либо нули, если время из микросхемы таймера); 
3 байтгод от 2000 (08 для 2008 года); 
4 байт месяц года (01 - январь, 02 - февраль, ...);
5 байтдень месяца (1 - 31); 
6 байтчасы (0 - 23); 
7 байтминуты (0 - 59);
8 байтсекунды (0 - 59)