podman/vendor/go.mozilla.org/pkcs7
TomSweeneyRedHat 47c91097f7 Bump to Buildah 1.16.0-dev in upstream
Bump Buildah to v1.16.0-dev in the upstream branch
of Podman.  This will allow us to get a number of new
issues into the upstream branch for use.  The version of
Buildah will need to be bumped to v1.16.0 and then
vendored into Podman before we release Podman v2.0

Signed-off-by: TomSweeneyRedHat <tsweeney@redhat.com>
2020-08-03 14:34:24 -04:00
..
.gitignore Bump to Buildah 1.16.0-dev in upstream 2020-08-03 14:34:24 -04:00
.travis.yml Bump to Buildah 1.16.0-dev in upstream 2020-08-03 14:34:24 -04:00
ber.go Bump to Buildah 1.16.0-dev in upstream 2020-08-03 14:34:24 -04:00
decrypt.go Bump to Buildah 1.16.0-dev in upstream 2020-08-03 14:34:24 -04:00
encrypt.go Bump to Buildah 1.16.0-dev in upstream 2020-08-03 14:34:24 -04:00
go.mod Bump to Buildah 1.16.0-dev in upstream 2020-08-03 14:34:24 -04:00
LICENSE Bump to Buildah 1.16.0-dev in upstream 2020-08-03 14:34:24 -04:00
Makefile Bump to Buildah 1.16.0-dev in upstream 2020-08-03 14:34:24 -04:00
pkcs7.go Bump to Buildah 1.16.0-dev in upstream 2020-08-03 14:34:24 -04:00
README.md Bump to Buildah 1.16.0-dev in upstream 2020-08-03 14:34:24 -04:00
sign.go Bump to Buildah 1.16.0-dev in upstream 2020-08-03 14:34:24 -04:00
verify.go Bump to Buildah 1.16.0-dev in upstream 2020-08-03 14:34:24 -04:00

pkcs7

GoDoc Build Status

pkcs7 implements parsing and creating signed and enveloped messages.

package main

import (
	"bytes"
	"crypto/rsa"
	"crypto/x509"
	"encoding/pem"
	"fmt"
	"os"

    "go.mozilla.org/pkcs7"
)

func SignAndDetach(content []byte, cert *x509.Certificate, privkey *rsa.PrivateKey) (signed []byte, err error) {
	toBeSigned, err := NewSignedData(content)
	if err != nil {
		err = fmt.Errorf("Cannot initialize signed data: %s", err)
		return
	}
	if err = toBeSigned.AddSigner(cert, privkey, SignerInfoConfig{}); err != nil {
		err = fmt.Errorf("Cannot add signer: %s", err)
		return
	}

	// Detach signature, omit if you want an embedded signature
	toBeSigned.Detach()

	signed, err = toBeSigned.Finish()
	if err != nil {
		err = fmt.Errorf("Cannot finish signing data: %s", err)
		return
	}

	// Verify the signature
	pem.Encode(os.Stdout, &pem.Block{Type: "PKCS7", Bytes: signed})
	p7, err := pkcs7.Parse(signed)
	if err != nil {
		err = fmt.Errorf("Cannot parse our signed data: %s", err)
		return
	}

	// since the signature was detached, reattach the content here
	p7.Content = content

	if bytes.Compare(content, p7.Content) != 0 {
		err = fmt.Errorf("Our content was not in the parsed data:\n\tExpected: %s\n\tActual: %s", content, p7.Content)
		return
	}
	if err = p7.Verify(); err != nil {
		err = fmt.Errorf("Cannot verify our signed data: %s", err)
		return
	}

	return signed, nil
}

Credits

This is a fork of fullsailor/pkcs7