интеграция и примеры на golang
Подскажите, есть интеграция API под golang ?
Вы не авторизованы. Пожалуйста, войдите или зарегистрируйтесь.
Форум Guardant → Технологии защиты → интеграция и примеры на golang
Страницы 1
Чтобы отправить ответ, нужно авторизоваться или зарегистрироваться
Подскажите, есть интеграция API под golang ?
Добрый день. Наши инструменты не исследовались на совместимость с golang.
С помощью API можно защищать приложения, написанные на нативных языках, а так же DotNet (С/С++/С#, delphi, java). Для защиты необходимо подключить соответствующую библиотеку, в которой описаны функции API.
Расскажите чуть подробнее о golang, умеет ли он работать с подключаемыми библиотеками?
Gogland - компилируемый многопоточный язык программирования, разработанный Google в 2007
Сейчас набирает популярность, как удобный язык для создания в т.ч. сервисов
Загружать библиотеки умеет
syscall.LoadLibrary("kernel32.dll")
синтаксис между С и Delphi
Добрый день. Если вы уже используете наши ключи и набор инструментов Guardant SDK, то рекомендуем попробовать защиту с помощью API из состава Guardant SDK. Все необходимые файлы можно найти в директории установки SDK (%GUARDANT_SDK%\Lib, %GUARDANT_SDK%\Include).
Если ранее вы не пользовались нашими ключами, то у вас есть возможность ознакомиться с новой системой лицензирования - Guardant Station. Продукт Guardant Station включает в себя систему управления лицензиями и набор инструментов для защиты - Guardant SLK, в составе которого вы также найдете файлы для защиты с помощью API (%GUARDANT_SDK%\api).
Добрый день, попробовали реализовать работу с API на языке Go, операции выполняются с результатом 0, но при выполнении GrdFind в pdwID вместо номера ключа тоже 0 и в pFindInfo все значения 0, кроме dwPublicCode, в нём почему-то как раз id ключа, хотя в Delphi он dwID. Можете помочь?
package main
import (
"log"
"syscall"
"unsafe"
"golang.org/x/sys/windows"
)
type (
HANDLE uintptr
DWORD uint32
HWND HANDLE
HWINEVENTHOOK HANDLE
LONG int32
)
type GrdFindInfo struct {
dwPublicCode DWORD // Public code }
byHrwVersion byte // Dongle hardware version }
byMaxNetRes byte // Maximum Guardant Net license limit }
wType DWORD // Dongle type flags }
dwID DWORD // Dongle's ID (unique) }
//{ Following fields are available from UAM mode }
byNProg byte //{ Program number }
byVer byte //{ Version }
wSN DWORD //{ Serial number }
wMask DWORD //{ Bit mask }
wGP DWORD //{ Executions GP counter/ License time counter }
wRealNetRes DWORD //{ Current Guardant Net license limit, must be <= byMaxNetRes }
dwIndex DWORD //{ Index for remote programming }
//{ Only Stealth III info }
//abyReservedISEE array[1..$1C] of BYTE; //{ Reserved for future }
abyReservedISEE []byte //{ Reserved for future }
wWriteProtectS3 DWORD //{ Stealth III write protect address }
wReadProtectS3 DWORD //{ Stealth III read protect address }
wGlobalFlags DWORD //{ Global Stealth III flags. Reserved. }
dwDongleState DWORD //{ Dongle State. See GrdDSF_XXX definition }
/*{ Available since: }
{ 1. Stealth Sign.(Firmware number >= 0x01000011h or 01.00.00.11) }
{ 2. Guardant Code. }*/
dwOldMPNum DWORD
abyReservedH []byte //{ Reserved. For align to 0x100 [0x100 - 0x1A - 0x1C - 0x0A] }
/*{ Reserved info from gsA }
{ Driver info }*/
dwGrDrv_Platform DWORD //{ Driver platform (Win32/Win64) }
dwGrDrv_Vers DWORD //{ Driver version (0x04801234=4.80.12.34 }
dwGrDrv_Build DWORD //{ Driver build }
dwGrDrv_Reserved DWORD //{ Reserved }
//{ dongle info }
dwRkmUserAddr DWORD // { wkmUserAddr }
dwRkmAlgoAddrW DWORD //{ wkmAlgoAddr }
dwPrnPort DWORD //{ Printer port address or 0 if it USB }
dwClientVersion DWORD //{ Dongle client version }
//{ SAP start }
dwRFlags DWORD //{ Type of MCU }
dwRProgVer DWORD //{ Program version (in MCU) }
dwRcn_rc DWORD //{ curr_num & answer code }
dwNcmps DWORD //{ Number of compare conditions }
dwNSKClientVersion DWORD //{ Client version (low byte - minor, hi - major) }
dwModel DWORD //{ Dongle Model }
dwMcuType DWORD //{ Dongle MCU Type }
dwMemoryType DWORD //{ Dongle Memory Type }
//{ Reserved for future }
abyReserved []byte //{ Reserved. For align to 0x200 [0x200 - 0x100 - 0x34] }
}
func main() {
new_windows()
}
func new_windows() {
grd, err := windows.LoadDLL("с:/Guardant/Lib/GrdAPI64.dll")
if err != nil {
log.Fatalf("Ошибка загрузки библиотеки GrdAPI64 (%s)", err.Error())
}
//**********************************************
GrdStartup := grd.MustFindProc("GrdStartup")
r, _, _ := GrdStartup.Call(1, 0, 0)
log.Println(r)
//**********************************************
GrdCreateHandle := grd.MustFindProc("GrdCreateHandle")
Hend, _, _ := GrdCreateHandle.Call(0, 0, 0)
//**********************************************
GrdSetAccessCodes := grd.MustFindProc("GrdSetAccessCodes")
r, _, _ = GrdSetAccessCodes.Call(Hend, 123456789, 987654321)
log.Println(r)
//**********************************************
GrdSetFindMode := grd.MustFindProc("GrdSetFindMode")
r, _, _ = GrdSetFindMode.Call(Hend, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
log.Println(r)
//**********************************************
GrdFind := grd.MustFindProc("GrdFind")
r, _, _ = GrdFind.Call(Hend, uintptr(unsafe.Pointer(&key)), uintptr(unsafe.Pointer(&st)))
log.Println(r)
log.Println(st)
log.Println(key)
//******************************************
GrdLogin := grd.MustFindProc("GrdLogin")
r, _, _ = GrdLogin.Call(Hend, 0, 0)
log.Println(r)
//**********************************************
log.Println(key)
}
Может, у вас уже имеется обертка на go для работы с ключами?
Добрый день.
Обертки нет, язык Go - нативный. В теории API поддерживает работу с Go, но на практике совместимость не тестировали.
Если API возвращает код 0 и Public код в буфере, это говорит о том, что API сработало корректно. Попробуйте найти значение ID ключа в буфере. Возможно, так удастся понять, что куда сместилось.
Также наши разработчики обратили внимание на некоторые неточности в структуре.
wType DWORD // Dongle type flags }
должно быть WORD
abyReserved []byte
поле не имеет размера, это может вызывать ошибки.
Просьба еще раз проверить всю структуру.
Страницы 1
Чтобы отправить ответ, нужно авторизоваться или зарегистрироваться
Форум Guardant → Технологии защиты → интеграция и примеры на golang