1package git
2
3import (
4 "io"
5
6 "github.com/go-git/go-git/v5/plumbing"
7)
8
9// signableObject is an object which can be signed.
10type signableObject interface {
11 EncodeWithoutSignature(o plumbing.EncodedObject) error
12}
13
14// Signer is an interface for signing git objects.
15// message is a reader containing the encoded object to be signed.
16// Implementors should return the encoded signature and an error if any.
17// See https://git-scm.com/docs/gitformat-signature for more information.
18type Signer interface {
19 Sign(message io.Reader) ([]byte, error)
20}
21
22func signObject(signer Signer, obj signableObject) ([]byte, error) {
23 encoded := &plumbing.MemoryObject{}
24 if err := obj.EncodeWithoutSignature(encoded); err != nil {
25 return nil, err
26 }
27 r, err := encoded.Reader()
28 if err != nil {
29 return nil, err
30 }
31
32 return signer.Sign(r)
33}