1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
package pkcs7
import (
"crypto"
"log"
"os"
"testing"
"github.com/foxboron/go-uefi/asntest"
"golang.org/x/crypto/cryptobyte"
)
func TestVerifySignature(t *testing.T) {
cert, key = InitCert()
b, err := SignPKCS7(key, cert, OIDData, []byte{0x00, 0x01})
if err != nil {
t.Fatalf("message")
}
pkcs, err := ParsePKCS7(b)
if err != nil {
t.Fatalf("failed parsing PKCS7 signature: %v", err)
}
ok, err := pkcs.Verify(cert)
if err != nil {
t.Fatalf("failed verifying signature: %v", err)
}
if !ok {
t.Fatalf("Signature should validate")
}
}
// Try to parse a signature created by sbvarsign
func TestParseSbvarignSignature(t *testing.T) {
b, err := os.ReadFile("testdata/test.signed")
if err != nil {
t.Fatal(err)
}
_, err = ParsePKCS7(b)
if err != nil {
t.Fatalf("failed to parse pkcs7: %v", err)
}
}
// This test compares the library ASN.1 output to the old implementation
// This is mostly for debugging the implementation.
func TestCompareOldImplementation(t *testing.T) {
if !testing.Verbose() {
return
}
cert, key := asntest.InitCert()
b, err := os.ReadFile("testdata/old_pkcs7_implementation.der")
if err != nil {
t.Fatal(err)
}
img := []byte{0x00, 0x01}
h := crypto.SHA256.New()
h.Write(img)
bb, err := SignPKCS7(key, cert, OIDData, h.Sum(nil))
if err != nil {
t.Fatalf("failed signing digest")
}
cs := cryptobyte.String(bb)
_, bytes, err := ParseContentInfo(&cs)
if err != nil {
log.Fatal(err)
}
// We should see a couple of differences, but largely the same structure should be present
asntest.Asn1Compare(t, b, bytes)
}
|