Exemplo n.º 1
0
 public NoiseMessageTransformer(IHkdf hkdf, ICipherFunction writer, ICipherFunction reader, ILogger <NoiseMessageTransformer> logger)
 {
     _hkdf              = hkdf;
     _writer            = writer;
     _reader            = reader;
     _logger            = logger;
     _writerChainingKey = new byte[32];
     _readerChainingKey = new byte[32];
 }
Exemplo n.º 2
0
 public HandshakeProcessor(IEllipticCurveActions curveActions, IHkdf hkdf,
                           ICipherFunction aeadConstruction, IKeyGenerator keyGenerator, INoiseHashFunction hasher,
                           INoiseMessageTransformer messageTransformer, ILogger <HandshakeProcessor> logger)
 {
     _curveActions       = curveActions;
     _hkdf               = hkdf;
     _aeadConstruction   = aeadConstruction;
     _keyGenerator       = keyGenerator;
     _hasher             = hasher;
     _messageTransformer = messageTransformer;
     _logger             = logger;
 }
Exemplo n.º 3
0
        private void KeyRecycle(ICipherFunction cipherFunction, byte[] chainingKey)
        {
            if (cipherFunction.GetNonce() < LightningNetworkConfig.NUMBER_OF_NONCE_BEFORE_KEY_RECYCLE)
            {
                return;
            }

            _logger.LogDebug($"Recycling cipher key");

            Span <byte> keys = stackalloc byte[Aead.KEY_SIZE * 2];

            _hkdf.ExtractAndExpand(chainingKey, cipherFunction.GetKey(), keys);

            // set new chaining key
            keys.Slice(0, Aead.KEY_SIZE)
            .CopyTo(chainingKey);

            // set new key
            cipherFunction.SetKey(keys.Slice(Aead.KEY_SIZE));

            _logger.LogDebug($"Cipher key recycled successfully");
        }