@@ -10,7 +10,9 @@ import (
1010 "crypto/x509"
1111 "encoding/base64"
1212 "encoding/json"
13+ "errors"
1314 "fmt"
15+ "io"
1416 "net/http"
1517 "net/http/httptest"
1618 "os"
@@ -19,6 +21,7 @@ import (
1921 "testing"
2022
2123 "github.com/smallstep/assert"
24+ "github.com/stretchr/testify/require"
2225 "go.step.sm/crypto/pemutil"
2326 "go.step.sm/crypto/x25519"
2427)
@@ -33,6 +36,24 @@ const (
3336 octKey
3437)
3538
39+ type wrapSigner struct {
40+ crypto.Signer
41+ }
42+
43+ func (w wrapSigner ) Public () crypto.PublicKey {
44+ if w .Signer == nil {
45+ return nil
46+ }
47+ return w .Signer .Public ()
48+ }
49+
50+ func (w wrapSigner ) Sign (r io.Reader , digest []byte , opts crypto.SignerOpts ) ([]byte , error ) {
51+ if w .Signer == nil {
52+ return nil , errors .New ("not implemented" )
53+ }
54+ return w .Signer .Sign (r , digest , opts )
55+ }
56+
3657type testdata struct {
3758 typ keyType
3859 encrypted bool
@@ -744,10 +765,18 @@ func Test_guessSignatureAlgorithm(t *testing.T) {
744765 return args [last - 1 ]
745766 }
746767
768+ p256 , err := ecdsa .GenerateKey (elliptic .P256 (), rand .Reader )
769+ require .NoError (t , err )
770+ p384 , err := ecdsa .GenerateKey (elliptic .P384 (), rand .Reader )
771+ require .NoError (t , err )
772+ p521 , err := ecdsa .GenerateKey (elliptic .P521 (), rand .Reader )
773+ require .NoError (t , err )
774+ rsaKey , err := rsa .GenerateKey (rand .Reader , 2048 )
775+ require .NoError (t , err )
776+ _ , edKey , err := ed25519 .GenerateKey (rand .Reader )
777+ require .NoError (t , err )
747778 _ , x25519Key , err := x25519 .GenerateKey (rand .Reader )
748- if err != nil {
749- t .Fatal (err )
750- }
779+ require .NoError (t , err )
751780
752781 type args struct {
753782 key crypto.PrivateKey
@@ -758,14 +787,28 @@ func Test_guessSignatureAlgorithm(t *testing.T) {
758787 want SignatureAlgorithm
759788 }{
760789 {"byte" , args {[]byte ("the-key" )}, HS256 },
761- {"ES256" , args {must ( ecdsa . GenerateKey ( elliptic . P256 (), rand . Reader )) }, ES256 },
762- {"ES384" , args {must ( ecdsa . GenerateKey ( elliptic . P384 (), rand . Reader )) }, ES384 },
763- {"ES512" , args {must ( ecdsa . GenerateKey ( elliptic . P521 (), rand . Reader )) }, ES512 },
764- {"RS256" , args {must ( rsa . GenerateKey ( rand . Reader , 2048 )) }, RS256 },
765- {"EdDSA" , args {must ( ed25519 . GenerateKey ( rand . Reader )) }, EdDSA },
790+ {"ES256" , args {p256 }, ES256 },
791+ {"ES384" , args {p384 }, ES384 },
792+ {"ES512" , args {p521 }, ES512 },
793+ {"RS256" , args {rsaKey }, RS256 },
794+ {"EdDSA" , args {edKey }, EdDSA },
766795 {"XEdDSA" , args {x25519Key }, XEdDSA },
767796 {"XEdDSA with X25519Signer" , args {X25519Signer (x25519Key )}, XEdDSA },
797+ {"signer ES256" , args {wrapSigner {p256 }}, ES256 },
798+ {"signer ES384" , args {wrapSigner {p384 }}, ES384 },
799+ {"signer ES512" , args {wrapSigner {p521 }}, ES512 },
800+ {"signer RS256" , args {wrapSigner {rsaKey }}, RS256 },
801+ {"signer EdDSA" , args {wrapSigner {edKey }}, EdDSA },
802+ {"signer XEdDSA" , args {wrapSigner {x25519Key }}, XEdDSA },
803+ {"opaque ES256" , args {NewOpaqueSigner (p256 )}, ES256 },
804+ {"opaque ES384" , args {NewOpaqueSigner (p384 )}, ES384 },
805+ {"opaque ES512" , args {NewOpaqueSigner (p521 )}, ES512 },
806+ {"opaque RS256" , args {NewOpaqueSigner (rsaKey )}, RS256 },
807+ {"opaque EdDSA" , args {NewOpaqueSigner (edKey )}, EdDSA },
808+ {"opaque XEdDSA" , args {NewOpaqueSigner (x25519Key )}, XEdDSA },
768809 {"empty" , args {must (ecdsa .GenerateKey (elliptic .P224 (), rand .Reader ))}, "" },
810+ {"signer empty" , args {wrapSigner {}}, "" },
811+ {"opaque empty" , args {NewOpaqueSigner (wrapSigner {})}, "" },
769812 }
770813 for _ , tt := range tests {
771814 t .Run (tt .name , func (t * testing.T ) {
0 commit comments