From eaa7692d3cce32e3aefd0239234b00e74a2084e6 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 5 Jun 2016 12:15:40 +0200 Subject: Refactor Thumbnail and NewSigner --- provider.go | 2 +- signer.go | 50 ++++++++++++++++++++++++-------------------------- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/provider.go b/provider.go index a43d67a..bcaae56 100644 --- a/provider.go +++ b/provider.go @@ -74,7 +74,7 @@ func DialProvider(directory string, key crypto.PrivateKey) (*Provider, error) { if err != nil { return nil, err } - thumb, err := Thumb(key) + thumb, err := Thumbnail(key) if err != nil { return nil, err } diff --git a/signer.go b/signer.go index ba8e77b..33a4f4d 100644 --- a/signer.go +++ b/signer.go @@ -24,43 +24,41 @@ type Signer struct { nonces chan string } -func thumb(pubKey crypto.PublicKey) (string, error) { - jwk := &jose.JsonWebKey{Key: pubKey} - t, err := jwk.Thumbprint(crypto.SHA256) - return base64.RawURLEncoding.EncodeToString(t), err -} - -func Thumb(privKey crypto.PrivateKey) (string, error) { +func Thumbnail(privKey crypto.PrivateKey) (string, error) { + thumbnail := func(pubKey crypto.PublicKey) (string, error) { + jwk := &jose.JsonWebKey{Key: pubKey} + t, err := jwk.Thumbprint(crypto.SHA256) + if err != nil { + return "", err + } + return base64.RawURLEncoding.EncodeToString(t), nil + } switch k := privKey.(type) { case *rsa.PrivateKey: - return thumb(k.Public()) + return thumbnail(k.Public()) case *ecdsa.PrivateKey: - return thumb(k.Public()) + return thumbnail(k.Public()) } return "", ErrKeyType } func NewSigner(privKey crypto.PrivateKey) (*Signer, error) { - switch k := privKey.(type) { - case *rsa.PrivateKey: - s, err := jose.NewSigner(jose.RS256, k) - if err != nil { - return nil, err + signer := func(crypto.PrivateKey) (jose.Signer, error) { + switch k := privKey.(type) { + case *rsa.PrivateKey: + return jose.NewSigner(jose.RS256, k) + case *ecdsa.PrivateKey: + return jose.NewSigner(jose.ES384, k) } - sig := &Signer{Signer: s, nonces: make(chan string, 100)} - sig.SetNonceSource(sig) - return sig, nil - case *ecdsa.PrivateKey: - s, err := jose.NewSigner(jose.ES384, k) - if err != nil { - return nil, err - } - sig := &Signer{Signer: s, nonces: make(chan string, 100)} - sig.SetNonceSource(sig) - return sig, nil - default: return nil, ErrKeyType } + s, err := signer(privKey) + if err != nil { + return nil, err + } + sig := &Signer{Signer: s, nonces: make(chan string, 100)} + sig.SetNonceSource(sig) + return sig, nil } // Nonce implements jose nonce provider -- cgit v1.2.3