summary refs log tree commit diff
path: root/crypto/src/tls/TlsSessionImpl.cs
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2021-07-12 15:15:36 +0700
committerPeter Dettman <peter.dettman@bouncycastle.org>2021-07-12 15:15:36 +0700
commit68c795fe81277f73aeb90d8ad4c6f4305f32c906 (patch)
tree59643344aafef91bbd4c4a3a7973deba3d837a00 /crypto/src/tls/TlsSessionImpl.cs
parentTLS test tweaks (diff)
downloadBouncyCastle.NET-ed25519-68c795fe81277f73aeb90d8ad4c6f4305f32c906.tar.xz
Port of new TLS API from bc-java
Diffstat (limited to 'crypto/src/tls/TlsSessionImpl.cs')
-rw-r--r--crypto/src/tls/TlsSessionImpl.cs52
1 files changed, 52 insertions, 0 deletions
diff --git a/crypto/src/tls/TlsSessionImpl.cs b/crypto/src/tls/TlsSessionImpl.cs
new file mode 100644
index 000000000..a4eb6b94a
--- /dev/null
+++ b/crypto/src/tls/TlsSessionImpl.cs
@@ -0,0 +1,52 @@
+using System;
+
+using Org.BouncyCastle.Utilities;
+
+namespace Org.BouncyCastle.Tls
+{
+    internal class TlsSessionImpl
+        : TlsSession
+    {
+        private readonly byte[] m_sessionID;
+        private readonly SessionParameters m_sessionParameters;
+        private bool m_resumable;
+
+        internal TlsSessionImpl(byte[] sessionID, SessionParameters sessionParameters)
+        {
+            if (sessionID == null)
+                throw new ArgumentNullException("sessionID");
+            if (sessionID.Length > 32)
+                throw new ArgumentException("cannot be longer than 32 bytes", "sessionID");
+
+            this.m_sessionID = Arrays.Clone(sessionID);
+            this.m_sessionParameters = sessionParameters;
+            this.m_resumable = sessionID.Length > 0 && null != sessionParameters;
+        }
+
+        public SessionParameters ExportSessionParameters()
+        {
+            lock (this)
+            {
+                return m_sessionParameters == null ? null : m_sessionParameters.Copy();
+            }
+        }
+
+        public byte[] SessionID
+        {
+            get { lock (this) return m_sessionID; }
+        }
+
+        public void Invalidate()
+        {
+            lock (this)
+            {
+                this.m_resumable = false;
+            }
+        }
+
+        public bool IsResumable
+        {
+            get { lock (this) return m_resumable; }
+        }
+    }
+}