From c837de03ab16cc4a0959777f82f29901a1250d61 Mon Sep 17 00:00:00 2001 From: Kenneth Myhra Date: Tue, 28 Jan 2025 14:58:11 +0100 Subject: [PATCH 1/7] Messaging: Normalize line endings in SignThenEncryptMessageProtection --- .../SignThenEncryptMessageProtection.cs | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/src/Helsenorge.Messaging/Security/SignThenEncryptMessageProtection.cs b/src/Helsenorge.Messaging/Security/SignThenEncryptMessageProtection.cs index 9637b970..678abcb2 100644 --- a/src/Helsenorge.Messaging/Security/SignThenEncryptMessageProtection.cs +++ b/src/Helsenorge.Messaging/Security/SignThenEncryptMessageProtection.cs @@ -13,32 +13,32 @@ using System.Security.Cryptography.Pkcs; using Helsenorge.Messaging.Abstractions; using System.Security.Cryptography; -using Microsoft.Extensions.Logging; -using Helsenorge.Messaging.Amqp.Receivers; - +using Microsoft.Extensions.Logging; +using Helsenorge.Messaging.Amqp.Receivers; + namespace Helsenorge.Messaging.Security { /// /// Provides message protection that first signs the message, then encrypts it /// public class SignThenEncryptMessageProtection : MessageProtection - { - private readonly ILogger _logger; + { + private readonly ILogger _logger; private readonly X509IncludeOption? _includeOption; - private readonly MessagingEncryptionType _messagingEncryptionType; - private readonly MessagingEncryptionType _rejectMessagingEncryptionTypes; - + private readonly MessagingEncryptionType _messagingEncryptionType; + private readonly MessagingEncryptionType _rejectMessagingEncryptionTypes; + /// /// Initializes a new instance of the class with the required certificates for signing and encrypting data. /// /// Certificcate that will be used to sign data - /// Certificate that will be used to encrypt data + /// Certificate that will be used to encrypt data /// /// A legacy certificate that can be used when swapping certificates. /// Controls how much of the signer certificate's certificate chain should be /// embedded in the signed message. If not specified, the default /// is used. - /// Controls which encryption type the Protect methods use. + /// Controls which encryption type the Protect methods use. /// Controls which encryption type the Unprotect methods rejects. public SignThenEncryptMessageProtection( X509Certificate2 signingCertificate, @@ -49,11 +49,11 @@ public SignThenEncryptMessageProtection( MessagingEncryptionType messagingEncryptionType = MessagingEncryptionType.AES256, MessagingEncryptionType rejectMessagingEncryptionType = MessagingEncryptionType.None) : base(signingCertificate, encryptionCertificate, legacyEncryptionCertificate) - { - _logger = logger; + { + _logger = logger; _includeOption = includeOption; - _messagingEncryptionType = messagingEncryptionType; - _rejectMessagingEncryptionTypes = rejectMessagingEncryptionType; + _messagingEncryptionType = messagingEncryptionType; + _rejectMessagingEncryptionTypes = rejectMessagingEncryptionType; } /// @@ -73,8 +73,8 @@ public override Stream Protect(Stream data, X509Certificate2 encryptionCertifica } /// - public override Stream Protect(Stream data, X509Certificate2 encryptionCertificate, X509Certificate2 signingCertificate) - { + public override Stream Protect(Stream data, X509Certificate2 encryptionCertificate, X509Certificate2 signingCertificate) + { if (data == null) throw new ArgumentNullException(nameof(data)); if (encryptionCertificate == null) throw new ArgumentNullException(nameof(encryptionCertificate)); if (signingCertificate == null) throw new ArgumentNullException(nameof(signingCertificate)); @@ -133,13 +133,13 @@ private byte[] Unprotect(byte[] data, X509Certificate2 signingCertificate) envelopedCms.Decode(data); try { - var encryptionOid = envelopedCms?.ContentEncryptionAlgorithm?.Oid; + var encryptionOid = envelopedCms?.ContentEncryptionAlgorithm?.Oid; _logger.LogInformation($"Decrypting EnvelopedCms with ContentEncryptionAlgorithm: {encryptionOid?.FriendlyName ?? "null"} : {encryptionOid?.Value ?? "null"}"); - if ((_rejectMessagingEncryptionTypes.HasFlag(MessagingEncryptionType.DES) && encryptionOid.Value == "1.3.14.3.2.7") - || (_rejectMessagingEncryptionTypes.HasFlag(MessagingEncryptionType.TripleDES) && encryptionOid.Value == "1.2.840.113549.3.7")) - { - throw new UnsupportedMessageException($"EnvelopedCms was encrypted with disabled ContentEncryptionAlgorithm: {encryptionOid?.FriendlyName ?? "null"} : {encryptionOid?.Value ?? "null"}"); + if ((_rejectMessagingEncryptionTypes.HasFlag(MessagingEncryptionType.DES) && encryptionOid.Value == "1.3.14.3.2.7") + || (_rejectMessagingEncryptionTypes.HasFlag(MessagingEncryptionType.TripleDES) && encryptionOid.Value == "1.2.840.113549.3.7")) + { + throw new UnsupportedMessageException($"EnvelopedCms was encrypted with disabled ContentEncryptionAlgorithm: {encryptionOid?.FriendlyName ?? "null"} : {encryptionOid?.Value ?? "null"}"); } envelopedCms.Decrypt(envelopedCms.RecipientInfos[0], encryptionCertificates); @@ -187,15 +187,15 @@ private byte[] Unprotect(byte[] data, X509Certificate2 signingCertificate) private EnvelopedCms GetEnvelope(byte[] rawContent) { - if (_messagingEncryptionType.HasFlag(MessagingEncryptionType.AES256)) - { - return new EnvelopedCms(new ContentInfo(rawContent), new AlgorithmIdentifier(new Oid("2.16.840.1.101.3.4.1.42"))); - } - else if (_messagingEncryptionType.HasFlag(MessagingEncryptionType.TripleDES)) - { - return new EnvelopedCms(new ContentInfo(rawContent), new AlgorithmIdentifier(new Oid("1.2.840.113549.3.7"))); - } - + if (_messagingEncryptionType.HasFlag(MessagingEncryptionType.AES256)) + { + return new EnvelopedCms(new ContentInfo(rawContent), new AlgorithmIdentifier(new Oid("2.16.840.1.101.3.4.1.42"))); + } + else if (_messagingEncryptionType.HasFlag(MessagingEncryptionType.TripleDES)) + { + return new EnvelopedCms(new ContentInfo(rawContent), new AlgorithmIdentifier(new Oid("1.2.840.113549.3.7"))); + } + throw new ArgumentException($"MessagingEncryptionType has been set to an unsupported type.: {_messagingEncryptionType}", nameof(_messagingEncryptionType)); } } From b35537e177b522e788d05f3e5fec978d125228ac Mon Sep 17 00:00:00 2001 From: Kenneth Myhra Date: Tue, 28 Jan 2025 15:06:49 +0100 Subject: [PATCH 2/7] Messaging: Use Stream.ReadExactly() when net9.0 or greater This would be better to pull out into an extension method and then properly implementing this as ReadExactly() for net8.0 and less. --- .../Security/SignThenEncryptMessageProtection.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Helsenorge.Messaging/Security/SignThenEncryptMessageProtection.cs b/src/Helsenorge.Messaging/Security/SignThenEncryptMessageProtection.cs index 678abcb2..653adbc3 100644 --- a/src/Helsenorge.Messaging/Security/SignThenEncryptMessageProtection.cs +++ b/src/Helsenorge.Messaging/Security/SignThenEncryptMessageProtection.cs @@ -80,9 +80,12 @@ public override Stream Protect(Stream data, X509Certificate2 encryptionCertifica if (signingCertificate == null) throw new ArgumentNullException(nameof(signingCertificate)); byte[] dataAsBytes = new byte[data.Length]; +#if NET9_0_OR_GREATER + data.ReadExactly(dataAsBytes, 0, (int)data.Length); +#else data.Read(dataAsBytes, 0, (int)data.Length); - - return new MemoryStream(Protect(dataAsBytes, encryptionCertificate, signingCertificate)); +#endif + return new MemoryStream(Protect(dataAsBytes, encryptionCertificate, signingCertificate)); } private byte[] Protect(byte[] data, X509Certificate2 encryptionCertificate, X509Certificate2 signingCertificate) @@ -117,7 +120,11 @@ public override Stream Unprotect(Stream data, X509Certificate2 signingCertificat if (data == null) throw new ArgumentNullException(nameof(data)); byte[] dataAsBytes = new byte[data.Length]; +#if NET9_0_OR_GREATER + data.ReadExactly(dataAsBytes, 0, (int)data.Length); +#else data.Read(dataAsBytes, 0, (int)data.Length); +#endif return new MemoryStream(Unprotect(dataAsBytes, signingCertificate)); } From 80ab43850a24fc1b5773449492d074bfaa9efb88 Mon Sep 17 00:00:00 2001 From: Kenneth Myhra Date: Tue, 28 Jan 2025 15:25:41 +0100 Subject: [PATCH 3/7] Messaging+Registries: Use X509CertificateLoader.LoadCertificate() X509CertificateLoader.LoadCertificate() when net9.0 or greater. This could also benefit from being extracted into a helper method to avoid too much preprocessor directives. --- .../Abstractions/CertificateDetails.cs | 4 ++++ .../Abstractions/CollaborationProtocolProfile.cs | 12 ++++++++++++ src/Helsenorge.Registries/AddressRegistry.cs | 4 ++++ .../SignThenEncryptMessageProtectionTests.cs | 4 ++++ .../AddressRegistryTests.cs | 4 ++++ 5 files changed, 28 insertions(+) diff --git a/src/Helsenorge.Registries/Abstractions/CertificateDetails.cs b/src/Helsenorge.Registries/Abstractions/CertificateDetails.cs index ae8e312b..36fcec26 100644 --- a/src/Helsenorge.Registries/Abstractions/CertificateDetails.cs +++ b/src/Helsenorge.Registries/Abstractions/CertificateDetails.cs @@ -58,7 +58,11 @@ internal void OnDeserialized(StreamingContext context) { Certificate = string.IsNullOrWhiteSpace(_certificateBase64String) ? null +#if NET9_0_OR_GREATER + : X509CertificateLoader.LoadCertificate(Convert.FromBase64String(_certificateBase64String)); +#else : new X509Certificate2(Convert.FromBase64String(_certificateBase64String)); +#endif } } } diff --git a/src/Helsenorge.Registries/Abstractions/CollaborationProtocolProfile.cs b/src/Helsenorge.Registries/Abstractions/CollaborationProtocolProfile.cs index 38abf725..0127e95c 100644 --- a/src/Helsenorge.Registries/Abstractions/CollaborationProtocolProfile.cs +++ b/src/Helsenorge.Registries/Abstractions/CollaborationProtocolProfile.cs @@ -51,7 +51,11 @@ public static CollaborationProtocolProfile CreateFromPartyInfoElement(XElement p foreach (var certificateElement in partyInfo.Elements(NameSpace + "Certificate")) { var base64 = certificateElement.Descendants(xmlSig + "X509Certificate").First().Value; +#if NET9_0_OR_GREATER + var certificate = X509CertificateLoader.LoadCertificate(Convert.FromBase64String(base64)); +#else var certificate = new X509Certificate2(Convert.FromBase64String(base64)); +#endif if (certificate.HasKeyUsage(X509KeyUsageFlags.KeyEncipherment)) { @@ -99,10 +103,18 @@ internal void OnDeserialized(StreamingContext context) { EncryptionCertificate = string.IsNullOrWhiteSpace(_encryptionCertificateBase64String) ? null +#if NET9_0_OR_GREATER + : X509CertificateLoader.LoadCertificate(Convert.FromBase64String(_encryptionCertificateBase64String)); +#else : new X509Certificate2(Convert.FromBase64String(_encryptionCertificateBase64String)); +#endif SignatureCertificate = string.IsNullOrWhiteSpace(_signatureCertificateBase64String) ? null +#if NET9_0_OR_GREATER + : X509CertificateLoader.LoadCertificate(Convert.FromBase64String(_signatureCertificateBase64String)); +#else : new X509Certificate2(Convert.FromBase64String(_signatureCertificateBase64String)); +#endif } /// diff --git a/src/Helsenorge.Registries/AddressRegistry.cs b/src/Helsenorge.Registries/AddressRegistry.cs index 1ca63308..2d827cb1 100644 --- a/src/Helsenorge.Registries/AddressRegistry.cs +++ b/src/Helsenorge.Registries/AddressRegistry.cs @@ -477,7 +477,11 @@ private static CertificateDetails MapCertificateDetails(int herId, AddressServic return new CertificateDetails { HerId = herId, +#if NET9_0_OR_GREATER + Certificate = X509CertificateLoader.LoadCertificate(certificateDetails.Certificate), +#else Certificate = new X509Certificate2(certificateDetails.Certificate), +#endif LdapUrl = certificateDetails.LdapUrl }; } diff --git a/test/Helsenorge.Messaging.Tests/Security/SignThenEncryptMessageProtectionTests.cs b/test/Helsenorge.Messaging.Tests/Security/SignThenEncryptMessageProtectionTests.cs index 1a9c0ee6..69d06d7f 100644 --- a/test/Helsenorge.Messaging.Tests/Security/SignThenEncryptMessageProtectionTests.cs +++ b/test/Helsenorge.Messaging.Tests/Security/SignThenEncryptMessageProtectionTests.cs @@ -72,7 +72,11 @@ public void Protect_And_Unprotect_UsingLegacy_OK() public void Protect_And_Unprotect_WrongSigningCertificate() { const string wrongCertificateBase64 = "MIIE3jCCA8agAwIBAgILCE2BUrKlJGrOxOgwDQYJKoZIhvcNAQELBQAwSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMzAeFw0xNjAxMTgwOTA3NTZaFw0xOTAxMTgyMjU5MDBaMHIxCzAJBgNVBAYTAk5PMRswGQYDVQQKDBJOT1JTSyBIRUxTRU5FVFQgU0YxFTATBgNVBAsMDFRFU1RTRU5URVJFVDEbMBkGA1UEAwwSTk9SU0sgSEVMU0VORVRUIFNGMRIwEAYDVQQFEwk5OTQ1OTg3NTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCZ34VMBCzmHwmvMWwq0YhtNaEz19PxcEq3ImbCLWZx0zIf2hp8ZSDQy23KpgTumrTebeXEW5b1ig4THXizKzDtwirV5ssO441U7hvTXr+Bm1GYpRc1Q0vzZbKg41Nje5cq+kAovq3H8nnJ3csdjFS5QWKKz1hyUL9V6mZiR1eMVLWbOL2gBR6rjB0OgpoXtF9wmb2Z9So+srAyqnpRy9xBumBFdqvx3+8iZp8G9FH0TPgzeEPreLX5tdKZL0J/Z7+zWXqCx+Fu1PoKMkdw+aYJCVtUJPRXY1t4BpLKO0h6yXf7Rpky+sUQcJmKyagOBPZr9mqqjycYQg6JPSkcTo+XAgMBAAGjggGaMIIBljAJBgNVHRMEAjAAMB8GA1UdIwQYMBaAFMzD+Ae3nG16TvWnKx0F+bNHHJHRMB0GA1UdDgQWBBRpioossQ08OgpOuAl6/58qpAkvajAOBgNVHQ8BAf8EBAMCBkAwFQYDVR0gBA4wDDAKBghghEIBGgEDAjCBpQYDVR0fBIGdMIGaMC+gLaArhilodHRwOi8vY3JsLmJ1eXBhc3Mubm8vY3JsL0JQQ2xhc3MzQ0EzLmNybDBnoGWgY4ZhbGRhcDovL2xkYXAuYnV5cGFzcy5uby9kYz1CdXlwYXNzLGRjPU5PLENOPUJ1eXBhc3MlMjBDbGFzcyUyMDMlMjBDQSUyMDM/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDB6BggrBgEFBQcBAQRuMGwwMwYIKwYBBQUHMAGGJ2h0dHA6Ly9vY3NwLmJ1eXBhc3Mubm8vb2NzcC9CUENsYXNzM0NBMzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC5idXlwYXNzLm5vL2NydC9CUENsYXNzM0NBMy5jZXIwDQYJKoZIhvcNAQELBQADggEBALPuCmA93Mi9NZFUFOaQz3PasTFLeLmtSXtt4Qp0TVtJuhqrlDeWYXDCsffMQoCAZXE3569/hdEgHPBVALo8xKS9vdwZR5SgIF+IivsEdC4ZYsq8C5VX4qq2WxW7yHNy3GYU8RBdOaztTfUliv7uaAeooP6EOPa6m+R+dgGfGnb5rM8NRyGgcAKDvC1YUFwdWaIgqO0gBB6WnSkhkyk0iX4tksUkbemQFcyMi2XDog6IFpkYt85MvfBklwjjufCiIcpkzHmuZCcYSLdwqi40Cz4QM5FE8zQYJJLco35A7NVW3MusyFImTleOlL10NH3XnqeLM8loa1Ph7YPl0SpiSjY="; +#if NET9_0_OR_GREATER + var wrongCertificate = X509CertificateLoader.LoadCertificate(Convert.FromBase64String(wrongCertificateBase64)); +#else var wrongCertificate = new X509Certificate2(Convert.FromBase64String(wrongCertificateBase64)); +#endif MemoryStream contentStream = new MemoryStream(Encoding.UTF8.GetBytes(_content.ToString())); var partyAProtection = new SignThenEncryptMessageProtection(TestCertificates.GetCertificate(TestCertificates.CounterpartySignatureThumbprint), TestCertificates.GetCertificate(TestCertificates.CounterpartyEncryptionThumbprint), _logger); diff --git a/test/Helsenorge.Registries.Tests/AddressRegistryTests.cs b/test/Helsenorge.Registries.Tests/AddressRegistryTests.cs index a4658d49..c17db4fb 100644 --- a/test/Helsenorge.Registries.Tests/AddressRegistryTests.cs +++ b/test/Helsenorge.Registries.Tests/AddressRegistryTests.cs @@ -267,7 +267,11 @@ public void Serialize_AddressService_CertificateDetails() var serialized = XmlCacheFormatter.Serialize(serviceDetails); var deserialized = XmlCacheFormatter.DeserializeAsync(serialized).Result; +#if NET9_0_OR_GREATER + var deserializedCert = X509CertificateLoader.LoadCertificate(deserialized.Certificate); +#else var deserializedCert = new X509Certificate2(deserialized.Certificate); +#endif Assert.AreEqual(serviceDetails.LdapUrl, deserialized.LdapUrl); Assert.AreEqual(cert.Thumbprint, deserializedCert.Thumbprint); } From 122d52aea13c62590c28cdc1cbf5677581058b88 Mon Sep 17 00:00:00 2001 From: Kenneth Myhra Date: Tue, 28 Jan 2025 15:27:14 +0100 Subject: [PATCH 4/7] Registries: Remove param attribute in XML comment The param attributte does no longer correspond to an existing parameter so remove it. --- .../DummyCollaborationProtocolProfileFactory.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Helsenorge.Registries/DummyCollaborationProtocolProfileFactory.cs b/src/Helsenorge.Registries/DummyCollaborationProtocolProfileFactory.cs index 83fe2859..b3553c72 100644 --- a/src/Helsenorge.Registries/DummyCollaborationProtocolProfileFactory.cs +++ b/src/Helsenorge.Registries/DummyCollaborationProtocolProfileFactory.cs @@ -44,7 +44,6 @@ public static class DummyCollaborationProtocolProfileFactory /// An instance of . /// The HER-id to create a "dummy" /// - /// /// public static async Task CreateAsync( IAddressRegistry addressRegistry, From 0782b38b021ab2556210c65678caa6c858fa74b7 Mon Sep 17 00:00:00 2001 From: Kenneth Myhra Date: Tue, 28 Jan 2025 15:28:30 +0100 Subject: [PATCH 5/7] Registries: Remove obsolete ctor and GetObjectData() override The ctor is protected and GetObjectData() can still be accessed by clients so these can be safely removed. --- .../RegistriesException.cs | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/src/Helsenorge.Registries/RegistriesException.cs b/src/Helsenorge.Registries/RegistriesException.cs index 9bfd2a75..49eadbc2 100644 --- a/src/Helsenorge.Registries/RegistriesException.cs +++ b/src/Helsenorge.Registries/RegistriesException.cs @@ -54,26 +54,5 @@ public RegistriesException(string message) : base(message) public RegistriesException(string message, Exception inner) : base(message, inner) { } - /// - /// Constructor - /// - /// - /// - protected RegistriesException( - SerializationInfo info, - StreamingContext context) : base(info, context) - { - } - - /// - /// - /// - /// - /// - // ReSharper disable once RedundantOverridenMember - public override void GetObjectData(SerializationInfo info, StreamingContext context) - { - base.GetObjectData(info, context); - } } } From 0de20cc565267d7fd3778f2f687a219c3b81e148 Mon Sep 17 00:00:00 2001 From: Kenneth Myhra Date: Tue, 28 Jan 2025 15:38:28 +0100 Subject: [PATCH 6/7] Registries: Disable warning for CS0108 in auto-generated files --- .../Connected Services/AddressService/AddressService.cs | 2 ++ .../Connected Services/CPAService/CPAService.cs | 2 ++ .../ServiceBusManagerServiceV2/ServiceBusManagerServiceV2.cs | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/Helsenorge.Registries/Connected Services/AddressService/AddressService.cs b/src/Helsenorge.Registries/Connected Services/AddressService/AddressService.cs index c79e4ab7..190f362b 100644 --- a/src/Helsenorge.Registries/Connected Services/AddressService/AddressService.cs +++ b/src/Helsenorge.Registries/Connected Services/AddressService/AddressService.cs @@ -7,6 +7,8 @@ // //------------------------------------------------------------------------------ +#pragma warning disable CS0108 + namespace Helsenorge.Registries.AddressService { using System.Runtime.Serialization; diff --git a/src/Helsenorge.Registries/Connected Services/CPAService/CPAService.cs b/src/Helsenorge.Registries/Connected Services/CPAService/CPAService.cs index 093d34ca..b7f04533 100644 --- a/src/Helsenorge.Registries/Connected Services/CPAService/CPAService.cs +++ b/src/Helsenorge.Registries/Connected Services/CPAService/CPAService.cs @@ -7,6 +7,8 @@ // //------------------------------------------------------------------------------ +#pragma warning disable CS0108 + namespace Helsenorge.Registries.CPAService { using System.Runtime.Serialization; diff --git a/src/Helsenorge.Registries/Connected Services/ServiceBusManagerServiceV2/ServiceBusManagerServiceV2.cs b/src/Helsenorge.Registries/Connected Services/ServiceBusManagerServiceV2/ServiceBusManagerServiceV2.cs index 804db68e..efaa76dd 100644 --- a/src/Helsenorge.Registries/Connected Services/ServiceBusManagerServiceV2/ServiceBusManagerServiceV2.cs +++ b/src/Helsenorge.Registries/Connected Services/ServiceBusManagerServiceV2/ServiceBusManagerServiceV2.cs @@ -7,6 +7,8 @@ // //------------------------------------------------------------------------------ +#pragma warning disable CS0108 + namespace Helsenorge.Registries { using System.Runtime.Serialization; From 9bc638ef79b6c6a21924b738fe3939dda0b55371 Mon Sep 17 00:00:00 2001 From: Kenneth Myhra Date: Tue, 28 Jan 2025 15:45:42 +0100 Subject: [PATCH 7/7] Everywhere: Disable warning for CS1591 This warning relates to missing XML comment, they are not critical. Currently they are flooding the build logs on the build server so hard to see warnings that are really important. --- .../Helsenorge.Messaging.AdminLib.csproj | 1 + src/Helsenorge.Messaging/Helsenorge.Messaging.csproj | 1 + src/Helsenorge.Registries/Helsenorge.Registries.csproj | 1 + .../Helsenorge.Messaging.Tests.Mocks.csproj | 1 + 4 files changed, 4 insertions(+) diff --git a/src/Helsenorge.Messaging.AdminLib/Helsenorge.Messaging.AdminLib.csproj b/src/Helsenorge.Messaging.AdminLib/Helsenorge.Messaging.AdminLib.csproj index 544f4aa4..ec5f347c 100644 --- a/src/Helsenorge.Messaging.AdminLib/Helsenorge.Messaging.AdminLib.csproj +++ b/src/Helsenorge.Messaging.AdminLib/Helsenorge.Messaging.AdminLib.csproj @@ -4,6 +4,7 @@ net6.0;net8.0;net9.0 disable disable + CS1591 diff --git a/src/Helsenorge.Messaging/Helsenorge.Messaging.csproj b/src/Helsenorge.Messaging/Helsenorge.Messaging.csproj index 85832964..14255caf 100644 --- a/src/Helsenorge.Messaging/Helsenorge.Messaging.csproj +++ b/src/Helsenorge.Messaging/Helsenorge.Messaging.csproj @@ -10,6 +10,7 @@ bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml false Helsenorge.Messaging + CS1591 diff --git a/src/Helsenorge.Registries/Helsenorge.Registries.csproj b/src/Helsenorge.Registries/Helsenorge.Registries.csproj index 6210bc2a..cbf1823d 100644 --- a/src/Helsenorge.Registries/Helsenorge.Registries.csproj +++ b/src/Helsenorge.Registries/Helsenorge.Registries.csproj @@ -12,6 +12,7 @@ bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml false Helsenorge.Registries + CS1591 diff --git a/test/Helsenorge.Messaging.Tests.Mocks/Helsenorge.Messaging.Tests.Mocks.csproj b/test/Helsenorge.Messaging.Tests.Mocks/Helsenorge.Messaging.Tests.Mocks.csproj index 107797fb..80272739 100644 --- a/test/Helsenorge.Messaging.Tests.Mocks/Helsenorge.Messaging.Tests.Mocks.csproj +++ b/test/Helsenorge.Messaging.Tests.Mocks/Helsenorge.Messaging.Tests.Mocks.csproj @@ -4,6 +4,7 @@ net8.0;net9.0 disable disable + CS1591