diff options
Diffstat (limited to 'vendor/github.com/containers/image/copy/sign.go')
-rw-r--r-- | vendor/github.com/containers/image/copy/sign.go | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/vendor/github.com/containers/image/copy/sign.go b/vendor/github.com/containers/image/copy/sign.go new file mode 100644 index 000000000..9187d70b3 --- /dev/null +++ b/vendor/github.com/containers/image/copy/sign.go @@ -0,0 +1,35 @@ +package copy + +import ( + "fmt" + "io" + + "github.com/containers/image/signature" + "github.com/containers/image/transports" + "github.com/containers/image/types" + "github.com/pkg/errors" +) + +// createSignature creates a new signature of manifest at (identified by) dest using keyIdentity. +func createSignature(dest types.ImageDestination, manifest []byte, keyIdentity string, reportWriter io.Writer) ([]byte, error) { + mech, err := signature.NewGPGSigningMechanism() + if err != nil { + return nil, errors.Wrap(err, "Error initializing GPG") + } + defer mech.Close() + if err := mech.SupportsSigning(); err != nil { + return nil, errors.Wrap(err, "Signing not supported") + } + + dockerReference := dest.Reference().DockerReference() + if dockerReference == nil { + return nil, errors.Errorf("Cannot determine canonical Docker reference for destination %s", transports.ImageName(dest.Reference())) + } + + fmt.Fprintf(reportWriter, "Signing manifest\n") + newSig, err := signature.SignDockerManifest(manifest, dockerReference.String(), mech, keyIdentity) + if err != nil { + return nil, errors.Wrap(err, "Error creating signature") + } + return newSig, nil +} |