示例#1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MalformedMessage"/> class.
        /// </summary>
        /// <param name="messageId">The message id.</param>
        /// <param name="user">The user.</param>
        /// <param name="data">The data encrypted.</param>
        public MalformedMessage(int messageId, OctetString user, ISnmpData data)
        {
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            Header         = new Header(messageId);
            Parameters     = SecurityParameters.Create(user);
            Scope          = DefaultScope;
            EncryptedScope = data;
        }
示例#2
0
        public void Test()
        {
            var provider = DefaultPrivacyProvider.DefaultPair;

            Assert.Throws <ArgumentNullException>(() => provider.Encrypt(null, null));
            Assert.Throws <ArgumentNullException>(() => provider.Encrypt(OctetString.Empty, null));
            Assert.Throws <ArgumentException>(() => provider.Encrypt(new Null(), SecurityParameters.Create(OctetString.Empty)));

            Assert.Throws <ArgumentNullException>(() => provider.Decrypt(null, null));
            Assert.Throws <ArgumentNullException>(() => provider.Decrypt(OctetString.Empty, null));
            var result = provider.Decrypt(new Sequence(), SecurityParameters.Create(OctetString.Empty));

            Assert.IsNotNull(result);
        }
        public void TestException()
        {
            var provider = new DESPrivacyProvider(new OctetString("longlongago"), new MD5AuthenticationProvider(new OctetString("verylonglongago")));

            Assert.Throws <ArgumentNullException>(() => new DESPrivacyProvider(null, null));
            Assert.Throws <ArgumentNullException>(() => new DESPrivacyProvider(OctetString.Empty, null));
            Assert.Throws <ArgumentNullException>(() => provider.Encrypt(null, null));
            Assert.Throws <ArgumentNullException>(() => provider.Encrypt(OctetString.Empty, null));
            Assert.Throws <ArgumentException>(() => provider.Encrypt(new Null(), SecurityParameters.Create(OctetString.Empty)));

            Assert.Throws <ArgumentNullException>(() => provider.Decrypt(null, null));
            Assert.Throws <ArgumentNullException>(() => provider.Decrypt(OctetString.Empty, null));
            Assert.Throws <ArgumentException>(() => provider.Decrypt(new Null(), SecurityParameters.Create(OctetString.Empty)));
        }
示例#4
0
        public TrapV1Message(VersionCode version, IPAddress agent, OctetString community, ObjectIdentifier enterprise, GenericCode generic, int specific, uint time, IList <Variable> variables)
        {
            if (variables == null)
            {
                throw new ArgumentNullException("variables");
            }

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

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

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

            if (version != VersionCode.V1)
            {
                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "TRAP v1 is not supported in this SNMP version: {0}", version), "version");
            }

            Version      = version;
            AgentAddress = agent;
            Community    = community;
            Enterprise   = enterprise;
            Generic      = generic;
            Specific     = specific;
            TimeStamp    = time;
            var pdu = new TrapV1Pdu(
                Enterprise,
                new IP(AgentAddress),
                new Integer32((int)Generic),
                new Integer32(Specific),
                new TimeTicks(TimeStamp),
                variables);

            _pdu       = pdu;
            Parameters = SecurityParameters.Create(Community);

            _bytes = SnmpMessageExtension.PackMessage(Version, Community, pdu).ToBytes();
        }
示例#5
0
        public TrapV1Message(VersionCode version, IPAddress agent, OctetString community, ObjectIdentifier enterprise, GenericCode generic, int specific, uint time, IList <Variable> variables)
        {
            if (variables == null)
            {
                throw new ArgumentNullException(nameof(variables));
            }

            if (enterprise == null)
            {
                throw new ArgumentNullException(nameof(enterprise));
            }

            if (community == null)
            {
                throw new ArgumentNullException(nameof(community));
            }

            if (agent == null)
            {
                throw new ArgumentNullException(nameof(agent));
            }

            if (version != VersionCode.V1)
            {
                throw new ArgumentException($"TRAP v1 is not supported in this SNMP version: {version}", nameof(version));
            }

            Version      = version;
            AgentAddress = agent;
            Community    = community;
            Enterprise   = enterprise;
            Generic      = generic;
            Specific     = specific;
            TimeStamp    = time;
            TrapV1Pdu pdu = new TrapV1Pdu(
                Enterprise,
                new IP(AgentAddress.GetAddressBytes()),
                new Integer32((int)Generic),
                new Integer32(Specific),
                new TimeTicks(TimeStamp),
                variables);

            _pdu       = pdu;
            Parameters = SecurityParameters.Create(Community);
        }
        public void Test()
        {
            var provider = TsmPrivacyProvider.DefaultPair;

            Assert.Throws <ArgumentNullException>(() => provider.Encrypt(null, null));
            Assert.Throws <ArgumentNullException>(() => provider.Encrypt(OctetString.Empty, null));
            Assert.Throws <ArgumentException>(() => provider.Encrypt(new Null(), SecurityParameters.Create(OctetString.Empty)));

            var expected = new Sequence((byte[])null);

            Assert.Equal(expected, provider.Encrypt(expected, SecurityParameters.Create(OctetString.Empty)));

            Assert.Throws <ArgumentNullException>(() => provider.Decrypt(null, null));
            Assert.Throws <ArgumentNullException>(() => provider.Decrypt(OctetString.Empty, null));
            var result = provider.Decrypt(new Sequence((byte[])null), SecurityParameters.Create(OctetString.Empty));

            Assert.NotNull(result);
        }
        /// <summary>
        /// F
        /// </summary>
        private List <EngineUser> FindEngineUsers(OctetString userName)
        {
            Sequence           snmpData = (Sequence)DataFactory.CreateSnmpData(Request.ToBytes());
            VersionCode        int32    = (VersionCode)((Integer32)snmpData[0]).ToInt32();
            Header             header;
            SecurityParameters parameters;

            if (snmpData.Length == 3)
            {
                header     = Header.Empty;
                parameters = SecurityParameters.Create((OctetString)snmpData[1]);
            }
            else
            {
                header     = new Header(snmpData[1]);
                parameters = new SecurityParameters((OctetString)snmpData[2]);
            }
            return(Users.MatchUsersToProvider(userName, int32, header, parameters, snmpData[3], snmpData.GetLengthBytes(), Request.Privacy));
        }
示例#8
0
        public TrapV1Message(VersionCode version, IPAddress agent, OctetString community, ObjectIdentifier enterprise, GenericCode generic, int specific, uint time, IList <Variable> variables)
        {
            if (variables == null)
            {
                throw new ArgumentNullException("variables");
            }

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

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

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

            Version      = version;
            AgentAddress = agent;
            Community    = community;
            Enterprise   = enterprise;
            Generic      = generic;
            Specific     = specific;
            TimeStamp    = time;
            TrapV1Pdu pdu = new TrapV1Pdu(
                Enterprise,
                new IP(AgentAddress),
                new Integer32((int)Generic),
                new Integer32(Specific),
                new TimeTicks(TimeStamp),
                variables);

            _pdu       = pdu;
            Parameters = SecurityParameters.Create(Community);

            _bytes = SnmpMessageExtension.PackMessage(Version, Community, pdu).ToBytes();
        }
示例#9
0
        public void TestException()
        {
            Assert.Throws <ArgumentNullException>(() => AuthenticationProviderExtension.ComputeHash(null, VersionCode.V1, null, null, null, null));
            Assert.Throws <ArgumentNullException>(() => AuthenticationProviderExtension.ComputeHash(DefaultAuthenticationProvider.Instance, VersionCode.V1, null, null, null, null));
            Assert.Throws <ArgumentNullException>(() => AuthenticationProviderExtension.ComputeHash(DefaultAuthenticationProvider.Instance, VersionCode.V1, Header.Empty, null, null, null));
            Assert.Throws <ArgumentNullException>(() => AuthenticationProviderExtension.ComputeHash(DefaultAuthenticationProvider.Instance, VersionCode.V1, Header.Empty, SecurityParameters.Create(new OctetString("test")), null, null));
            Assert.Throws <ArgumentNullException>(() => DefaultAuthenticationProvider.Instance.ComputeHash(VersionCode.V1, Header.Empty, SecurityParameters.Create(new OctetString("test")), new Scope(OctetString.Empty, OctetString.Empty, new MalformedPdu()), null));

            var parameters = SecurityParameters.Create(new OctetString("test"));

            DefaultAuthenticationProvider.Instance.ComputeHash(VersionCode.V1, Header.Empty, parameters, new Scope(OctetString.Empty, OctetString.Empty, new MalformedPdu()), DefaultPrivacyProvider.DefaultPair);
            Assert.AreEqual(null, parameters.AuthenticationParameters);

            Assert.Throws <ArgumentNullException>(() => AuthenticationProviderExtension.VerifyHash(null, VersionCode.V1, null, null, null, null));
            Assert.Throws <ArgumentNullException>(() => DefaultAuthenticationProvider.Instance.VerifyHash(VersionCode.V1, null, null, null, null));
            Assert.Throws <ArgumentNullException>(() => DefaultAuthenticationProvider.Instance.VerifyHash(VersionCode.V1, Header.Empty, null, null, null));
            Assert.Throws <ArgumentNullException>(() => DefaultAuthenticationProvider.Instance.VerifyHash(VersionCode.V1, Header.Empty, SecurityParameters.Create(new OctetString("test")), null, null));
            Assert.Throws <ArgumentNullException>(() => DefaultAuthenticationProvider.Instance.VerifyHash(VersionCode.V1, Header.Empty, SecurityParameters.Create(new OctetString("test")), new MalformedPdu(), null));
            Assert.IsTrue(DefaultAuthenticationProvider.Instance.VerifyHash(VersionCode.V1, Header.Empty, SecurityParameters.Create(new OctetString("test")), new MalformedPdu(), DefaultPrivacyProvider.DefaultPair));
        }
        /// <summary>
        /// Creates a <see cref="GetBulkRequestMessage"/> with all contents.
        /// </summary>
        /// <param name="requestId">The request ID.</param>
        /// <param name="version">Protocol version.</param>
        /// <param name="community">Community name.</param>
        /// <param name="nonRepeaters">Non-repeaters.</param>
        /// <param name="maxRepetitions">Max repetitions.</param>
        /// <param name="variables">Variables.</param>
        public GetBulkRequestMessage(int requestId, VersionCode version, OctetString community, int nonRepeaters, int maxRepetitions, List <Variable> variables)
        {
            if (variables == null)
            {
                throw new ArgumentNullException(nameof(variables));
            }

            if (community == null)
            {
                throw new ArgumentNullException(nameof(community));
            }

            if (version != VersionCode.V2)
            {
                throw new ArgumentException("Only v2c are supported.", nameof(version));
            }

            if (nonRepeaters > variables.Count)
            {
                throw new ArgumentException("nonRepeaters should not be greater than variable count.", nameof(nonRepeaters));
            }

            if (maxRepetitions < 1)
            {
                throw new ArgumentException("maxRepetitions should be greater than 0.", nameof(maxRepetitions));
            }

            Version    = version;
            Header     = Header.Empty;
            Parameters = SecurityParameters.Create(community);
            var pdu = new GetBulkRequestPdu(
                requestId,
                nonRepeaters,
                maxRepetitions,
                variables);

            Scope   = new Scope(pdu);
            Privacy = DefaultPrivacyProvider.DefaultPair;

            _bytes = this.PackMessage(null).ToBytes();
        }
示例#11
0
        public TrapV2Message(int requestId, IPAddress senderIP, VersionCode version, OctetString community, ObjectIdentifier enterprise, uint time, IList <Variable> variables)
        {
            if (variables == null)
            {
                throw new ArgumentNullException("variables");
            }

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

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

            if (version != VersionCode.V2)
            {
                throw new ArgumentException("only v2c are supported", "version");
            }

            Version    = version;
            Enterprise = enterprise;
            SenderIP   = senderIP;
            TimeStamp  = time;
            Header     = Header.Empty;
            Parameters = SecurityParameters.Create(community);
            var pdu = new TrapV2Pdu(
                senderIP,
                requestId,
                enterprise,
                time,
                variables);

            Scope   = new Scope(pdu);
            Privacy = DefaultPrivacyProvider.DefaultPair;
            _bytes  = this.PackMessage().ToBytes();
        }
示例#12
0
        public InformRequestMessage(int requestId, VersionCode version, OctetString community, ObjectIdentifier enterprise, uint time, IList <Variable> variables)
        {
            if (variables == null)
            {
                throw new ArgumentNullException(nameof(variables));
            }

            if (enterprise == null)
            {
                throw new ArgumentNullException(nameof(enterprise));
            }

            if (community == null)
            {
                throw new ArgumentNullException(nameof(community));
            }

            if (version == VersionCode.V3)
            {
                throw new ArgumentException("Only v1 and v2c are supported.", nameof(version));
            }

            Version    = version;
            Enterprise = enterprise;
            TimeStamp  = time;
            Header     = Header.Empty;
            Parameters = SecurityParameters.Create(community);
            var pdu = new InformRequestPdu(
                requestId,
                enterprise,
                time,
                variables);

            Scope   = new Scope(pdu);
            Privacy = DefaultPrivacyProvider.DefaultPair;

            _bytes = this.PackMessage(null).ToBytes();
        }
示例#13
0
        /// <summary>
        /// Creates a <see cref="TrapV1Message"/> instance with a message body.
        /// </summary>
        /// <param name="body">Message body</param>
        public TrapV1Message(IPAddress senderIp, Sequence body)
        {
            if (body == null)
            {
                throw new ArgumentNullException("body");
            }

            if (body.Length != 3)
            {
                throw new ArgumentException("wrong message body");
            }

            Community = (OctetString)body[1];
            Version   = (VersionCode)((Integer32)body[0]).ToInt32();

            // IMPORTANT: comment this check out if you need to support
            if (Version != VersionCode.V1)
            {
                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "TRAP v1 is not supported in this SNMP version: {0}", Version), "body");
            }

            _pdu = (ISnmpPdu)body[2];
            if (_pdu.TypeCode != SnmpType.TrapV1Pdu)
            {
                throw new ArgumentException("wrong message type");
            }

            var trapPdu = (TrapV1Pdu)_pdu;

            Enterprise   = trapPdu.Enterprise;
            AgentAddress = senderIp != null?senderIp:trapPdu.AgentAddress.ToIPAddress();
            Generic      = trapPdu.Generic;
            Specific     = trapPdu.Specific;
            TimeStamp    = trapPdu.TimeStamp.ToUInt32();
            Parameters   = SecurityParameters.Create(Community);

            _bytes = SnmpMessageExtension.PackMessage(Version, Community, _pdu).ToBytes();
        }
示例#14
0
        /// <summary>
        /// Creates a <see cref="TrapV1Message"/> instance with a message body.
        /// </summary>
        /// <param name="body">Message body</param>
        public TrapV1Message(Sequence body)
        {
            if (body == null)
            {
                throw new ArgumentNullException(nameof(body));
            }

            if (body.Length != 3)
            {
                throw new ArgumentException("Invalid message body.", nameof(body));
            }

            Community = (OctetString)body[1];
            Version   = (VersionCode)((Integer32)body[0]).ToInt32();

            // IMPORTANT: comment this check out if you need to support
            if (Version != VersionCode.V1)
            {
                throw new ArgumentException($"TRAP v1 is not supported in this SNMP version: {Version}.", nameof(body));
            }

            _pdu = (ISnmpPdu)body[2];
            if (_pdu.TypeCode != SnmpType.TrapV1Pdu)
            {
                throw new ArgumentException("Invalid message type.", nameof(body));
            }

            TrapV1Pdu trapPdu = (TrapV1Pdu)_pdu;

            Enterprise   = trapPdu.Enterprise;
            AgentAddress = new IPAddress(trapPdu.AgentAddress.GetRaw());
            Generic      = trapPdu.Generic;
            Specific     = trapPdu.Specific;
            TimeStamp    = trapPdu.TimeStamp.ToUInt32();
            Parameters   = SecurityParameters.Create(Community);
            _container   = body;
        }
        public void TestException()
        {
            Assert.Throws <ArgumentNullException>(() => ByteTool.GetRawBytes(null, true));
            Assert.Throws <ArgumentNullException>(() => ByteTool.ConvertDecimal(null));
            var decimalException = Assert.Throws <ArgumentException>(() => ByteTool.ConvertDecimal("XXX YYY"));

            Assert.StartsWith("Invalid decimal string.", decimalException.Message);
            Assert.Throws <ArgumentNullException>(() => ByteTool.Convert((byte[])null));
            Assert.Throws <ArgumentNullException>(() => ByteTool.ParseItems(null));
            Assert.Throws <ArgumentException>(() => ByteTool.ParseItems((ISnmpData)null));
            Assert.Throws <ArgumentNullException>(() => ByteTool.ParseItems((IEnumerable <ISnmpData>)null));
            Assert.Throws <ArgumentNullException>(() => ByteTool.Convert((string)null));
            Assert.Throws <ArgumentException>(() => ByteTool.Convert("**"));
            Assert.Throws <ArgumentException>(() => ByteTool.Convert("8AB"));
            var hexException = Assert.Throws <ArgumentException>(() => ByteTool.Convert("YY"));

            Assert.StartsWith("Invalid byte string.", hexException.Message);
            Assert.Throws <ArgumentException>(() => (-1).WritePayloadLength());
            Assert.Throws <ArgumentNullException>(() => ByteTool.PackMessage(null, VersionCode.V3, null, null, null));
            Assert.Throws <ArgumentNullException>(
                () => ByteTool.PackMessage(new byte[0], VersionCode.V3, null, null, null));
            Assert.Throws <ArgumentNullException>(
                () => ByteTool.PackMessage(new byte[0], VersionCode.V3, new Header(500), null, null));
            Assert.Throws <ArgumentNullException>(
                () => ByteTool.PackMessage(new byte[0], VersionCode.V3, new Header(500), SecurityParameters.Create(new OctetString("test")), null));
        }
        public void Test()
        {
            var provider = DefaultAuthenticationProvider.Instance;

            Assert.AreEqual("Default authentication provider", provider.ToString());
            Assert.Throws <ArgumentNullException>(() => provider.PasswordToKey(null, null));
            Assert.Throws <ArgumentNullException>(() => provider.PasswordToKey(new byte[0], null));
            Assert.AreEqual(new byte[0], provider.PasswordToKey(new byte[0], new byte[0]));

            Assert.Throws <ArgumentNullException>(() => provider.ComputeHash(VersionCode.V1, null, null, null, null));
            Assert.Throws <ArgumentNullException>(() => provider.ComputeHash(VersionCode.V1, Header.Empty, null, null, null));
            Assert.Throws <ArgumentNullException>(() => provider.ComputeHash(VersionCode.V1, Header.Empty, SecurityParameters.Create(new OctetString("test")), null, null));
            //Assert.Throws<ArgumentNullException>(() => provider.ComputeHash(VersionCode.V1, Header.Empty, SecurityParameters.Create(new OctetString("test")), OctetString.Empty, null));
            //Assert.AreEqual(OctetString.Empty, provider.ComputeHash(VersionCode.V1, Header.Empty, SecurityParameters.Create(new OctetString("test")), OctetString.Empty, DefaultPrivacyProvider.DefaultPair));
        }
示例#17
0
        private static ISnmpMessage ParseMessage(int first, Stream stream, UserRegistry registry)
        {
            var array = DataFactory.CreateSnmpData(first, stream);

            if (array == null)
            {
                return(null);
            }

            if (array.TypeCode != SnmpType.Sequence)
            {
                throw new SnmpException("not an SNMP message");
            }

            var body = (Sequence)array;

            if (body.Length != 3 && body.Length != 4)
            {
                throw new SnmpException("not an SNMP message");
            }

            var                version = (VersionCode)((Integer32)body[0]).ToInt32();
            Header             header;
            SecurityParameters parameters;
            IPrivacyProvider   privacy;
            Scope              scope;

            if (body.Length == 3)
            {
                header     = Header.Empty;
                parameters = SecurityParameters.Create((OctetString)body[1]);
                privacy    = DefaultPrivacyProvider.DefaultPair;
                scope      = new Scope((ISnmpPdu)body[2]);
            }
            else
            {
                header     = new Header(body[1]);
                parameters = new SecurityParameters((OctetString)body[2]);
                privacy    = registry.Find(parameters.UserName);
                if (privacy == null)
                {
                    // handle decryption exception.
                    return(new MalformedMessage(header.MessageId, parameters.UserName, body[3]));
                }

                var code = body[3].TypeCode;
                if (code == SnmpType.Sequence)
                {
                    // v3 not encrypted
                    scope = new Scope((Sequence)body[3]);
                }
                else if (code == SnmpType.OctetString)
                {
                    // v3 encrypted
                    try
                    {
                        scope = new Scope((Sequence)privacy.Decrypt(body[3], parameters));
                    }
                    catch (DecryptionException)
                    {
                        // handle decryption exception.
                        return(new MalformedMessage(header.MessageId, parameters.UserName, body[3]));
                    }
                }
                else
                {
                    throw new SnmpException(string.Format(CultureInfo.InvariantCulture, "invalid v3 packets scoped data: {0}", code));
                }

                if (!privacy.AuthenticationProvider.VerifyHash(version, header, parameters, body[3], privacy, body.GetLengthBytes()))
                {
                    parameters.IsInvalid = true;
                }
            }

            var scopeCode = scope.Pdu.TypeCode;

            try
            {
                switch (scopeCode)
                {
                case SnmpType.TrapV1Pdu:
                    return(new TrapV1Message(body));

                case SnmpType.TrapV2Pdu:
                    return(new TrapV2Message(version, header, parameters, scope, privacy, body.GetLengthBytes()));

                case SnmpType.GetRequestPdu:
                    return(new GetRequestMessage(version, header, parameters, scope, privacy, body.GetLengthBytes()));

                case SnmpType.ResponsePdu:
                    return(new ResponseMessage(version, header, parameters, scope, privacy, false, body.GetLengthBytes()));

                case SnmpType.SetRequestPdu:
                    return(new SetRequestMessage(version, header, parameters, scope, privacy, body.GetLengthBytes()));

                case SnmpType.GetNextRequestPdu:
                    return(new GetNextRequestMessage(version, header, parameters, scope, privacy, body.GetLengthBytes()));

                case SnmpType.GetBulkRequestPdu:
                    return(new GetBulkRequestMessage(version, header, parameters, scope, privacy, body.GetLengthBytes()));

                case SnmpType.ReportPdu:
                    return(new ReportMessage(version, header, parameters, scope, privacy, body.GetLengthBytes()));

                case SnmpType.InformRequestPdu:
                    return(new InformRequestMessage(version, header, parameters, scope, privacy, body.GetLengthBytes()));

                default:
                    throw new SnmpException(string.Format(CultureInfo.InvariantCulture, "unsupported pdu: {0}", scopeCode));
                }
            }
            catch (Exception ex)
            {
                if (ex is SnmpException)
                {
                    throw;
                }

                throw new SnmpException("message construction exception", ex);
            }
        }
        public void Test()
        {
            var provider = new SHA1AuthenticationProvider(new OctetString("longlongago"));

            Assert.AreEqual("SHA-1 authentication provider", provider.ToString());
            Assert.Throws <ArgumentNullException>(() => new SHA1AuthenticationProvider(null));
            Assert.Throws <ArgumentNullException>(() => provider.PasswordToKey(null, null));
            Assert.Throws <ArgumentNullException>(() => provider.PasswordToKey(new byte[0], null));
            Assert.Throws <ArgumentException>(() => provider.PasswordToKey(new byte[0], new byte[0]));

            Assert.Throws <ArgumentNullException>(() => provider.ComputeHash(VersionCode.V1, null, null, null, null));
            Assert.Throws <ArgumentNullException>(() => provider.ComputeHash(VersionCode.V1, Header.Empty, null, null, null));
            Assert.Throws <ArgumentNullException>(() => provider.ComputeHash(VersionCode.V1, Header.Empty, SecurityParameters.Create(new OctetString("test")), null, null));
            // Assert.Throws<ArgumentNullException>(() => provider.ComputeHash(VersionCode.V1, Header.Empty, SecurityParameters.Create(new OctetString("test")), OctetString.Empty, null));
        }
 public void TestToString()
 {
     Assert.AreEqual("Security parameters: engineId: ;engineBoots: ;engineTime: ;userName: test; authen hash: ; privacy hash: ", SecurityParameters.Create(new OctetString("test")).ToString());
 }
        public void TestException()
        {
            var provider = new DESPrivacyProvider(new OctetString("longlongago"), new MD5AuthenticationProvider(new OctetString("verylonglongago")));

            Assert.Throws <ArgumentNullException>(() => new DESPrivacyProvider(null, null));
            Assert.Throws <ArgumentNullException>(() => new DESPrivacyProvider(OctetString.Empty, null));
            Assert.Throws <ArgumentNullException>(() => provider.Encrypt(null, null));
            Assert.Throws <ArgumentNullException>(() => provider.Encrypt(OctetString.Empty, null));
            {
                var exception = Assert.Throws <ArgumentException>(() => provider.Encrypt(new Null(), SecurityParameters.Create(OctetString.Empty)));
                Assert.Contains("Invalid data type.", exception.Message);
            }

            Assert.Throws <ArgumentNullException>(() => provider.Decrypt(null, null));
            Assert.Throws <ArgumentNullException>(() => provider.Decrypt(OctetString.Empty, null));
            {
                var exception = Assert.Throws <ArgumentException>(() => provider.Decrypt(new Null(), SecurityParameters.Create(OctetString.Empty)));
                Assert.Contains("Cannot decrypt the scope data: Null.", exception.Message);
            }
        }
        public void TestException()
        {
            var provider = new AES256PrivacyProvider(new OctetString("longlongago"),
                                                     new MD5AuthenticationProvider(new OctetString("verylonglongago")));

            Assert.Throws <ArgumentNullException>(() => new AES256PrivacyProvider(null, null));
            Assert.Throws <ArgumentNullException>(() => new AES256PrivacyProvider(OctetString.Empty, null));
            Assert.Throws <ArgumentNullException>(() => provider.Encrypt(null, null));
            Assert.Throws <ArgumentNullException>(() => provider.Encrypt(OctetString.Empty, null));

            {
                var exception = Assert.Throws <ArgumentException>(() =>
                                                                  provider.Encrypt(new Null(), SecurityParameters.Create(OctetString.Empty)));
                Assert.Equal($"Invalid data type.{Environment.NewLine}Parameter name: data", exception.Message);
            }

            Assert.Throws <ArgumentNullException>(() => provider.Decrypt(null, null));
            Assert.Throws <ArgumentNullException>(() => provider.Decrypt(OctetString.Empty, null));
            {
                var exception = Assert.Throws <ArgumentException>(() =>
                                                                  provider.Decrypt(new Null(), SecurityParameters.Create(OctetString.Empty)));
                Assert.Equal($"Cannot decrypt the scope data: Null.{Environment.NewLine}Parameter name: data", exception.Message);
            }
        }