aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-06-05 12:15:40 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-06-05 12:16:06 +0200
commiteaa7692d3cce32e3aefd0239234b00e74a2084e6 (patch)
tree2936d42c52ceb6f1c8e6a53605aab2c6191e557e
parentdbd6c6667f72f39e8e53b1064e5395cfdbe05da8 (diff)
Refactor Thumbnail and NewSigner
-rw-r--r--provider.go2
-rw-r--r--signer.go50
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