diff --git a/xmldsig/xmldsig.go b/xmldsig/xmldsig.go index 179e3cb..09741e4 100644 --- a/xmldsig/xmldsig.go +++ b/xmldsig/xmldsig.go @@ -79,32 +79,28 @@ func newDoc(buf []byte, opts Options) (*C.xmlDoc, error) { } for _, idattr := range opts.XMLID { - if err := addIDAttr(C.xmlDocGetRootElement(doc), - idattr.AttributeName, idattr.ElementName, idattr.ElementNamespace); err != nil { - return nil, err - } + addIDAttr(C.xmlDocGetRootElement(doc), + idattr.AttributeName, idattr.ElementName, idattr.ElementNamespace) } return doc, nil } -func addIDAttr(node *C.xmlNode, attrName, nodeName, nsHref string) error { +func addIDAttr(node *C.xmlNode, attrName, nodeName, nsHref string) { // process children first because it does not matter much but does simplify code cur := C.xmlSecGetNextElementNode(node.children) for { if cur == nil { break } - if err := addIDAttr(cur, attrName, nodeName, nsHref); err != nil { - return err - } + addIDAttr(cur, attrName, nodeName, nsHref) cur = C.xmlSecGetNextElementNode(cur.next) } if C.GoString((*C.char)(unsafe.Pointer(node.name))) != nodeName { - return nil + return } if nsHref != "" && node.ns != nil && C.GoString((*C.char)(unsafe.Pointer(node.ns.href))) != nsHref { - return nil + return } // the attribute with name equal to attrName should exist @@ -118,7 +114,7 @@ func addIDAttr(node *C.xmlNode, attrName, nodeName, nsHref string) error { } } - return nil + return } func dumpDoc(doc *C.xmlDoc) []byte { diff --git a/xmldsig/xmldsig_test.go b/xmldsig/xmldsig_test.go index 79e270a..f4ab1b8 100644 --- a/xmldsig/xmldsig_test.go +++ b/xmldsig/xmldsig_test.go @@ -4,15 +4,28 @@ import ( "encoding/xml" "strings" "testing" + + . "gopkg.in/check.v1" ) +// Hook up gocheck into the "go test" runner. +func Test(t *testing.T) { TestingT(t) } + type Envelope struct { Data string Signature Signature `xml:"http://www.w3.org/2000/09/xmldsig# Signature"` } -func TestSign(t *testing.T) { - key := []byte(`-----BEGIN RSA PRIVATE KEY----- +type XmlDSigTest struct { + Key []byte + Cert []byte + DocStr []byte +} + +var _ = Suite(&XmlDSigTest{}) + +func (testSuite *XmlDSigTest) SetUpTest(c *C) { + testSuite.Key = []byte(`-----BEGIN RSA PRIVATE KEY----- MIIBPAIBAAJBANPQbQ92nlbeg1Q5JNHSO1Yey46nZ7GJltLWw1ccSvp7pnvmfUm+ M521CpFpfr4EAE3UVBMoU9j/hqq3dFAc2H0CAwEAAQJBALFVCjmsAZyQ5jqZLO5N qEfNuHZSSUol+xPBogFIOq3BWa269eNNcAK5or5g0XWWon7EPdyGT4qyDVH9KzXK @@ -22,8 +35,7 @@ FER/FQXpRyb7M8kCIETUrwZ8WkiPPxbz/Fqw1W5kjw/g2I5e2uSYaCP2eyuVAiEA mOI6RhRyMqgxQyy0plJVjG1s4fdu92AWYy9AwYeyd/8= -----END RSA PRIVATE KEY----- `) - - cert := []byte(`-----BEGIN CERTIFICATE----- + testSuite.Cert = []byte(`-----BEGIN CERTIFICATE----- MIIDpzCCA1GgAwIBAgIJAK+ii7kzrdqvMA0GCSqGSIb3DQEBBQUAMIGcMQswCQYD VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTE9MDsGA1UEChM0WE1MIFNlY3Vy aXR5IExpYnJhcnkgKGh0dHA6Ly93d3cuYWxla3NleS5jb20veG1sc2VjKTEWMBQG @@ -46,8 +58,7 @@ hvcNAQEFBQADQQAOXBj0yICp1RmHXqnUlsppryLCW3pKBD1dkb4HWarO7RjA1yJJ fBjXssrERn05kpBcrRfzou4r3DCgQFPhjxga -----END CERTIFICATE----- `) - - docStr := []byte(` + testSuite.DocStr = []byte(` @@ -95,6 +106,10 @@ fBjXssrERn05kpBcrRfzou4r3DCgQFPhjxga `) + +} + +func (testSuite *XmlDSigTest) TestSignAndVerify(c *C) { expectedSignedString := `