79 lines
1.4 KiB
Go
79 lines
1.4 KiB
Go
// 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()
|
|
}
|