Index: head/security/trezord/Makefile =================================================================== --- head/security/trezord/Makefile (revision 475308) +++ head/security/trezord/Makefile (revision 475309) @@ -1,26 +1,26 @@ # Created by: Alex Dupre # $FreeBSD$ PORTNAME= trezord -PORTVERSION= 2.0.14 +PORTVERSION= 2.0.20 DISTVERSIONPREFIX= v CATEGORIES= security MAINTAINER= ale@FreeBSD.org COMMENT= TREZOR Communication Daemon aka TREZOR Bridge LICENSE= LGPL3 LICENSE_FILE= ${WRKSRC}/COPYING USES= go USE_RC_SUBR= ${PORTNAME} USE_GITHUB= yes GH_ACCOUNT= trezor GH_PROJECT= ${PORTNAME}-go GO_PKGNAME= github.com/${GH_ACCOUNT}/${GH_PROJECT} PATCH_STRIP= -p1 PLIST_FILES= bin/${GH_PROJECT} .include Index: head/security/trezord/distinfo =================================================================== --- head/security/trezord/distinfo (revision 475308) +++ head/security/trezord/distinfo (revision 475309) @@ -1,3 +1,3 @@ -TIMESTAMP = 1528984810 -SHA256 (trezor-trezord-go-v2.0.14_GH0.tar.gz) = a28001afe130a717e5366fdb5ec16e10ca44d6bdd366694f844efda830a08f68 -SIZE (trezor-trezord-go-v2.0.14_GH0.tar.gz) = 859521 +TIMESTAMP = 1532522034 +SHA256 (trezor-trezord-go-v2.0.20_GH0.tar.gz) = ec1a033c828e6c657a36645c5a1feaff14e6f8bf74d5cba6feed00295716fe1c +SIZE (trezor-trezord-go-v2.0.20_GH0.tar.gz) = 953083 Index: head/security/trezord/files/patch-freebsd =================================================================== --- head/security/trezord/files/patch-freebsd (revision 475308) +++ head/security/trezord/files/patch-freebsd (revision 475309) @@ -1,242 +1,231 @@ diff --git a/trezord.go b/trezord.go -index e1b7261..75b14bb 100644 +index 91fb4b9..f8c545e 100644 --- a/trezord.go +++ b/trezord.go @@ -6,6 +6,7 @@ import ( "io" "log" "os" + "runtime" "strconv" - "github.com/trezor/trezord-go/memorywriter" -@@ -82,7 +83,11 @@ func main() { + "github.com/trezor/trezord-go/core" +@@ -83,7 +84,11 @@ func main() { if err != nil { stderrLogger.Fatalf("hidapi: %s", err) } - bus = append(bus, w, h) + if runtime.GOOS != "freebsd" { + bus = append(bus, w, h) + } else { + bus = append(bus, w) + } } longMemoryWriter.Println(fmt.Sprintf("UDP port count - %d", len(ports))) -diff --git a/usb/webusb.go b/usb/webusb.go -index ee9c8d3..017fbf2 100644 ---- a/usb/webusb.go -+++ b/usb/webusb.go -@@ -3,6 +3,7 @@ package usb - import ( - "encoding/hex" - "fmt" -+ "runtime" - "strings" - "sync" - "sync/atomic" -@@ -188,7 +189,7 @@ func (b *WebUSB) match(dev usbhid.Device) bool { - } - return (c.BNumInterfaces > webIfaceNum && - c.Interface[webIfaceNum].Num_altsetting > webAltSetting && -- c.Interface[webIfaceNum].Altsetting[webAltSetting].BInterfaceClass == usbhid.CLASS_VENDOR_SPEC) -+ (c.Interface[webIfaceNum].Altsetting[webAltSetting].BInterfaceClass == usbhid.CLASS_VENDOR_SPEC || runtime.GOOS == "freebsd")) - } - - func (b *WebUSB) matchVidPid(vid uint16, pid uint16) bool { -@@ -198,13 +199,19 @@ func (b *WebUSB) matchVidPid(vid uint16, pid uint16) bool { - } - - func (b *WebUSB) identify(dev usbhid.Device) string { -- var ports [8]byte -- p, err := usbhid.Get_Port_Numbers(dev, ports[:]) -- if err != nil { -- b.mw.Println(fmt.Sprintf("webusb - identify - error getting port numbers %s", err.Error())) -- return "" -+ if runtime.GOOS != "freebsd" { -+ var ports [8]byte -+ p, err := usbhid.Get_Port_Numbers(dev, ports[:]) -+ if err != nil { -+ b.mw.Println(fmt.Sprintf("webusb - identify - error getting port numbers %s", err.Error())) -+ return "" -+ } -+ return webusbPrefix + hex.EncodeToString(p) -+ } else { -+ bn := usbhid.Get_Bus_Number(dev) -+ da := usbhid.Get_Device_Address(dev) -+ return fmt.Sprintf("%s%02x%02x", webusbPrefix, bn, da) - } -- return webusbPrefix + hex.EncodeToString(p) - } - - type WUD struct { -@@ -251,6 +258,12 @@ func (d *WUD) finishReadQueue() { - } - - func (d *WUD) readWrite(buf []byte, endpoint uint8) (int, error) { -+ var timeout uint -+ if runtime.GOOS != "freebsd" { -+ timeout = usbTimeout -+ } else { -+ timeout = 0 -+ } - d.mw.Println("webusb - rw - start") - for { - d.mw.Println("webusb - rw - checking closed") -@@ -263,7 +276,7 @@ func (d *WUD) readWrite(buf []byte, endpoint uint8) (int, error) { - d.mw.Println("webusb - rw - lock transfer mutex") - d.transferMutex.Lock() - d.mw.Println("webusb - rw - actual interrupt transport") -- p, err := usbhid.Interrupt_Transfer(d.dev, endpoint, buf, usbTimeout) -+ p, err := usbhid.Interrupt_Transfer(d.dev, endpoint, buf, timeout) - d.transferMutex.Unlock() - d.mw.Println("webusb - rw - single transfer done") - -diff --git a/vendor/github.com/trezor/usbhid/hid.go b/vendor/github.com/trezor/usbhid/hid.go -index 114c1fe..4052529 100644 ---- a/vendor/github.com/trezor/usbhid/hid.go -+++ b/vendor/github.com/trezor/usbhid/hid.go +diff --git a/usb/lowlevel/hid.go b/usb/lowlevel/hid.go +index 32ad167..c847c73 100644 +--- a/usb/lowlevel/hid.go ++++ b/usb/lowlevel/hid.go @@ -6,7 +6,7 @@ // Package hid provides an interface for USB HID devices. -// +build linux,cgo darwin,!ios,cgo windows,cgo +// +build linux,cgo freebsd,cgo darwin,!ios,cgo windows,cgo - package usbhid + package lowlevel -@@ -15,6 +15,8 @@ package usbhid +@@ -21,6 +21,8 @@ extern void goLog(const char *s); #cgo linux CFLAGS: -DDEFAULT_VISIBILITY="" -DOS_LINUX -D_GNU_SOURCE -DPOLL_NFDS_TYPE=int #cgo linux,!android LDFLAGS: -lrt +#cgo freebsd CFLAGS: -DOS_FREEBSD +#cgo freebsd LDFLAGS: -lusb #cgo darwin CFLAGS: -DOS_DARWIN -DDEFAULT_VISIBILITY="" -DPOLL_NFDS_TYPE="unsigned int" #cgo darwin LDFLAGS: -framework CoreFoundation -framework IOKit -lobjc #cgo windows CFLAGS: -DOS_WINDOWS -DDEFAULT_VISIBILITY="" -DPOLL_NFDS_TYPE="unsigned int" -@@ -25,6 +27,8 @@ package usbhid - #include - - #include "os/threads_posix.c" +@@ -34,6 +36,8 @@ extern void goLog(const char *s); + #include "os/poll_posix.c" + #include "os/linux_usbfs.c" + #include "os/linux_netlink.c" +#elif OS_FREEBSD + #include #elif OS_DARWIN - #include #include -@@ -38,17 +42,21 @@ package usbhid - #include + +@@ -50,15 +54,21 @@ extern void goLog(const char *s); + #include "os/threads_windows.c" #endif --#include "libusbi.h" --#include "libusb.h" --#include "version.h" --#include "version_nano.h" -#include "core.c" -#include "descriptor.c" --#include "hotplug.h" -#include "hotplug.c" -#include "io.c" -#include "strerror.c" -#include "sync.c" +#ifndef OS_FREEBSD -+ #include "libusbi.h" -+ #include "libusb.h" -+ #include "version.h" -+ #include "version_nano.h" + #include "core.c" + #include "descriptor.c" -+ #include "hotplug.h" + #include "hotplug.c" + #include "io.c" + #include "strerror.c" + #include "sync.c" +#else + #include +#endif #ifdef OS_LINUX - #include "os/poll_posix.h" -@@ -74,6 +82,8 @@ package usbhid - - #ifdef OS_LINUX #include "linux/hid.c" +#elif OS_FREEBSD + #include "linux/hid.c" #elif OS_DARWIN #include "mac/hid.c" #elif OS_WINDOWS -diff --git a/vendor/github.com/trezor/usbhid/libusb.go b/vendor/github.com/trezor/usbhid/libusb.go -index 13a2a66..b443102 100644 ---- a/vendor/github.com/trezor/usbhid/libusb.go -+++ b/vendor/github.com/trezor/usbhid/libusb.go -@@ -12,9 +12,15 @@ Copyright (c) 2017 Jason T. Harris - package usbhid - - /* +diff --git a/usb/lowlevel/libusb.go b/usb/lowlevel/libusb.go +index 454c95c..acda2c6 100644 +--- a/usb/lowlevel/libusb.go ++++ b/usb/lowlevel/libusb.go +@@ -1,4 +1,4 @@ -// +build linux,cgo darwin,!ios,cgo windows,cgo +// +build linux,cgo freebsd,cgo darwin,!ios,cgo windows,cgo + //----------------------------------------------------------------------------- + /* +@@ -14,7 +14,13 @@ Copyright (c) 2017 Jason T. Harris + package lowlevel + + /* +#cgo freebsd LDFLAGS: -lusb + +#ifndef __FreeBSD__ #include "./c/libusb/libusb.h" +#else +#include +#endif // When a C struct ends with a zero-sized field, but the struct itself is not zero-sized, // Go code can no longer refer to the zero-sized field. Any such references will have to be rewritten. @@ -921,9 +927,11 @@ func Get_Port_Numbers(dev Device, ports []byte) ([]byte, error) { return ports[:rc], nil } +/* func Get_Parent(dev Device) Device { return C.libusb_get_parent(dev) } +*/ func Get_Device_Address(dev Device) uint8 { return uint8(C.libusb_get_device_address(dev)) @@ -1066,10 +1074,12 @@ func Set_Auto_Detach_Kernel_Driver(hdl Device_Handle, enable bool) error { //----------------------------------------------------------------------------- // Miscellaneous +/* func Has_Capability(capability uint32) bool { rc := int(C.libusb_has_capability((C.uint32_t)(capability))) return rc != 0 } +*/ func Error_Name(code int) string { return C.GoString(C.libusb_error_name(C.int(code))) @@ -1084,6 +1094,7 @@ func CPU_To_LE16(x uint16) uint16 { return uint16(C.libusb_cpu_to_le16((C.uint16_t)(x))) } +/* func Setlocale(locale string) error { cstr := C.CString(locale) rc := int(C.libusb_setlocale(cstr)) @@ -1092,6 +1103,7 @@ func Setlocale(locale string) error { } return nil } +*/ func Strerror(errcode int) string { return C.GoString(C.libusb_strerror(int32(errcode))) -diff --git a/vendor/github.com/trezor/usbhid/wchar.go b/vendor/github.com/trezor/usbhid/wchar.go -index 16941d1..e955fdd 100644 ---- a/vendor/github.com/trezor/usbhid/wchar.go -+++ b/vendor/github.com/trezor/usbhid/wchar.go +diff --git a/usb/lowlevel/wchar.go b/usb/lowlevel/wchar.go +index a85a143..8448510 100644 +--- a/usb/lowlevel/wchar.go ++++ b/usb/lowlevel/wchar.go @@ -7,7 +7,7 @@ // https://github.com/orofarne/gowchar/blob/master/LICENSE // +build !ios -// +build linux darwin windows +// +build linux freebsd darwin windows - package usbhid + package lowlevel + +diff --git a/usb/webusb.go b/usb/webusb.go +index eb8cadd..ff42885 100644 +--- a/usb/webusb.go ++++ b/usb/webusb.go +@@ -3,6 +3,7 @@ package usb + import ( + "encoding/hex" + "fmt" ++ "runtime" + "strings" + "sync" + "sync/atomic" +@@ -216,7 +217,7 @@ func (b *WebUSB) match(dev lowlevel.Device) bool { + } + return (c.BNumInterfaces > webIfaceNum && + c.Interface[webIfaceNum].Num_altsetting > webAltSetting && +- c.Interface[webIfaceNum].Altsetting[webAltSetting].BInterfaceClass == lowlevel.CLASS_VENDOR_SPEC) ++ (c.Interface[webIfaceNum].Altsetting[webAltSetting].BInterfaceClass == lowlevel.CLASS_VENDOR_SPEC || runtime.GOOS == "freebsd")) + } + + func (b *WebUSB) matchVidPid(vid uint16, pid uint16) bool { +@@ -226,13 +227,19 @@ func (b *WebUSB) matchVidPid(vid uint16, pid uint16) bool { + } + + func (b *WebUSB) identify(dev lowlevel.Device) string { +- var ports [8]byte +- p, err := lowlevel.Get_Port_Numbers(dev, ports[:]) +- if err != nil { +- b.mw.Println(fmt.Sprintf("webusb - identify - error getting port numbers %s", err.Error())) +- return "" ++ if runtime.GOOS != "freebsd" { ++ var ports [8]byte ++ p, err := lowlevel.Get_Port_Numbers(dev, ports[:]) ++ if err != nil { ++ b.mw.Println(fmt.Sprintf("webusb - identify - error getting port numbers %s", err.Error())) ++ return "" ++ } ++ return webusbPrefix + hex.EncodeToString(p) ++ } else { ++ bn := lowlevel.Get_Bus_Number(dev) ++ da := lowlevel.Get_Device_Address(dev) ++ return fmt.Sprintf("%s%02x%02x", webusbPrefix, bn, da) + } +- return webusbPrefix + hex.EncodeToString(p) + } + + type WUD struct { +@@ -279,6 +286,12 @@ func (d *WUD) finishReadQueue() { + } + + func (d *WUD) readWrite(buf []byte, endpoint uint8) (int, error) { ++ var timeout uint ++ if runtime.GOOS != "freebsd" { ++ timeout = usbTimeout ++ } else { ++ timeout = 0 ++ } + d.mw.Println("webusb - rw - start") + for { + d.mw.Println("webusb - rw - checking closed") +@@ -291,7 +304,7 @@ func (d *WUD) readWrite(buf []byte, endpoint uint8) (int, error) { + d.mw.Println("webusb - rw - lock transfer mutex") + d.transferMutex.Lock() + d.mw.Println("webusb - rw - actual interrupt transport") +- p, err := lowlevel.Interrupt_Transfer(d.dev, endpoint, buf, usbTimeout) ++ p, err := lowlevel.Interrupt_Transfer(d.dev, endpoint, buf, timeout) + d.transferMutex.Unlock() + d.mw.Println("webusb - rw - single transfer done")