diff --git a/crypto/src/AssemblyInfo.cs b/crypto/src/AssemblyInfo.cs
index b53ba92d2..dda4619e4 100644
--- a/crypto/src/AssemblyInfo.cs
+++ b/crypto/src/AssemblyInfo.cs
@@ -1,6 +1,6 @@
using System;
using System.Reflection;
-//using System.Security.Permissions;
+using System.Runtime.CompilerServices;
#if PORTABLE
using System.Linq;
@@ -8,65 +8,6 @@ using System.Linq;
using System.Runtime.InteropServices;
#endif
-//
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-//
-[assembly: AssemblyTitle("BouncyCastle.Crypto")]
-[assembly: AssemblyDescription("Bouncy Castle Cryptography API")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Legion of the Bouncy Castle Inc.")]
-[assembly: AssemblyProduct("Bouncy Castle for .NET")]
-[assembly: AssemblyCopyright("Copyright (C) 2000-2022")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-//
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Revision and Build Numbers
-// by using the '*' as shown below:
-
-[assembly: AssemblyVersion("1.9.0.0")]
-[assembly: AssemblyFileVersion("1.9.21290.1")]
-[assembly: AssemblyInformationalVersion("1.9.0")]
-
-//
-// In order to sign your assembly you must specify a key to use. Refer to the
-// Microsoft .NET Framework documentation for more information on assembly signing.
-//
-// Use the attributes below to control which key is used for signing.
-//
-// Notes:
-// (*) If no key is specified, the assembly is not signed.
-// (*) KeyName refers to a key that has been installed in the Crypto Service
-// Provider (CSP) on your machine. KeyFile refers to a file which contains
-// a key.
-// (*) If the KeyFile and the KeyName values are both specified, the
-// following processing occurs:
-// (1) If the KeyName can be found in the CSP, that key is used.
-// (2) If the KeyName does not exist and the KeyFile does exist, the key
-// in the KeyFile is installed into the CSP and used.
-// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
-// When specifying the KeyFile, the location of the KeyFile should be
-// relative to the project output directory which is
-// %Project Directory%\obj\<configuration>. For example, if your KeyFile is
-// located in the project directory, you would specify the AssemblyKeyFile
-// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
-// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
-// documentation for more information on this.
-//
-[assembly: AssemblyDelaySign(false)]
-#if STRONG_NAME
-[assembly: AssemblyKeyFile(@"../BouncyCastle.snk")]
-#endif
-
[assembly: CLSCompliant(true)]
#if !PORTABLE
[assembly: ComVisible(false)]
@@ -117,3 +58,23 @@ internal class AssemblyInfo
}
}
}
+
+#if NET40
+namespace System.Reflection
+{
+ [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true, Inherited = false)]
+ internal sealed class AssemblyMetadataAttribute : Attribute
+ {
+ public AssemblyMetadataAttribute(string key, string value)
+ {
+ Key = key;
+ Value = value;
+ }
+
+ public string Key { get; }
+
+ public string Value { get; }
+ }
+}
+
+#endif
diff --git a/crypto/src/BouncyCastle.Crypto.csproj b/crypto/src/BouncyCastle.Crypto.csproj
new file mode 100644
index 000000000..d2cd09129
--- /dev/null
+++ b/crypto/src/BouncyCastle.Crypto.csproj
@@ -0,0 +1,30 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFrameworks>netstandard2.0;net40</TargetFrameworks>
+ <RootNamespace>Org.BouncyCastle</RootNamespace>
+ <AssemblyOriginatorKeyFile>..\..\BouncyCastle.snk</AssemblyOriginatorKeyFile>
+ <SignAssembly>true</SignAssembly>
+ </PropertyGroup>
+
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ </PropertyGroup>
+
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
+ <DefineConstants />
+ <GenerateDocumentationFile>true</GenerateDocumentationFile>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1">
+ <PrivateAssets>all</PrivateAssets>
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+ </PackageReference>
+ <PackageReference Include="Nerdbank.GitVersioning" Version="3.5.107">
+ <PrivateAssets>all</PrivateAssets>
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+ </PackageReference>
+ </ItemGroup>
+
+</Project>
diff --git a/crypto/src/asn1/DerGeneralizedTime.cs b/crypto/src/asn1/DerGeneralizedTime.cs
index 1efa792df..f5ef3f372 100644
--- a/crypto/src/asn1/DerGeneralizedTime.cs
+++ b/crypto/src/asn1/DerGeneralizedTime.cs
@@ -181,18 +181,7 @@ namespace Org.BouncyCastle.Asn1
char sign = '+';
DateTime time = ToDateTime();
-#if PORTABLE
- long offset = time.Ticks - time.ToUniversalTime().Ticks;
- if (offset < 0)
- {
- sign = '-';
- offset = -offset;
- }
- int hours = (int)(offset / TimeSpan.TicksPerHour);
- int minutes = (int)(offset / TimeSpan.TicksPerMinute) % 60;
-#else
- // Note: GetUtcOffset incorporates Daylight Savings offset
- TimeSpan offset = TimeZone.CurrentTimeZone.GetUtcOffset(time);
+ TimeSpan offset = TimeZoneInfo.Local.GetUtcOffset(time);
if (offset.CompareTo(TimeSpan.Zero) < 0)
{
sign = '-';
@@ -200,7 +189,6 @@ namespace Org.BouncyCastle.Asn1
}
int hours = offset.Hours;
int minutes = offset.Minutes;
-#endif
return "GMT" + sign + Convert(hours) + ":" + Convert(minutes);
}
|