public void SetPeerKey(BigEndianAdvancingSpan peerKey, ICertificate certificate, SignatureScheme scheme) { peerKey = peerKey.ReadVector <ushort>(); var decryptedLength = certificate.Decrypt(scheme, peerKey.ToSpan(), peerKey.ToSpan()); peerKey = peerKey.TakeSlice(decryptedLength); _premasterSecret = peerKey.ToArray(); }
public BigEndianAdvancingSpan ProcessSessionTicket(BigEndianAdvancingSpan sessionTicket) { var keyId = sessionTicket.Read <Guid>(); if (keyId != _keyGuid) { return(new BigEndianAdvancingSpan()); } var key = _keys.Take(); try { var nounce = sessionTicket.Read <long>(); key.IV.Span.Slice(4).Write(nounce); key.Init(KeyMode.Decryption); var span = sessionTicket.ToSpan(); key.SetTag(span.Slice(span.Length - 16)); key.Finish(span.Slice(0, span.Length - 16)); return(new BigEndianAdvancingSpan(span.Slice(0, span.Length - 16))); } finally { _keys.Add(key); } }
public void SetPeerKey(BigEndianAdvancingSpan peerKey, ICertificate certificate, SignatureScheme scheme) { peerKey = peerKey.ReadVector <byte>(); if (peerKey.Length != _keyExchangeSize) { Alerts.AlertException.ThrowAlert(Alerts.AlertLevel.Fatal, Alerts.AlertDescription.illegal_parameter, $"The peer key is not the length of the keyexchange size {peerKey.Length} - {_keyExchangeSize}"); } InternalSetPeerKey(peerKey.ToSpan()); }
public void SetPeerKey(BigEndianAdvancingSpan peerKey, ICertificate certificate, SignatureScheme scheme) { peerKey = peerKey.ReadVector <byte>(); if (peerKey.Length != _keyExchangeSize) { Alerts.AlertException.ThrowAlert(Alerts.AlertLevel.Fatal, Alerts.AlertDescription.decode_error, "Peer key is bad"); } InternalSetPeerKey(peerKey.ToSpan()); }