Exemplo n.º 1
0
        /// <summary>
        /// Parses the packet given as byte array into the current
        /// class and returns this with the populated parameters.
        /// </summary>
        /// <param name="bData">A byte array containing an OpenPGP
        /// representation of the packet.</param>
        /// <returns>Returns an SymSessionKeyPacket that containes
        /// the parsed properties.</returns>
        /// <remarks>No remarks</remarks>
        public override Packet ParsePacket(byte[] bData)
        {
            if (bData.Length < 4)
            {
                throw new ArgumentException("Invalid Packet!");
            }

            Version   = (SymSessionKeyPacketVersionNumbers)bData[0];
            Algorithm = (SymAlgorithms)bData[1];

            int ls2kLength = s2kSpecifier.Length(bData[2]);

            if (ls2kLength == 0)
            {
                throw new ArgumentException("Invalid Packet!");
            }

            if (bData.Length < ls2kLength + 2)
            {
                throw new ArgumentException("Invalid Packet!");
            }

            byte[] bS2K = new byte[ls2kLength];
            Array.Copy(bData, 2, bS2K, 0, ls2kLength);
            s2kSpecifier.ParseSpecifier(bS2K);

            //check if there is an encrypted session key attached
            if (bData.Length > 2 + ls2kLength)
            {
                bEncryptedSessionKey = new byte[bData.Length - (ls2kLength + 2)];
                Array.Copy(bData, 2 + ls2kLength, bEncryptedSessionKey, 0, bEncryptedSessionKey.Length);
            }
            else
            {
                bEncryptedSessionKey = new byte[0];
            }

            this.bIsUpdated = false;
            return(this);
        }