github.com/kubiko/snapd@v0.0.0-20201013125620-d4f3094d9ddf/asserts/digest.go (about) 1 // -*- Mode: Go; indent-tabs-mode: t -*- 2 3 /* 4 * Copyright (C) 2015 Canonical Ltd 5 * 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 3 as 8 * published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 17 * 18 */ 19 20 package asserts 21 22 import ( 23 "crypto" 24 "encoding/base64" 25 "fmt" 26 ) 27 28 // EncodeDigest encodes the digest from hash algorithm to be put in an assertion header. 29 func EncodeDigest(hash crypto.Hash, hashDigest []byte) (string, error) { 30 algo := "" 31 switch hash { 32 case crypto.SHA512: 33 algo = "sha512" 34 case crypto.SHA3_384: 35 algo = "sha3-384" 36 default: 37 return "", fmt.Errorf("unsupported hash") 38 } 39 if len(hashDigest) != hash.Size() { 40 return "", fmt.Errorf("hash digest by %s should be %d bytes", algo, hash.Size()) 41 } 42 return base64.RawURLEncoding.EncodeToString(hashDigest), nil 43 }