diff options
Diffstat (limited to 'order.go')
| -rw-r--r-- | order.go | 95 |
1 files changed, 95 insertions, 0 deletions
@@ -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 +} |
