/// <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; }
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))); }
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(); }
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)); }
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(); }
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(); }
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(); }
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(); }
/// <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(); }
/// <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)); }
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); } }