public void TestEncrypt2() { byte[] expected = ByteTool.Convert( "04 30 9D 13 04 9C 7E D9 84 8B 33 C3 26 5C 1F 91 30 27 D3 56 B0 FD 81 36 50 3A EF 80 1C B9 25 D6 38 84 A7 07 45 FE E8 D7 01 83 A1 CE 04 79 9D 5F 9E 2F"); OctetString engineId = new OctetString(ByteTool.Convert("80 00 1F 88 80 E9 63 00 00 D6 1F F4 49")); IPrivacyProvider priv; if (AESPrivacyProviderBase.IsSupported) { priv = new AESPrivacyProvider(new OctetString("passtest"), new MD5AuthenticationProvider(new OctetString("testpass"))); } else { priv = new BouncyCastleAESPrivacyProvider(new OctetString("passtest"), new MD5AuthenticationProvider(new OctetString("testpass"))); } Scope scope = new Scope(engineId, OctetString.Empty, new GetRequestPdu(0x3A25, new List <Variable> { new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.3.0")) })); SecurityParameters parameters = new SecurityParameters(engineId, new Integer32(0x14), new Integer32(0x35), new OctetString("lexmark"), new OctetString(new byte[12]), new OctetString(ByteTool.Convert("00 00 00 01 44 2C A3 B5"))); var original = scope.GetData(VersionCode.V3); ISnmpData data = priv.Encrypt(original, parameters); Assert.Equal(SnmpType.OctetString, data.TypeCode); Assert.Equal(ByteTool.Convert(expected), ByteTool.Convert(data.ToBytes())); ISnmpData decrypted = priv.Decrypt(data, parameters); Assert.Equal(ByteTool.Convert(original.ToBytes()), ByteTool.Convert(decrypted.ToBytes())); }
private static SnmpEngine CreateSnmpEngine(RavenServer server, ObjectStore objectStore) { (HashSet <SnmpVersion> versions, string handlerVersion) = GetVersions(server); var membershipProvider = CreateMembershipProvider(server, versions); var handlers = new[] { new HandlerMapping(handlerVersion, "GET", new GetMessageHandler()), new HandlerMapping(handlerVersion, "GETNEXT", new GetNextMessageHandler()), new HandlerMapping(handlerVersion, "GETBULK", new GetBulkMessageHandler()) }; var messageHandlerFactory = new MessageHandlerFactory(handlers); var factory = new SnmpApplicationFactory(new SnmpLogger(Logger), objectStore, membershipProvider, messageHandlerFactory); var listener = new Listener(); if (versions.Contains(SnmpVersion.V3)) { var authenticationPassword = server.Configuration.Monitoring.Snmp.AuthenticationPassword ?? server.Configuration.Monitoring.Snmp.Community; IAuthenticationProvider authenticationProvider; switch (server.Configuration.Monitoring.Snmp.AuthenticationProtocol) { case SnmpAuthenticationProtocol.SHA1: authenticationProvider = new SHA1AuthenticationProvider(new OctetString(authenticationPassword)); break; case SnmpAuthenticationProtocol.MD5: authenticationProvider = new MD5AuthenticationProvider(new OctetString(authenticationPassword)); break; default: throw new InvalidOperationException($"Unknown authentication protocol '{server.Configuration.Monitoring.Snmp.AuthenticationProtocol}'."); } var privacyPassword = server.Configuration.Monitoring.Snmp.PrivacyPassword; IPrivacyProvider privacyProvider; switch (server.Configuration.Monitoring.Snmp.PrivacyProtocol) { case SnmpPrivacyProtocol.None: privacyProvider = new DefaultPrivacyProvider(authenticationProvider); break; case SnmpPrivacyProtocol.DES: privacyProvider = new BouncyCastleDESPrivacyProvider(new OctetString(privacyPassword), authenticationProvider); break; case SnmpPrivacyProtocol.AES: privacyProvider = new BouncyCastleAESPrivacyProvider(new OctetString(privacyPassword), authenticationProvider); break; default: throw new InvalidOperationException($"Unknown privacy protocol '{server.Configuration.Monitoring.Snmp.AuthenticationProtocol}'."); } listener.Users.Add(new OctetString(server.Configuration.Monitoring.Snmp.AuthenticationUser), privacyProvider); } int engineBoots; using (server.ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) using (var tx = context.OpenWriteTransaction()) { var tree = tx.InnerTransaction.CreateTree(nameof(SnmpWatcher)); engineBoots = (int)tree.Increment("EngineBoots", 1); tx.Commit(); } var engineGroup = new EngineGroup(engineBoots, GetIsInTime(server.Configuration.Monitoring)) { EngineId = new OctetString(server.ServerStore.GetServerId().ToString("N")) }; var engine = new SnmpEngine(factory, listener, engineGroup); engine.Listener.AddBinding(new IPEndPoint(IPAddress.Any, server.Configuration.Monitoring.Snmp.Port)); engine.Listener.ExceptionRaised += (sender, e) => { if (Logger.IsOperationsEnabled) { Logger.Operations("SNMP error: " + e.Exception.Message, e.Exception); } }; return(engine); }
private static SnmpEngine CreateSnmpEngine(RavenServer server, ObjectStore objectStore) { (HashSet <SnmpVersion> versions, string handlerVersion) = GetVersions(server); var membershipProvider = CreateMembershipProvider(server, versions); var handlers = new[] { new HandlerMapping(handlerVersion, "GET", new GetMessageHandler()), new HandlerMapping(handlerVersion, "GETNEXT", new GetNextMessageHandler()), new HandlerMapping(handlerVersion, "GETBULK", new GetBulkMessageHandler()) }; var messageHandlerFactory = new MessageHandlerFactory(handlers); var factory = new SnmpApplicationFactory(new SnmpLogger(Logger), objectStore, membershipProvider, messageHandlerFactory); var listener = new Listener(); if (versions.Contains(SnmpVersion.V3)) { var authenticationPassword = server.Configuration.Monitoring.Snmp.AuthenticationPassword ?? server.Configuration.Monitoring.Snmp.Community; IAuthenticationProvider authenticationProvider; switch (server.Configuration.Monitoring.Snmp.AuthenticationProtocol) { case SnmpAuthenticationProtocol.SHA1: authenticationProvider = new SHA1AuthenticationProvider(new OctetString(authenticationPassword)); break; case SnmpAuthenticationProtocol.MD5: authenticationProvider = new MD5AuthenticationProvider(new OctetString(authenticationPassword)); break; default: throw new InvalidOperationException($"Unknown authentication protocol '{server.Configuration.Monitoring.Snmp.AuthenticationProtocol}'."); } var privacyPassword = server.Configuration.Monitoring.Snmp.PrivacyPassword; IPrivacyProvider privacyProvider; switch (server.Configuration.Monitoring.Snmp.PrivacyProtocol) { case SnmpPrivacyProtocol.None: privacyProvider = new DefaultPrivacyProvider(authenticationProvider); break; case SnmpPrivacyProtocol.DES: privacyProvider = new BouncyCastleDESPrivacyProvider(new OctetString(privacyPassword), authenticationProvider); break; case SnmpPrivacyProtocol.AES: privacyProvider = new BouncyCastleAESPrivacyProvider(new OctetString(privacyPassword), authenticationProvider); break; default: throw new InvalidOperationException($"Unknown privacy protocol '{server.Configuration.Monitoring.Snmp.AuthenticationProtocol}'."); } listener.Users.Add(new OctetString(server.Configuration.Monitoring.Snmp.AuthenticationUser), privacyProvider); } var engineGroup = new EngineGroup(); var engineIdField = engineGroup.GetType().GetField("_engineId", BindingFlags.Instance | BindingFlags.NonPublic); engineIdField.SetValue(engineGroup, new OctetString(Guid.NewGuid().ToString("N"))); var engine = new SnmpEngine(factory, listener, engineGroup); engine.Listener.AddBinding(new IPEndPoint(IPAddress.Any, server.Configuration.Monitoring.Snmp.Port)); engine.Listener.ExceptionRaised += (sender, e) => { if (Logger.IsOperationsEnabled) { Logger.Operations("SNMP error: " + e.Exception.Message, e.Exception); } }; return(engine); }