| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- package jws
- import (
- "net/http"
- "github.com/lestrrat-go/backoff/v2"
- "github.com/lestrrat-go/jwx/jwk"
- "github.com/lestrrat-go/option"
- )
- type Option = option.Interface
- type identPayloadSigner struct{}
- type identDetachedPayload struct{}
- type identHeaders struct{}
- type identMessage struct{}
- type identFetchBackoff struct{}
- type identFetchWhitelist struct{}
- type identHTTPClient struct{}
- type identJWKSetFetcher struct{}
- func WithSigner(signer Signer, key interface{}, public, protected Headers) Option {
- return option.New(identPayloadSigner{}, &payloadSigner{
- signer: signer,
- key: key,
- protected: protected,
- public: public,
- })
- }
- type SignOption interface {
- Option
- signOption()
- }
- type signOption struct {
- Option
- }
- func (*signOption) signOption() {}
- // WithHeaders allows you to specify extra header values to include in the
- // final JWS message
- func WithHeaders(h Headers) SignOption {
- return &signOption{option.New(identHeaders{}, h)}
- }
- // VerifyOption describes an option that can be passed to the jws.Verify function
- type VerifyOption interface {
- Option
- verifyOption()
- }
- type verifyOption struct {
- Option
- }
- func (*verifyOption) verifyOption() {}
- // WithMessage can be passed to Verify() to obtain the jws.Message upon
- // a successful verification.
- func WithMessage(m *Message) VerifyOption {
- return &verifyOption{option.New(identMessage{}, m)}
- }
- type SignVerifyOption interface {
- SignOption
- VerifyOption
- }
- type signVerifyOption struct {
- Option
- }
- func (*signVerifyOption) signOption() {}
- func (*signVerifyOption) verifyOption() {}
- // WithDetachedPayload can be used to both sign or verify a JWS message with a
- // detached payload.
- //
- // When this option is used for `jws.Sign()`, the first parameter (normally the payload)
- // must be set to `nil`.
- //
- // If you have to verify using this option, you should know exactly how and why this works.
- func WithDetachedPayload(v []byte) SignVerifyOption {
- return &signVerifyOption{option.New(identDetachedPayload{}, v)}
- }
- // WithFetchWhitelist specifies the whitelist object to be passed
- // to `jwk.Fetch()` when `jws.VerifyAuto()` is used. If you do not
- // specify a whitelist, `jws.VerifyAuto()` will ALWAYS fail.
- //
- // This option is ignored if WithJWKSetFetcher is specified.
- func WithFetchWhitelist(wl jwk.Whitelist) VerifyOption {
- return &verifyOption{option.New(identFetchWhitelist{}, wl)}
- }
- // WithFetchBackoff specifies the backoff.Policy object to be passed
- // to `jwk.Fetch()` when `jws.VerifyAuto()` is used.
- //
- // This option is ignored if WithJWKSetFetcher is specified.
- func WithFetchBackoff(b backoff.Policy) VerifyOption {
- return &verifyOption{option.New(identFetchBackoff{}, b)}
- }
- // WithHTTPClient specifies the *http.Client object to be passed
- // to `jwk.Fetch()` when `jws.VerifyAuto()` is used.
- //
- // This option is ignored if WithJWKSetFetcher is specified.
- func WithHTTPClient(httpcl *http.Client) VerifyOption {
- return &verifyOption{option.New(identHTTPClient{}, httpcl)}
- }
- // WithJWKSetFetcher specifies the JWKSetFetcher object to be
- // used when `jws.VerifyAuto()`, for example, to use `jwk.AutoRefetch`
- // instead of the default `jwk.Fetch()`
- func WithJWKSetFetcher(f JWKSetFetcher) VerifyOption {
- return &verifyOption{option.New(identJWKSetFetcher{}, f)}
- }
|