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]; }
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; }
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"); }