signing.go (1651B)
1 // GoToSocial 2 // Copyright (C) GoToSocial Authors admin@gotosocial.org 3 // SPDX-License-Identifier: AGPL-3.0-or-later 4 // 5 // This program is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU Affero General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 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 Affero General Public License for more details. 14 // 15 // You should have received a copy of the GNU Affero General Public License 16 // along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 package transport 19 20 import ( 21 "github.com/go-fed/httpsig" 22 ) 23 24 var ( 25 // http signer preferences 26 prefs = []httpsig.Algorithm{httpsig.RSA_SHA256} 27 digestAlgo = httpsig.DigestSha256 28 getHeaders = []string{httpsig.RequestTarget, "host", "date"} 29 postHeaders = []string{httpsig.RequestTarget, "host", "date", "digest"} 30 ) 31 32 // NewGETSigner returns a new httpsig.Signer instance initialized with GTS GET preferences. 33 func NewGETSigner(expiresIn int64) (httpsig.Signer, error) { 34 sig, _, err := httpsig.NewSigner(prefs, digestAlgo, getHeaders, httpsig.Signature, expiresIn) 35 return sig, err 36 } 37 38 // NewPOSTSigner returns a new httpsig.Signer instance initialized with GTS POST preferences. 39 func NewPOSTSigner(expiresIn int64) (httpsig.Signer, error) { 40 sig, _, err := httpsig.NewSigner(prefs, digestAlgo, postHeaders, httpsig.Signature, expiresIn) 41 return sig, err 42 }