public SignaturePacket(
            int version,
            int signatureType,
            long keyId,
            PublicKeyAlgorithmTag keyAlgorithm,
            HashAlgorithmTag hashAlgorithm,
            ISignatureSubpacket[] hashedData,
            ISignatureSubpacket[] unhashedData,
            byte[] fingerprint,
            MPInteger[] signature)
        {
            this._version = version;
            this._signatureType = signatureType;
            this._keyId = keyId;
            this._keyAlgorithm = keyAlgorithm;
            this._hashAlgorithm = hashAlgorithm;
            this._hashedData = hashedData;
            this._unhashedData = unhashedData;
            this._fingerprint = fingerprint;
            this._signature = signature;

            if (hashedData != null)
            {
                SetCreationTime();
            }
        }
 /**
 * Generate a version 4 signature packet.
 *
 * @param signatureType
 * @param keyAlgorithm
 * @param hashAlgorithm
 * @param hashedData
 * @param unhashedData
 * @param fingerprint
 * @param signature
 */
 public SignaturePacket(
     int signatureType,
     long keyId,
     PublicKeyAlgorithmTag keyAlgorithm,
     HashAlgorithmTag hashAlgorithm,
     ISignatureSubpacket[] hashedData,
     ISignatureSubpacket[] unhashedData,
     byte[] fingerprint,
     MPInteger[] signature)
     : this(4, signatureType, keyId, keyAlgorithm, hashAlgorithm, hashedData, unhashedData, fingerprint, signature)
 {
 }
        /// <summary>
        /// Packets the present.
        /// </summary>
        /// <param name="packets">The packets.</param>
        /// <param name="type">The type.</param>
        /// <returns></returns>
        private static bool PacketPresent(ISignatureSubpacket[] packets, SignatureSubpacketTag type)
        {
            for (var i = 0; i != packets.Length; i++)
            {
                if (packets[i].SubpacketType == type)
                {
                    return true;
                }
            }

            return false;
        }
 /// <summary>
 /// Inserts the subpacket.
 /// </summary>
 /// <param name="packets">The packets.</param>
 /// <param name="subpacket">The subpacket.</param>
 /// <returns></returns>
 private static SignatureSubpacket[] InsertSubpacket(ISignatureSubpacket[] packets, SignatureSubpacket subpacket)
 {
     var tmp = new SignatureSubpacket[packets.Length + 1];
     tmp[0] = subpacket;
     packets.CopyTo(tmp, 1);
     return tmp;
 }
 /// <summary>
 /// Creates the subpacket vector.
 /// </summary>
 /// <param name="pcks">The PCKS.</param>
 /// <returns></returns>
 private static IPgpSignatureSubpacketVector CreateSubpacketVector(ISignatureSubpacket[] pcks)
 {
     return pcks == null ? null : new PgpSignatureSubpacketVector(pcks);
 }
 internal PgpSignatureSubpacketVector(ISignatureSubpacket[] packets)
 {
     _packets = packets;
 }