Skip to content

Commit 35ca486

Browse files
authored
Fixed bug in http signing config for C# restsharp (#16129)
1 parent 0d002d3 commit 35ca486

File tree

9 files changed

+16
-239
lines changed

9 files changed

+16
-239
lines changed

modules/openapi-generator/src/main/resources/csharp/HttpSigningConfiguration.mustache

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -341,14 +341,17 @@ namespace {{packageName}}.Client
341341
/// <returns>ECDSA signature</returns>
342342
private string GetECDSASignature(byte[] dataToSign)
343343
{
344+
{{#net60OrLater}}
345+
if (!File.Exists(KeyFilePath))
346+
throw new Exception("key file path does not exist.");
347+
344348
var keyStr = KeyString;
345349
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
346350
const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
347351
var ecKeyBase64String = keyStr.Replace(ecKeyHeader, "").Replace(ecKeyFooter, "").Trim();
348352
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
349353
var ecdsa = ECDsa.Create();
350354

351-
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
352355
var byteCount = 0;
353356
if (KeyPassPhrase != null)
354357
{
@@ -368,17 +371,17 @@ namespace {{packageName}}.Client
368371
}
369372
}
370373
else
371-
{
372374
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
373-
}
375+
374376
var signedBytes = ecdsa.SignHash(dataToSign);
375377
var derBytes = ConvertToECDSAANS1Format(signedBytes);
376378
var signedString = System.Convert.ToBase64String(derBytes);
377379

378380
return signedString;
379-
#else
381+
{{/net60OrLater}}
382+
{{^net60OrLater}}
380383
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
381-
#endif
384+
{{/net60OrLater}}
382385
}
383386

384387
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

samples/client/petstore/csharp/OpenAPIClient-ConditionalSerialization/src/Org.OpenAPITools/Client/HttpSigningConfiguration.cs

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -349,44 +349,7 @@ private string GetRSASignature(byte[] stringToSign)
349349
/// <returns>ECDSA signature</returns>
350350
private string GetECDSASignature(byte[] dataToSign)
351351
{
352-
var keyStr = KeyString;
353-
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
354-
const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
355-
var ecKeyBase64String = keyStr.Replace(ecKeyHeader, "").Replace(ecKeyFooter, "").Trim();
356-
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
357-
var ecdsa = ECDsa.Create();
358-
359-
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
360-
var byteCount = 0;
361-
if (KeyPassPhrase != null)
362-
{
363-
IntPtr unmanagedString = IntPtr.Zero;
364-
try
365-
{
366-
// convert secure string to byte array
367-
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(KeyPassPhrase);
368-
ecdsa.ImportEncryptedPkcs8PrivateKey(Encoding.UTF8.GetBytes(Marshal.PtrToStringUni(unmanagedString)), keyBytes, out byteCount);
369-
}
370-
finally
371-
{
372-
if (unmanagedString != IntPtr.Zero)
373-
{
374-
Marshal.ZeroFreeBSTR(unmanagedString);
375-
}
376-
}
377-
}
378-
else
379-
{
380-
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
381-
}
382-
var signedBytes = ecdsa.SignHash(dataToSign);
383-
var derBytes = ConvertToECDSAANS1Format(signedBytes);
384-
var signedString = System.Convert.ToBase64String(derBytes);
385-
386-
return signedString;
387-
#else
388352
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
389-
#endif
390353
}
391354

392355
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

samples/client/petstore/csharp/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/HttpSigningConfiguration.cs

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -349,44 +349,7 @@ private string GetRSASignature(byte[] stringToSign)
349349
/// <returns>ECDSA signature</returns>
350350
private string GetECDSASignature(byte[] dataToSign)
351351
{
352-
var keyStr = KeyString;
353-
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
354-
const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
355-
var ecKeyBase64String = keyStr.Replace(ecKeyHeader, "").Replace(ecKeyFooter, "").Trim();
356-
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
357-
var ecdsa = ECDsa.Create();
358-
359-
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
360-
var byteCount = 0;
361-
if (KeyPassPhrase != null)
362-
{
363-
IntPtr unmanagedString = IntPtr.Zero;
364-
try
365-
{
366-
// convert secure string to byte array
367-
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(KeyPassPhrase);
368-
ecdsa.ImportEncryptedPkcs8PrivateKey(Encoding.UTF8.GetBytes(Marshal.PtrToStringUni(unmanagedString)), keyBytes, out byteCount);
369-
}
370-
finally
371-
{
372-
if (unmanagedString != IntPtr.Zero)
373-
{
374-
Marshal.ZeroFreeBSTR(unmanagedString);
375-
}
376-
}
377-
}
378-
else
379-
{
380-
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
381-
}
382-
var signedBytes = ecdsa.SignHash(dataToSign);
383-
var derBytes = ConvertToECDSAANS1Format(signedBytes);
384-
var signedString = System.Convert.ToBase64String(derBytes);
385-
386-
return signedString;
387-
#else
388352
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
389-
#endif
390353
}
391354

392355
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

samples/client/petstore/csharp/OpenAPIClient-net47/src/Org.OpenAPITools/Client/HttpSigningConfiguration.cs

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -349,44 +349,7 @@ private string GetRSASignature(byte[] stringToSign)
349349
/// <returns>ECDSA signature</returns>
350350
private string GetECDSASignature(byte[] dataToSign)
351351
{
352-
var keyStr = KeyString;
353-
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
354-
const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
355-
var ecKeyBase64String = keyStr.Replace(ecKeyHeader, "").Replace(ecKeyFooter, "").Trim();
356-
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
357-
var ecdsa = ECDsa.Create();
358-
359-
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
360-
var byteCount = 0;
361-
if (KeyPassPhrase != null)
362-
{
363-
IntPtr unmanagedString = IntPtr.Zero;
364-
try
365-
{
366-
// convert secure string to byte array
367-
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(KeyPassPhrase);
368-
ecdsa.ImportEncryptedPkcs8PrivateKey(Encoding.UTF8.GetBytes(Marshal.PtrToStringUni(unmanagedString)), keyBytes, out byteCount);
369-
}
370-
finally
371-
{
372-
if (unmanagedString != IntPtr.Zero)
373-
{
374-
Marshal.ZeroFreeBSTR(unmanagedString);
375-
}
376-
}
377-
}
378-
else
379-
{
380-
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
381-
}
382-
var signedBytes = ecdsa.SignHash(dataToSign);
383-
var derBytes = ConvertToECDSAANS1Format(signedBytes);
384-
var signedString = System.Convert.ToBase64String(derBytes);
385-
386-
return signedString;
387-
#else
388352
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
389-
#endif
390353
}
391354

392355
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

samples/client/petstore/csharp/OpenAPIClient-net48/src/Org.OpenAPITools/Client/HttpSigningConfiguration.cs

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -349,44 +349,7 @@ private string GetRSASignature(byte[] stringToSign)
349349
/// <returns>ECDSA signature</returns>
350350
private string GetECDSASignature(byte[] dataToSign)
351351
{
352-
var keyStr = KeyString;
353-
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
354-
const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
355-
var ecKeyBase64String = keyStr.Replace(ecKeyHeader, "").Replace(ecKeyFooter, "").Trim();
356-
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
357-
var ecdsa = ECDsa.Create();
358-
359-
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
360-
var byteCount = 0;
361-
if (KeyPassPhrase != null)
362-
{
363-
IntPtr unmanagedString = IntPtr.Zero;
364-
try
365-
{
366-
// convert secure string to byte array
367-
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(KeyPassPhrase);
368-
ecdsa.ImportEncryptedPkcs8PrivateKey(Encoding.UTF8.GetBytes(Marshal.PtrToStringUni(unmanagedString)), keyBytes, out byteCount);
369-
}
370-
finally
371-
{
372-
if (unmanagedString != IntPtr.Zero)
373-
{
374-
Marshal.ZeroFreeBSTR(unmanagedString);
375-
}
376-
}
377-
}
378-
else
379-
{
380-
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
381-
}
382-
var signedBytes = ecdsa.SignHash(dataToSign);
383-
var derBytes = ConvertToECDSAANS1Format(signedBytes);
384-
var signedString = System.Convert.ToBase64String(derBytes);
385-
386-
return signedString;
387-
#else
388352
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
389-
#endif
390353
}
391354

392355
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

samples/client/petstore/csharp/OpenAPIClient-net5.0/src/Org.OpenAPITools/Client/HttpSigningConfiguration.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -349,14 +349,16 @@ private string GetRSASignature(byte[] stringToSign)
349349
/// <returns>ECDSA signature</returns>
350350
private string GetECDSASignature(byte[] dataToSign)
351351
{
352+
if (!File.Exists(KeyFilePath))
353+
throw new Exception("key file path does not exist.");
354+
352355
var keyStr = KeyString;
353356
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
354357
const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
355358
var ecKeyBase64String = keyStr.Replace(ecKeyHeader, "").Replace(ecKeyFooter, "").Trim();
356359
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
357360
var ecdsa = ECDsa.Create();
358361

359-
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
360362
var byteCount = 0;
361363
if (KeyPassPhrase != null)
362364
{
@@ -376,17 +378,13 @@ private string GetECDSASignature(byte[] dataToSign)
376378
}
377379
}
378380
else
379-
{
380381
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
381-
}
382+
382383
var signedBytes = ecdsa.SignHash(dataToSign);
383384
var derBytes = ConvertToECDSAANS1Format(signedBytes);
384385
var signedString = System.Convert.ToBase64String(derBytes);
385386

386387
return signedString;
387-
#else
388-
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
389-
#endif
390388
}
391389

392390
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

samples/client/petstore/csharp/OpenAPIClient-unityWebRequest/src/Org.OpenAPITools/Client/HttpSigningConfiguration.cs

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -349,44 +349,7 @@ private string GetRSASignature(byte[] stringToSign)
349349
/// <returns>ECDSA signature</returns>
350350
private string GetECDSASignature(byte[] dataToSign)
351351
{
352-
var keyStr = KeyString;
353-
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
354-
const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
355-
var ecKeyBase64String = keyStr.Replace(ecKeyHeader, "").Replace(ecKeyFooter, "").Trim();
356-
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
357-
var ecdsa = ECDsa.Create();
358-
359-
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
360-
var byteCount = 0;
361-
if (KeyPassPhrase != null)
362-
{
363-
IntPtr unmanagedString = IntPtr.Zero;
364-
try
365-
{
366-
// convert secure string to byte array
367-
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(KeyPassPhrase);
368-
ecdsa.ImportEncryptedPkcs8PrivateKey(Encoding.UTF8.GetBytes(Marshal.PtrToStringUni(unmanagedString)), keyBytes, out byteCount);
369-
}
370-
finally
371-
{
372-
if (unmanagedString != IntPtr.Zero)
373-
{
374-
Marshal.ZeroFreeBSTR(unmanagedString);
375-
}
376-
}
377-
}
378-
else
379-
{
380-
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
381-
}
382-
var signedBytes = ecdsa.SignHash(dataToSign);
383-
var derBytes = ConvertToECDSAANS1Format(signedBytes);
384-
var signedString = System.Convert.ToBase64String(derBytes);
385-
386-
return signedString;
387-
#else
388352
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
389-
#endif
390353
}
391354

392355
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

samples/client/petstore/csharp/OpenAPIClient/src/Org.OpenAPITools/Client/HttpSigningConfiguration.cs

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -349,44 +349,7 @@ private string GetRSASignature(byte[] stringToSign)
349349
/// <returns>ECDSA signature</returns>
350350
private string GetECDSASignature(byte[] dataToSign)
351351
{
352-
var keyStr = KeyString;
353-
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
354-
const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
355-
var ecKeyBase64String = keyStr.Replace(ecKeyHeader, "").Replace(ecKeyFooter, "").Trim();
356-
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
357-
var ecdsa = ECDsa.Create();
358-
359-
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
360-
var byteCount = 0;
361-
if (KeyPassPhrase != null)
362-
{
363-
IntPtr unmanagedString = IntPtr.Zero;
364-
try
365-
{
366-
// convert secure string to byte array
367-
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(KeyPassPhrase);
368-
ecdsa.ImportEncryptedPkcs8PrivateKey(Encoding.UTF8.GetBytes(Marshal.PtrToStringUni(unmanagedString)), keyBytes, out byteCount);
369-
}
370-
finally
371-
{
372-
if (unmanagedString != IntPtr.Zero)
373-
{
374-
Marshal.ZeroFreeBSTR(unmanagedString);
375-
}
376-
}
377-
}
378-
else
379-
{
380-
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
381-
}
382-
var signedBytes = ecdsa.SignHash(dataToSign);
383-
var derBytes = ConvertToECDSAANS1Format(signedBytes);
384-
var signedString = System.Convert.ToBase64String(derBytes);
385-
386-
return signedString;
387-
#else
388352
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
389-
#endif
390353
}
391354

392355
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

samples/client/petstore/csharp/OpenAPIClientCore/src/Org.OpenAPITools/Client/HttpSigningConfiguration.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -349,14 +349,16 @@ private string GetRSASignature(byte[] stringToSign)
349349
/// <returns>ECDSA signature</returns>
350350
private string GetECDSASignature(byte[] dataToSign)
351351
{
352+
if (!File.Exists(KeyFilePath))
353+
throw new Exception("key file path does not exist.");
354+
352355
var keyStr = KeyString;
353356
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
354357
const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
355358
var ecKeyBase64String = keyStr.Replace(ecKeyHeader, "").Replace(ecKeyFooter, "").Trim();
356359
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
357360
var ecdsa = ECDsa.Create();
358361

359-
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
360362
var byteCount = 0;
361363
if (KeyPassPhrase != null)
362364
{
@@ -376,17 +378,13 @@ private string GetECDSASignature(byte[] dataToSign)
376378
}
377379
}
378380
else
379-
{
380381
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
381-
}
382+
382383
var signedBytes = ecdsa.SignHash(dataToSign);
383384
var derBytes = ConvertToECDSAANS1Format(signedBytes);
384385
var signedString = System.Convert.ToBase64String(derBytes);
385386

386387
return signedString;
387-
#else
388-
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
389-
#endif
390388
}
391389

392390
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

0 commit comments

Comments
 (0)