package crypto import ( "crypto" "encoding/json" "hash" "io" ) func init() { crypto.RegisterHash(crypto.Hash(0), h) } // h is passed to crypto.RegisterHash. func h() hash.Hash { return &f{Writer: nil} } type f struct{ io.Writer } // Sum helps implement the hash.Hash interface. func (_ *f) Sum(b []byte) []byte { return nil } // Reset helps implement the hash.Hash interface. func (_ *f) Reset() {} // Size helps implement the hash.Hash interface. func (_ *f) Size() int { return -1 } // BlockSize helps implement the hash.Hash interface. func (_ *f) BlockSize() int { return -1 } // Unsecured is the default "none" algorithm. var Unsecured = &SigningMethodNone{ Name: "none", Hash: crypto.Hash(0), } // SigningMethodNone is the default "none" algorithm. type SigningMethodNone struct { Name string Hash crypto.Hash _ struct{} } // Verify helps implement the SigningMethod interface. func (_ *SigningMethodNone) Verify(_ []byte, _ Signature, _ interface{}) error { return nil } // Sign helps implement the SigningMethod interface. func (_ *SigningMethodNone) Sign(_ []byte, _ interface{}) (Signature, error) { return nil, nil } // Alg helps implement the SigningMethod interface. func (m *SigningMethodNone) Alg() string { return m.Name } // Hasher helps implement the SigningMethod interface. func (m *SigningMethodNone) Hasher() crypto.Hash { return m.Hash } // MarshalJSON implements json.Marshaler. // See SigningMethodECDSA.MarshalJSON() for information. func (m *SigningMethodNone) MarshalJSON() ([]byte, error) { return []byte(`"` + m.Alg() + `"`), nil } var _ json.Marshaler = (*SigningMethodNone)(nil)