コード例 #1
0
ファイル: OpenPgp.cs プロジェクト: n4074/SecretSplitter
        public static bool TryReadFrom(Stream inputStream, out OpenPgpPacketHeader readPacketHeader)
        {
            int firstByteRaw = inputStream.ReadByte();

            if (firstByteRaw < 0)
            {
                readPacketHeader = null;
                return(false);
            }

            var firstByte = (byte)firstByteRaw;

            if ((firstByte & NewHeaderHighBits) == NewHeaderHighBits)
            {
                readPacketHeader = new OpenPgpPacketHeader(firstByte, inputStream);
                return(true);
            }
            if ((firstByte & OpenPgpOldFormatPacketHeader.OldHeaderHighBits) == OpenPgpOldFormatPacketHeader.OldHeaderHighBits)
            {
                readPacketHeader = new OpenPgpOldFormatPacketHeader(firstByte, inputStream);
                return(true);
            }
            readPacketHeader = null;
            return(false);
        }
コード例 #2
0
ファイル: OpenPgp.cs プロジェクト: n4074/SecretSplitter
        public static IEnumerable <OpenPgpPacket> ReadAllPackets(Stream inputStream)
        {
            OpenPgpPacketHeader header;

            while (OpenPgpPacketHeader.TryReadFrom(inputStream, out header))
            {
                long currentPosition = inputStream.Position;
                long afterPacket     = currentPosition + header.Length;

                Type mappedType;
                if (_TagIdToType.TryGetValue(header.TagId, out mappedType))
                {
                    yield return(Activator.CreateInstance(mappedType, header, inputStream) as OpenPgpPacket);
                }
                else
                {
                    yield return(new OpenPgpPacket(header, inputStream));
                }

                if (header.Length >= 0)
                {
                    inputStream.Seek(afterPacket, SeekOrigin.Begin);
                }
            }
        }
コード例 #3
0
ファイル: OpenPgp.cs プロジェクト: n4074/SecretSplitter
        public ModificationDetectionCodeOpenPgpPacket(OpenPgpPacketHeader header, Stream inputStream) : base(header, inputStream)
        {
            var sha1Value = new byte[20];

            if (inputStream.Read(sha1Value, 0, 20) != 20)
            {
                throw new CryptographicException();
            }
            HashValue = sha1Value;
        }
コード例 #4
0
ファイル: OpenPgp.cs プロジェクト: n4074/SecretSplitter
        public LiteralDataOpenPgpPacket(OpenPgpPacketHeader header, Stream inputStream) : base(header, inputStream)
        {
            var format       = (char)inputStream.ReadByte();
            var stringLength = inputStream.ReadByte();
            var stringBytes  = inputStream.CopySubsetToBytes(stringLength);

            FileName      = Encoding.UTF8.GetString(stringBytes);
            FileDate      = OpenPgpTimeField.Read(inputStream).Date;
            LiteralStream = new MemoryStream();
            inputStream.CopySubsetTo(LiteralStream, StartOfNextPacketOffset - inputStream.Position);
            LiteralStream.Position = 0;
        }
コード例 #5
0
ファイル: OpenPgp.cs プロジェクト: n4074/SecretSplitter
        public CompressedDataOpenPgpPacket(OpenPgpPacketHeader header, Stream inputStream) : base(header, inputStream)
        {
            int compressionAlgorithmId = inputStream.ReadByte();

            CompressionAlgorithm = OpenPgpCompressionAlgorithm.GetCompressionAlgorithmById(compressionAlgorithmId);

            var decompressionStream = CompressionAlgorithm.Decompress(inputStream) as DeflateStream;

            DecompressedStream = new MemoryStream();
            decompressionStream.CopyTo(DecompressedStream);
            DecompressedStream.Position = 0;
        }
コード例 #6
0
ファイル: OpenPgp.cs プロジェクト: n4074/SecretSplitter
        public SymmetricallyEncryptedIntegrityProtectedDataOpenPgpPacket(OpenPgpPacketHeader header, Stream inputStream) : base(header, inputStream)
        {
            var foundByte = inputStream.ReadByte();

            if (foundByte != ExpectedVersion)
            {
                throw new InvalidDataException();
            }

            int encryptedDataLength = (int)header.Length - 1;  // minus version byte

            var ms = new MemoryStream(encryptedDataLength);

            inputStream.CopySubsetTo(ms, encryptedDataLength);
            ms.Position     = 0;
            EncryptedStream = ms;
        }
コード例 #7
0
ファイル: OpenPgp.cs プロジェクト: n4074/SecretSplitter
        public SymmetricKeyEncryptedSessionKeyOpenPgpPacket(OpenPgpPacketHeader header, Stream inputStream) : base(header, inputStream)
        {
            int versionNumber = inputStream.ReadByte();

            if (versionNumber != ExpectedVersion)
            {
                throw new InvalidDataException();
            }

            Cipher = OpenPgpSymmetricCipher.GetCipher(inputStream.ReadByte());
            StringToKeySpecifier = OpenPgpStringToKeySpecifier.ReadFrom(inputStream);

            if (inputStream.Position < StartOfNextPacketOffset)
            {
                throw new NotImplementedException();
            }
        }
コード例 #8
0
ファイル: OpenPgp.cs プロジェクト: soferio/SecretSplitter
        public CompressedDataOpenPgpPacket(OpenPgpPacketHeader header, Stream inputStream)
            : base(header, inputStream)
        {
            int compressionAlgorithmId = inputStream.ReadByte();
            CompressionAlgorithm = OpenPgpCompressionAlgorithm.GetCompressionAlgorithmById(compressionAlgorithmId);

            var decompressionStream = CompressionAlgorithm.Decompress(inputStream) as DeflateStream;
            DecompressedStream = new MemoryStream();
            decompressionStream.CopyTo(DecompressedStream);
            DecompressedStream.Position = 0;
        }
コード例 #9
0
ファイル: OpenPgp.cs プロジェクト: soferio/SecretSplitter
        public SymmetricKeyEncryptedSessionKeyOpenPgpPacket(OpenPgpPacketHeader header, Stream inputStream)
            : base(header, inputStream)
        {
            int versionNumber = inputStream.ReadByte();
            if(versionNumber != ExpectedVersion) {
                throw new InvalidDataException();
            }

            Cipher = OpenPgpSymmetricCipher.GetCipher(inputStream.ReadByte());
            StringToKeySpecifier = OpenPgpStringToKeySpecifier.ReadFrom(inputStream);

            if(inputStream.Position < StartOfNextPacketOffset) {
                throw new NotImplementedException();
            }
        }
コード例 #10
0
ファイル: OpenPgp.cs プロジェクト: soferio/SecretSplitter
 public LiteralDataOpenPgpPacket(OpenPgpPacketHeader header, Stream inputStream)
     : base(header, inputStream)
 {
     var format = (char) inputStream.ReadByte();
     var stringLength = inputStream.ReadByte();
     var stringBytes = inputStream.CopySubsetToBytes(stringLength);
     FileName = Encoding.UTF8.GetString(stringBytes);
     FileDate = OpenPgpTimeField.Read(inputStream).Date;
     LiteralStream = new MemoryStream();
     inputStream.CopySubsetTo(LiteralStream, StartOfNextPacketOffset - inputStream.Position);
     LiteralStream.Position = 0;
 }
コード例 #11
0
ファイル: OpenPgp.cs プロジェクト: n4074/SecretSplitter
 protected OpenPgpPacket(int tagId)
 {
     TagId  = tagId;
     Header = new OpenPgpPacketHeader(tagId);
 }
コード例 #12
0
ファイル: OpenPgp.cs プロジェクト: n4074/SecretSplitter
 internal OpenPgpPacket(OpenPgpPacketHeader header, Stream inputStream) : this(header.TagId)
 {
     _InputStream = inputStream;
     _StartOffset = inputStream.Position;
     Header       = header;
 }
コード例 #13
0
ファイル: OpenPgp.cs プロジェクト: soferio/SecretSplitter
        public SymmetricallyEncryptedIntegrityProtectedDataOpenPgpPacket(OpenPgpPacketHeader header, Stream inputStream)
            : base(header, inputStream)
        {
            var foundByte = inputStream.ReadByte();
            if(foundByte != ExpectedVersion) {
                throw new InvalidDataException();
            }

            int encryptedDataLength = (int) header.Length - 1; // minus version byte

            var ms = new MemoryStream(encryptedDataLength);
            inputStream.CopySubsetTo(ms, encryptedDataLength);
            ms.Position = 0;
            EncryptedStream = ms;
        }
コード例 #14
0
ファイル: OpenPgp.cs プロジェクト: soferio/SecretSplitter
        public static bool TryReadFrom(Stream inputStream, out OpenPgpPacketHeader readPacketHeader)
        {
            int firstByteRaw = inputStream.ReadByte();
            if(firstByteRaw < 0) {
                readPacketHeader = null;
                return false;
            }

            var firstByte = (byte) firstByteRaw;

            if((firstByte & NewHeaderHighBits) == NewHeaderHighBits) {
                readPacketHeader = new OpenPgpPacketHeader(firstByte, inputStream);
                return true;
            }
            if((firstByte & OpenPgpOldFormatPacketHeader.OldHeaderHighBits) == OpenPgpOldFormatPacketHeader.OldHeaderHighBits) {
                readPacketHeader = new OpenPgpOldFormatPacketHeader(firstByte, inputStream);
                return true;
            }
            readPacketHeader = null;
            return false;
        }
コード例 #15
0
ファイル: OpenPgp.cs プロジェクト: soferio/SecretSplitter
 protected OpenPgpPacket(int tagId)
 {
     TagId = tagId;
     Header = new OpenPgpPacketHeader(tagId);
 }
コード例 #16
0
ファイル: OpenPgp.cs プロジェクト: soferio/SecretSplitter
 internal OpenPgpPacket(OpenPgpPacketHeader header, Stream inputStream)
     : this(header.TagId)
 {
     _InputStream = inputStream;
     _StartOffset = inputStream.Position;
     Header = header;
 }
コード例 #17
0
ファイル: OpenPgp.cs プロジェクト: soferio/SecretSplitter
 public ModificationDetectionCodeOpenPgpPacket(OpenPgpPacketHeader header, Stream inputStream)
     : base(header, inputStream)
 {
     var sha1Value = new byte[20];
     if(inputStream.Read(sha1Value, 0, 20) != 20) {
         throw new CryptographicException();
     }
     HashValue = sha1Value;
 }