Index: uc_worldpay.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/uc_worldpay/uc_worldpay.module,v
retrieving revision 1.17
diff -u -p -r1.17 uc_worldpay.module
--- uc_worldpay.module	18 Aug 2010 13:04:57 -0000	1.17
+++ uc_worldpay.module	18 Aug 2010 20:51:54 -0000
@@ -137,6 +137,14 @@ function uc_payment_method_worldpay($op,
         '#options' => array('AUTHORISED' => 'Authorised', 'REFUSED' => 'Refused', 'ERROR' => 'Error', 'CAPTURED' => 'Captured'),
         '#disabled' => (!variable_get('uc_worldpay_test', TRUE)) ? TRUE : FALSE,
       );
+      $form['payment_parameters']['uc_worldpay_md5'] = array(
+        '#type' => 'textfield',
+        '#title' => t('MD5 secret word'),
+        '#description' => t('Secure your RBS Worldpay account so only your server can send transactions to RBS Worldpay. NB. This needs to be configured on your RBS Worldpay account first.'),
+        '#size' => 20,
+        '#maxlength' => 255,
+        '#default_value' => variable_get('uc_worldpay_md5', ''),
+      );
       $form['payment_parameters']['uc_worldpay_desc'] = array(
         '#type' => 'checkbox',
         '#title' => t('Submit the cart contents as the order description'),
@@ -363,6 +371,14 @@ function uc_worldpay_form($form_state, $
     );
   }
 
+  $uc_worldpay_md5 = variable_get('uc_worldpay_md5', '');
+  if (drupal_strlen($uc_worldpay_md5) > 0) {
+    $data += array(
+      'signatureFields' => 'currency:cartId:amount',
+      'signature' => md5($uc_worldpay_md5 . ':' . $data['currency'] . ':' . $data['cartId'] . ':' . $data['amount']),
+    );
+  }
+
   foreach ($data as $name => $value) {
     $form[$name] = array(
       '#type' => 'hidden',
