// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: Global_Uconnect_Ext_Signature.proto

package com.fca.uconnect.global;

public final class GlobalUconnectExtSignature {
  private GlobalUconnectExtSignature() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
    registry.add(com.fca.uconnect.global.GlobalUconnectExtSignature.signature);
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  public interface SignatureOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.fca.uconnect.global.Signature)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     *&#47; The signatureId is used to correlate the message data with the signature.  This can support multiple messages with separate signatures as required.
     * </pre>
     *
     * <code>optional int32 signatureId = 1;</code>
     */
    boolean hasSignatureId();
    /**
     * <pre>
     *&#47; The signatureId is used to correlate the message data with the signature.  This can support multiple messages with separate signatures as required.
     * </pre>
     *
     * <code>optional int32 signatureId = 1;</code>
     */
    int getSignatureId();

    /**
     * <pre>
     *&#47; a well known identified that specifies the type of signature or hash. For example, SHA256.
     * </pre>
     *
     * <code>optional string signatureType = 2;</code>
     */
    boolean hasSignatureType();
    /**
     * <pre>
     *&#47; a well known identified that specifies the type of signature or hash. For example, SHA256.
     * </pre>
     *
     * <code>optional string signatureType = 2;</code>
     */
    java.lang.String getSignatureType();
    /**
     * <pre>
     *&#47; a well known identified that specifies the type of signature or hash. For example, SHA256.
     * </pre>
     *
     * <code>optional string signatureType = 2;</code>
     */
    com.google.protobuf.ByteString
        getSignatureTypeBytes();

    /**
     * <pre>
     *&#47;The signature value generated from by the Global PKI system for the associated message containing the matching signatureId.
     * </pre>
     *
     * <code>optional bytes signatureValue = 3;</code>
     */
    boolean hasSignatureValue();
    /**
     * <pre>
     *&#47;The signature value generated from by the Global PKI system for the associated message containing the matching signatureId.
     * </pre>
     *
     * <code>optional bytes signatureValue = 3;</code>
     */
    com.google.protobuf.ByteString getSignatureValue();

    /**
     * <pre>
     *&#47; This is used as source data for signing.
     * </pre>
     *
     * <code>optional bytes unsignedData = 4;</code>
     */
    boolean hasUnsignedData();
    /**
     * <pre>
     *&#47; This is used as source data for signing.
     * </pre>
     *
     * <code>optional bytes unsignedData = 4;</code>
     */
    com.google.protobuf.ByteString getUnsignedData();

    /**
     * <pre>
     *&#47;This is used to return the whole chain of certificates used to sign the data
     * </pre>
     *
     * <code>repeated bytes certificateChain = 5;</code>
     */
    java.util.List<com.google.protobuf.ByteString> getCertificateChainList();
    /**
     * <pre>
     *&#47;This is used to return the whole chain of certificates used to sign the data
     * </pre>
     *
     * <code>repeated bytes certificateChain = 5;</code>
     */
    int getCertificateChainCount();
    /**
     * <pre>
     *&#47;This is used to return the whole chain of certificates used to sign the data
     * </pre>
     *
     * <code>repeated bytes certificateChain = 5;</code>
     */
    com.google.protobuf.ByteString getCertificateChain(int index);
  }
  /**
   * <pre>
   **
   * A Signature message may follow any message in the UconnectControl messages array. The purpose of the signature message is to allow validation and protection of messages that are stored on the TU for more than a single transient invocation of the client application.
   * Signature messages may contain direct hash function values, or may be interpreted otherwise per mutual arrangement between the TU and the SDP applications.
   * &lt;div class=exmsg-main&gt;
   * &lt;h4&gt;Signature Example Message:&lt;/h4&gt;
   * &lt;div class=ex-msg&gt;
   *	&lt;code&gt;
   * 		timestamp: 1489208951716
   * 		messageId: 3
   * 		messages
   * 		{
   * 		 [com.fca.uconnect.global.signature]
   * 		 {
   * 		  signatureId:11
   * 		  signatureType: "RSA CERT"
   * 		  signatureValue: "put x509 cert here"
   * 		 }
   *      }
   * &lt;/code&gt;
   * &lt;/div&gt;
   * &lt;/div&gt;
   *
   * </pre>
   *
   * Protobuf type {@code com.fca.uconnect.global.Signature}
   */
  public  static final class Signature extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.fca.uconnect.global.Signature)
      SignatureOrBuilder {
    // Use Signature.newBuilder() to construct.
    private Signature(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Signature() {
      signatureId_ = 0;
      signatureType_ = "";
      signatureValue_ = com.google.protobuf.ByteString.EMPTY;
      unsignedData_ = com.google.protobuf.ByteString.EMPTY;
      certificateChain_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Signature(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              signatureId_ = input.readInt32();
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              signatureType_ = bs;
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              signatureValue_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              unsignedData_ = input.readBytes();
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                certificateChain_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
                mutable_bitField0_ |= 0x00000010;
              }
              certificateChain_.add(input.readBytes());
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          certificateChain_ = java.util.Collections.unmodifiableList(certificateChain_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.fca.uconnect.global.GlobalUconnectExtSignature.internal_static_com_fca_uconnect_global_Signature_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.fca.uconnect.global.GlobalUconnectExtSignature.internal_static_com_fca_uconnect_global_Signature_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.fca.uconnect.global.GlobalUconnectExtSignature.Signature.class, com.fca.uconnect.global.GlobalUconnectExtSignature.Signature.Builder.class);
    }

    private int bitField0_;
    public static final int SIGNATUREID_FIELD_NUMBER = 1;
    private int signatureId_;
    /**
     * <pre>
     *&#47; The signatureId is used to correlate the message data with the signature.  This can support multiple messages with separate signatures as required.
     * </pre>
     *
     * <code>optional int32 signatureId = 1;</code>
     */
    public boolean hasSignatureId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     *&#47; The signatureId is used to correlate the message data with the signature.  This can support multiple messages with separate signatures as required.
     * </pre>
     *
     * <code>optional int32 signatureId = 1;</code>
     */
    public int getSignatureId() {
      return signatureId_;
    }

    public static final int SIGNATURETYPE_FIELD_NUMBER = 2;
    private volatile java.lang.Object signatureType_;
    /**
     * <pre>
     *&#47; a well known identified that specifies the type of signature or hash. For example, SHA256.
     * </pre>
     *
     * <code>optional string signatureType = 2;</code>
     */
    public boolean hasSignatureType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     *&#47; a well known identified that specifies the type of signature or hash. For example, SHA256.
     * </pre>
     *
     * <code>optional string signatureType = 2;</code>
     */
    public java.lang.String getSignatureType() {
      java.lang.Object ref = signatureType_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          signatureType_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     *&#47; a well known identified that specifies the type of signature or hash. For example, SHA256.
     * </pre>
     *
     * <code>optional string signatureType = 2;</code>
     */
    public com.google.protobuf.ByteString
        getSignatureTypeBytes() {
      java.lang.Object ref = signatureType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        signatureType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SIGNATUREVALUE_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString signatureValue_;
    /**
     * <pre>
     *&#47;The signature value generated from by the Global PKI system for the associated message containing the matching signatureId.
     * </pre>
     *
     * <code>optional bytes signatureValue = 3;</code>
     */
    public boolean hasSignatureValue() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     *&#47;The signature value generated from by the Global PKI system for the associated message containing the matching signatureId.
     * </pre>
     *
     * <code>optional bytes signatureValue = 3;</code>
     */
    public com.google.protobuf.ByteString getSignatureValue() {
      return signatureValue_;
    }

    public static final int UNSIGNEDDATA_FIELD_NUMBER = 4;
    private com.google.protobuf.ByteString unsignedData_;
    /**
     * <pre>
     *&#47; This is used as source data for signing.
     * </pre>
     *
     * <code>optional bytes unsignedData = 4;</code>
     */
    public boolean hasUnsignedData() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <pre>
     *&#47; This is used as source data for signing.
     * </pre>
     *
     * <code>optional bytes unsignedData = 4;</code>
     */
    public com.google.protobuf.ByteString getUnsignedData() {
      return unsignedData_;
    }

    public static final int CERTIFICATECHAIN_FIELD_NUMBER = 5;
    private java.util.List<com.google.protobuf.ByteString> certificateChain_;
    /**
     * <pre>
     *&#47;This is used to return the whole chain of certificates used to sign the data
     * </pre>
     *
     * <code>repeated bytes certificateChain = 5;</code>
     */
    public java.util.List<com.google.protobuf.ByteString>
        getCertificateChainList() {
      return certificateChain_;
    }
    /**
     * <pre>
     *&#47;This is used to return the whole chain of certificates used to sign the data
     * </pre>
     *
     * <code>repeated bytes certificateChain = 5;</code>
     */
    public int getCertificateChainCount() {
      return certificateChain_.size();
    }
    /**
     * <pre>
     *&#47;This is used to return the whole chain of certificates used to sign the data
     * </pre>
     *
     * <code>repeated bytes certificateChain = 5;</code>
     */
    public com.google.protobuf.ByteString getCertificateChain(int index) {
      return certificateChain_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, signatureId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, signatureType_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, signatureValue_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, unsignedData_);
      }
      for (int i = 0; i < certificateChain_.size(); i++) {
        output.writeBytes(5, certificateChain_.get(i));
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, signatureId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, signatureType_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, signatureValue_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, unsignedData_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < certificateChain_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(certificateChain_.get(i));
        }
        size += dataSize;
        size += 1 * getCertificateChainList().size();
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.fca.uconnect.global.GlobalUconnectExtSignature.Signature)) {
        return super.equals(obj);
      }
      com.fca.uconnect.global.GlobalUconnectExtSignature.Signature other = (com.fca.uconnect.global.GlobalUconnectExtSignature.Signature) obj;

      boolean result = true;
      result = result && (hasSignatureId() == other.hasSignatureId());
      if (hasSignatureId()) {
        result = result && (getSignatureId()
            == other.getSignatureId());
      }
      result = result && (hasSignatureType() == other.hasSignatureType());
      if (hasSignatureType()) {
        result = result && getSignatureType()
            .equals(other.getSignatureType());
      }
      result = result && (hasSignatureValue() == other.hasSignatureValue());
      if (hasSignatureValue()) {
        result = result && getSignatureValue()
            .equals(other.getSignatureValue());
      }
      result = result && (hasUnsignedData() == other.hasUnsignedData());
      if (hasUnsignedData()) {
        result = result && getUnsignedData()
            .equals(other.getUnsignedData());
      }
      result = result && getCertificateChainList()
          .equals(other.getCertificateChainList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasSignatureId()) {
        hash = (37 * hash) + SIGNATUREID_FIELD_NUMBER;
        hash = (53 * hash) + getSignatureId();
      }
      if (hasSignatureType()) {
        hash = (37 * hash) + SIGNATURETYPE_FIELD_NUMBER;
        hash = (53 * hash) + getSignatureType().hashCode();
      }
      if (hasSignatureValue()) {
        hash = (37 * hash) + SIGNATUREVALUE_FIELD_NUMBER;
        hash = (53 * hash) + getSignatureValue().hashCode();
      }
      if (hasUnsignedData()) {
        hash = (37 * hash) + UNSIGNEDDATA_FIELD_NUMBER;
        hash = (53 * hash) + getUnsignedData().hashCode();
      }
      if (getCertificateChainCount() > 0) {
        hash = (37 * hash) + CERTIFICATECHAIN_FIELD_NUMBER;
        hash = (53 * hash) + getCertificateChainList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.fca.uconnect.global.GlobalUconnectExtSignature.Signature parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.fca.uconnect.global.GlobalUconnectExtSignature.Signature parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.fca.uconnect.global.GlobalUconnectExtSignature.Signature parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.fca.uconnect.global.GlobalUconnectExtSignature.Signature parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.fca.uconnect.global.GlobalUconnectExtSignature.Signature parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.fca.uconnect.global.GlobalUconnectExtSignature.Signature parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.fca.uconnect.global.GlobalUconnectExtSignature.Signature parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.fca.uconnect.global.GlobalUconnectExtSignature.Signature parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.fca.uconnect.global.GlobalUconnectExtSignature.Signature parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.fca.uconnect.global.GlobalUconnectExtSignature.Signature parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.fca.uconnect.global.GlobalUconnectExtSignature.Signature prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     **
     * A Signature message may follow any message in the UconnectControl messages array. The purpose of the signature message is to allow validation and protection of messages that are stored on the TU for more than a single transient invocation of the client application.
     * Signature messages may contain direct hash function values, or may be interpreted otherwise per mutual arrangement between the TU and the SDP applications.
     * &lt;div class=exmsg-main&gt;
     * &lt;h4&gt;Signature Example Message:&lt;/h4&gt;
     * &lt;div class=ex-msg&gt;
     *	&lt;code&gt;
     * 		timestamp: 1489208951716
     * 		messageId: 3
     * 		messages
     * 		{
     * 		 [com.fca.uconnect.global.signature]
     * 		 {
     * 		  signatureId:11
     * 		  signatureType: "RSA CERT"
     * 		  signatureValue: "put x509 cert here"
     * 		 }
     *      }
     * &lt;/code&gt;
     * &lt;/div&gt;
     * &lt;/div&gt;
     *
     * </pre>
     *
     * Protobuf type {@code com.fca.uconnect.global.Signature}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.fca.uconnect.global.Signature)
        com.fca.uconnect.global.GlobalUconnectExtSignature.SignatureOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.fca.uconnect.global.GlobalUconnectExtSignature.internal_static_com_fca_uconnect_global_Signature_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.fca.uconnect.global.GlobalUconnectExtSignature.internal_static_com_fca_uconnect_global_Signature_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.fca.uconnect.global.GlobalUconnectExtSignature.Signature.class, com.fca.uconnect.global.GlobalUconnectExtSignature.Signature.Builder.class);
      }

      // Construct using com.fca.uconnect.global.GlobalUconnectExtSignature.Signature.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        signatureId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        signatureType_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        signatureValue_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        unsignedData_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        certificateChain_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.fca.uconnect.global.GlobalUconnectExtSignature.internal_static_com_fca_uconnect_global_Signature_descriptor;
      }

      public com.fca.uconnect.global.GlobalUconnectExtSignature.Signature getDefaultInstanceForType() {
        return com.fca.uconnect.global.GlobalUconnectExtSignature.Signature.getDefaultInstance();
      }

      public com.fca.uconnect.global.GlobalUconnectExtSignature.Signature build() {
        com.fca.uconnect.global.GlobalUconnectExtSignature.Signature result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.fca.uconnect.global.GlobalUconnectExtSignature.Signature buildPartial() {
        com.fca.uconnect.global.GlobalUconnectExtSignature.Signature result = new com.fca.uconnect.global.GlobalUconnectExtSignature.Signature(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.signatureId_ = signatureId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.signatureType_ = signatureType_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.signatureValue_ = signatureValue_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.unsignedData_ = unsignedData_;
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          certificateChain_ = java.util.Collections.unmodifiableList(certificateChain_);
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.certificateChain_ = certificateChain_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.fca.uconnect.global.GlobalUconnectExtSignature.Signature) {
          return mergeFrom((com.fca.uconnect.global.GlobalUconnectExtSignature.Signature)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.fca.uconnect.global.GlobalUconnectExtSignature.Signature other) {
        if (other == com.fca.uconnect.global.GlobalUconnectExtSignature.Signature.getDefaultInstance()) return this;
        if (other.hasSignatureId()) {
          setSignatureId(other.getSignatureId());
        }
        if (other.hasSignatureType()) {
          bitField0_ |= 0x00000002;
          signatureType_ = other.signatureType_;
          onChanged();
        }
        if (other.hasSignatureValue()) {
          setSignatureValue(other.getSignatureValue());
        }
        if (other.hasUnsignedData()) {
          setUnsignedData(other.getUnsignedData());
        }
        if (!other.certificateChain_.isEmpty()) {
          if (certificateChain_.isEmpty()) {
            certificateChain_ = other.certificateChain_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureCertificateChainIsMutable();
            certificateChain_.addAll(other.certificateChain_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.fca.uconnect.global.GlobalUconnectExtSignature.Signature parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.fca.uconnect.global.GlobalUconnectExtSignature.Signature) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int signatureId_ ;
      /**
       * <pre>
       *&#47; The signatureId is used to correlate the message data with the signature.  This can support multiple messages with separate signatures as required.
       * </pre>
       *
       * <code>optional int32 signatureId = 1;</code>
       */
      public boolean hasSignatureId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       *&#47; The signatureId is used to correlate the message data with the signature.  This can support multiple messages with separate signatures as required.
       * </pre>
       *
       * <code>optional int32 signatureId = 1;</code>
       */
      public int getSignatureId() {
        return signatureId_;
      }
      /**
       * <pre>
       *&#47; The signatureId is used to correlate the message data with the signature.  This can support multiple messages with separate signatures as required.
       * </pre>
       *
       * <code>optional int32 signatureId = 1;</code>
       */
      public Builder setSignatureId(int value) {
        bitField0_ |= 0x00000001;
        signatureId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *&#47; The signatureId is used to correlate the message data with the signature.  This can support multiple messages with separate signatures as required.
       * </pre>
       *
       * <code>optional int32 signatureId = 1;</code>
       */
      public Builder clearSignatureId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        signatureId_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object signatureType_ = "";
      /**
       * <pre>
       *&#47; a well known identified that specifies the type of signature or hash. For example, SHA256.
       * </pre>
       *
       * <code>optional string signatureType = 2;</code>
       */
      public boolean hasSignatureType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       *&#47; a well known identified that specifies the type of signature or hash. For example, SHA256.
       * </pre>
       *
       * <code>optional string signatureType = 2;</code>
       */
      public java.lang.String getSignatureType() {
        java.lang.Object ref = signatureType_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            signatureType_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       *&#47; a well known identified that specifies the type of signature or hash. For example, SHA256.
       * </pre>
       *
       * <code>optional string signatureType = 2;</code>
       */
      public com.google.protobuf.ByteString
          getSignatureTypeBytes() {
        java.lang.Object ref = signatureType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          signatureType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       *&#47; a well known identified that specifies the type of signature or hash. For example, SHA256.
       * </pre>
       *
       * <code>optional string signatureType = 2;</code>
       */
      public Builder setSignatureType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        signatureType_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *&#47; a well known identified that specifies the type of signature or hash. For example, SHA256.
       * </pre>
       *
       * <code>optional string signatureType = 2;</code>
       */
      public Builder clearSignatureType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        signatureType_ = getDefaultInstance().getSignatureType();
        onChanged();
        return this;
      }
      /**
       * <pre>
       *&#47; a well known identified that specifies the type of signature or hash. For example, SHA256.
       * </pre>
       *
       * <code>optional string signatureType = 2;</code>
       */
      public Builder setSignatureTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        signatureType_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString signatureValue_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <pre>
       *&#47;The signature value generated from by the Global PKI system for the associated message containing the matching signatureId.
       * </pre>
       *
       * <code>optional bytes signatureValue = 3;</code>
       */
      public boolean hasSignatureValue() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       *&#47;The signature value generated from by the Global PKI system for the associated message containing the matching signatureId.
       * </pre>
       *
       * <code>optional bytes signatureValue = 3;</code>
       */
      public com.google.protobuf.ByteString getSignatureValue() {
        return signatureValue_;
      }
      /**
       * <pre>
       *&#47;The signature value generated from by the Global PKI system for the associated message containing the matching signatureId.
       * </pre>
       *
       * <code>optional bytes signatureValue = 3;</code>
       */
      public Builder setSignatureValue(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        signatureValue_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *&#47;The signature value generated from by the Global PKI system for the associated message containing the matching signatureId.
       * </pre>
       *
       * <code>optional bytes signatureValue = 3;</code>
       */
      public Builder clearSignatureValue() {
        bitField0_ = (bitField0_ & ~0x00000004);
        signatureValue_ = getDefaultInstance().getSignatureValue();
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString unsignedData_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <pre>
       *&#47; This is used as source data for signing.
       * </pre>
       *
       * <code>optional bytes unsignedData = 4;</code>
       */
      public boolean hasUnsignedData() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <pre>
       *&#47; This is used as source data for signing.
       * </pre>
       *
       * <code>optional bytes unsignedData = 4;</code>
       */
      public com.google.protobuf.ByteString getUnsignedData() {
        return unsignedData_;
      }
      /**
       * <pre>
       *&#47; This is used as source data for signing.
       * </pre>
       *
       * <code>optional bytes unsignedData = 4;</code>
       */
      public Builder setUnsignedData(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        unsignedData_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *&#47; This is used as source data for signing.
       * </pre>
       *
       * <code>optional bytes unsignedData = 4;</code>
       */
      public Builder clearUnsignedData() {
        bitField0_ = (bitField0_ & ~0x00000008);
        unsignedData_ = getDefaultInstance().getUnsignedData();
        onChanged();
        return this;
      }

      private java.util.List<com.google.protobuf.ByteString> certificateChain_ = java.util.Collections.emptyList();
      private void ensureCertificateChainIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          certificateChain_ = new java.util.ArrayList<com.google.protobuf.ByteString>(certificateChain_);
          bitField0_ |= 0x00000010;
         }
      }
      /**
       * <pre>
       *&#47;This is used to return the whole chain of certificates used to sign the data
       * </pre>
       *
       * <code>repeated bytes certificateChain = 5;</code>
       */
      public java.util.List<com.google.protobuf.ByteString>
          getCertificateChainList() {
        return java.util.Collections.unmodifiableList(certificateChain_);
      }
      /**
       * <pre>
       *&#47;This is used to return the whole chain of certificates used to sign the data
       * </pre>
       *
       * <code>repeated bytes certificateChain = 5;</code>
       */
      public int getCertificateChainCount() {
        return certificateChain_.size();
      }
      /**
       * <pre>
       *&#47;This is used to return the whole chain of certificates used to sign the data
       * </pre>
       *
       * <code>repeated bytes certificateChain = 5;</code>
       */
      public com.google.protobuf.ByteString getCertificateChain(int index) {
        return certificateChain_.get(index);
      }
      /**
       * <pre>
       *&#47;This is used to return the whole chain of certificates used to sign the data
       * </pre>
       *
       * <code>repeated bytes certificateChain = 5;</code>
       */
      public Builder setCertificateChain(
          int index, com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCertificateChainIsMutable();
        certificateChain_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *&#47;This is used to return the whole chain of certificates used to sign the data
       * </pre>
       *
       * <code>repeated bytes certificateChain = 5;</code>
       */
      public Builder addCertificateChain(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCertificateChainIsMutable();
        certificateChain_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *&#47;This is used to return the whole chain of certificates used to sign the data
       * </pre>
       *
       * <code>repeated bytes certificateChain = 5;</code>
       */
      public Builder addAllCertificateChain(
          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
        ensureCertificateChainIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, certificateChain_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *&#47;This is used to return the whole chain of certificates used to sign the data
       * </pre>
       *
       * <code>repeated bytes certificateChain = 5;</code>
       */
      public Builder clearCertificateChain() {
        certificateChain_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:com.fca.uconnect.global.Signature)
    }

    // @@protoc_insertion_point(class_scope:com.fca.uconnect.global.Signature)
    private static final com.fca.uconnect.global.GlobalUconnectExtSignature.Signature DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.fca.uconnect.global.GlobalUconnectExtSignature.Signature();
    }

    public static com.fca.uconnect.global.GlobalUconnectExtSignature.Signature getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Signature>
        PARSER = new com.google.protobuf.AbstractParser<Signature>() {
      public Signature parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new Signature(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<Signature> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Signature> getParserForType() {
      return PARSER;
    }

    public com.fca.uconnect.global.GlobalUconnectExtSignature.Signature getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public static final int SIGNATURE_FIELD_NUMBER = 1001;
  /**
   * <code>extend .com.fca.uconnect.global.UconnectAny { ... }</code>
   */
  public static final
    com.google.protobuf.GeneratedMessage.GeneratedExtension<
      com.fca.uconnect.global.GlobalUconnectControl.UconnectAny,
      com.fca.uconnect.global.GlobalUconnectExtSignature.Signature> signature = com.google.protobuf.GeneratedMessage
          .newFileScopedGeneratedExtension(
        com.fca.uconnect.global.GlobalUconnectExtSignature.Signature.class,
        com.fca.uconnect.global.GlobalUconnectExtSignature.Signature.getDefaultInstance());
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_fca_uconnect_global_Signature_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_fca_uconnect_global_Signature_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n#Global_Uconnect_Ext_Signature.proto\022\027c" +
      "om.fca.uconnect.global\032\035Global_Uconnect_" +
      "Control.proto\"\177\n\tSignature\022\023\n\013signatureI" +
      "d\030\001 \001(\005\022\025\n\rsignatureType\030\002 \001(\t\022\026\n\016signat" +
      "ureValue\030\003 \001(\014\022\024\n\014unsignedData\030\004 \001(\014\022\030\n\020" +
      "certificateChain\030\005 \003(\014:\\\n\tsignature\022$.co" +
      "m.fca.uconnect.global.UconnectAny\030\351\007 \001(\013" +
      "2\".com.fca.uconnect.global.SignatureP\000"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
          public com.google.protobuf.ExtensionRegistry assignDescriptors(
              com.google.protobuf.Descriptors.FileDescriptor root) {
            descriptor = root;
            return null;
          }
        };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
          com.fca.uconnect.global.GlobalUconnectControl.getDescriptor(),
        }, assigner);
    internal_static_com_fca_uconnect_global_Signature_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_com_fca_uconnect_global_Signature_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_fca_uconnect_global_Signature_descriptor,
        new java.lang.String[] { "SignatureId", "SignatureType", "SignatureValue", "UnsignedData", "CertificateChain", });
    signature.internalInit(descriptor.getExtensions().get(0));
    com.fca.uconnect.global.GlobalUconnectControl.getDescriptor();
  }

  // @@protoc_insertion_point(outer_class_scope)
}
