modulepackage
1.4.0
Repository: https://github.com/russellhaering/goxmldsig.git
Documentation: pkg.go.dev
# README
goxmldsig
XML Digital Signatures implemented in pure Go.
Installation
Install goxmldsig
using go get
:
$ go get github.com/russellhaering/goxmldsig
Usage
Include the types.Signature
struct from this package in your application messages.
import (
sigtypes "github.com/russellhaering/goxmldsig/types"
)
type AppHdr struct {
...
Signature *sigtypes.Signature
}
Signing
package main
import (
"github.com/beevik/etree"
"github.com/russellhaering/goxmldsig"
)
func main() {
// Generate a key and self-signed certificate for signing
randomKeyStore := dsig.RandomKeyStoreForTest()
ctx := dsig.NewDefaultSigningContext(randomKeyStore)
elementToSign := &etree.Element{
Tag: "ExampleElement",
}
elementToSign.CreateAttr("ID", "id1234")
// Sign the element
signedElement, err := ctx.SignEnveloped(elementToSign)
if err != nil {
panic(err)
}
// Serialize the signed element. It is important not to modify the element
// after it has been signed - even pretty-printing the XML will invalidate
// the signature.
doc := etree.NewDocument()
doc.SetRoot(signedElement)
str, err := doc.WriteToString()
if err != nil {
panic(err)
}
println(str)
}
Signature Validation
// Validate an element against a root certificate
func validate(root *x509.Certificate, el *etree.Element) {
// Construct a signing context with one or more roots of trust.
ctx := dsig.NewDefaultValidationContext(&dsig.MemoryX509CertificateStore{
Roots: []*x509.Certificate{root},
})
// It is important to only use the returned validated element.
// See: https://www.w3.org/TR/xmldsig-bestpractices/#check-what-is-signed
validated, err := ctx.Validate(el)
if err != nil {
panic(err)
}
doc := etree.NewDocument()
doc.SetRoot(validated)
str, err := doc.WriteToString()
if err != nil {
panic(err)
}
println(str)
}
Limitations
This library was created in order to implement SAML 2.0 without needing to execute a command line tool to create and validate signatures. It currently only implements the subset of relevant standards needed to support that implementation, but I hope to make it more complete over time. Contributions are welcome.
# Functions
MakeC14N10ExclusiveCanonicalizerWithPrefixList constructs an exclusive Canonicalizer from a PrefixList in NMTOKENS format (a white space separated list).
MakeC14N10ExclusiveWithCommentsCanonicalizerWithPrefixList constructs an exclusive Canonicalizer from a PrefixList in NMTOKENS format (a white space separated list).
MakeC14N10RecCanonicalizer constructs an inclusive canonicalizer.
MakeC14N10WithCommentsCanonicalizer constructs an inclusive canonicalizer.
MakeC14N11Canonicalizer constructs an inclusive canonicalizer.
MakeC14N11WithCommentsCanonicalizer constructs an inclusive canonicalizer.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
NewSigningContext creates a new signing context with the given signer and certificate chain.
No description provided by the author
# Constants
No description provided by the author
Tags.
Supported canonicalization algorithms.
Well-known signature algorithms.
Well-known signature algorithms.
Well-known signature algorithms.
Well-known signature algorithms.
Well-known signature algorithms.
No description provided by the author
No description provided by the author
Tags.
Tags.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Well-known signature algorithms.
Tags.
Tags.
No description provided by the author
No description provided by the author
Tags.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Tags.
Tags.
Tags.
Tags.
Tags.
Tags.
No description provided by the author
Tags.
Tags.
# Variables
No description provided by the author
Well-known errors.
ErrMissingSignature indicates that no enveloped signature was found referencing the top level element passed for signature verification.
Well-known errors.
# Structs
Clock wraps a clockwork.Clock (which could be real or fake) in order to default to a real clock when a nil *Clock is used.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# Interfaces
Canonicalizer is an implementation of a canonicalization algorithm.
No description provided by the author
No description provided by the author
No description provided by the author
# Type aliases
No description provided by the author
TLSCertKeyStore wraps the stdlib tls.Certificate to return its contained keyand certs.