2 years ago

#49994

test-img

killsteenkill

golang/goxmldig - Signed element verification failed

I am trying to sign a xml file in Golang. I have used goxmldig to create the digital signature. I am unable to sign any document except very simple elements without any child in etree. I have used the example of signing and validate function from goxmldig. Here is my code:

faxml := etree.NewElement("faxml")
faxml.CreateAttr("xsi:noNamespaceSchemaLocation", "CO_NEF.xsd")
faxml.CreateAttr("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
faxml.CreateAttr("Id", "hasdfuw7862389rjkhasd23asdf2w3wsd")

header := faxml.CreateElement("header")
header.CreateElement("extsysname").SetText("COAPI")
header.CreateElement("batchnumext").SetText("11111")

paymentList := faxml.CreateElement("paymentlist")
element1 := paymentList.CreateElement("payment")
element1.CreateElement("paymentrefno").SetText("p1")
element1.CreateElement("Amount").SetText("2200")

signingKey, _, err := getSigningCertificateKey()
if err != nil {
    fmt.Println(err.Error())
}
ctx := dsig.NewDefaultSigningContext(signingKey)
ctx.Canonicalizer = dsig.MakeC14N10RecCanonicalizer()
ctx.IdAttribute = "Id"

signedElement, err := ctx.SignEnveloped(faxml)
if err != nil {
    panic(err)
}

fmt.Println("=============== Signed Element =============")
fmt.Printf("%#v\n", signedElement)
fmt.Println("=============== End Element =============")

fmt.Println("================= Signed Element Validation==============")
fmt.Println("--validated errors--")
validateCert, err := rsapem.ParseCertificateFromFile(conf.String("", configKeyPath, "signing-file.certificate"))
if err != nil {
    fmt.Println(fmt.Sprintf("validate Certificate parse Error: %s", err.Error()))
}
validatedStr, err := validate(validateCert, signedElement)
if err != nil {
    fmt.Println(fmt.Sprintf("signed element validation failed: %s", err.Error()))
}
fmt.Println("--validated string--")
fmt.Println(validatedStr)
fmt.Println("================= End Signed Element Validation==============")

This always returns a error of: signed element validation failed: Missing signature referencing the top-level element

xml

go

xml-signature

0 Answers

Your Answer

Accepted video resources