Windows XP SP2 and Windows 2003 do not support SHA2.
Change-Id: Ica5faed040e9ced8b79fe78d512586e0e8788b3f
Reviewed-on: https://go-review.googlesource.com/8167
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
--- /dev/null
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package x509
+
+import "internal/syscall/windows"
+
+func init() {
+ if major, _ := windows.GetVersion(); major < 6 {
+ // Windows XP SP2 and Windows 2003 do not support SHA2.
+ // http://blogs.technet.com/b/pki/archive/2010/09/30/sha2-and-windows.aspx
+ supportSHA2 = false
+ }
+}
"time"
)
+var supportSHA2 = true
+
type verifyTest struct {
leaf string
intermediates []string
systemSkip bool
keyUsages []ExtKeyUsage
testSystemRootsError bool
+ sha2 bool
errorCallback func(*testing.T, int, error) bool
expectedChains [][]string
currentTime: 1397502195,
dnsName: "api.moip.com.br",
+ sha2: true,
expectedChains: [][]string{
{
"api.moip.com.br",
if runtime.GOOS == "windows" && test.testSystemRootsError {
continue
}
+ if useSystemRoots && !supportSHA2 && test.sha2 {
+ continue
+ }
opts := VerifyOptions{
Intermediates: NewCertPool(),
//sys GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizeOfPointer *uint32) (errcode error) = iphlpapi.GetAdaptersAddresses
//sys GetComputerNameEx(nameformat uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW
+//sys getVersion() (v uint32) = GetVersion
const (
ComputerNameNetBIOS = 0
ComputerNamePhysicalDnsFullyQualified = 7
ComputerNameMax = 8
)
+
+func GetVersion() (major, minor byte) {
+ low := uint16(getVersion())
+ return byte(low), byte(low >> 8)
+}
procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses")
procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW")
+ procGetVersion = modkernel32.NewProc("GetVersion")
)
func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizeOfPointer *uint32) (errcode error) {
}
return
}
+
+func getVersion() (v uint32) {
+ r0, _, _ := syscall.Syscall(procGetVersion.Addr(), 0, 0, 0, 0)
+ v = uint32(r0)
+ return
+}