Esempio n. 1
0
 internal TSignedStream(Stream aDataStream, TPdfSigner aSigner)
 {
     FDataStream  = aDataStream;
     Signer       = aSigner;
     HelperStream = null;
     SignOffset   = 0;
 }
Esempio n. 2
0
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (HelperStream != null)
                {
                    HelperStream.Dispose();
                }
                HelperStream = null;
            }

            base.Dispose(disposing);
        }
Esempio n. 3
0
        internal void GoReal(byte[] AfterSign, int PKCSSize)
        {
            Debug.Assert(HelperStream != null);
            Signer.Write(AfterSign, 0, AfterSign.Length);

            if (PKCSSize + AfterSign.Length > SignOffset)
            {
                PdfMessages.ThrowException(PdfErr.ErrSigningLengthToSmall);
            }
            byte[] PaddedByteCount = Pad(0x20, SignOffset - (PKCSSize + AfterSign.Length));
            Signer.Write(PaddedByteCount, 0, PaddedByteCount.Length);

            byte[] bt = HelperStream.CurrentStream.ToArray();
            HelperStream.Dispose();
            HelperStream = null;

            Signer.Write(bt, 0, bt.Length);
            byte[] sg    = Signer.GetSignature();
            byte[] hexsg = TPdfBaseRecord.Coder.GetBytes("<" + PdfConv.ToHexString(sg, false));

            FDataStream.Write(hexsg, 0, hexsg.Length);

            if (hexsg.Length > PKCSSize - 1)
            {
                PdfMessages.ThrowException(PdfErr.ErrSigningLengthToSmall);
            }

            for (int i = hexsg.Length; i < PKCSSize - 1; i++) //pad the certificate.
            {
                FDataStream.WriteByte(0);
            }

            FDataStream.Write(TPdfBaseRecord.Coder.GetBytes(">"), 0, 1);

            FDataStream.Write(AfterSign, 0, AfterSign.Length);
            FDataStream.Write(PaddedByteCount, 0, PaddedByteCount.Length);  //Pad the whole thing.

            FDataStream.Write(bt, 0, bt.Length);
        }
Esempio n. 4
0
 internal void GoVirtual(int aSignOffset)
 {
     Debug.Assert(HelperStream == null);
     SignOffset   = aSignOffset;
     HelperStream = new THelperStream(FDataStream);
 }