public void ShouldSignMessages()
        {
            const string nodeid            = "node-1";
            const string saltB64           = "NZ4KOCA1dtE=";
            const string keyB64            = "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";
            const string payload           = "hello world!";
            const string expectedSignature = "jci+uYRfSxWgckfEvTNX1MXCBUrSOaoc9C503XP6Pr5VjvW7iwK7Ur3q/JAEocs0RH2mYTDJghUtGGV3IYLNA4nRmKBBcnq38v2Qrr0jCAxe/1PDec2bDdlbv3D3lVzawHdrek1FUBMEKIxuN0PBzwzgd8Tk8ID8wwgh4B1N384mWxtiOSUGmeRaOFdDf3Tfb49NZa1wwm1din7Xf12UBv+oZevbBg/NSQg5dFrivG74gH+XCWyb1NaUaXck78566fZPScqnzxhTxb0Io+AJDzn38PqA973od/dfnEIvy6wBbINsK286N/ntfSG605X1medUIycdyuxJzUySmzFBnkuJWoTKRO36yr11l5MV0x4+Opzkm8Yui+610DN5NREz4tfpdVU1WlPTWmz0XojKuHV2vc9VfbVPRj6ROPaevtRRw3kFFG3XEWkmNM3aS/5xZFXsdVVA0N3/SGA8rK1Pd1kQ5RSY5M1py7A+7Qy0likBCGAUDoq5JdXYx8RsxSyXdN2o+XVyT7jCFM+sGHjDG99b+LUiQvwksMHdM5XivmLNnJRwH1Ii/fAczvkX/5hjQCXkWVHKqr2rWPvabqqpdUUIE00BLFFRVnpzyKUlZPEnMn5iCadC6A9OY1z96InHftdM75Exqd2BQSsCAHhJ6LsByJmTzR89GzTM4JuH1S8=";

            IKeyStore ks = new MockKeyStore
            {
                Salt = Convert.FromBase64String(saltB64), Key = Convert.FromBase64String(keyB64)
            };

            PayloadSigner ps = new PayloadSigner(nodeid, ks);

            ps.Init();

            string signature = ps.SignPayload(payload);
            // signature should be base64
            bool isBase64 = false;

            try
            {
                var result = Convert.FromBase64String(signature);
                isBase64 = true;
            }
            catch
            {
                // ignore catch - decode failed. assert below
            }

            Assert.True(isBase64, "Is Signature base64");
            Assert.Equal(expectedSignature, signature);
        }
        void InvalidParityConnectionShouldNotPass()
        {
            string nodeId = "4816d758dd37833a3a5551001dac8a5fa737a342";

            PayloadSigner signer = new PayloadSigner(nodeId, new FileKeyStore("./"));

            signer.Init();

            RealTimeTelemetryManager mgr = new RealTimeTelemetryManager(
                nodeId,
                "http://127.0.0.1",
                "ws://127.0.0.1",
                "https://localhost:5010/api/ingress/realtime",
                "ED:40:5C:C9:E2:71:44:11:78:47:1C:09:6F:28:2E:B5:F9:4D:6E:CE:90:BC:64:5B:ED:9A:46:1F:20:E2:EE:4E",
                signer,
                _ftpMgr,
                true);

            var currentConsoleOut = Console.Out;

            using (var cop = new ConsoleOutputCapturer())
            {
                mgr.SubscribeAndPost(false);
                string ret = cop.GetOuput();
                Assert.Contains("Unable to connect to the remote server", ret);
            }
        }
        void InvalidParseAndSignShouldNotPass(string data)
        {
            string nodeId = "4816d758dd37833a3a5551001dac8a5fa737a342";

            PayloadSigner signer = new PayloadSigner(nodeId, new FileKeyStore("./"));

            signer.Init();

            RealTimeTelemetryManager mgr = new RealTimeTelemetryManager(
                nodeId,
                "http://127.0.0.1",
                "ws://127.0.0.1",
                "https://localhost:5010/api/ingress/realtime",
                "ED:40:5C:C9:E2:71:44:11:78:47:1C:09:6F:28:2E:B5:F9:4D:6E:CE:90:BC:64:5B:ED:9A:46:1F:20:E2:EE:4E",
                signer,
                _ftpMgr,
                true);

            MethodInfo methodInfo = typeof(RealTimeTelemetryManager).GetMethod("ParseAndSignData", BindingFlags.NonPublic | BindingFlags.Instance);

            object[] parameters = { Encoding.ASCII.GetBytes(data) };
            object   ret        = methodInfo.Invoke(mgr, parameters);

            Assert.Null(ret);
        }
Пример #4
0
        void InValidFingerPrintShouldFail()
        {
            string        nodeId = "4816d758dd37833a3a5551001dac8a5fa737a342";
            PayloadSigner signer = new PayloadSigner(nodeId, new FileKeyStore("./"));

            signer.Init();

            List <string> telemetryToSend = new List <string>();

            telemetryToSend.Add("abc 1");
            telemetryToSend.Add("abc 2");
            telemetryToSend.Add("abc 3");

            TelemetryPacket pkt = new TelemetryPacket
            {
                NodeId    = nodeId,
                Payload   = telemetryToSend,
                Signature = signer.SignPayload(string.Join(string.Empty, telemetryToSend))
            };

            string jsonPayload = JsonConvert.SerializeObject(pkt);

            FtpManager fm       = new FtpManager(_userName, _password, _ftpHost, _ftpPort, "38:32:36:8e:ad:ac:8c:31:57:b4:80:ba:2d:e4:88:9d", "/upload/dropzone/");
            string     fileName = string.Format("{0}-{1}.json", nodeId, DateTime.UtcNow.ToString("yyyy-MM-dd_HH:mm:ss"));
            //Assert.True(!fm.transferData(jsonPayload, fileName));
        }
        public void ShouldGenerateKeys()
        {
            const string  nodeid = "node-1";
            MockKeyStore  ks     = new MockKeyStore();
            PayloadSigner ps     = new PayloadSigner(nodeid, ks);

            string pubkey = ps.GenerateKeys();

            // Keys should be present
            Assert.NotNull(ks.Salt);
            Assert.NotNull(ks.Key);

            // public key should be present
            Assert.NotNull(pubkey);

            // keys should be of proper size
            Assert.Equal(8, ks.Salt.Length);   // Salt has to be 64 bits / 8 bytes
            Assert.Equal(3104, ks.Key.Length); // key has to be 3104 bytes (CSP blob)

            // public key should be base64
            bool isBase64 = false;

            try
            {
                var result = Convert.FromBase64String(pubkey);
                isBase64 = true;
            }
            catch
            {
                // ignore catch - decode failed. assert below
            }

            Assert.True(isBase64, "Is Public key base64");
        }
        public void ShouldThrowOnEmptyKeys()
        {
            const string  nodeid = "node-1";
            MockKeyStore  ks     = new MockKeyStore();
            PayloadSigner ps     = new PayloadSigner(nodeid, ks);

            Assert.Throws <KeypairNotFoundException>(() => ps.Init());
        }
        public RealTimeTelemetryManagerTests()
        {
            PayloadSigner sig = new PayloadSigner(
                "4816d758dd37833a3a5551001dac8a5fa737a342",
                new FileKeyStore("./"));
            string pubkey = sig.GenerateKeys();

            _ftpMgr = new FtpManager("foo", "pass", "127.0.0.1", 2222, "78:72:96:8e:ad:ac:8c:31:57:b4:80:ba:2d:e4:88:9d", "/upload/dropzone/");
        }
        public void ShouldThrowOnMissingNodeId(string nodeId)
        {
            MockKeyStore ks = new MockKeyStore();

            Assert.Throws <ArgumentException>(() =>
            {
                PayloadSigner ps = new PayloadSigner(nodeId, ks);
            });
        }
        public void ShouldThrowOnMissingKeystore()
        {
            const string nodeId = "node-1";

            Assert.Throws <ArgumentException>(() =>
            {
                PayloadSigner ps = new PayloadSigner(nodeId, null);
            });
        }
Пример #10
0
        public FtpManagerTests()
        {
            PayloadSigner sig = new PayloadSigner(
                "4816d758dd37833a3a5551001dac8a5fa737a342",
                new FileKeyStore("./"));
            string pubkey = sig.GenerateKeys();

            _ftpHost     = "127.0.0.1";
            _ftpPort     = 2222;
            _userName    = "******";
            _password    = "******";
            _fingerPrint = "78:72:96:8e:ad:ac:8c:31:57:b4:80:ba:2d:e4:88:9d";
        }
Пример #11
0
        void InvalidArgumentShouldNotCreateInstance(string userName, string password, string sftpHost, int port, string fingerPrint, string workingDir)
        {
            FtpManager mgr = null;

            PayloadSigner signer = new PayloadSigner("4816d758dd37833a3a5551001dac8a5fa737a342", new FileKeyStore("./"));

            signer.Init();

            Assert.Throws <ArgumentException>(() =>
            {
                mgr = new FtpManager(userName, password, sftpHost, port, fingerPrint, workingDir);
            });
            Assert.Null(mgr);
        }
        void InvalidSendToInfluxShouldNotPass()
        {
            string nodeId = "4816d758dd37833a3a5551001dac8a5fa737a342";

            PayloadSigner signer = new PayloadSigner(nodeId, new FileKeyStore("./"));

            signer.Init();

            RealTimeTelemetryManager mgr = new RealTimeTelemetryManager(
                nodeId,
                "http://127.0.0.1",
                "ws://127.0.0.1",
                "https://localhost:5010/api/ingress/realtime",
                "ED:40:5C:C9:E2:71:44:11:78:47:1C:09:6F:28:2E:B5:F9:4D:6E:CE:90:BC:64:5B:ED:9A:46:1F:20:E2:EE:4E",
                signer,
                _ftpMgr,
                true);

            RealTimeTelemetryPayload rttp = new RealTimeTelemetryPayload
            {
                Client        = "Parity",
                BlockNum      = 0,
                BlockHash     = "",
                BlockTS       = 0,
                BlockReceived = 0,
                NumPeers      = 0,
                NumTxInBlock  = 0
            };

            RealTimeTelemetry rtt = new RealTimeTelemetry
            {
                NodeId    = "",
                Payload   = rttp,
                Signature = signer.SignPayload(JsonConvert.SerializeObject(rttp))
            };

            var currentConsoleOut = Console.Out;

            using (var cop = new ConsoleOutputCapturer())
            {
                MethodInfo methodInfo = typeof(RealTimeTelemetryManager).GetMethod("SendDataToIngress", BindingFlags.NonPublic | BindingFlags.Instance);
                object[]   parameters = { rtt };
                methodInfo.Invoke(mgr, parameters);

                string ret = cop.GetOuput();
                Assert.Contains("Connection refused", ret);
                //Assert.True(ret.Contains("ERROR Occurred While sending data to Ingress"));
            }
        }
        void InvalidArgumentShouldFail(string nodeId, string jsonRpcURL, string webSocketURL, string ingressEndPoint,
                                       string ingressFingerPrint)
        {
            RealTimeTelemetryManager mgr = null;

            PayloadSigner signer = new PayloadSigner("4816d758dd37833a3a5551001dac8a5fa737a342", new FileKeyStore("./"));

            signer.Init();

            Assert.Throws <ArgumentException>(() =>
            {
                mgr = new RealTimeTelemetryManager(
                    nodeId, jsonRpcURL, webSocketURL, ingressEndPoint, ingressFingerPrint,
                    signer,
                    _ftpMgr,
                    true);
            });
            Assert.Null(mgr);
        }
        void InvalidFTPManagerShouldFailInstanceCreation()
        {
            string nodeId = "4816d758dd37833a3a5551001dac8a5fa737a342";
            RealTimeTelemetryManager mgr = null;

            PayloadSigner signer = new PayloadSigner(nodeId, new FileKeyStore("./"));

            signer.Init();

            Assert.Throws <ArgumentException>(() =>
            {
                mgr = new RealTimeTelemetryManager(
                    nodeId,
                    "http://127.0.0.1",
                    "ws://127.0.0.1",
                    "https://localhost:5010/api/ingress/realtime",
                    "ED:40:5C:C9:E2:71:44:11:78:47:1C:09:6F:28:2E:B5:F9:4D:6E:CE:90:BC:64:5B:ED:9A:46:1F:20:E2:EE:4E",
                    signer,
                    null,
                    true);
            });
            Assert.Null(mgr);
        }