aboutsummaryrefslogtreecommitdiff
path: root/signer.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-06-05 02:09:33 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-06-05 02:09:33 +0200
commit2915c9453086366c970c9ab602f2ec670ca29234 (patch)
treefef792034e861fdbbad8814603e4e07c2e61201d /signer.go
parentd3bd76f5c8a0509869e749e13d6a6edafdd3af66 (diff)
Extract Thumb
Diffstat (limited to 'signer.go')
-rw-r--r--signer.go34
1 files changed, 18 insertions, 16 deletions
diff --git a/signer.go b/signer.go
index d8d3b5d..f9f0b7d 100644
--- a/signer.go
+++ b/signer.go
@@ -21,27 +21,33 @@ var errNoNonces = errors.New("out of nonces")
// Signer ...
type Signer struct {
jose.Signer
- thumb string
nonces chan string
}
-func NewSigner(privKey crypto.PrivateKey) (*Signer, error) {
- thumb := func(pubKey crypto.PublicKey, alg string) (string, error) {
- wk := &jose.JsonWebKey{Key: pubKey, Algorithm: alg}
- t, err := wk.Thumbprint(crypto.SHA256)
- return base64.RawURLEncoding.EncodeToString(t), err
+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) {
+ switch k := privKey.(type) {
+ case *rsa.PrivateKey:
+ return thumb(k.Public())
+ case *ecdsa.PrivateKey:
+ return thumb(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
}
- t, err := thumb(k.Public(), "RSA")
- if err != nil {
- return nil, err
- }
- sig := &Signer{Signer: s, thumb: t, nonces: make(chan string, 100)}
+ sig := &Signer{Signer: s, nonces: make(chan string, 100)}
sig.SetNonceSource(sig)
return sig, nil
case *ecdsa.PrivateKey:
@@ -49,11 +55,7 @@ func NewSigner(privKey crypto.PrivateKey) (*Signer, error) {
if err != nil {
return nil, err
}
- t, err := thumb(k.Public(), "EC")
- if err != nil {
- return nil, err
- }
- sig := &Signer{Signer: s, thumb: t, nonces: make(chan string, 100)}
+ sig := &Signer{Signer: s, nonces: make(chan string, 100)}
sig.SetNonceSource(sig)
return sig, nil
default: