You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.2 KiB
114 lines
3.2 KiB
Index: Business-PayPal-EWP-1.03/EWP.xs |
|
--- Business-PayPal-EWP-1.03/EWP.xs.orig 2010-01-12 15:44:48.000000000 +0100 |
|
+++ Business-PayPal-EWP-1.03/EWP.xs 2011-12-25 15:43:55.000000000 +0100 |
|
@@ -123,22 +123,32 @@ |
|
|
|
end: |
|
//Free everything |
|
- if (p7) |
|
- PKCS7_free(p7); |
|
if (bio) |
|
BIO_free_all(bio); |
|
- if (memBio) |
|
- BIO_free_all(memBio); |
|
if (p7bio) |
|
BIO_free_all(p7bio); |
|
+ if (memBio) |
|
+ BIO_free_all(memBio); |
|
+ if (p7) |
|
+ PKCS7_free(p7); |
|
if (pkey) |
|
EVP_PKEY_free(pkey); |
|
return ret; |
|
} |
|
|
|
+static int ppcb(char *buf, int size, int rwflag, void *passPhrase) |
|
+{ |
|
+ size_t n; |
|
|
|
+ if (passPhrase == NULL) |
|
+ return 0; |
|
+ if ((n = strlen(passPhrase))+1 > size) |
|
+ return 0; |
|
+ strcpy(buf, passPhrase); |
|
+ return n; |
|
+} |
|
|
|
-char* SignAndEncryptCImpl(char* sCmdTxt, char* keyPath, char* certPath, char* payPalCertPath, bool verbose) |
|
+char* SignAndEncryptCImpl(char* sCmdTxt, char* keyPath, char* certPath, char* payPalCertPath, bool verbose, char *passPhrase) |
|
{ |
|
BIO *bio; |
|
X509 *x509 = NULL; |
|
@@ -177,7 +187,11 @@ |
|
printf("Fatal Error: Failed to open %s\n", keyPath); |
|
goto end; |
|
} |
|
- if ((rsa = PEM_read_bio_RSAPrivateKey(bio, NULL, NULL, NULL)) == NULL) |
|
+ if (passPhrase != NULL && passPhrase[0] != '\0') |
|
+ rsa = PEM_read_bio_RSAPrivateKey(bio, NULL, ppcb, passPhrase); |
|
+ else |
|
+ rsa = PEM_read_bio_RSAPrivateKey(bio, NULL, NULL, NULL); |
|
+ if (rsa == NULL) |
|
{ |
|
printf("Fatal Error: Unable to read RSA key %s\n", keyPath); |
|
goto end; |
|
@@ -189,8 +203,8 @@ |
|
enc = sign_and_encrypt(sCmdTxt, rsa, x509, PPx509, verbose); |
|
|
|
end: |
|
- if (bio) { |
|
- BIO_free_all(bio); |
|
+ if (rsa) { |
|
+ RSA_free(rsa); |
|
} |
|
if (x509) { |
|
X509_free(x509); |
|
@@ -198,8 +212,8 @@ |
|
if (PPx509) { |
|
X509_free(PPx509); |
|
} |
|
- if (rsa) { |
|
- RSA_free(rsa); |
|
+ if (bio) { |
|
+ BIO_free_all(bio); |
|
} |
|
return enc; |
|
} |
|
@@ -210,10 +224,11 @@ |
|
PROTOTYPES: DISABLE |
|
|
|
char * |
|
-SignAndEncryptCImpl(sCmdTxt,certPath,keyPath,payPalCertPath,verbose) |
|
+SignAndEncryptCImpl(sCmdTxt,certPath,keyPath,payPalCertPath,verbose,passPhrase) |
|
char* sCmdTxt |
|
char* certPath |
|
char* keyPath |
|
char* payPalCertPath |
|
bool verbose |
|
+ char* passPhrase |
|
|
|
Index: Business-PayPal-EWP-1.03/lib/Business/PayPal/EWP.pm |
|
--- Business-PayPal-EWP-1.03/lib/Business/PayPal/EWP.pm.orig 2010-01-12 15:46:21.000000000 +0100 |
|
+++ Business-PayPal-EWP-1.03/lib/Business/PayPal/EWP.pm 2011-12-25 15:38:28.000000000 +0100 |
|
@@ -14,17 +14,10 @@ |
|
XSLoader::load('Business::PayPal::EWP', $VERSION); |
|
|
|
sub SignAndEncrypt { |
|
- my $formdata=shift; |
|
- my $key=shift; |
|
- my $cert=shift; |
|
- my $ppcert=shift; |
|
- |
|
- # Reformat |
|
- #$formdata=~s/,/\n/g; |
|
- |
|
- # Encrypt and sign |
|
- my $retval = Business::PayPal::EWP::SignAndEncryptCImpl($formdata,$key,$cert,$ppcert,0); |
|
- |
|
+ my ($formdata, $key, $cert, $ppcert, $verbose, $passphrase) = @_; |
|
+ $verbose = 0 if (not defined $verbose); |
|
+ $passphrase = "" if (not defined $passphrase); |
|
+ my $retval = Business::PayPal::EWP::SignAndEncryptCImpl($formdata,$key,$cert,$ppcert,$verbose,$passphrase); |
|
return $retval; |
|
} |
|
|
|
|