Skip to content

Commit

Permalink
Merge pull request #129 from dorssel/unsafe
Browse files Browse the repository at this point in the history
Improve unsafe usage
  • Loading branch information
dorssel authored Jan 3, 2025
2 parents 58c0cc9 + 41b1ee2 commit 7f379f9
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 23 deletions.
29 changes: 18 additions & 11 deletions Xmss/Internal/OpaqueStructures.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
//
// SPDX-License-Identifier: MIT

using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;

Expand Down Expand Up @@ -39,14 +40,14 @@ internal static int XMSS_CACHE_ENTRY_COUNT(XmssCacheType cache_type, byte cache_
;
}

internal static unsafe int XMSS_INTERNAL_CACHE_SIZE(XmssCacheType cache_type, byte cache_level, XmssParameterSetOID param_set)
internal static int XMSS_INTERNAL_CACHE_SIZE(XmssCacheType cache_type, byte cache_level, XmssParameterSetOID param_set)
{
return 4 + 4 + (sizeof(XmssValue256) * XMSS_CACHE_ENTRY_COUNT(cache_type, cache_level, param_set));
return 4 + 4 + (Unsafe.SizeOf<XmssValue256>() * XMSS_CACHE_ENTRY_COUNT(cache_type, cache_level, param_set));
}

internal static unsafe int XMSS_PUBLIC_KEY_GENERATION_CACHE_SIZE(int number_of_partitions)
internal static int XMSS_PUBLIC_KEY_GENERATION_CACHE_SIZE(int number_of_partitions)
{
return 4 + 4 + (sizeof(XmssValue256) * number_of_partitions);
return 4 + 4 + (Unsafe.SizeOf<XmssValue256>() * number_of_partitions);
}
}

Expand All @@ -56,13 +57,16 @@ static partial class Defines
{
internal const int XMSS_PRIVATE_KEY_STATEFUL_PART_SIZE = 4 + 4;

internal static readonly unsafe int XMSS_PRIVATE_KEY_STATELESS_PART_SIZE = 32 + 32 + 4 + 4 + 32 + sizeof(XmssValue256) + 32;
internal static readonly int XMSS_PRIVATE_KEY_STATELESS_PART_SIZE = 32 + 32 + 4 + 4 + 32 + Unsafe.SizeOf<XmssValue256>() + 32;

internal static unsafe int XMSS_KEY_CONTEXT_SIZE(XmssParameterSetOID param_set, XmssIndexObfuscationSetting obfuscation_setting)
internal static int XMSS_KEY_CONTEXT_SIZE(XmssParameterSetOID param_set, XmssIndexObfuscationSetting obfuscation_setting)
{
return 4 + 4 + XMSS_SIGNING_CONTEXT_SIZE + XMSS_PRIVATE_KEY_STATELESS_PART_SIZE + (2 * XMSS_PRIVATE_KEY_STATEFUL_PART_SIZE)
+ ((3 * sizeof(XmssValue256)) + sizeof(void*) + 4 + 4)
+ (4 * (1 << XMSS_TREE_DEPTH(param_set)) * ((obfuscation_setting == XmssIndexObfuscationSetting.XMSS_INDEX_OBFUSCATION_ON) ? 1 : 0));
unsafe
{
return 4 + 4 + XMSS_SIGNING_CONTEXT_SIZE + XMSS_PRIVATE_KEY_STATELESS_PART_SIZE + (2 * XMSS_PRIVATE_KEY_STATEFUL_PART_SIZE)
+ ((3 * Unsafe.SizeOf<XmssValue256>()) + sizeof(void*) + 4 + 4)
+ (4 * (1 << XMSS_TREE_DEPTH(param_set)) * ((obfuscation_setting == XmssIndexObfuscationSetting.XMSS_INDEX_OBFUSCATION_ON) ? 1 : 0));
}
}
}

Expand All @@ -78,9 +82,12 @@ struct XmssKeyGenerationContext { }

static partial class Defines
{
internal static unsafe int XMSS_KEY_GENERATION_CONTEXT_SIZE(int generation_partitions)
internal static int XMSS_KEY_GENERATION_CONTEXT_SIZE(int generation_partitions)
{
return sizeof(void*) + sizeof(uint) + sizeof(uint) + sizeof(void*) + sizeof(void*) + (sizeof(uint) * generation_partitions);
unsafe
{
return sizeof(void*) + sizeof(uint) + sizeof(uint) + sizeof(void*) + sizeof(void*) + (sizeof(uint) * generation_partitions);
}
}
}

Expand Down
25 changes: 13 additions & 12 deletions Xmss/Internal/Structures.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
//
// SPDX-License-Identifier: MIT

using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;

Expand All @@ -24,8 +25,8 @@ struct XmssPrivateKeyStatelessBlob

static partial class Defines
{
internal static readonly unsafe int XMSS_PRIVATE_KEY_STATELESS_BLOB_SIZE = sizeof(XmssPrivateKeyStatelessBlob)
+ sizeof(XmssValue256) + 4 + 4 + 4 + 4 + XMSS_PRIVATE_KEY_STATELESS_PART_SIZE;
internal static readonly int XMSS_PRIVATE_KEY_STATELESS_BLOB_SIZE = Unsafe.SizeOf<XmssPrivateKeyStatelessBlob>()
+ Unsafe.SizeOf<XmssValue256>() + 4 + 4 + 4 + 4 + XMSS_PRIVATE_KEY_STATELESS_PART_SIZE;
}

struct XmssPrivateKeyStatefulBlob
Expand All @@ -45,8 +46,8 @@ struct XmssPrivateKeyStatefulBlob

static partial class Defines
{
internal static readonly unsafe int XMSS_PRIVATE_KEY_STATEFUL_BLOB_SIZE = sizeof(XmssPrivateKeyStatefulBlob) + sizeof(XmssValue256)
+ 4 + 4 + 4 + 4 + sizeof(XmssValue256) + (2 * XMSS_PRIVATE_KEY_STATEFUL_PART_SIZE);
internal static readonly int XMSS_PRIVATE_KEY_STATEFUL_BLOB_SIZE = Unsafe.SizeOf<XmssPrivateKeyStatefulBlob>() + Unsafe.SizeOf<XmssValue256>()
+ 4 + 4 + 4 + 4 + Unsafe.SizeOf<XmssValue256>() + (2 * XMSS_PRIVATE_KEY_STATEFUL_PART_SIZE);
}

struct XmssPublicKeyInternalBlob
Expand All @@ -66,10 +67,10 @@ struct XmssPublicKeyInternalBlob

static partial class Defines
{
internal static unsafe int XMSS_PUBLIC_KEY_INTERNAL_BLOB_SIZE(XmssCacheType cache_type, byte cache_level, XmssParameterSetOID param_set)
internal static int XMSS_PUBLIC_KEY_INTERNAL_BLOB_SIZE(XmssCacheType cache_type, byte cache_level, XmssParameterSetOID param_set)
{
return sizeof(XmssPublicKeyInternalBlob) + sizeof(XmssValue256) + 4 + 4 + sizeof(XmssValue256) + sizeof(XmssValue256)
+ 4 + 4 + 4 + 4 + (sizeof(XmssValue256) * XMSS_CACHE_ENTRY_COUNT(cache_type, cache_level, param_set));
return Unsafe.SizeOf<XmssPublicKeyInternalBlob>() + Unsafe.SizeOf<XmssValue256>() + 4 + 4 + Unsafe.SizeOf<XmssValue256>()
+ Unsafe.SizeOf<XmssValue256>() + 4 + 4 + 4 + 4 + (Unsafe.SizeOf<XmssValue256>() * XMSS_CACHE_ENTRY_COUNT(cache_type, cache_level, param_set));
}
}

Expand All @@ -82,7 +83,7 @@ struct XmssPublicKey

static partial class Defines
{
internal static readonly unsafe int XMSS_PUBLIC_KEY_SIZE = sizeof(XmssPublicKey);
internal static readonly int XMSS_PUBLIC_KEY_SIZE = Unsafe.SizeOf<XmssPublicKey>();
}

struct XmssSignature
Expand Down Expand Up @@ -129,14 +130,14 @@ static partial class UnsafeNativeMethods

static partial class Defines
{
internal static unsafe int XMSS_SIGNATURE_SIZE(XmssParameterSetOID param_set)
internal static int XMSS_SIGNATURE_SIZE(XmssParameterSetOID param_set)
{
return sizeof(XmssSignature) + (sizeof(XmssValue256) * XMSS_TREE_DEPTH(param_set));
return Unsafe.SizeOf<XmssSignature>() + (Unsafe.SizeOf<XmssValue256>() * XMSS_TREE_DEPTH(param_set));
}

internal static unsafe int XMSS_SIGNATURE_BLOB_SIZE(XmssParameterSetOID param_set)
internal static int XMSS_SIGNATURE_BLOB_SIZE(XmssParameterSetOID param_set)
{
return sizeof(XmssSignatureBlob) + XMSS_SIGNATURE_SIZE(param_set);
return Unsafe.SizeOf<XmssSignatureBlob>() + XMSS_SIGNATURE_SIZE(param_set);
}

internal const int XMSS_VERIFICATION_CONTEXT_SIZE = 4 + 4 + 8 + 8 + 200 + 8 + 32;
Expand Down

0 comments on commit 7f379f9

Please sign in to comment.