Example Code to build Signature Message:

    /**********************************************************************************************
     * This example code is provided for illustrative purposes only and provided 'AS IS' without
     * warranty of any kind.
     *
     * Copyright ©2014 Chrysler Group LLC.  All Rights Reserved.  All information contained herein is,
     * and remains the property of Chrysler Group LLC and its suppliers, if any.  The intellectual and
     * technical concepts contained herein are proprietary to Chrysler Group LLC and its suppliers
     * and may be covered by U.S. and Foreign Patents, patents in process, and are protected by trade
     * secret or copyright law. Dissemination of this information or reproduction of this material is
     * strictly forbidden unless prior written permission is obtained from Chrysler Group LLC.
     *
     * Chrysler, Jeep, Dodge, Ram, SRT, Mopar and the Pentastar logo are registered trademarks of
     * Chrysler Group LLC. FIAT is a registered trademark of Fiat group Marketing & Corporate
     * Communication S.p.A. used under license by Chrysler Group LLC.
     *********************************************************************************************/
    package com.fca.uconnect.global;

    import java.io.ByteArrayOutputStream;
    import java.text.CharacterIterator;
    import java.text.StringCharacterIterator;
    import java.util.ArrayList;
    import java.util.Base64;
    import java.util.List;
    import java.util.UUID;

    import com.fca.uconnect.global.GlobalUconnectControl.UconnectAny;
    import com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage;
    import com.fca.uconnect.global.GlobalUconnectExtProvision.ProvisioningPush;
    import com.fca.uconnect.global.GlobalUconnectExtProvision.ServiceDescription;
    import com.fca.uconnect.global.GlobalUconnectExtProvision.ServiceDescription.ServiceTypeEnum;
    import com.fca.uconnect.global.GlobalUconnectExtProvision.ServiceSubscriptionInfo;
    import com.fca.uconnect.global.GlobalUconnectExtProvision.WifiConfigSet;
    import com.fca.uconnect.global.GlobalUconnectExtProvision.WifiSetting;
    import com.fca.uconnect.global.GlobalUconnectExtProvision.WifiSetting.EncryptionEnum;
    import com.fca.uconnect.global.GlobalUconnectExtSignature.Signature;
    import com.google.protobuf.ByteString;

    public class ExampleForSignature {
    	private int messageId;

    	//This method builds Signature message with ProvisionPush .
    	public UconnectMessage getProvisionPushMsgWithSignature(String vehicleId, UUID sessionId) {
    		messageId++;

    		ServiceDescription servDesc = ServiceDescription.newBuilder()
    				.setExpireTime(1234567890)
    				.setServiceType(ServiceTypeEnum.ECALL)
    				.build();
    		ServiceDescription servDesc1 = ServiceDescription.newBuilder()
    				.setExpireTime(1234567890)
    				.setServiceType(ServiceTypeEnum.REMOTEENGINESTART)
    				.build();
    		List services = new ArrayList();
    		services.add(servDesc);
    		services.add(servDesc1);
    		ServiceSubscriptionInfo serviceDesc = ServiceSubscriptionInfo.newBuilder()
    				.addAllServices(services).
    				build();

    		 WifiSetting wifiSetting = WifiSetting.newBuilder()
    				 .setEncryption(EncryptionEnum.WEP)
    				 .setSsid("FCA")
    				 .setPassword("FCAPWD")
    				 .build();
    		 WifiConfigSet wifiConfigSet = WifiConfigSet.newBuilder()
    				 .setWifiSetting(wifiSetting)
    				 .build();
    		 ProvisioningPush provisioningPush = ProvisioningPush.newBuilder()
    				 .setWifiConfigSet(wifiConfigSet)
    				 .setServiceSubscriptionInfo(serviceDesc)
    				 .build();

    	    byte[] signatureValBytes = decodeBase64("-b64");
    	    ByteString value = ByteString.copyFrom(signatureValBytes);
    		Signature signature = Signature.newBuilder()
    				.setSignatureType("Base64")
    				.setSignatureValue(value)
    				.build();
    		UconnectMessage msg = UconnectMessage.newBuilder()
    				.setTimestamp(System.currentTimeMillis())
    				.setMessageId(messageId)

    				.addMessages(UconnectAny.newBuilder().setExtension(GlobalUconnectExtSignature.signature, signature))
    				.addMessages(UconnectAny.newBuilder().setExtension(GlobalUconnectExtProvision.provisioningPush, provisioningPush))
    				.build();
    		return msg;
    	}

    private static int b64d(char i) {
    switch (i) {
    case 'A': return 0; case 'B': return 1; case 'C': return 2; case 'D': return 3;
    case 'E': return 4; case 'F': return 5; case 'G': return 6; case 'H': return 7;
    case 'I': return 8; case 'J': return 9; case 'K': return 10; case 'L': return 11;
    case 'M': return 12; case 'N': return 13; case 'O': return 14; case 'P': return 15;
    case 'Q': return 16; case 'R': return 17; case 'S': return 18; case 'T': return 19;
    case 'U': return 20; case 'V': return 21; case 'W': return 22; case 'X': return 23;
    case 'Y': return 24; case 'Z': return 25; case 'a': return 26; case 'b': return 27;
    case 'c': return 28; case 'd': return 29; case 'e': return 30; case 'f': return 31;
    case 'g': return 32; case 'h': return 33; case 'i': return 34; case 'j': return 35;
    case 'k': return 36; case 'l': return 37; case 'm': return 38; case 'n': return 39;
    case 'o': return 40; case 'p': return 41; case 'q': return 42; case 'r': return 43;
    case 's': return 44; case 't': return 45; case 'u': return 46; case 'v': return 47;
    case 'w': return 48; case 'x': return 49; case 'y': return 50; case 'z': return 51;
    case '0': return 52; case '1': return 53; case '2': return 54; case '3': return 55;
    case '4': return 56; case '5': return 57; case '6': return 58; case '7': return 59;
    case '8': return 60; case '9': return 61; case '+': return 62; case '/': return 63;
    default: return -1;
    }
    }
    	public static byte[] decodeBase64(String s) {
    		CharacterIterator it = new StringCharacterIterator(s.trim());
    		ByteArrayOutputStream out = new ByteArrayOutputStream();
    		int i = 0, j = 0;
    		for (char ch = it.first(); ch != CharacterIterator.DONE && ch != '='; ch = it.next()) {
    		  int v = b64d(ch);
    		  if (v >= 0) {
    		    i = (i << 6) | v;
    		    j++;
    		    if (j >= 4) {
    		      out.write(i >> 16);
    		      out.write(i >> 8);
    		      out.write(i);
    		      i = 0; j = 0;
    		    }
    		  }
    		}
    		switch (j) {
    		case 3:
    		  out.write(i >> 10);
    		  out.write(i >> 2);
    		  break;
    		case 2:
    		  out.write(i >> 4);
    		  break;
    		}
    		return out.toByteArray();
    		}

    		public static String encodeUU(byte[] b, int off, int len) {
    		int i = 0;
    		StringBuffer s = new StringBuffer();
    		while (len > 45) {
    		  s.append('M');
    		  for (int j = 0; j < 45; j += 3) {
    		    i = ((b[off] & 0xFF) << 16) | ((b[off+1] & 0xFF) << 8) | (b[off+2] & 0xFF);
    		    s.append((char)(' '+((i >> 18) & 0x3F)));
    		    s.append((char)(' '+((i >> 12) & 0x3F)));
    		    s.append((char)(' '+((i >> 6) & 0x3F)));
    		    s.append((char)(' '+(i & 0x3F)));
    		    off += 3;
    		    len -= 3;
    		  }
    		  s.append('\n');
    		}
    		s.append((char)(' ' + len));
    		while (len >= 3) {
    		  i = ((b[off] & 0xFF) << 16) | ((b[off+1] & 0xFF) << 8) | (b[off+2] & 0xFF);
    		  s.append((char)(' '+((i >> 18) & 0x3F)));
    		  s.append((char)(' '+((i >> 12) & 0x3F)));
    		  s.append((char)(' '+((i >> 6) & 0x3F)));
    		  s.append((char)(' '+(i & 0x3F)));
    		  off += 3;
    		  len -= 3;
    		}
    		switch (len) {
    		case 2:
    		  i = ((b[off] & 0xFF) << 16) | ((b[off+1] & 0xFF) << 8);
    		  s.append((char)(' '+((i >> 18) & 0x3F)));
    		  s.append((char)(' '+((i >> 12) & 0x3F)));
    		  s.append((char)(' '+((i >> 6) & 0x3F)));
    		  break;
    		case 1:
    		  i = ((b[off] & 0xFF) << 16);
    		  s.append((char)(' '+((i >> 18) & 0x3F)));
    		  s.append((char)(' '+((i >> 12) & 0x3F)));
    		  break;
    		}
    		return s.toString();
    		}
    }

The example code demonstrates how to build Signature message and send it with Provisioning Push.

Download Example Code here