summaryrefslogtreecommitdiff
path: root/order.go
diff options
context:
space:
mode:
Diffstat (limited to 'order.go')
-rw-r--r--order.go95
1 files changed, 95 insertions, 0 deletions
diff --git a/order.go b/order.go
index 273f7ff..c9d939b 100644
--- a/order.go
+++ b/order.go
@@ -3,9 +3,11 @@ package libebics
import (
"bytes"
"compress/zlib"
+ "crypto/rand"
"encoding/base64"
"encoding/xml"
"fmt"
+ "time"
)
func GenerateIniRequest(signatureCertificate EbicsCertificate) (string, error) {
@@ -156,3 +158,96 @@ func GenerateHiaRequest(authenticationCertificate EbicsCertificate, encryptionCe
return (xml.Header + string(marshal)), err
}
+
+func GenerateHpbRequest(signatureCertificate EbicsCertificate) (string, error) {
+
+ if signatureCertificate.ebicsCertificateType != A005 &&
+ signatureCertificate.ebicsCertificateType != A006 {
+ return "", fmt.Errorf("signature certificate has invalid certificate type %s", signatureCertificate.ebicsCertificateType.String())
+ }
+ /*
+ var zlibWriterBuffer bytes.Buffer
+ zlibWriter := zlib.NewWriter(&zlibWriterBuffer)
+
+ orderData := S002SignaturePubKeyOrderDataType{
+ Esig: "http://www.ebics.org/S002",
+ Ds: "http://www.w3.org/2000/09/xmldsig#",
+ SignaturePubKeyInfo: S002SignaturePubKeyInfoType{
+ X509Data: DSIGX509Data{
+ DSIGX509Certificate: base64.StdEncoding.EncodeToString(
+ signatureCertificate.x509Certificate, // TODO Proper Base64 Marshalling
+ ),
+ },
+ SignatureVersion: signatureCertificate.ebicsCertificateType,
+ },
+ PartnerID: "MV008078",
+ UserID: "SCHOLZ01",
+ }
+
+ orderData_xml, err := xml.Marshal(orderData)
+ if err != nil {
+ return "", err
+ }
+
+ fmt.Print(string(orderData_xml))
+ zlibWriter.Write(orderData_xml)
+ zlibWriter.Close()
+ */
+
+ token := make([]byte, 16)
+ rand.Read(token)
+
+ hpb := H005NoPubKeyDigestsRequest{
+ Xmlns: "urn:org:ebics:H005",
+ Ds: "http://www.w3.org/2000/09/xmldsig#",
+ Version: "H005",
+ Revision: "1",
+ Header: H005NoPubKeyDigestsRequestHeader{
+ Authenticate: true,
+ Static: H005NoPubKeyDigestsRequestStaticHeaderType{
+ HostID: "MULTIVIA",
+ Nonce: fmt.Sprintf("%X", token),
+ Timestamp: time.Now(),
+ PartnerID: "MV008078",
+ UserID: "SCHOLZ01",
+ Product: H005ProductElementType{
+ Language: "en",
+ Name: "libebics",
+ },
+ OrderDetails: H005NoPubKeyDigestsReqOrderDetailsType{
+ AdminOrderType: "HPB",
+ },
+ SecurityMedium: "0000",
+ },
+ Mutable: H005EmptyMutableHeaderType{},
+ },
+ AuthSignature: DSIGSignatureType{
+ SignedInfo: DSIGSignedInfo{
+ CanonicalizationMethod: DSIGCanonicalizationMethod{
+ Algorithm: "http://www.w3.org/TR/2001/REC-xml-c14n-20010315", // TODO const
+ },
+ SignatureMethod: DSIGSignatureMethod{
+ Algorithm: "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256", // TODO const
+ },
+ Reference: DSIGReference{
+ URI: "#xpointer(//*[@authenticate='true'])", // TODO const
+ Transforms: DSIGTransforms{
+ Transform: DSIGTransform{
+ Algorithm: "http://www.w3.org/TR/2001/REC-xml-c14n-20010315",
+ },
+ },
+ DigestMethod: DSIGDigestMethod{
+ Algorithm: "http://www.w3.org/2001/04/xmlenc#sha256",
+ },
+ DigestValue: "",
+ },
+ },
+ SignatureValue: "",
+ },
+ Body: H005NoPubKeyDigestsRequestBody{},
+ }
+
+ marshal, err := xml.MarshalIndent(hpb, "", " ")
+
+ return (xml.Header + string(marshal)), err
+}