Fixed bug in http signing config for C# restsharp (#16129)

This commit is contained in:
William Cheng
2023-07-20 17:04:02 +08:00
committed by GitHub
parent 0d002d381e
commit 35ca486e1c
9 changed files with 16 additions and 239 deletions

View File

@@ -341,6 +341,10 @@ namespace {{packageName}}.Client
/// <returns>ECDSA signature</returns> /// <returns>ECDSA signature</returns>
private string GetECDSASignature(byte[] dataToSign) private string GetECDSASignature(byte[] dataToSign)
{ {
{{#net60OrLater}}
if (!File.Exists(KeyFilePath))
throw new Exception("key file path does not exist.");
var keyStr = KeyString; var keyStr = KeyString;
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----"; const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
const string ecKeyFooter = "-----END EC PRIVATE KEY-----"; const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
@@ -348,7 +352,6 @@ namespace {{packageName}}.Client
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String); var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
var ecdsa = ECDsa.Create(); var ecdsa = ECDsa.Create();
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
var byteCount = 0; var byteCount = 0;
if (KeyPassPhrase != null) if (KeyPassPhrase != null)
{ {
@@ -368,17 +371,17 @@ namespace {{packageName}}.Client
} }
} }
else else
{
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount); ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
}
var signedBytes = ecdsa.SignHash(dataToSign); var signedBytes = ecdsa.SignHash(dataToSign);
var derBytes = ConvertToECDSAANS1Format(signedBytes); var derBytes = ConvertToECDSAANS1Format(signedBytes);
var signedString = System.Convert.ToBase64String(derBytes); var signedString = System.Convert.ToBase64String(derBytes);
return signedString; return signedString;
#else {{/net60OrLater}}
{{^net60OrLater}}
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above"); throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
#endif {{/net60OrLater}}
} }
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes) private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

View File

@@ -349,44 +349,7 @@ namespace Org.OpenAPITools.Client
/// <returns>ECDSA signature</returns> /// <returns>ECDSA signature</returns>
private string GetECDSASignature(byte[] dataToSign) private string GetECDSASignature(byte[] dataToSign)
{ {
var keyStr = KeyString;
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
var ecKeyBase64String = keyStr.Replace(ecKeyHeader, "").Replace(ecKeyFooter, "").Trim();
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
var ecdsa = ECDsa.Create();
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
var byteCount = 0;
if (KeyPassPhrase != null)
{
IntPtr unmanagedString = IntPtr.Zero;
try
{
// convert secure string to byte array
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(KeyPassPhrase);
ecdsa.ImportEncryptedPkcs8PrivateKey(Encoding.UTF8.GetBytes(Marshal.PtrToStringUni(unmanagedString)), keyBytes, out byteCount);
}
finally
{
if (unmanagedString != IntPtr.Zero)
{
Marshal.ZeroFreeBSTR(unmanagedString);
}
}
}
else
{
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
}
var signedBytes = ecdsa.SignHash(dataToSign);
var derBytes = ConvertToECDSAANS1Format(signedBytes);
var signedString = System.Convert.ToBase64String(derBytes);
return signedString;
#else
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above"); throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
#endif
} }
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes) private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

View File

@@ -349,44 +349,7 @@ namespace Org.OpenAPITools.Client
/// <returns>ECDSA signature</returns> /// <returns>ECDSA signature</returns>
private string GetECDSASignature(byte[] dataToSign) private string GetECDSASignature(byte[] dataToSign)
{ {
var keyStr = KeyString;
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
var ecKeyBase64String = keyStr.Replace(ecKeyHeader, "").Replace(ecKeyFooter, "").Trim();
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
var ecdsa = ECDsa.Create();
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
var byteCount = 0;
if (KeyPassPhrase != null)
{
IntPtr unmanagedString = IntPtr.Zero;
try
{
// convert secure string to byte array
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(KeyPassPhrase);
ecdsa.ImportEncryptedPkcs8PrivateKey(Encoding.UTF8.GetBytes(Marshal.PtrToStringUni(unmanagedString)), keyBytes, out byteCount);
}
finally
{
if (unmanagedString != IntPtr.Zero)
{
Marshal.ZeroFreeBSTR(unmanagedString);
}
}
}
else
{
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
}
var signedBytes = ecdsa.SignHash(dataToSign);
var derBytes = ConvertToECDSAANS1Format(signedBytes);
var signedString = System.Convert.ToBase64String(derBytes);
return signedString;
#else
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above"); throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
#endif
} }
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes) private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

View File

@@ -349,44 +349,7 @@ namespace Org.OpenAPITools.Client
/// <returns>ECDSA signature</returns> /// <returns>ECDSA signature</returns>
private string GetECDSASignature(byte[] dataToSign) private string GetECDSASignature(byte[] dataToSign)
{ {
var keyStr = KeyString;
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
var ecKeyBase64String = keyStr.Replace(ecKeyHeader, "").Replace(ecKeyFooter, "").Trim();
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
var ecdsa = ECDsa.Create();
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
var byteCount = 0;
if (KeyPassPhrase != null)
{
IntPtr unmanagedString = IntPtr.Zero;
try
{
// convert secure string to byte array
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(KeyPassPhrase);
ecdsa.ImportEncryptedPkcs8PrivateKey(Encoding.UTF8.GetBytes(Marshal.PtrToStringUni(unmanagedString)), keyBytes, out byteCount);
}
finally
{
if (unmanagedString != IntPtr.Zero)
{
Marshal.ZeroFreeBSTR(unmanagedString);
}
}
}
else
{
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
}
var signedBytes = ecdsa.SignHash(dataToSign);
var derBytes = ConvertToECDSAANS1Format(signedBytes);
var signedString = System.Convert.ToBase64String(derBytes);
return signedString;
#else
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above"); throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
#endif
} }
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes) private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

View File

@@ -349,44 +349,7 @@ namespace Org.OpenAPITools.Client
/// <returns>ECDSA signature</returns> /// <returns>ECDSA signature</returns>
private string GetECDSASignature(byte[] dataToSign) private string GetECDSASignature(byte[] dataToSign)
{ {
var keyStr = KeyString;
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
var ecKeyBase64String = keyStr.Replace(ecKeyHeader, "").Replace(ecKeyFooter, "").Trim();
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
var ecdsa = ECDsa.Create();
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
var byteCount = 0;
if (KeyPassPhrase != null)
{
IntPtr unmanagedString = IntPtr.Zero;
try
{
// convert secure string to byte array
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(KeyPassPhrase);
ecdsa.ImportEncryptedPkcs8PrivateKey(Encoding.UTF8.GetBytes(Marshal.PtrToStringUni(unmanagedString)), keyBytes, out byteCount);
}
finally
{
if (unmanagedString != IntPtr.Zero)
{
Marshal.ZeroFreeBSTR(unmanagedString);
}
}
}
else
{
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
}
var signedBytes = ecdsa.SignHash(dataToSign);
var derBytes = ConvertToECDSAANS1Format(signedBytes);
var signedString = System.Convert.ToBase64String(derBytes);
return signedString;
#else
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above"); throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
#endif
} }
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes) private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

View File

@@ -349,6 +349,9 @@ namespace Org.OpenAPITools.Client
/// <returns>ECDSA signature</returns> /// <returns>ECDSA signature</returns>
private string GetECDSASignature(byte[] dataToSign) private string GetECDSASignature(byte[] dataToSign)
{ {
if (!File.Exists(KeyFilePath))
throw new Exception("key file path does not exist.");
var keyStr = KeyString; var keyStr = KeyString;
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----"; const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
const string ecKeyFooter = "-----END EC PRIVATE KEY-----"; const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
@@ -356,7 +359,6 @@ namespace Org.OpenAPITools.Client
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String); var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
var ecdsa = ECDsa.Create(); var ecdsa = ECDsa.Create();
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
var byteCount = 0; var byteCount = 0;
if (KeyPassPhrase != null) if (KeyPassPhrase != null)
{ {
@@ -376,17 +378,13 @@ namespace Org.OpenAPITools.Client
} }
} }
else else
{
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount); ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
}
var signedBytes = ecdsa.SignHash(dataToSign); var signedBytes = ecdsa.SignHash(dataToSign);
var derBytes = ConvertToECDSAANS1Format(signedBytes); var derBytes = ConvertToECDSAANS1Format(signedBytes);
var signedString = System.Convert.ToBase64String(derBytes); var signedString = System.Convert.ToBase64String(derBytes);
return signedString; return signedString;
#else
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
#endif
} }
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes) private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

View File

@@ -349,44 +349,7 @@ namespace Org.OpenAPITools.Client
/// <returns>ECDSA signature</returns> /// <returns>ECDSA signature</returns>
private string GetECDSASignature(byte[] dataToSign) private string GetECDSASignature(byte[] dataToSign)
{ {
var keyStr = KeyString;
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
var ecKeyBase64String = keyStr.Replace(ecKeyHeader, "").Replace(ecKeyFooter, "").Trim();
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
var ecdsa = ECDsa.Create();
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
var byteCount = 0;
if (KeyPassPhrase != null)
{
IntPtr unmanagedString = IntPtr.Zero;
try
{
// convert secure string to byte array
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(KeyPassPhrase);
ecdsa.ImportEncryptedPkcs8PrivateKey(Encoding.UTF8.GetBytes(Marshal.PtrToStringUni(unmanagedString)), keyBytes, out byteCount);
}
finally
{
if (unmanagedString != IntPtr.Zero)
{
Marshal.ZeroFreeBSTR(unmanagedString);
}
}
}
else
{
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
}
var signedBytes = ecdsa.SignHash(dataToSign);
var derBytes = ConvertToECDSAANS1Format(signedBytes);
var signedString = System.Convert.ToBase64String(derBytes);
return signedString;
#else
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above"); throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
#endif
} }
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes) private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

View File

@@ -349,44 +349,7 @@ namespace Org.OpenAPITools.Client
/// <returns>ECDSA signature</returns> /// <returns>ECDSA signature</returns>
private string GetECDSASignature(byte[] dataToSign) private string GetECDSASignature(byte[] dataToSign)
{ {
var keyStr = KeyString;
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
var ecKeyBase64String = keyStr.Replace(ecKeyHeader, "").Replace(ecKeyFooter, "").Trim();
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
var ecdsa = ECDsa.Create();
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
var byteCount = 0;
if (KeyPassPhrase != null)
{
IntPtr unmanagedString = IntPtr.Zero;
try
{
// convert secure string to byte array
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(KeyPassPhrase);
ecdsa.ImportEncryptedPkcs8PrivateKey(Encoding.UTF8.GetBytes(Marshal.PtrToStringUni(unmanagedString)), keyBytes, out byteCount);
}
finally
{
if (unmanagedString != IntPtr.Zero)
{
Marshal.ZeroFreeBSTR(unmanagedString);
}
}
}
else
{
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
}
var signedBytes = ecdsa.SignHash(dataToSign);
var derBytes = ConvertToECDSAANS1Format(signedBytes);
var signedString = System.Convert.ToBase64String(derBytes);
return signedString;
#else
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above"); throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
#endif
} }
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes) private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)

View File

@@ -349,6 +349,9 @@ namespace Org.OpenAPITools.Client
/// <returns>ECDSA signature</returns> /// <returns>ECDSA signature</returns>
private string GetECDSASignature(byte[] dataToSign) private string GetECDSASignature(byte[] dataToSign)
{ {
if (!File.Exists(KeyFilePath))
throw new Exception("key file path does not exist.");
var keyStr = KeyString; var keyStr = KeyString;
const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----"; const string ecKeyHeader = "-----BEGIN EC PRIVATE KEY-----";
const string ecKeyFooter = "-----END EC PRIVATE KEY-----"; const string ecKeyFooter = "-----END EC PRIVATE KEY-----";
@@ -356,7 +359,6 @@ namespace Org.OpenAPITools.Client
var keyBytes = System.Convert.FromBase64String(ecKeyBase64String); var keyBytes = System.Convert.FromBase64String(ecKeyBase64String);
var ecdsa = ECDsa.Create(); var ecdsa = ECDsa.Create();
#if (NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0)
var byteCount = 0; var byteCount = 0;
if (KeyPassPhrase != null) if (KeyPassPhrase != null)
{ {
@@ -376,17 +378,13 @@ namespace Org.OpenAPITools.Client
} }
} }
else else
{
ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount); ecdsa.ImportPkcs8PrivateKey(keyBytes, out byteCount);
}
var signedBytes = ecdsa.SignHash(dataToSign); var signedBytes = ecdsa.SignHash(dataToSign);
var derBytes = ConvertToECDSAANS1Format(signedBytes); var derBytes = ConvertToECDSAANS1Format(signedBytes);
var signedString = System.Convert.ToBase64String(derBytes); var signedString = System.Convert.ToBase64String(derBytes);
return signedString; return signedString;
#else
throw new Exception("ECDSA signing is supported only on NETCOREAPP3_0 and above");
#endif
} }
private byte[] ConvertToECDSAANS1Format(byte[] signedBytes) private byte[] ConvertToECDSAANS1Format(byte[] signedBytes)