-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Initial push of component class registry code
- Loading branch information
1 parent
9704571
commit 22cff70
Showing
83 changed files
with
5,607 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
name: .NET build HardwareManifest | ||
|
||
on: | ||
push: | ||
|
||
jobs: | ||
build: | ||
strategy: | ||
matrix: | ||
os: [ubuntu-latest, windows-latest] | ||
runs-on: ${{ matrix.os }} | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Setup .NET | ||
uses: actions/setup-dotnet@v4 | ||
with: | ||
dotnet-version: 8.0.x | ||
- name: Restore dependencies | ||
working-directory: dotnet/ComponentClassRegistry | ||
run: dotnet restore | ||
- name: Build | ||
working-directory: dotnet/ComponentClassRegistry | ||
run: dotnet build | ||
- name: Test | ||
working-directory: dotnet/ComponentClassRegistry | ||
run: dotnet test | ||
- name: Pack | ||
working-directory: dotnet/ComponentClassRegistry | ||
run: dotnet pack |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,201 @@ | ||
# Remove the line below if you want to inherit .editorconfig settings from higher directories | ||
root = true | ||
|
||
# C# files | ||
[*.cs] | ||
|
||
#### Core EditorConfig Options #### | ||
|
||
# Indentation and spacing | ||
indent_size = 4 | ||
indent_style = space | ||
tab_width = 4 | ||
|
||
# New line preferences | ||
end_of_line = lf | ||
insert_final_newline = false | ||
|
||
#### .NET Coding Conventions #### | ||
|
||
# Organize usings | ||
dotnet_separate_import_directive_groups = false | ||
dotnet_sort_system_directives_first = false | ||
file_header_template = unset | ||
|
||
# this. and Me. preferences | ||
dotnet_style_qualification_for_event = false:silent | ||
dotnet_style_qualification_for_field = false:silent | ||
dotnet_style_qualification_for_method = false:silent | ||
dotnet_style_qualification_for_property = false:silent | ||
|
||
# Language keywords vs BCL types preferences | ||
dotnet_style_predefined_type_for_locals_parameters_members = true:silent | ||
dotnet_style_predefined_type_for_member_access = true:silent | ||
|
||
# Parentheses preferences | ||
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent | ||
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent | ||
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent | ||
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent | ||
|
||
# Modifier preferences | ||
dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent | ||
|
||
# Expression-level preferences | ||
dotnet_style_coalesce_expression = true:suggestion | ||
dotnet_style_collection_initializer = true:suggestion | ||
dotnet_style_explicit_tuple_names = true:suggestion | ||
dotnet_style_null_propagation = true:suggestion | ||
dotnet_style_object_initializer = true:suggestion | ||
dotnet_style_operator_placement_when_wrapping = beginning_of_line | ||
dotnet_style_prefer_auto_properties = true:silent | ||
dotnet_style_prefer_compound_assignment = true:suggestion | ||
dotnet_style_prefer_conditional_expression_over_assignment = true:silent | ||
dotnet_style_prefer_conditional_expression_over_return = true:silent | ||
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion | ||
dotnet_style_prefer_inferred_tuple_names = true:suggestion | ||
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion | ||
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion | ||
dotnet_style_prefer_simplified_interpolation = true:suggestion | ||
|
||
# Field preferences | ||
dotnet_style_readonly_field = true:suggestion | ||
|
||
# Parameter preferences | ||
dotnet_code_quality_unused_parameters = all:suggestion | ||
|
||
#### C# Coding Conventions #### | ||
|
||
# var preferences | ||
csharp_style_var_elsewhere = false:silent | ||
csharp_style_var_for_built_in_types = false:silent | ||
csharp_style_var_when_type_is_apparent = false:silent | ||
|
||
# Expression-bodied members | ||
csharp_style_expression_bodied_accessors = true:silent | ||
csharp_style_expression_bodied_constructors = false:silent | ||
csharp_style_expression_bodied_indexers = true:silent | ||
csharp_style_expression_bodied_lambdas = true:silent | ||
csharp_style_expression_bodied_local_functions = false:silent | ||
csharp_style_expression_bodied_methods = false:silent | ||
csharp_style_expression_bodied_operators = false:silent | ||
csharp_style_expression_bodied_properties = true:silent | ||
|
||
# Pattern matching preferences | ||
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion | ||
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion | ||
csharp_style_prefer_switch_expression = true:suggestion | ||
|
||
# Null-checking preferences | ||
csharp_style_conditional_delegate_call = true:suggestion | ||
|
||
# Modifier preferences | ||
csharp_prefer_static_local_function = true:suggestion | ||
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:silent | ||
|
||
# Code-block preferences | ||
csharp_prefer_braces = true:silent | ||
csharp_prefer_simple_using_statement = true:suggestion | ||
|
||
# Expression-level preferences | ||
csharp_prefer_simple_default_expression = true:suggestion | ||
csharp_style_deconstructed_variable_declaration = true:suggestion | ||
csharp_style_inlined_variable_declaration = true:suggestion | ||
csharp_style_pattern_local_over_anonymous_function = true:suggestion | ||
csharp_style_prefer_index_operator = true:suggestion | ||
csharp_style_prefer_range_operator = true:suggestion | ||
csharp_style_throw_expression = true:suggestion | ||
csharp_style_unused_value_assignment_preference = discard_variable:suggestion | ||
csharp_style_unused_value_expression_statement_preference = discard_variable:silent | ||
|
||
# 'using' directive preferences | ||
csharp_using_directive_placement = outside_namespace:silent | ||
|
||
#### C# Formatting Rules #### | ||
|
||
# New line preferences | ||
csharp_new_line_before_catch = false | ||
csharp_new_line_before_else = false | ||
csharp_new_line_before_finally = false | ||
csharp_new_line_before_members_in_anonymous_types = true | ||
csharp_new_line_before_members_in_object_initializers = true | ||
csharp_new_line_before_open_brace = none | ||
csharp_new_line_between_query_expression_clauses = true | ||
|
||
# Indentation preferences | ||
csharp_indent_block_contents = true | ||
csharp_indent_braces = false | ||
csharp_indent_case_contents = true | ||
csharp_indent_case_contents_when_block = true | ||
csharp_indent_labels = one_less_than_current | ||
csharp_indent_switch_labels = true | ||
|
||
# Space preferences | ||
csharp_space_after_cast = false | ||
csharp_space_after_colon_in_inheritance_clause = true | ||
csharp_space_after_comma = true | ||
csharp_space_after_dot = false | ||
csharp_space_after_keywords_in_control_flow_statements = true | ||
csharp_space_after_semicolon_in_for_statement = true | ||
csharp_space_around_binary_operators = before_and_after | ||
csharp_space_around_declaration_statements = false | ||
csharp_space_before_colon_in_inheritance_clause = true | ||
csharp_space_before_comma = false | ||
csharp_space_before_dot = false | ||
csharp_space_before_open_square_brackets = false | ||
csharp_space_before_semicolon_in_for_statement = false | ||
csharp_space_between_empty_square_brackets = false | ||
csharp_space_between_method_call_empty_parameter_list_parentheses = false | ||
csharp_space_between_method_call_name_and_opening_parenthesis = false | ||
csharp_space_between_method_call_parameter_list_parentheses = false | ||
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false | ||
csharp_space_between_method_declaration_name_and_open_parenthesis = false | ||
csharp_space_between_method_declaration_parameter_list_parentheses = false | ||
csharp_space_between_parentheses = false | ||
csharp_space_between_square_brackets = false | ||
|
||
# Wrapping preferences | ||
csharp_preserve_single_line_blocks = false | ||
csharp_preserve_single_line_statements = false | ||
|
||
#### Naming styles #### | ||
|
||
# Naming rules | ||
|
||
dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion | ||
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface | ||
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i | ||
|
||
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion | ||
dotnet_naming_rule.types_should_be_pascal_case.symbols = types | ||
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case | ||
|
||
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion | ||
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members | ||
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case | ||
|
||
# Symbol specifications | ||
|
||
dotnet_naming_symbols.interface.applicable_kinds = interface | ||
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected | ||
dotnet_naming_symbols.interface.required_modifiers = | ||
|
||
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum | ||
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected | ||
dotnet_naming_symbols.types.required_modifiers = | ||
|
||
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method | ||
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected | ||
dotnet_naming_symbols.non_field_members.required_modifiers = | ||
|
||
# Naming styles | ||
|
||
dotnet_naming_style.pascal_case.required_prefix = | ||
dotnet_naming_style.pascal_case.required_suffix = | ||
dotnet_naming_style.pascal_case.word_separator = | ||
dotnet_naming_style.pascal_case.capitalization = pascal_case | ||
|
||
dotnet_naming_style.begins_with_i.required_prefix = I | ||
dotnet_naming_style.begins_with_i.required_suffix = | ||
dotnet_naming_style.begins_with_i.word_separator = | ||
dotnet_naming_style.begins_with_i.capitalization = pascal_case |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
|
||
<PropertyGroup> | ||
<TargetFramework>net8.0</TargetFramework> | ||
<ImplicitUsings>enable</ImplicitUsings> | ||
<Nullable>enable</Nullable> | ||
<Authors>NSA Cybersecurity Directorate</Authors> | ||
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression> | ||
</PropertyGroup> | ||
|
||
<ItemGroup> | ||
<PackageReference Include="CommandLineParser" Version="2.9.1" /> | ||
</ItemGroup> | ||
|
||
</Project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
using CommandLine; | ||
using System.Data; | ||
using System.Runtime.InteropServices; | ||
using System.Security.Principal; | ||
|
||
namespace CliLib; | ||
public class CliOptions { | ||
[Option("print-v2", SetName = "print", Default = false, HelpText = "Print hardware manifest data in JSON format according to Platform Certificate v1.1.")] | ||
public bool PrintV2 { | ||
get; set; | ||
} | ||
[Option("print-v3", SetName = "print", Default = false, HelpText = "Print hardware manifest data in JSON format according to Platform Certificate v2.0 with component identifiers wrapped in ComponentIdentifierV11Traits.")] | ||
public bool PrintV3 { | ||
get; set; | ||
} | ||
|
||
private static void HandleParseError(IEnumerable<Error> errs) { | ||
//handle errors | ||
Console.WriteLine("There was a command line error: " + errs.ToString()); | ||
} | ||
|
||
public static CliOptions? ParseArguments(string[] args) { | ||
CliOptions? cli = new(); | ||
ParserResult<CliOptions> cliParseResult = | ||
CommandLine.Parser.Default.ParseArguments<CliOptions>(args) | ||
.WithParsed(parsed => cli = parsed) | ||
.WithNotParsed(HandleParseError); | ||
if (cliParseResult.Tag == ParserResultType.NotParsed) { | ||
Console.WriteLine("Could not parse command line arguments."); | ||
cli = null; | ||
} | ||
|
||
return cli; | ||
} | ||
|
||
public static string[] SplitArgs(string argString) { | ||
return argString.SplitArgs(true); | ||
} | ||
|
||
public static int IsUserPrivileged() { | ||
bool priv = false; | ||
|
||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { | ||
if (LinuxImports.geteuid() == 0) { | ||
priv = true; | ||
} | ||
} else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { | ||
if (new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator)) { | ||
priv = true; | ||
} | ||
} | ||
|
||
int result = priv ? (int)ClientExitCodes.SUCCESS : (int)ClientExitCodes.NOT_PRIVILEGED; | ||
|
||
return result; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
namespace CliLib; | ||
|
||
public enum ClientExitCodes { | ||
SUCCESS = 0, // Full successful program completion | ||
FAIL = 1, // Unknown/Generic failure resulting in exit | ||
NOT_PRIVILEGED = 23, // Client not run as root | ||
CLI_PARSE_ERROR = 24, // Command line parsing failure | ||
GATHER_HW_MANIFEST_FAIL = 43, // SMBIOS Hardware information retrieval failure | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
using System.Runtime.InteropServices; | ||
|
||
namespace CliLib; | ||
|
||
public class LinuxImports { | ||
/// <summary> | ||
/// This method is imported to query the Linux Kernel whether the program was run with privileges. | ||
/// </summary> | ||
/// <returns>The Euid.</returns> | ||
[DllImport("libc", SetLastError = true)] | ||
internal static extern uint geteuid(); | ||
} |
Oops, something went wrong.