Beispiel #1
0
        /// <summary>
        /// Creates and transmits an ACK in response to a previously processed SYN
        /// </summary>
        private void Acknowledge(ISyn syn)
        {
            Ack ack = new Ack()
            {
                Id        = _id,
                PublicKey = _accountService.PublicKey,
                Encrypted = true,
            };

            byte[] requesterPubKey = Nethereum.Hex.HexConvertors.Extensions.HexByteConvertorExtensions.HexToByteArray(syn.PublicKey);
            _tokenCryptoService.Sign(ack, _accountService.GetPrivateKeyAsByteArray());
            string encryptedToken = _tokenCryptoService.Encrypt(ack, requesterPubKey, _accountService.GetPrivateKeyAsByteArray());

            _session.Open(syn.NetworkAddress);
            _session.Send(encryptedToken);
        }
Beispiel #2
0
        public async Task ProcessSyn(string synString)
        {
            HandshakeTokenFactory <Syn> synFactory = new HandshakeTokenFactory <Syn>(_idFacade);
            Syn syn = await synFactory.CreateHandshakeTokenAsync(synString);

            byte[] pubK = Nethereum.Hex.HexConvertors.Extensions.HexByteConvertorExtensions.HexToByteArray(syn.PublicKey);

            VerifyHandshakeTokenIDOwnership(syn);

            if (_tokenCryptoService.VerifySignature(syn))
            {
                _syn = syn;
                Acknowledge(_syn);
            }
            else
            {
                throw new SignatureDoesntMatchException("The signature was not " +
                                                        "generated by the given " +
                                                        "public Key");
            }
        }