Ejemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="GpgApi.GpgChangeOwnerTrust"/> class.
        /// </summary>
        /// <param name="keyId"></param>
        /// <param name="ownerTrust"></param>
        /// <exception cref="System.ArgumentNullException"/>
        public GpgChangeOwnerTrust(KeyId keyId, KeyOwnerTrust ownerTrust)
        {
            if (keyId == null)
                throw new ArgumentNullException("keyId");

            KeyId = keyId;
            OwnerTrust = ownerTrust;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="GpgApi.GpgChangeOwnerTrust"/> class.
        /// </summary>
        /// <param name="keyId"></param>
        /// <param name="ownerTrust"></param>
        /// <exception cref="System.ArgumentNullException"/>
        public GpgChangeOwnerTrust(KeyId keyId, KeyOwnerTrust ownerTrust)
        {
            if (keyId == null)
            {
                throw new ArgumentNullException("keyId");
            }

            KeyId      = keyId;
            OwnerTrust = ownerTrust;
        }
Ejemplo n.º 3
0
        public static Int32 ToId(KeyOwnerTrust trust)
        {
            switch (trust)
            {
            case KeyOwnerTrust.Ultimate: return(5);

            case KeyOwnerTrust.Full: return(4);

            case KeyOwnerTrust.Marginal: return(3);

            case KeyOwnerTrust.None: return(2);

            default: return(2);
            }
        }
Ejemplo n.º 4
0
        }                                                           // Confiance en cette clé (peut-être récupéré à partir du trousseau de clés)

        /// <summary>
        /// Initializes a new instance of the <see cref="GpgApi.GpgDecrypt"/> class.
        /// </summary>
        /// <param name="encryptedFileName"></param>
        /// <param name="decryptedFileName"></param>
        /// <exception cref="System.ArgumentNullException"/>
        public GpgDecrypt(String encryptedFileName, String decryptedFileName)
        {
            if (encryptedFileName == null)
            {
                throw new ArgumentNullException("encryptedFileName");
            }

            if (decryptedFileName == null)
            {
                throw new ArgumentNullException("decryptedFileName");
            }

            EncryptedFileName   = encryptedFileName;
            DecryptedFileName   = decryptedFileName;
            DecryptedDataLength = 0;
            DecryptedDataType   = DataType.None;
            EncryptionDateTime  = DateTime.MinValue;
            OriginalFileName    = null;
            IsSigned            = false;
            IsGoodSignature     = false;
            SignatureDateTime   = DateTime.MinValue;
            SignatureKeyId      = null;
            SignatureTrust      = KeyOwnerTrust.None;
        }
Ejemplo n.º 5
0
        // internal AND protected
        internal override GpgInterfaceResult ProcessLine(String line)
        {
            if (!GNUCheck(ref line))
                return GpgInterfaceResult.Success;

            switch (GetKeyword(ref line))
            {
                case GpgKeyword.ENC_TO:
                {
                    String[] parts = line.Split(' ');

                    if (parts[0] != _last_enc_to)
                    {
                        _last_enc_to = parts[0];
                        ResetTries();
                    }

                    break;
                }

                case GpgKeyword.NEED_PASSPHRASE_SYM:
                {
                    _isSymmetric = true;
                    break;
                }

                case GpgKeyword.NEED_PASSPHRASE:
                {
                    String[] parts = line.Split(' ');
                    _keyId = parts[1];
                    _isSymmetric = false;
                    break;
                }

                case GpgKeyword.BEGIN_DECRYPTION:
                    return new GpgInterfaceResult(GpgInterfaceStatus.Processing, GpgInterfaceMessage.BeginDecryption);

                case GpgKeyword.END_DECRYPTION:
                    return new GpgInterfaceResult(GpgInterfaceStatus.Processing, GpgInterfaceMessage.EndDecryption);

                case GpgKeyword.DECRYPTION_OKAY:
                    return new GpgInterfaceResult(GpgInterfaceStatus.Processing, GpgInterfaceMessage.DecryptionOk);

                case GpgKeyword.DECRYPTION_FAILED:
                    return _googPassphrase ? new GpgInterfaceResult(GpgInterfaceStatus.Error, GpgInterfaceMessage.DecryptionFailed) : GpgInterfaceResult.BadPassphrase;

                case GpgKeyword.PLAINTEXT_LENGTH:
                {
                    DecryptedDataLength = Int32.Parse(line, CultureInfo.InvariantCulture);
                    break;
                }

                case GpgKeyword.PLAINTEXT:
                {
                    String[] parts = line.Split(' ');

                    String datatype = parts[0];
                    switch (datatype)
                    {
                        case "62": DecryptedDataType = DataType.Binary; break;
                        case "74": DecryptedDataType = DataType.Text; break;
                        case "75": DecryptedDataType = DataType.Utf8Text; break;
                    }

                    EncryptionDateTime = Utils.ConvertTimestamp(Double.Parse(parts[1], CultureInfo.InvariantCulture));
                    OriginalFileName = Uri.UnescapeDataString(parts[2]);

                    break;
                }

                case GpgKeyword.GET_HIDDEN:
                {
                    if (String.Equals(line, "passphrase.enter", StringComparison.Ordinal))
                    {
                        SecureString password = InternalAskPassphrase(_keyId, false, _isSymmetric);
                        if (IsNullOrEmpty(password))
                            return GpgInterfaceResult.UserAbort;
                        WritePassword(password);
                    }

                    break;
                }

                case GpgKeyword.GOOD_PASSPHRASE:
                {
                    _googPassphrase = true;
                    break;
                }

                case GpgKeyword.GOODSIG:
                {
                    IsSigned = true;
                    IsGoodSignature = true;
                    SignatureKeyId = new KeyId(line.Split(' ')[0]);
                    break;
                }

                case GpgKeyword.BADSIG:
                {
                    IsSigned = true;
                    IsGoodSignature = false;
                    SignatureKeyId = new KeyId(line.Split(' ')[0]);
                    break;
                }

                case GpgKeyword.VALIDSIG:
                {
                    String[] parts = line.Split(' ');

                    String datetime = parts[2];
                    if (datetime.Contains("T"))
                    {
                        // ISO 8601
                        SignatureDateTime = DateTime.ParseExact(datetime, "s", CultureInfo.InvariantCulture);
                    }
                    else
                        SignatureDateTime = Utils.ConvertTimestamp(Double.Parse(datetime, CultureInfo.InvariantCulture));

                    break;
                }

                case GpgKeyword.NO_PUBKEY:
                    return new GpgInterfaceResult(GpgInterfaceStatus.Error, GpgInterfaceMessage.NoPublicKey, line);

                case GpgKeyword.NO_SECKEY:
                {
                    if (_googPassphrase)
                        return GpgInterfaceResult.Success;
                    else
                        return new GpgInterfaceResult(GpgInterfaceStatus.Error, GpgInterfaceMessage.NoSecretKey, line);
                }

                case GpgKeyword.NODATA:
                case GpgKeyword.UNEXPECTED:
                    return new GpgInterfaceResult(GpgInterfaceStatus.Error, GpgInterfaceMessage.DataError);

                case GpgKeyword.TRUST_UNDEFINED:
                case GpgKeyword.TRUST_NEVER:
                {
                    SignatureTrust = KeyOwnerTrust.None;
                    break;
                }

                case GpgKeyword.TRUST_MARGINAL:
                {
                    SignatureTrust = KeyOwnerTrust.Marginal;
                    break;
                }

                case GpgKeyword.TRUST_FULLY:
                {
                    SignatureTrust = KeyOwnerTrust.Full;
                    break;
                }

                case GpgKeyword.TRUST_ULTIMATE:
                {
                    SignatureTrust = KeyOwnerTrust.Ultimate;
                    break;
                }

                case GpgKeyword.GET_BOOL:
                {
                    if (String.Equals(line, "openfile.overwrite.okay", StringComparison.Ordinal))
                        WriteLine("YES");
                    break;
                }
            }

            return GpgInterfaceResult.Success;
        }
Ejemplo n.º 6
0
        // internal AND protected
        internal override GpgInterfaceResult ProcessLine(String line)
        {
            if (!GNUCheck(ref line))
            {
                return(GpgInterfaceResult.Success);
            }

            switch (GetKeyword(ref line))
            {
            case GpgKeyword.ENC_TO:
            {
                String[] parts = line.Split(' ');

                if (parts[0] != _last_enc_to)
                {
                    _last_enc_to = parts[0];
                    ResetTries();
                }

                break;
            }

            case GpgKeyword.NEED_PASSPHRASE_SYM:
            {
                _isSymmetric = true;
                break;
            }

            case GpgKeyword.NEED_PASSPHRASE:
            {
                String[] parts = line.Split(' ');
                _keyId       = parts[1];
                _isSymmetric = false;
                break;
            }

            case GpgKeyword.BEGIN_DECRYPTION:
                return(new GpgInterfaceResult(GpgInterfaceStatus.Processing, GpgInterfaceMessage.BeginDecryption));

            case GpgKeyword.END_DECRYPTION:
                return(new GpgInterfaceResult(GpgInterfaceStatus.Processing, GpgInterfaceMessage.EndDecryption));

            case GpgKeyword.DECRYPTION_OKAY:
                return(new GpgInterfaceResult(GpgInterfaceStatus.Processing, GpgInterfaceMessage.DecryptionOk));

            case GpgKeyword.DECRYPTION_FAILED:
                return(_googPassphrase ? new GpgInterfaceResult(GpgInterfaceStatus.Error, GpgInterfaceMessage.DecryptionFailed) : GpgInterfaceResult.BadPassphrase);

            case GpgKeyword.PLAINTEXT_LENGTH:
            {
                DecryptedDataLength = Int32.Parse(line, CultureInfo.InvariantCulture);
                break;
            }

            case GpgKeyword.PLAINTEXT:
            {
                String[] parts = line.Split(' ');

                String datatype = parts[0];
                switch (datatype)
                {
                case "62": DecryptedDataType = DataType.Binary; break;

                case "74": DecryptedDataType = DataType.Text; break;

                case "75": DecryptedDataType = DataType.Utf8Text; break;
                }

                EncryptionDateTime = Utils.ConvertTimestamp(Double.Parse(parts[1], CultureInfo.InvariantCulture));
                OriginalFileName   = Uri.UnescapeDataString(parts[2]);

                break;
            }

            case GpgKeyword.GET_HIDDEN:
            {
                if (String.Equals(line, "passphrase.enter", StringComparison.Ordinal))
                {
                    SecureString password = InternalAskPassphrase(_keyId, false, _isSymmetric);
                    if (IsNullOrEmpty(password))
                    {
                        return(GpgInterfaceResult.UserAbort);
                    }
                    WritePassword(password);
                }

                break;
            }

            case GpgKeyword.GOOD_PASSPHRASE:
            {
                _googPassphrase = true;
                break;
            }

            case GpgKeyword.GOODSIG:
            {
                IsSigned        = true;
                IsGoodSignature = true;
                SignatureKeyId  = new KeyId(line.Split(' ')[0]);
                break;
            }

            case GpgKeyword.BADSIG:
            {
                IsSigned        = true;
                IsGoodSignature = false;
                SignatureKeyId  = new KeyId(line.Split(' ')[0]);
                break;
            }

            case GpgKeyword.VALIDSIG:
            {
                String[] parts = line.Split(' ');

                String datetime = parts[2];
                if (datetime.Contains("T"))
                {
                    // ISO 8601
                    SignatureDateTime = DateTime.ParseExact(datetime, "s", CultureInfo.InvariantCulture);
                }
                else
                {
                    SignatureDateTime = Utils.ConvertTimestamp(Double.Parse(datetime, CultureInfo.InvariantCulture));
                }

                break;
            }

            case GpgKeyword.NO_PUBKEY:
                return(new GpgInterfaceResult(GpgInterfaceStatus.Error, GpgInterfaceMessage.NoPublicKey, line));

            case GpgKeyword.NO_SECKEY:
            {
                if (_googPassphrase)
                {
                    return(GpgInterfaceResult.Success);
                }
                else
                {
                    return(new GpgInterfaceResult(GpgInterfaceStatus.Error, GpgInterfaceMessage.NoSecretKey, line));
                }
            }

            case GpgKeyword.NODATA:
            case GpgKeyword.UNEXPECTED:
                return(new GpgInterfaceResult(GpgInterfaceStatus.Error, GpgInterfaceMessage.DataError));

            case GpgKeyword.TRUST_UNDEFINED:
            case GpgKeyword.TRUST_NEVER:
            {
                SignatureTrust = KeyOwnerTrust.None;
                break;
            }

            case GpgKeyword.TRUST_MARGINAL:
            {
                SignatureTrust = KeyOwnerTrust.Marginal;
                break;
            }

            case GpgKeyword.TRUST_FULLY:
            {
                SignatureTrust = KeyOwnerTrust.Full;
                break;
            }

            case GpgKeyword.TRUST_ULTIMATE:
            {
                SignatureTrust = KeyOwnerTrust.Ultimate;
                break;
            }

            case GpgKeyword.GET_BOOL:
            {
                if (String.Equals(line, "openfile.overwrite.okay", StringComparison.Ordinal))
                {
                    WriteLine("YES");
                }
                break;
            }
            }

            return(GpgInterfaceResult.Success);
        }
Ejemplo n.º 7
0
        // internal AND protected
        internal override GpgInterfaceResult ProcessLine(String line)
        {
            if (!GNUCheck(ref line))
                return GpgInterfaceResult.Success;

            switch (GetKeyword(ref line))
            {
                case GpgKeyword.GOODSIG:
                {
                    IsSigned = true;
                    IsGoodSignature = true;
                    SignatureKeyId = new KeyId(line.Split(' ')[0]);
                    break;
                }

                case GpgKeyword.BADSIG:
                {
                    IsSigned = true;
                    IsGoodSignature = false;
                    SignatureKeyId = new KeyId(line.Split(' ')[0]);
                    break;
                }

                case GpgKeyword.VALIDSIG:
                {
                    String[] parts = line.Split(' ');

                    String datetime = parts[2];
                    if (datetime.Contains("T"))
                    {
                        // ISO 8601
                        SignatureDateTime = DateTime.ParseExact(datetime, "s", CultureInfo.InvariantCulture);
                    }
                    else
                        SignatureDateTime = Utils.ConvertTimestamp(Double.Parse(datetime, CultureInfo.InvariantCulture));

                    break;
                }

                case GpgKeyword.TRUST_UNDEFINED:
                case GpgKeyword.TRUST_NEVER:
                {
                    SignatureTrust = KeyOwnerTrust.None;
                    break;
                }

                case GpgKeyword.TRUST_MARGINAL:
                {
                    SignatureTrust = KeyOwnerTrust.Marginal;
                    break;
                }

                case GpgKeyword.TRUST_FULLY:
                {
                    SignatureTrust = KeyOwnerTrust.Full;
                    break;
                }

                case GpgKeyword.TRUST_ULTIMATE:
                {
                    SignatureTrust = KeyOwnerTrust.Ultimate;
                    break;
                }
            }

            return GpgInterfaceResult.Success;
        }
Ejemplo n.º 8
0
 public static Int32 ToId(KeyOwnerTrust trust)
 {
     switch (trust)
     {
         case KeyOwnerTrust.Ultimate: return 5;
         case KeyOwnerTrust.Full: return 4;
         case KeyOwnerTrust.Marginal: return 3;
         case KeyOwnerTrust.None: return 2;
         default: return 2;
     }
 }