|
1 | | -// Code generated (comment to force golint to ignore this file). DO NOT EDIT. |
2 | | - |
3 | 1 | package jose |
4 | 2 |
|
5 | 3 | import ( |
| 4 | + "crypto" |
| 5 | + "crypto/ecdsa" |
| 6 | + "crypto/ed25519" |
| 7 | + "crypto/elliptic" |
| 8 | + "crypto/rand" |
| 9 | + "crypto/rsa" |
6 | 10 | "reflect" |
7 | 11 | "testing" |
8 | 12 | "time" |
9 | 13 |
|
10 | 14 | "github.com/pkg/errors" |
| 15 | + "go.step.sm/crypto/x25519" |
11 | 16 | ) |
12 | 17 |
|
13 | 18 | func TestNumericDate(t *testing.T) { |
@@ -100,3 +105,77 @@ func TestTrimPrefix(t *testing.T) { |
100 | 105 | }) |
101 | 106 | } |
102 | 107 | } |
| 108 | + |
| 109 | +func TestSignVerify(t *testing.T) { |
| 110 | + must := func(args ...interface{}) crypto.Signer { |
| 111 | + last := len(args) - 1 |
| 112 | + if err := args[last]; err != nil { |
| 113 | + t.Fatal(err) |
| 114 | + } |
| 115 | + return args[last-1].(crypto.Signer) |
| 116 | + } |
| 117 | + |
| 118 | + p224 := must(ecdsa.GenerateKey(elliptic.P224(), rand.Reader)) |
| 119 | + p256 := must(ecdsa.GenerateKey(elliptic.P256(), rand.Reader)) |
| 120 | + p384 := must(ecdsa.GenerateKey(elliptic.P384(), rand.Reader)) |
| 121 | + p521 := must(ecdsa.GenerateKey(elliptic.P521(), rand.Reader)) |
| 122 | + rsa2048 := must(rsa.GenerateKey(rand.Reader, 2048)) |
| 123 | + edKey := must(ed25519.GenerateKey(rand.Reader)) |
| 124 | + xKey := must(x25519.GenerateKey(rand.Reader)) |
| 125 | + |
| 126 | + type args struct { |
| 127 | + sig SigningKey |
| 128 | + opts *SignerOptions |
| 129 | + } |
| 130 | + tests := []struct { |
| 131 | + name string |
| 132 | + args args |
| 133 | + wantErr bool |
| 134 | + }{ |
| 135 | + {"byte", args{SigningKey{Key: []byte("the-key")}, nil}, false}, |
| 136 | + {"P256", args{SigningKey{Key: p256}, nil}, false}, |
| 137 | + {"P384", args{SigningKey{Key: p384}, nil}, false}, |
| 138 | + {"P521", args{SigningKey{Key: p521}, nil}, false}, |
| 139 | + {"rsa2048", args{SigningKey{Key: rsa2048}, nil}, false}, |
| 140 | + {"ed", args{SigningKey{Key: edKey}, nil}, false}, |
| 141 | + {"x25519", args{SigningKey{Key: xKey}, nil}, false}, |
| 142 | + {"fail P224", args{SigningKey{Key: p224}, nil}, true}, |
| 143 | + } |
| 144 | + for _, tt := range tests { |
| 145 | + t.Run(tt.name, func(t *testing.T) { |
| 146 | + got, err := NewSigner(tt.args.sig, tt.args.opts) |
| 147 | + if (err != nil) != tt.wantErr { |
| 148 | + t.Errorf("NewSigner() error = %v, wantErr %v", err, tt.wantErr) |
| 149 | + return |
| 150 | + } |
| 151 | + if !tt.wantErr { |
| 152 | + payload := []byte(`{"sub": "sub"}`) |
| 153 | + jws, err := got.Sign(payload) |
| 154 | + if err != nil { |
| 155 | + t.Errorf("Signer.Sign() error = %v", err) |
| 156 | + return |
| 157 | + } |
| 158 | + jwt, err := ParseSigned(jws.FullSerialize()) |
| 159 | + if err != nil { |
| 160 | + t.Errorf("ParseSigned() error = %v", err) |
| 161 | + return |
| 162 | + } |
| 163 | + |
| 164 | + var claims Claims |
| 165 | + if signer, ok := tt.args.sig.Key.(crypto.Signer); ok { |
| 166 | + err = Verify(jwt, signer.Public(), &claims) |
| 167 | + } else { |
| 168 | + err = Verify(jwt, tt.args.sig.Key, &claims) |
| 169 | + } |
| 170 | + if err != nil { |
| 171 | + t.Errorf("JSONWebSignature.Verify() error = %v", err) |
| 172 | + return |
| 173 | + } |
| 174 | + want := Claims{Subject: "sub"} |
| 175 | + if !reflect.DeepEqual(claims, want) { |
| 176 | + t.Errorf("JSONWebSignature.Verify() claims = %v, want %v", claims, want) |
| 177 | + } |
| 178 | + } |
| 179 | + }) |
| 180 | + } |
| 181 | +} |
0 commit comments