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"));
            var         priv     = new TripleDESPrivacyProvider(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()));
        }
        public void CompatibilityTest(int length)
        {
            var generator = new Random();
            var data      = new byte[length];

            generator.NextBytes(data);
            var iv = new byte[8];

            generator.NextBytes(iv);
            var key = new byte[24];

            generator.NextBytes(key);
            {
                var encrypted = TripleDESPrivacyProvider.LegacyEncrypt(key, iv, data);
                var decrypted = TripleDESPrivacyProvider.Net6Decrypt(key, iv, encrypted);
                Assert.Equal(data, decrypted);
            }

            {
                var encrypted = TripleDESPrivacyProvider.Net6Encrypt(key, iv, data);
                var decrypted = TripleDESPrivacyProvider.LegacyDecrypt(key, iv, encrypted);
                Assert.Equal(data, decrypted);
            }

            {
                var encrypted1 = TripleDESPrivacyProvider.LegacyEncrypt(key, iv, data);
                var encrypted2 = TripleDESPrivacyProvider.Net6Encrypt(key, iv, data);
                Assert.Equal(encrypted1, encrypted2);
            }
        }
        public void TestException()
        {
            var provider = new TripleDESPrivacyProvider(new OctetString("longlongago"),
                                                        new MD5AuthenticationProvider(new OctetString("verylonglongago")));

            Assert.Throws <ArgumentNullException>(() => new TripleDESPrivacyProvider(null, null));
            Assert.Throws <ArgumentNullException>(() => new TripleDESPrivacyProvider(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);
            }
        }