aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/version/wintrust/zsyscall_windows.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2020-11-30 17:34:55 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2020-11-30 22:07:27 +0100
commit163beba470f71cd6f68dc17cd9b7fa0035945f25 (patch)
tree66a7ebd3bfb78c77b85672ebd093c2741ba69f05 /version/wintrust/zsyscall_windows.go
parentupdater: another attempt at winhttp (diff)
downloadwireguard-windows-163beba470f71cd6f68dc17cd9b7fa0035945f25.tar.xz
wireguard-windows-163beba470f71cd6f68dc17cd9b7fa0035945f25.zip
version: use crypt32 instead of go x509 for cn extraction for file size
Another attempt at trying to remove an asn1 parser. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to '')
-rw-r--r--version/wintrust/zsyscall_windows.go27
1 files changed, 25 insertions, 2 deletions
diff --git a/version/wintrust/zsyscall_windows.go b/version/wintrust/zsyscall_windows.go
index 69d42775..67daccb1 100644
--- a/version/wintrust/zsyscall_windows.go
+++ b/version/wintrust/zsyscall_windows.go
@@ -41,10 +41,33 @@ var (
modcrypt32 = windows.NewLazySystemDLL("crypt32.dll")
modwintrust = windows.NewLazySystemDLL("wintrust.dll")
- procCryptQueryObject = modcrypt32.NewProc("CryptQueryObject")
- procWinVerifyTrust = modwintrust.NewProc("WinVerifyTrust")
+ procCertFindExtension = modcrypt32.NewProc("CertFindExtension")
+ procCertGetNameStringW = modcrypt32.NewProc("CertGetNameStringW")
+ procCryptDecodeObject = modcrypt32.NewProc("CryptDecodeObject")
+ procCryptQueryObject = modcrypt32.NewProc("CryptQueryObject")
+ procWinVerifyTrust = modwintrust.NewProc("WinVerifyTrust")
)
+func certFindExtension(objId *byte, countExtensions uint32, extensions *certExtension) (ret *certExtension) {
+ r0, _, _ := syscall.Syscall(procCertFindExtension.Addr(), 3, uintptr(unsafe.Pointer(objId)), uintptr(countExtensions), uintptr(unsafe.Pointer(extensions)))
+ ret = (*certExtension)(unsafe.Pointer(r0))
+ return
+}
+
+func certGetNameString(certContext *windows.CertContext, nameType uint32, flags uint32, typePara unsafe.Pointer, name *uint16, size uint32) (chars uint32) {
+ r0, _, _ := syscall.Syscall6(procCertGetNameStringW.Addr(), 6, uintptr(unsafe.Pointer(certContext)), uintptr(nameType), uintptr(flags), uintptr(typePara), uintptr(unsafe.Pointer(name)), uintptr(size))
+ chars = uint32(r0)
+ return
+}
+
+func cryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte, lenEncodedBytes uint32, flags uint32, decoded unsafe.Pointer, decodedLen *uint32) (err error) {
+ r1, _, e1 := syscall.Syscall9(procCryptDecodeObject.Addr(), 7, uintptr(encodingType), uintptr(unsafe.Pointer(structType)), uintptr(unsafe.Pointer(encodedBytes)), uintptr(lenEncodedBytes), uintptr(flags), uintptr(decoded), uintptr(unsafe.Pointer(decodedLen)), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
func cryptQueryObject(objectType uint32, object uintptr, expectedContentTypeFlags uint32, expectedFormatTypeFlags uint32, flags uint32, msgAndCertEncodingType *uint32, contentType *uint32, formatType *uint32, certStore *windows.Handle, msg *windows.Handle, context *uintptr) (err error) {
r1, _, e1 := syscall.Syscall12(procCryptQueryObject.Addr(), 11, uintptr(objectType), uintptr(object), uintptr(expectedContentTypeFlags), uintptr(expectedFormatTypeFlags), uintptr(flags), uintptr(unsafe.Pointer(msgAndCertEncodingType)), uintptr(unsafe.Pointer(contentType)), uintptr(unsafe.Pointer(formatType)), uintptr(unsafe.Pointer(certStore)), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(context)), 0)
if r1 == 0 {