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

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;
}