From 868a73e5970ef3c1fdf8e3ef252f75511c078d56 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Fri, 17 Aug 2018 10:37:54 -0700 Subject: [PATCH 1/7] Added appveyor conf --- appveyor.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 appveyor.yml diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 00000000..585f6be4 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,28 @@ +version: '1.0.{build}' +image: Visual Studio 2017 +branches: + only: + - master +init: + # Good practise, because Windows line endings are different from Unix/Linux ones + - cmd: git config --global core.autocrlf true +install: + # Install repo specific stuff here +before_build: + # Display .NET Core version + - cmd: dotnet --version + # Display minimal restore text + - cmd: dotnet restore FirebaseAdmin/FirebaseAdmin.sln --verbosity m +build_script: + # output will be in ./src/bin/debug/netcoreapp1.1/publish + - cmd: dotnet build FirebaseAdmin/FirebaseAdmin + - cmd: dotnet build FirebaseAdmin/FirebaseAdmin.Snippets +after_build: + # For once the build has completed +clone_depth: 1 +test_script: + # restore packages for our unit tests + - cmd: dotnet test FirebaseAdmin/FirebaseAdmin.Tests +on_finish : + # any cleanup in here +deploy: off \ No newline at end of file From d53d2ce61384ff67441bd4d7b7af8ebe385d2555 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Fri, 17 Aug 2018 10:38:31 -0700 Subject: [PATCH 2/7] Enabling all branches --- appveyor.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 585f6be4..bf5a7b56 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,8 +1,5 @@ version: '1.0.{build}' image: Visual Studio 2017 -branches: - only: - - master init: # Good practise, because Windows line endings are different from Unix/Linux ones - cmd: git config --global core.autocrlf true From ad0d8033d861413f48c35952d6ddacb3d94d6782 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Fri, 17 Aug 2018 11:25:36 -0700 Subject: [PATCH 3/7] Fixing for .NET 4.5 --- .../Auth/FirebaseTokenVerifier.cs | 16 ++++++++++++++-- .../FirebaseAdmin/Auth/HttpPublicKeySource.cs | 18 ++++++++++++++++-- FirebaseAdmin/FirebaseAdmin/Auth/PublicKey.cs | 12 +++++++++--- 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/FirebaseAdmin/FirebaseAdmin/Auth/FirebaseTokenVerifier.cs b/FirebaseAdmin/FirebaseAdmin/Auth/FirebaseTokenVerifier.cs index 4e0c55d1..210b8767 100644 --- a/FirebaseAdmin/FirebaseAdmin/Auth/FirebaseTokenVerifier.cs +++ b/FirebaseAdmin/FirebaseAdmin/Auth/FirebaseTokenVerifier.cs @@ -40,6 +40,9 @@ internal sealed class FirebaseTokenVerifier private static readonly IReadOnlyList StandardClaims = ImmutableList.Create("iss", "aud", "exp", "iat", "sub", "uid"); + // See http://oid-info.com/get/2.16.840.1.101.3.4.2.1 + private const string Sha256Oid = "2.16.840.1.101.3.4.2.1"; + public string ProjectId { get; } private readonly string _shortName; private readonly string _articledShortName; @@ -172,8 +175,17 @@ private async Task VerifySignatureAsync( var keys = await _keySource.GetPublicKeysAsync(cancellationToken) .ConfigureAwait(false); var verified = keys.Any(key => - key.Id == keyId && key.RSA.VerifyHash( - hash, signature, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1)); + { +#if NETSTANDARD1_5 || NETSTANDARD2_0 + return key.Id == keyId && key.RSA.VerifyHash( + hash, signature, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); +#elif NET45 + return key.Id == keyId && + ((RSACryptoServiceProvider) key.RSA).VerifyHash(hash, Sha256Oid, signature); +#else +#error Unsupported target +#endif + }); if (!verified) { throw new FirebaseException($"Failed to verify {_shortName} signature."); diff --git a/FirebaseAdmin/FirebaseAdmin/Auth/HttpPublicKeySource.cs b/FirebaseAdmin/FirebaseAdmin/Auth/HttpPublicKeySource.cs index 1d1f77a3..21cc1836 100644 --- a/FirebaseAdmin/FirebaseAdmin/Auth/HttpPublicKeySource.cs +++ b/FirebaseAdmin/FirebaseAdmin/Auth/HttpPublicKeySource.cs @@ -17,7 +17,6 @@ using System.Collections.Immutable; using System.IO; using System.Net.Http; -using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading; @@ -26,6 +25,14 @@ using Google.Apis.Http; using Google.Apis.Util; +#if NETSTANDARD1_5 || NETSTANDARD2_0 +using RsaKey = System.Security.Cryptography.RSA; +#elif NET45 +using RsaKey = System.Security.Cryptography.RSACryptoServiceProvider; +#else +#error Unsupported target +#endif + namespace FirebaseAdmin.Auth { /// @@ -104,7 +111,14 @@ private IReadOnlyList ParseKeys(string json) foreach (var entry in rawKeys) { var x509cert = new X509Certificate2(Encoding.UTF8.GetBytes(entry.Value)); - var rsa = x509cert.GetRSAPublicKey(); + RsaKey rsa; +#if NETSTANDARD1_5 || NETSTANDARD2_0 + rsa = x509cert.GetRSAPublicKey(); +#elif NET45 + rsa = x509cert.PublicKey.Key; +#else +#error Unsupported target +#endif builder.Add(new PublicKey(entry.Key, rsa)); } return builder.ToImmutableList(); diff --git a/FirebaseAdmin/FirebaseAdmin/Auth/PublicKey.cs b/FirebaseAdmin/FirebaseAdmin/Auth/PublicKey.cs index d6639765..158d7e0f 100644 --- a/FirebaseAdmin/FirebaseAdmin/Auth/PublicKey.cs +++ b/FirebaseAdmin/FirebaseAdmin/Auth/PublicKey.cs @@ -12,7 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -using System.Security.Cryptography; +#if NETSTANDARD1_5 || NETSTANDARD2_0 +using RsaKey = System.Security.Cryptography.RSA; +#elif NET45 +using RsaKey = System.Security.Cryptography.RSACryptoServiceProvider; +#else +#error Unsupported target +#endif namespace FirebaseAdmin.Auth { @@ -30,9 +36,9 @@ internal sealed class PublicKey /// A instance containing the contents of /// the public key. /// - public RSA RSA { get; } + public RsaKey RSA { get; } - public PublicKey(string keyId, RSA rsa) + public PublicKey(string keyId, RsaKey rsa) { Id = keyId; RSA = rsa; From 5aeb3f081f407e3f62ec2eed393415e5bc95fea1 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Fri, 17 Aug 2018 11:28:21 -0700 Subject: [PATCH 4/7] Adding missing cast --- FirebaseAdmin/FirebaseAdmin/Auth/HttpPublicKeySource.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FirebaseAdmin/FirebaseAdmin/Auth/HttpPublicKeySource.cs b/FirebaseAdmin/FirebaseAdmin/Auth/HttpPublicKeySource.cs index 21cc1836..efba05fe 100644 --- a/FirebaseAdmin/FirebaseAdmin/Auth/HttpPublicKeySource.cs +++ b/FirebaseAdmin/FirebaseAdmin/Auth/HttpPublicKeySource.cs @@ -115,7 +115,7 @@ private IReadOnlyList ParseKeys(string json) #if NETSTANDARD1_5 || NETSTANDARD2_0 rsa = x509cert.GetRSAPublicKey(); #elif NET45 - rsa = x509cert.PublicKey.Key; + rsa = (RSACryptoServiceProvider) x509cert.PublicKey.Key; #else #error Unsupported target #endif From 2e9c8343857333bc8e6810105f3fd026ba3177b8 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Fri, 17 Aug 2018 11:30:23 -0700 Subject: [PATCH 5/7] Adding missing using decl --- FirebaseAdmin/FirebaseAdmin/Auth/HttpPublicKeySource.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/FirebaseAdmin/FirebaseAdmin/Auth/HttpPublicKeySource.cs b/FirebaseAdmin/FirebaseAdmin/Auth/HttpPublicKeySource.cs index efba05fe..4ddd0abf 100644 --- a/FirebaseAdmin/FirebaseAdmin/Auth/HttpPublicKeySource.cs +++ b/FirebaseAdmin/FirebaseAdmin/Auth/HttpPublicKeySource.cs @@ -17,6 +17,7 @@ using System.Collections.Immutable; using System.IO; using System.Net.Http; +using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading; From 8327cb2525d425f104aea373c0a9cb39f6910b3d Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Fri, 17 Aug 2018 11:35:00 -0700 Subject: [PATCH 6/7] Enabling Ubuntu build --- appveyor.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index bf5a7b56..412587a8 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,5 +1,7 @@ version: '1.0.{build}' -image: Visual Studio 2017 +image: + - Visual Studio 2017 + - Ubuntu init: # Good practise, because Windows line endings are different from Unix/Linux ones - cmd: git config --global core.autocrlf true @@ -11,14 +13,11 @@ before_build: # Display minimal restore text - cmd: dotnet restore FirebaseAdmin/FirebaseAdmin.sln --verbosity m build_script: - # output will be in ./src/bin/debug/netcoreapp1.1/publish - - cmd: dotnet build FirebaseAdmin/FirebaseAdmin - - cmd: dotnet build FirebaseAdmin/FirebaseAdmin.Snippets + - cmd: dotnet build FirebaseAdmin after_build: # For once the build has completed clone_depth: 1 test_script: - # restore packages for our unit tests - cmd: dotnet test FirebaseAdmin/FirebaseAdmin.Tests on_finish : # any cleanup in here From 3f343a5c57effa6e959defbc9f3e1ac39a9f1e09 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Fri, 17 Aug 2018 11:52:58 -0700 Subject: [PATCH 7/7] Trying this again --- appveyor.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 412587a8..a98bb516 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -9,16 +9,16 @@ install: # Install repo specific stuff here before_build: # Display .NET Core version - - cmd: dotnet --version + - dotnet --version # Display minimal restore text - - cmd: dotnet restore FirebaseAdmin/FirebaseAdmin.sln --verbosity m + - dotnet restore FirebaseAdmin/FirebaseAdmin.sln --verbosity m build_script: - - cmd: dotnet build FirebaseAdmin + - dotnet build FirebaseAdmin after_build: # For once the build has completed clone_depth: 1 test_script: - - cmd: dotnet test FirebaseAdmin/FirebaseAdmin.Tests + - dotnet test FirebaseAdmin/FirebaseAdmin.Tests on_finish : # any cleanup in here deploy: off \ No newline at end of file