podman
56 строк · 1.3 Кб
1package libtrust2
3import (4"crypto"5_ "crypto/sha256" // Registrer SHA224 and SHA2566_ "crypto/sha512" // Registrer SHA384 and SHA5127"fmt"8)
9
10type signatureAlgorithm struct {11algHeaderParam string12hashID crypto.Hash13}
14
15func (h *signatureAlgorithm) HeaderParam() string {16return h.algHeaderParam17}
18
19func (h *signatureAlgorithm) HashID() crypto.Hash {20return h.hashID21}
22
23var (24rs256 = &signatureAlgorithm{"RS256", crypto.SHA256}25rs384 = &signatureAlgorithm{"RS384", crypto.SHA384}26rs512 = &signatureAlgorithm{"RS512", crypto.SHA512}27es256 = &signatureAlgorithm{"ES256", crypto.SHA256}28es384 = &signatureAlgorithm{"ES384", crypto.SHA384}29es512 = &signatureAlgorithm{"ES512", crypto.SHA512}30)
31
32func rsaSignatureAlgorithmByName(alg string) (*signatureAlgorithm, error) {33switch {34case alg == "RS256":35return rs256, nil36case alg == "RS384":37return rs384, nil38case alg == "RS512":39return rs512, nil40default:41return nil, fmt.Errorf("RSA Digital Signature Algorithm %q not supported", alg)42}43}
44
45func rsaPKCS1v15SignatureAlgorithmForHashID(hashID crypto.Hash) *signatureAlgorithm {46switch {47case hashID == crypto.SHA512:48return rs51249case hashID == crypto.SHA384:50return rs38451case hashID == crypto.SHA256:52fallthrough53default:54return rs25655}56}
57