2 Commits

Author SHA1 Message Date
e42e8fba5a Update to v0.1.4
Signed-off-by: Josef Fröhle <github@josef-froehle.de>
2018-02-21 01:29:01 +01:00
0e885db4db v0.1.1 2018-02-20 19:12:31 +01:00

View File

@@ -1,18 +1,17 @@
package Ewp package Ewp
import ( import (
"crypto/x509"
"crypto/rsa" "crypto/rsa"
"encoding/pem" "crypto/x509"
"encoding/base64" "encoding/base64"
"encoding/pem"
"errors" "errors"
"io/ioutil" "io/ioutil"
"reflect" "reflect"
"strings"
"fmt"
"github.com/fullsailor/pkcs7"
"strconv" "strconv"
"strings"
"github.com/DeineAgenturUG/pkcs7"
) )
const tagName = "ppewp" const tagName = "ppewp"
@@ -93,7 +92,7 @@ type Ewp struct {
func NewPaypalEwp(options EwpOptions) *Ewp { func NewPaypalEwp(options EwpOptions) *Ewp {
var ewp = &Ewp{} var ewp = &Ewp{}
ewp.LoadKeyPair(options) ewp.loadKeyPair(options)
return ewp return ewp
} }
@@ -102,7 +101,7 @@ func (pe *Ewp) GetError() error {
return pe.error return pe.error
} }
func (pe *Ewp) LoadKeyPair(options EwpOptions) { func (pe *Ewp) loadKeyPair(options EwpOptions) {
pe.certificateID = &options.CertificateID pe.certificateID = &options.CertificateID
if options.PaypalCertificateFile != "" { if options.PaypalCertificateFile != "" {
@@ -145,14 +144,14 @@ func (pe *Ewp) LoadKeyPair(options EwpOptions) {
keyPasswd = []byte(options.PrivateKeyPassphrase) keyPasswd = []byte(options.PrivateKeyPassphrase)
} }
pe.privateKey, pe.error = ParseRsaPrivateKeyFromPemStr(keyFilePEM, &keyPasswd) pe.privateKey, pe.error = parseRsaPrivateKeyFromPemStr(keyFilePEM, &keyPasswd)
} }
func (pe *Ewp) Generate(data *CryptData) string { func (pe *Ewp) Generate(data *CryptData) string {
var encData []string var encData []string
var output []byte var output []byte
encData = append(encData, "cert_id=" + *pe.certificateID) encData = append(encData, "cert_id="+*pe.certificateID)
rt := reflect.TypeOf(data) rt := reflect.TypeOf(data)
// Check if it's a pointer // Check if it's a pointer
@@ -178,7 +177,6 @@ func (pe *Ewp) Generate(data *CryptData) string {
var s string var s string
switch kind { switch kind {
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
s = strconv.FormatInt(reflect.ValueOf(data).Elem().Field(i).Int(), 10) s = strconv.FormatInt(reflect.ValueOf(data).Elem().Field(i).Int(), 10)
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
@@ -194,23 +192,24 @@ func (pe *Ewp) Generate(data *CryptData) string {
case reflect.String: case reflect.String:
s = reflect.ValueOf(data).Elem().Field(i).String() s = reflect.ValueOf(data).Elem().Field(i).String()
} }
if _, ok := tagVals["OMITEMPTY"]; ok && s == "" { if _, ok := tagVals["OMITEMPTY"]; ok && s == "" {
continue continue
} }
if s == "" { if s == "" {
s = tagVals["DEFAULT"]; s = tagVals["DEFAULT"]
} }
encData = append(encData, tagVals["NAME"]+"="+s) encData = append(encData, tagVals["NAME"]+"="+s)
fmt.Printf("%s (%v) = %#v >> %#v\n", reflect.ValueOf(data).Elem().Field(i).Type().Name(), kind, tagVals, s) //fmt.Printf("%s (%v) = %#v >> %#v\n", reflect.ValueOf(data).Elem().Field(i).Type().Name(), kind, tagVals, s)
} }
encFilled := strings.Join(encData, "\n") encFilled := strings.Join(encData, "\n")
fmt.Printf("%#v\n\n", encFilled) //fmt.Printf("%#v\n\n", encFilled)
signedData, err := pkcs7.NewSignedData([]byte(encFilled)) signedData, err := pkcs7.NewSignedData([]byte(encFilled))
if err != nil { if err != nil {
@@ -242,7 +241,7 @@ func (pe *Ewp) Generate(data *CryptData) string {
return "-----BEGIN PKCS7-----\n" + chunkSplit(base64.StdEncoding.EncodeToString(output), 64, "\n") + "-----END PKCS7-----" return "-----BEGIN PKCS7-----\n" + chunkSplit(base64.StdEncoding.EncodeToString(output), 64, "\n") + "-----END PKCS7-----"
} }
func ParseRsaPrivateKeyFromPemStr(privatePEM []byte, passphrase *[]byte) (*rsa.PrivateKey, error) { func parseRsaPrivateKeyFromPemStr(privatePEM []byte, passphrase *[]byte) (*rsa.PrivateKey, error) {
block, _ := pem.Decode(privatePEM) block, _ := pem.Decode(privatePEM)
if block == nil { if block == nil {
return nil, errors.New("failed to parse PEM block containing the key") return nil, errors.New("failed to parse PEM block containing the key")