1
0
mirror of https://github.com/golang/go synced 2024-11-18 10:34:51 -07:00

crypto/x509: skip SHA2 system verify test if not supported.

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>
This commit is contained in:
Daniel Theophanes 2015-03-29 17:36:05 -07:00 committed by Brad Fitzpatrick
parent 9e6f7aac28
commit cf7461caed
4 changed files with 35 additions and 0 deletions

View File

@ -0,0 +1,15 @@
// 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
}
}

View File

@ -14,6 +14,8 @@ import (
"time" "time"
) )
var supportSHA2 = true
type verifyTest struct { type verifyTest struct {
leaf string leaf string
intermediates []string intermediates []string
@ -23,6 +25,7 @@ type verifyTest struct {
systemSkip bool systemSkip bool
keyUsages []ExtKeyUsage keyUsages []ExtKeyUsage
testSystemRootsError bool testSystemRootsError bool
sha2 bool
errorCallback func(*testing.T, int, error) bool errorCallback func(*testing.T, int, error) bool
expectedChains [][]string expectedChains [][]string
@ -218,6 +221,7 @@ var verifyTests = []verifyTest{
currentTime: 1397502195, currentTime: 1397502195,
dnsName: "api.moip.com.br", dnsName: "api.moip.com.br",
sha2: true,
expectedChains: [][]string{ expectedChains: [][]string{
{ {
"api.moip.com.br", "api.moip.com.br",
@ -297,6 +301,9 @@ func testVerify(t *testing.T, useSystemRoots bool) {
if runtime.GOOS == "windows" && test.testSystemRootsError { if runtime.GOOS == "windows" && test.testSystemRootsError {
continue continue
} }
if useSystemRoots && !supportSHA2 && test.sha2 {
continue
}
opts := VerifyOptions{ opts := VerifyOptions{
Intermediates: NewCertPool(), Intermediates: NewCertPool(),

View File

@ -97,6 +97,7 @@ const (
//sys GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizeOfPointer *uint32) (errcode error) = iphlpapi.GetAdaptersAddresses //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 GetComputerNameEx(nameformat uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW
//sys getVersion() (v uint32) = GetVersion
const ( const (
ComputerNameNetBIOS = 0 ComputerNameNetBIOS = 0
@ -109,3 +110,8 @@ const (
ComputerNamePhysicalDnsFullyQualified = 7 ComputerNamePhysicalDnsFullyQualified = 7
ComputerNameMax = 8 ComputerNameMax = 8
) )
func GetVersion() (major, minor byte) {
low := uint16(getVersion())
return byte(low), byte(low >> 8)
}

View File

@ -13,6 +13,7 @@ var (
procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses") procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses")
procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW") procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW")
procGetVersion = modkernel32.NewProc("GetVersion")
) )
func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizeOfPointer *uint32) (errcode error) { func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizeOfPointer *uint32) (errcode error) {
@ -34,3 +35,9 @@ func GetComputerNameEx(nameformat uint32, buf *uint16, n *uint32) (err error) {
} }
return return
} }
func getVersion() (v uint32) {
r0, _, _ := syscall.Syscall(procGetVersion.Addr(), 0, 0, 0, 0)
v = uint32(r0)
return
}