mirror of https://github.com/wolfSSL/wolfTPM.git
Merge pull request #225 from dgarske/csharp_cleanup
Implement `IDisposable` for CSharp classes for cleanup of unmanaged resourcespull/226/head
commit
63be95dd1b
|
@ -183,7 +183,7 @@ namespace wolfTPM
|
||||||
DER = 2,
|
DER = 2,
|
||||||
}
|
}
|
||||||
|
|
||||||
public class KeyBlob
|
public class KeyBlob : IDisposable
|
||||||
{
|
{
|
||||||
const string DLLNAME = "wolftpm";
|
const string DLLNAME = "wolftpm";
|
||||||
|
|
||||||
|
@ -211,16 +211,24 @@ namespace wolfTPM
|
||||||
{
|
{
|
||||||
keyblob = wolfTPM2_NewKeyBlob();
|
keyblob = wolfTPM2_NewKeyBlob();
|
||||||
}
|
}
|
||||||
|
~KeyBlob() => Dispose(false);
|
||||||
|
|
||||||
~KeyBlob()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
if (keyblob != IntPtr.Zero)
|
Dispose(true);
|
||||||
{
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
protected virtual void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
/* free un-managed objects */
|
||||||
|
if (keyblob != IntPtr.Zero) {
|
||||||
/* ignore return code */
|
/* ignore return code */
|
||||||
wolfTPM2_FreeKeyBlob(keyblob);
|
wolfTPM2_FreeKeyBlob(keyblob);
|
||||||
|
keyblob = IntPtr.Zero;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public int GetKeyBlobAsBuffer(byte[] buffer)
|
public int GetKeyBlobAsBuffer(byte[] buffer)
|
||||||
{
|
{
|
||||||
int rc = wolfTPM2_GetKeyBlobAsBuffer(buffer, buffer.Length,
|
int rc = wolfTPM2_GetKeyBlobAsBuffer(buffer, buffer.Length,
|
||||||
|
@ -250,7 +258,7 @@ namespace wolfTPM
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Key
|
public class Key : IDisposable
|
||||||
{
|
{
|
||||||
const string DLLNAME = "wolftpm";
|
const string DLLNAME = "wolftpm";
|
||||||
|
|
||||||
|
@ -279,16 +287,24 @@ namespace wolfTPM
|
||||||
{
|
{
|
||||||
key = wolfTPM2_NewKey();
|
key = wolfTPM2_NewKey();
|
||||||
}
|
}
|
||||||
|
~Key() => Dispose(false);
|
||||||
|
|
||||||
~Key()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
if (key != IntPtr.Zero)
|
Dispose(true);
|
||||||
{
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
protected virtual void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
/* free un-managed objects */
|
||||||
|
if (key != IntPtr.Zero) {
|
||||||
/* ignore return code */
|
/* ignore return code */
|
||||||
wolfTPM2_FreeKey(key);
|
wolfTPM2_FreeKey(key);
|
||||||
|
key = IntPtr.Zero;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public IntPtr GetHandle()
|
public IntPtr GetHandle()
|
||||||
{
|
{
|
||||||
return wolfTPM2_GetHandleRefFromKey(key);
|
return wolfTPM2_GetHandleRefFromKey(key);
|
||||||
|
@ -311,10 +327,9 @@ namespace wolfTPM
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Template
|
public class Template : IDisposable
|
||||||
{
|
{
|
||||||
const string DLLNAME = "wolftpm";
|
const string DLLNAME = "wolftpm";
|
||||||
|
|
||||||
|
@ -329,11 +344,23 @@ namespace wolfTPM
|
||||||
{
|
{
|
||||||
template = wolfTPM2_NewPublicTemplate();
|
template = wolfTPM2_NewPublicTemplate();
|
||||||
}
|
}
|
||||||
|
~Template() => Dispose(false);
|
||||||
|
|
||||||
~Template()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
wolfTPM2_FreePublicTemplate(template);
|
Dispose(true);
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
}
|
}
|
||||||
|
protected virtual void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
/* free un-managed objects */
|
||||||
|
if (template != IntPtr.Zero) {
|
||||||
|
/* ignore return code */
|
||||||
|
wolfTPM2_FreePublicTemplate(template);
|
||||||
|
template = IntPtr.Zero;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* non-device functions: template and auth */
|
/* non-device functions: template and auth */
|
||||||
[DllImport(DLLNAME, EntryPoint = "wolfTPM2_GetKeyTemplate_RSA")]
|
[DllImport(DLLNAME, EntryPoint = "wolfTPM2_GetKeyTemplate_RSA")]
|
||||||
|
@ -476,7 +503,7 @@ namespace wolfTPM
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Session
|
public class Session : IDisposable
|
||||||
{
|
{
|
||||||
const string DLLNAME = "wolftpm";
|
const string DLLNAME = "wolftpm";
|
||||||
|
|
||||||
|
@ -497,18 +524,25 @@ namespace wolfTPM
|
||||||
session = wolfTPM2_NewSession();
|
session = wolfTPM2_NewSession();
|
||||||
sessionIdx = 1; /* for most commands the index is 1 */
|
sessionIdx = 1; /* for most commands the index is 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
public Session(int index)
|
public Session(int index)
|
||||||
{
|
{
|
||||||
session = wolfTPM2_NewSession();
|
session = wolfTPM2_NewSession();
|
||||||
sessionIdx = index;
|
sessionIdx = index;
|
||||||
}
|
}
|
||||||
|
~Session() => Dispose(false);
|
||||||
|
|
||||||
~Session()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
Dispose(true);
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
protected virtual void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
/* free un-managed objects */
|
||||||
if (session != IntPtr.Zero) {
|
if (session != IntPtr.Zero) {
|
||||||
/* ignore return code on free */
|
/* ignore return code */
|
||||||
wolfTPM2_FreeSession(session);
|
wolfTPM2_FreeSession(session);
|
||||||
|
session = IntPtr.Zero;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -556,7 +590,7 @@ namespace wolfTPM
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Csr
|
public class Csr : IDisposable
|
||||||
{
|
{
|
||||||
const string DLLNAME = "wolftpm";
|
const string DLLNAME = "wolftpm";
|
||||||
|
|
||||||
|
@ -572,15 +606,24 @@ namespace wolfTPM
|
||||||
{
|
{
|
||||||
csr = wolfTPM2_NewCSR();
|
csr = wolfTPM2_NewCSR();
|
||||||
}
|
}
|
||||||
|
~Csr() => Dispose(false);
|
||||||
|
|
||||||
~Csr()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
Dispose(true);
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
protected virtual void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
/* free un-managed objects */
|
||||||
if (csr != IntPtr.Zero) {
|
if (csr != IntPtr.Zero) {
|
||||||
/* ignore return code on free */
|
/* ignore return code */
|
||||||
wolfTPM2_FreeCSR(csr);
|
wolfTPM2_FreeCSR(csr);
|
||||||
|
csr = IntPtr.Zero;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[DllImport(DLLNAME, EntryPoint = "wolfTPM2_CSR_SetCustomExt")]
|
[DllImport(DLLNAME, EntryPoint = "wolfTPM2_CSR_SetCustomExt")]
|
||||||
private static extern int wolfTPM2_CSR_SetCustomExt(IntPtr dev,
|
private static extern int wolfTPM2_CSR_SetCustomExt(IntPtr dev,
|
||||||
IntPtr csr,
|
IntPtr csr,
|
||||||
|
@ -679,7 +722,7 @@ namespace wolfTPM
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Device
|
public class Device : IDisposable
|
||||||
{
|
{
|
||||||
/* ================================================================== */
|
/* ================================================================== */
|
||||||
/* Constants */
|
/* Constants */
|
||||||
|
@ -696,12 +739,20 @@ namespace wolfTPM
|
||||||
{
|
{
|
||||||
device = wolfTPM2_New();
|
device = wolfTPM2_New();
|
||||||
}
|
}
|
||||||
|
~Device() => Dispose(false);
|
||||||
|
|
||||||
~Device()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
if (device != IntPtr.Zero)
|
Dispose(true);
|
||||||
{
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
protected virtual void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
/* free un-managed objects */
|
||||||
|
if (device != IntPtr.Zero) {
|
||||||
|
/* ignore return code */
|
||||||
wolfTPM2_Free(device);
|
wolfTPM2_Free(device);
|
||||||
|
device = IntPtr.Zero;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue