Skip to content

Commit a3905d7

Browse files
committed
Optimize for AOT Compilation
1 parent 2a4507a commit a3905d7

File tree

4 files changed

+69
-20
lines changed

4 files changed

+69
-20
lines changed

src/EasySign/Bundle.cs

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,10 +187,18 @@ protected virtual void ReadBundle(ZipArchive zip)
187187
{
188188
ZipArchiveEntry entry;
189189
if ((entry = zip.GetEntry(".manifest.ec")) != null)
190+
#if NET6_0_OR_GREATER
191+
Manifest = JsonSerializer.Deserialize(entry.Open(), typeof(Manifest), SourceGenerationManifestContext.Default) as Manifest;
192+
#else
190193
Manifest = JsonSerializer.Deserialize<Manifest>(entry.Open(), SerializerOptions);
194+
#endif
191195

192196
if ((entry = zip.GetEntry(".signatures.ec")) != null)
197+
#if NET6_0_OR_GREATER
198+
Signatures = JsonSerializer.Deserialize(entry.Open(), typeof(Signatures), SourceGenerationSignaturesContext.Default) as Signatures;
199+
#else
193200
Signatures = JsonSerializer.Deserialize<Signatures>(entry.Open(), SerializerOptions);
201+
#endif
194202
}
195203

196204
/// <summary>
@@ -237,7 +245,13 @@ public void Sign(X509Certificate2 certificate, RSA privateKey)
237245
{
238246
EnsureWritable();
239247

240-
var signature = privateKey.SignData(Export(Manifest), HashAlgorithmName.SHA512, RSASignaturePadding.Pkcs1);
248+
#if NET6_0_OR_GREATER
249+
var manifestData = Export(Manifest, SourceGenerationManifestContext.Default);
250+
#else
251+
var manifestData = Export(Manifest);
252+
#endif
253+
254+
var signature = privateKey.SignData(manifestData, HashAlgorithmName.SHA512, RSASignaturePadding.Pkcs1);
241255
var cert = Convert.ToBase64String(certificate.Export(X509ContentType.Cert));
242256
var name = certificate.GetCertHashString();
243257

@@ -285,7 +299,13 @@ public bool VerifySignature(string certificateHash)
285299
X509Certificate2 certificate = GetCertificate(certificateHash);
286300
var pubKey = certificate.GetRSAPublicKey();
287301

288-
return pubKey.VerifyData(Export(Manifest), Signatures.Entries[certificateHash], HashAlgorithmName.SHA512, RSASignaturePadding.Pkcs1);
302+
#if NET6_0_OR_GREATER
303+
var manifestData = Export(Manifest, SourceGenerationManifestContext.Default);
304+
#else
305+
var manifestData = Export(Manifest);
306+
#endif
307+
308+
return pubKey.VerifyData(manifestData, Signatures.Entries[certificateHash], HashAlgorithmName.SHA512, RSASignaturePadding.Pkcs1);
289309
}
290310

291311
/// <summary>
@@ -375,6 +395,19 @@ public byte[] GetFileBytes(string entryName)
375395
}
376396
}
377397

398+
#if NET6_0_OR_GREATER
399+
/// <summary>
400+
/// Exports the specified structured data to a byte array.
401+
/// </summary>
402+
/// <param name="structuredData">The structured data to export.</param>
403+
/// <param name="jsonSerializerContext">A metadata provider for serializable types.</param>
404+
/// <returns>A byte array containing the exported data.</returns>
405+
protected byte[] Export(object structuredData, JsonSerializerContext jsonSerializerContext)
406+
{
407+
var data = JsonSerializer.Serialize(structuredData, structuredData.GetType(), jsonSerializerContext);
408+
return Encoding.UTF8.GetBytes(data);
409+
}
410+
#else
378411
/// <summary>
379412
/// Exports the specified structured data to a byte array.
380413
/// </summary>
@@ -385,6 +418,7 @@ protected byte[] Export(object structuredData)
385418
var data = JsonSerializer.Serialize(structuredData, SerializerOptions);
386419
return Encoding.UTF8.GetBytes(data);
387420
}
421+
#endif
388422

389423
/// <summary>
390424
/// Writes changes to the bundle file.
@@ -397,8 +431,21 @@ public void Update()
397431
{
398432
OnUpdating?.Invoke(zip);
399433

400-
WriteEntry(zip, ".manifest.ec", Export(Manifest));
401-
WriteEntry(zip, ".signatures.ec", Export(Signatures));
434+
#if NET6_0_OR_GREATER
435+
var manifestData = Export(Manifest, SourceGenerationManifestContext.Default);
436+
#else
437+
var manifestData = Export(Manifest);
438+
#endif
439+
440+
WriteEntry(zip, ".manifest.ec", manifestData);
441+
442+
#if NET6_0_OR_GREATER
443+
var signatureData = Export(Signatures, SourceGenerationSignaturesContext.Default);
444+
#else
445+
var signatureData = Export(Signatures);
446+
#endif
447+
448+
WriteEntry(zip, ".signatures.ec", signatureData);
402449

403450
foreach (var newFile in newEmbeddedFiles)
404451
{

src/EasySign/Manifest.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Collections.Generic;
44
using System.Linq;
55
using System.Text;
6+
using System.Text.Json.Serialization;
67
using System.Threading.Tasks;
78

89
namespace SAPTeam.EasySign
@@ -63,4 +64,12 @@ public void AddEntry(string entryName, byte[] hash)
6364
}
6465
}
6566
}
67+
68+
#if NET6_0_OR_GREATER
69+
[JsonSourceGenerationOptions(GenerationMode = JsonSourceGenerationMode.Metadata, WriteIndented = false, DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingDefault)]
70+
[JsonSerializable(typeof(Manifest))]
71+
internal partial class SourceGenerationManifestContext : JsonSerializerContext
72+
{
73+
}
74+
#endif
6675
}

src/EasySign/Signatures.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Collections.Generic;
44
using System.Linq;
55
using System.Text;
6+
using System.Text.Json.Serialization;
67
using System.Threading.Tasks;
78

89
namespace SAPTeam.EasySign
@@ -17,4 +18,12 @@ public class Signatures
1718
/// </summary>
1819
public Dictionary<string, byte[]> Entries { get; set; } = new();
1920
}
21+
22+
#if NET6_0_OR_GREATER
23+
[JsonSourceGenerationOptions(GenerationMode = JsonSourceGenerationMode.Metadata, WriteIndented = false, DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingDefault)]
24+
[JsonSerializable(typeof(Signatures))]
25+
internal partial class SourceGenerationSignaturesContext : JsonSerializerContext
26+
{
27+
}
28+
#endif
2029
}

src/EasySign/UnifiedPath/Folder.cs

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,6 @@ namespace SAPTeam.EasySign.UnifiedPath
1313
/// </summary>
1414
public class Folder : FolderEntry
1515
{
16-
/// <summary>
17-
/// Creates a <see cref="Folder"/> instance representing the directory of the specified assembly.
18-
/// </summary>
19-
/// <typeparam name="T">The type whose assembly's location is used.</typeparam>
20-
/// <returns>A <see cref="Folder"/> instance.</returns>
21-
public static Folder OfAssembly<T>() =>
22-
OfAssembly(typeof(T).Assembly);
23-
24-
/// <summary>
25-
/// Creates a <see cref="Folder"/> instance representing the directory of the specified assembly.
26-
/// </summary>
27-
/// <param name="assembly">The assembly whose location is used.</param>
28-
/// <returns>A <see cref="Folder"/> instance.</returns>
29-
public static Folder OfAssembly(Assembly assembly) =>
30-
new Folder(GetDirectoryName(assembly.Location));
31-
3216
/// <summary>
3317
/// Initializes a new instance of the <see cref="Folder"/> class with the specified full path.
3418
/// </summary>

0 commit comments

Comments
 (0)