From b0b45a7a6213eaabf1acea6cecaa8ed59fe56f02 Mon Sep 17 00:00:00 2001 From: Ben Toews Date: Wed, 7 Nov 2018 07:12:31 -0700 Subject: [PATCH 1/2] try the windows-error branch from certstore --- Gopkg.lock | 43 ++++++++++++++++--- Gopkg.toml | 2 +- .../mastahyeti/certstore/certstore_windows.go | 17 ++++++-- 3 files changed, 52 insertions(+), 10 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index cfad1f2..3533ed4 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -2,82 +2,113 @@ [[projects]] + digest = "1:8722889ad027febfced94665914d1e7be8f1b703d31f2ef9461c59e4d40fe974" name = "github.com/certifi/gocertifi" packages = ["."] + pruneopts = "" revision = "deb3ae2ef2610fde3330947281941c562861188b" version = "2018.01.18" [[projects]] + digest = "1:0deddd908b6b4b768cfc272c16ee61e7088a60f7fe2f06c547bd3d8e1f8b8e77" name = "github.com/davecgh/go-spew" packages = ["spew"] + pruneopts = "" revision = "8991bc29aa16c548c550c7ff78260e27b9ab7c73" version = "v1.1.1" [[projects]] + branch = "windows-errors" + digest = "1:023fbbe144662cdcd931f9c47e29e5a0f89d01d340600c270aaaf887fe667edc" name = "github.com/mastahyeti/certstore" packages = ["."] - revision = "6f2394a25c204d281922fe1407d4385a7b979963" - version = "0.0.3" + pruneopts = "" + revision = "771bec17e686bcf86b5d1606c81d07c930b5b02d" [[projects]] + digest = "1:26ab843f72f1e7b54b7ad984510a956926e623f880a26faca9375d2199d928d2" name = "github.com/mastahyeti/cms" packages = [ ".", "oid", "protocol", - "timestamp" + "timestamp", ] + pruneopts = "" revision = "a229af0c48a09fb2fd15983d09eb47052521ce03" version = "0.0.2" [[projects]] branch = "master" + digest = "1:915b4b548d2fc9dbead609376aabf7a95d0cb8764501d2a451495f7d394635b6" name = "github.com/mastahyeti/fakeca" packages = ["."] + pruneopts = "" revision = "5f91b32d1226951f9631342eee20f5142387a216" [[projects]] branch = "master" + digest = "1:67235b35254a10a1763d608067d34cafaf88457c4054755a8b26a68b6a934ed3" name = "github.com/pborman/getopt" packages = ["v2"] + pruneopts = "" revision = "2b5b3bfb099b7da3e2f433966f8ab1d5803e0876" [[projects]] + digest = "1:7365acd48986e205ccb8652cc746f09c8b7876030d53710ea6ef7d0bd0dcd7ca" name = "github.com/pkg/errors" packages = ["."] + pruneopts = "" revision = "645ef00459ed84a119197bfb8d8205042c6df63d" version = "v0.8.0" [[projects]] + digest = "1:256484dbbcd271f9ecebc6795b2df8cad4c458dd0f5fd82a8c2fa0c29f233411" name = "github.com/pmezard/go-difflib" packages = ["difflib"] + pruneopts = "" revision = "792786c7400a136282c1664665ae0a8db921c6c2" version = "v1.0.0" [[projects]] + digest = "1:c587772fb8ad29ad4db67575dad25ba17a51f072ff18a22b4f0257a4d9c24f75" name = "github.com/stretchr/testify" packages = [ "assert", - "require" + "require", ] + pruneopts = "" revision = "f35b8ab0b5a2cef36673838d662e249dd9c94686" version = "v1.2.2" [[projects]] branch = "master" + digest = "1:b2d8b39397ca07929a3de3a3fd2b6ca4c8d48e9cadaa7cf2b083e27fd9e78107" name = "golang.org/x/crypto" packages = [ "cast5", "openpgp/elgamal", "openpgp/errors", "openpgp/packet", - "openpgp/s2k" + "openpgp/s2k", ] + pruneopts = "" revision = "0709b304e793a5edb4a2c0145f281ecdc20838a4" [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "beee101522fbba0ef4524626104699e2a2252d63076c4aa575c1b602a93adda6" + input-imports = [ + "github.com/certifi/gocertifi", + "github.com/mastahyeti/certstore", + "github.com/mastahyeti/cms", + "github.com/mastahyeti/cms/protocol", + "github.com/mastahyeti/fakeca", + "github.com/pborman/getopt/v2", + "github.com/pkg/errors", + "github.com/stretchr/testify/require", + "golang.org/x/crypto/openpgp/packet", + "golang.org/x/crypto/openpgp/s2k", + ] solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index d86a943..aec7697 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -27,7 +27,7 @@ [[constraint]] name = "github.com/mastahyeti/certstore" - version = "0.0.3" + branch = "windows-errors" [[constraint]] name = "github.com/mastahyeti/cms" diff --git a/vendor/github.com/mastahyeti/certstore/certstore_windows.go b/vendor/github.com/mastahyeti/certstore/certstore_windows.go index 8c09e97..5320de9 100644 --- a/vendor/github.com/mastahyeti/certstore/certstore_windows.go +++ b/vendor/github.com/mastahyeti/certstore/certstore_windows.go @@ -134,7 +134,7 @@ func (s *winStore) Identities() ([]Identity, error) { idents = append(idents, newWinIdentity(chain)) } - if err = lastError("failed to iterate certs in store"); err != nil && errors.Cause(err) != errCode(CRYPT_E_NOT_FOUND) { + if err = checkError("failed to iterate certs in store"); err != nil && errors.Cause(err) != errCode(CRYPT_E_NOT_FOUND) { goto fail } @@ -184,7 +184,7 @@ func (s *winStore) Import(data []byte, password string) error { for { // iterate through certs in temporary store if ctx = C.CertFindCertificateInStore(store, encoding, 0, C.CERT_FIND_ANY, nil, ctx); ctx == nil { - if err := lastError("failed to iterate certs in store"); err != nil && errors.Cause(err) != errCode(CRYPT_E_NOT_FOUND) { + if err := checkError("failed to iterate certs in store"); err != nil && errors.Cause(err) != errCode(CRYPT_E_NOT_FOUND) { return err } @@ -612,8 +612,19 @@ func exportCertCtx(ctx C.PCCERT_CONTEXT) (*x509.Certificate, error) { type errCode uint64 -// lastError gets the last error from the current thread. +// lastError gets the last error from the current thread. If there isn't one, it +// returns a new error. func lastError(msg string) error { + if err := checkError(msg); err != nil { + return err + } + + return errors.New(msg) +} + +// checkError tries to get the last error from the current thread. If there +// isn't one, it returns nil. +func checkError(msg string) error { if code := errCode(C.GetLastError()); code != 0 { return errors.Wrap(code, msg) } From df1dc177f7348e297e4b4ccbb4a4fec6fd9d2707 Mon Sep 17 00:00:00 2001 From: Ben Toews Date: Thu, 8 Nov 2018 09:04:28 -0700 Subject: [PATCH 2/2] use updated certstore version --- Gopkg.lock | 4 ++-- Gopkg.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index 3533ed4..15720c6 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -18,12 +18,12 @@ version = "v1.1.1" [[projects]] - branch = "windows-errors" digest = "1:023fbbe144662cdcd931f9c47e29e5a0f89d01d340600c270aaaf887fe667edc" name = "github.com/mastahyeti/certstore" packages = ["."] pruneopts = "" - revision = "771bec17e686bcf86b5d1606c81d07c930b5b02d" + revision = "c84a6bb0b6baafd35a9316317b4621c9d04c6813" + version = "0.0.4" [[projects]] digest = "1:26ab843f72f1e7b54b7ad984510a956926e623f880a26faca9375d2199d928d2" diff --git a/Gopkg.toml b/Gopkg.toml index aec7697..e71e016 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -27,7 +27,7 @@ [[constraint]] name = "github.com/mastahyeti/certstore" - branch = "windows-errors" + version = "0.0.4" [[constraint]] name = "github.com/mastahyeti/cms"