コード例 #1
0
        public static byte[] Decrypt(string encryptedText, RetrievePgpKeys keys)
        {
            AlgorithmAgreement m_algorithmsAgreed = new AlgorithmAgreement(keys.PublicKeys);

            byte[] encryptedBytes = Encoding.UTF8.GetBytes(encryptedText);
            return(Decrypt(encryptedBytes, keys, m_algorithmsAgreed));
        }
コード例 #2
0
        public PgpEncryptFile(RetrievePgpKeys keys)
        {
            if (keys == null)
            {
                throw new ArgumentNullException("keys");
            }

            m_encryptionKeys   = keys;
            m_algorithmsAgreed = new AlgorithmAgreement(keys.PublicKeys);
        }
コード例 #3
0
 public PgpDecryptFile(string encryptedFilePath, RetrievePgpKeys keys, string outputPath)
 {
     m_encryptedFilePath = encryptedFilePath;
     m_retrievePgpKeys   = keys;
     m_outputPath        = outputPath;
 }
コード例 #4
0
        public static byte[] Decrypt(byte[] encryptedData, RetrievePgpKeys keys, AlgorithmAgreement agreed)
        {
            Stream inputStream = new MemoryStream(encryptedData);

            inputStream = PgpUtilities.GetDecoderStream(inputStream);

            PgpObjectFactory     pgpObjFactory = new PgpObjectFactory(inputStream);
            PgpEncryptedDataList enc;
            PgpObject            pgpObj = pgpObjFactory.NextPgpObject();

            if (pgpObj is PgpEncryptedDataList)
            {
                enc = (PgpEncryptedDataList)pgpObj;
            }
            else
            {
                enc = (PgpEncryptedDataList)pgpObjFactory.NextPgpObject();
            }

            PgpPrivateKey             privKey = keys.PrivateKey;
            PgpPublicKeyEncryptedData pbe     = null;

            foreach (PgpPublicKeyEncryptedData pked in enc.GetEncryptedDataObjects())
            {
                if (privKey != null)
                {
                    pbe = pked;
                    break;
                }
            }
            PgpOnePassSignatureList onePassSigList = null;
            PgpSignatureList        signatureList  = null;
            PgpLiteralData          literalData    = null;

            byte[]           returnBytes  = null;
            Stream           clear        = pbe.GetDataStream(privKey);
            PgpObjectFactory plainFactory = new PgpObjectFactory(clear);

            for (; ;)
            {
                PgpObject message = plainFactory.NextPgpObject();
                if (message == null)
                {
                    break;
                }
                if (message is PgpCompressedData)
                {
                    PgpCompressedData compressedData = (PgpCompressedData)message;
                    plainFactory = new PgpObjectFactory(compressedData.GetDataStream());
                }
                else if (message is PgpLiteralData)
                {
                    literalData = (PgpLiteralData)message;
                    Stream unc = literalData.GetInputStream();
                    returnBytes = Org.BouncyCastle.Utilities.IO.Streams.ReadAll(unc);
                    unc.Close();
                }
                else if (message is PgpOnePassSignatureList)
                {
                    onePassSigList = (PgpOnePassSignatureList)message;
                }
                else if (message is PgpSignatureList)
                {
                    signatureList = (PgpSignatureList)message;
                }
                else if (message is PgpMarker)
                {
                }
                else
                {
                    throw new PgpException("message contains unknown message type.");
                }
            }
            //Stream unc = literalData.GetInputStream();

            //byte[] returnBytes = Org.BouncyCastle.Utilities.IO.Streams.ReadAll(unc);

            if ((onePassSigList != null) && (signatureList != null))
            {
                VerifySignature(onePassSigList, signatureList, keys.SecretKey.PublicKey, returnBytes);
            }

            //unc.Close();
            clear.Close();
            inputStream.Close();

            return(returnBytes);
        }
コード例 #5
0
        public static byte[] Decrypt2(byte[] encryptedData, RetrievePgpKeys keys, AlgorithmAgreement agreed)
        {
            Stream inputStream = new MemoryStream(encryptedData);

            inputStream = PgpUtilities.GetDecoderStream(inputStream);

            PgpObjectFactory     pgpObjFactory = new PgpObjectFactory(inputStream);
            PgpEncryptedDataList enc;
            PgpObject            pgpObj = pgpObjFactory.NextPgpObject();

            if (pgpObj is PgpEncryptedDataList)
            {
                enc = (PgpEncryptedDataList)pgpObj;
            }
            else
            {
                enc = (PgpEncryptedDataList)pgpObjFactory.NextPgpObject();
            }

            PgpPrivateKey             privKey = keys.PrivateKey;
            PgpPublicKeyEncryptedData pbe     = null;

            foreach (PgpPublicKeyEncryptedData pked in enc.GetEncryptedDataObjects())
            {
                if (privKey != null)
                {
                    pbe = pked;
                    break;
                }
            }
            PgpOnePassSignatureList onePassSigList = null;
            PgpSignatureList        signatureList  = null;
            PgpLiteralData          literalData    = null;
            Stream           clear        = pbe.GetDataStream(privKey);
            PgpObjectFactory plainFactory = new PgpObjectFactory(clear);
            PgpObject        message      = plainFactory.NextPgpObject();

            if (message is PgpCompressedData)
            {
                PgpCompressedData compressedData = (PgpCompressedData)message;
                Stream            compDataIn     = compressedData.GetDataStream();
                PgpObjectFactory  objectFactory  = new PgpObjectFactory(compDataIn);
                message = objectFactory.NextPgpObject();
                if (message is PgpOnePassSignatureList)
                {
                    onePassSigList = (message as PgpOnePassSignatureList);

                    message = objectFactory.NextPgpObject();
                    if (message is PgpLiteralData)
                    {
                        literalData = (PgpLiteralData)message;
                    }
                    message = objectFactory.NextPgpObject();
                    if (message is PgpSignatureList)
                    {
                        signatureList = (PgpSignatureList)message;
                    }
                }
                compDataIn.Close();
            }
            else
            {
                if (message is PgpOnePassSignatureList)
                {
                    onePassSigList = (message as PgpOnePassSignatureList);
                }
                message = plainFactory.NextPgpObject();
                if (message is PgpLiteralData)
                {
                    literalData = (PgpLiteralData)message;
                }
                message = plainFactory.NextPgpObject();
                if (message is PgpSignatureList)
                {
                    signatureList = (PgpSignatureList)message;
                }
            }

            Stream unc = literalData.GetInputStream();

            byte[] returnBytes = Org.BouncyCastle.Utilities.IO.Streams.ReadAll(unc);

            if (onePassSigList != null && signatureList != null)
            {
                VerifySignature(onePassSigList, signatureList, keys.SecretKey.PublicKey, returnBytes);
            }

            unc.Close();
            clear.Close();
            inputStream.Close();

            return(returnBytes);
        }