// Copyright (C) 2025 Marius Schellenberger package jwt import ( "crypto/sha256" "crypto/sha512" "hash" ) const ( HS256Name = "HS256" HS384Name = "HS384" HS512Name = "HS512" ) // NewHash returns the Hash type equal to the input string func NewHash(alg string) Hash { switch alg { case HS256Name: return hs256 case HS384Name: return hs384 case HS512Name: return hs512 } return nil } var ( hs256 = HS256{} hs384 = HS384{} hs512 = HS512{} ) // Hash is the hashsum interface for signing the jwt type Hash interface { Hash() hash.Hash Alg() string } // HS256 implements the Hash interface with SHA256 type HS256 struct{} // Alg returns the algorithm name "HS256" func (HS256) Alg() string { return HS256Name } // Hash returns a new hash.Hash instance of the SHA256 algorithm func (HS256) Hash() hash.Hash { return sha256.New() } // HS384 implements the Hash interface with SHA384 type HS384 struct{} // Alg returns the algorithm name "HS384" func (HS384) Alg() string { return HS384Name } // Hash returns a new hash.Hash instance of the SHA384 algorithm func (HS384) Hash() hash.Hash { return sha512.New384() } // HS512 implements the Hash interface with SHA512 type HS512 struct{} // Alg returns the algorithm name "HS512" func (HS512) Alg() string { return HS512Name } // Hash returns a new hash.Hash instance of the SHA512 algorithm func (HS512) Hash() hash.Hash { return sha512.New() }