68 lines
3.4 KiB
Go
68 lines
3.4 KiB
Go
package certstore
|
|
|
|
import (
|
|
"golang.org/x/sys/windows"
|
|
)
|
|
|
|
//go:generate go run golang.org/x/sys/windows/mkwinsyscall -output zsyscall_windows.go syscall_windows.go
|
|
|
|
type certStoreHandle windows.Handle
|
|
|
|
// CryptoAPI APIs from wincrypt.h
|
|
|
|
type cryptProviderHandle windows.Handle // HCRYPTPROV
|
|
type cryptHashHandle windows.Handle // HCRYPTHASH
|
|
type cryptKeyHandle windows.Handle // HCRYPTKEY
|
|
type cryptAlgorithm uint32 // ALG_ID
|
|
|
|
const (
|
|
// Values for ALG_ID
|
|
CALG_SHA_256 cryptAlgorithm = 0x0000800c
|
|
CALG_SHA_384 cryptAlgorithm = 0x0000800d
|
|
CALG_SHA_512 cryptAlgorithm = 0x0000800e
|
|
|
|
// Values of the dwParam for CryptGetHashParam and/or CryptSetHashParam
|
|
HP_ALGID = 0x1
|
|
HP_HASHVAL = 0x2
|
|
HP_HASHSIZE = 0x4
|
|
HP_HMAC_INFO = 0x5
|
|
|
|
// Values of the dwParam for CryptGetProvParam and/or CryptSetProvParam
|
|
PP_NAME = 4
|
|
PP_CONTAINER = 6
|
|
PP_PROVTYPE = 16
|
|
)
|
|
|
|
// https://learn.microsoft.com/en-ca/windows/win32/api/wincrypt/nf-wincrypt-cryptcreatehash
|
|
//sys cryptCreateHash(hProv cryptProviderHandle, Algid cryptAlgorithm, hKey cryptKeyHandle, dwFlags uint32, phHash *cryptHashHandle) (err error) = advapi32.CryptCreateHash
|
|
// https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptdestroyhash
|
|
//sys cryptDestroyHash(hHash cryptHashHandle) (err error) = advapi32.CryptDestroyHash
|
|
// https://learn.microsoft.com/en-ca/windows/win32/api/wincrypt/nf-wincrypt-cryptgethashparam
|
|
//sys cryptGetHashParam(hHash cryptHashHandle, dwParam uint32, pbData unsafe.Pointer, pdwDataLen *uint32, dwFlags uint32) (err error) = advapi32.CryptGetHashParam
|
|
// https://learn.microsoft.com/en-ca/windows/win32/api/wincrypt/nf-wincrypt-cryptsethashparam
|
|
//sys cryptSetHashParam(hHash cryptHashHandle, dwParam uint32, pbData unsafe.Pointer, dwFlags uint32) (err error) = advapi32.CryptSetHashParam
|
|
// https://learn.microsoft.com/en-ca/windows/win32/api/wincrypt/nf-wincrypt-cryptsignhashw
|
|
//sys cryptSignHash(hHash cryptHashHandle, dwKeySpec uint32, szDescription *uint16, dwFlags uint32, pbSignature *byte, pdwSigLen *uint32) (err error) = advapi32.CryptSignHashW
|
|
// https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptgetprovparam
|
|
//sys cryptGetProvParam(hProv cryptProviderHandle, dwParam uint32, pbData *byte, pdwDataLen *uint32, dwFlags uint32) (err error) = advapi32.CryptGetProvParam
|
|
// https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptsetprovparam
|
|
//sys cryptSetProvParam(hProv cryptProviderHandle, dwParam uint32, pbData *byte, dwFlags uint32) (err error) = advapi32.CryptSetProvParam
|
|
|
|
// CNG APIs from bcrypt.h and ncrypt.h.
|
|
const (
|
|
// Flags for NCryptSignHash and others
|
|
BCRYPT_PAD_NONE = 0x00000001
|
|
BCRYPT_PAD_PKCS1 = 0x00000002
|
|
BCRYPT_PAD_OAEP = 0x00000004
|
|
BCRYPT_PAD_PSS = 0x00000008
|
|
)
|
|
|
|
type nCryptKeyHandle windows.Handle
|
|
|
|
// https://learn.microsoft.com/en-us/windows/win32/api/ncrypt/nf-ncrypt-ncryptsignhash
|
|
//sys nCryptSignHash(hKey nCryptKeyHandle, pPaddingInfo unsafe.Pointer, pbHashValue *byte, cbHashValue uint32, pbSignature *byte, cbSignature uint32, pcbResult *uint32, dwFlags uint32) (ret error) = ncrypt.NCryptSignHash
|
|
// https://learn.microsoft.com/en-us/windows/win32/api/ncrypt/nf-ncrypt-ncryptdeletekey
|
|
//sys nCryptDeleteKey(hKey nCryptKeyHandle, dwFlags uint32) (ret error) = ncrypt.NCryptDeleteKey
|
|
// https://learn.microsoft.com/en-us/windows/win32/api/ncrypt/nf-ncrypt-ncryptfreeobject
|
|
//sys nCryptFreeObject(hObject windows.Handle) (ret error) = ncrypt.NCryptFreeObject
|