57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
|
package libtrust
|
||
|
|
||
|
import (
|
||
|
"crypto"
|
||
|
_ "crypto/sha256" // Registrer SHA224 and SHA256
|
||
|
_ "crypto/sha512" // Registrer SHA384 and SHA512
|
||
|
"fmt"
|
||
|
)
|
||
|
|
||
|
type signatureAlgorithm struct {
|
||
|
algHeaderParam string
|
||
|
hashID crypto.Hash
|
||
|
}
|
||
|
|
||
|
func (h *signatureAlgorithm) HeaderParam() string {
|
||
|
return h.algHeaderParam
|
||
|
}
|
||
|
|
||
|
func (h *signatureAlgorithm) HashID() crypto.Hash {
|
||
|
return h.hashID
|
||
|
}
|
||
|
|
||
|
var (
|
||
|
rs256 = &signatureAlgorithm{"RS256", crypto.SHA256}
|
||
|
rs384 = &signatureAlgorithm{"RS384", crypto.SHA384}
|
||
|
rs512 = &signatureAlgorithm{"RS512", crypto.SHA512}
|
||
|
es256 = &signatureAlgorithm{"ES256", crypto.SHA256}
|
||
|
es384 = &signatureAlgorithm{"ES384", crypto.SHA384}
|
||
|
es512 = &signatureAlgorithm{"ES512", crypto.SHA512}
|
||
|
)
|
||
|
|
||
|
func rsaSignatureAlgorithmByName(alg string) (*signatureAlgorithm, error) {
|
||
|
switch {
|
||
|
case alg == "RS256":
|
||
|
return rs256, nil
|
||
|
case alg == "RS384":
|
||
|
return rs384, nil
|
||
|
case alg == "RS512":
|
||
|
return rs512, nil
|
||
|
default:
|
||
|
return nil, fmt.Errorf("RSA Digital Signature Algorithm %q not supported", alg)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func rsaPKCS1v15SignatureAlgorithmForHashID(hashID crypto.Hash) *signatureAlgorithm {
|
||
|
switch {
|
||
|
case hashID == crypto.SHA512:
|
||
|
return rs512
|
||
|
case hashID == crypto.SHA384:
|
||
|
return rs384
|
||
|
case hashID == crypto.SHA256:
|
||
|
fallthrough
|
||
|
default:
|
||
|
return rs256
|
||
|
}
|
||
|
}
|