@@ -18,6 +18,8 @@ public class CryptoProviderFactory
18
18
private static readonly ConcurrentDictionary < string , string > _typeToAlgorithmMap = new ConcurrentDictionary < string , string > ( ) ;
19
19
private static readonly object _cacheLock = new object ( ) ;
20
20
private static int _defaultSignatureProviderObjectPoolCacheSize = Environment . ProcessorCount * 4 ;
21
+ private static string _typeofAsymmetricSignatureProvider = typeof ( AsymmetricSignatureProvider ) . ToString ( ) ;
22
+ private static string _typeofSymmetricSignatureProvider = typeof ( SymmetricSignatureProvider ) . ToString ( ) ;
21
23
private int _signatureProviderObjectPoolCacheSize = _defaultSignatureProviderObjectPoolCacheSize ;
22
24
23
25
/// <summary>
@@ -513,7 +515,13 @@ private SignatureProvider CreateSignatureProvider(SecurityKey key, string algori
513
515
{
514
516
signatureProvider = CustomCryptoProvider . Create ( algorithm , key , willCreateSignatures ) as SignatureProvider ;
515
517
if ( signatureProvider == null )
516
- throw LogHelper . LogExceptionMessage ( new InvalidOperationException ( LogHelper . FormatInvariant ( LogMessages . IDX10646 , LogHelper . MarkAsNonPII ( algorithm ) , key , LogHelper . MarkAsNonPII ( typeof ( SignatureProvider ) ) ) ) ) ;
518
+ throw LogHelper . LogExceptionMessage (
519
+ new InvalidOperationException (
520
+ LogHelper . FormatInvariant (
521
+ LogMessages . IDX10646 ,
522
+ LogHelper . MarkAsNonPII ( algorithm ) ,
523
+ key ,
524
+ LogHelper . MarkAsNonPII ( typeof ( SignatureProvider ) ) ) ) ) ;
517
525
518
526
return signatureProvider ;
519
527
}
@@ -523,7 +531,7 @@ private SignatureProvider CreateSignatureProvider(SecurityKey key, string algori
523
531
bool createAsymmetric = true ;
524
532
if ( key is AsymmetricSecurityKey )
525
533
{
526
- typeofSignatureProvider = typeof ( AsymmetricSignatureProvider ) . ToString ( ) ;
534
+ typeofSignatureProvider = _typeofAsymmetricSignatureProvider ;
527
535
}
528
536
else if ( key is JsonWebKey jsonWebKey )
529
537
{
@@ -533,22 +541,22 @@ private SignatureProvider CreateSignatureProvider(SecurityKey key, string algori
533
541
{
534
542
if ( convertedSecurityKey is AsymmetricSecurityKey )
535
543
{
536
- typeofSignatureProvider = typeof ( AsymmetricSignatureProvider ) . ToString ( ) ;
544
+ typeofSignatureProvider = _typeofAsymmetricSignatureProvider ;
537
545
}
538
546
else if ( convertedSecurityKey is SymmetricSecurityKey )
539
547
{
540
- typeofSignatureProvider = typeof ( SymmetricSignatureProvider ) . ToString ( ) ;
548
+ typeofSignatureProvider = _typeofSymmetricSignatureProvider ;
541
549
createAsymmetric = false ;
542
550
}
543
551
}
544
552
// this code is simply to maintain the same exception thrown
545
553
else
546
554
{
547
555
if ( jsonWebKey . Kty == JsonWebAlgorithmsKeyTypes . RSA || jsonWebKey . Kty == JsonWebAlgorithmsKeyTypes . EllipticCurve )
548
- typeofSignatureProvider = typeof ( AsymmetricSignatureProvider ) . ToString ( ) ;
556
+ typeofSignatureProvider = _typeofAsymmetricSignatureProvider ;
549
557
else if ( jsonWebKey . Kty == JsonWebAlgorithmsKeyTypes . Octet )
550
558
{
551
- typeofSignatureProvider = typeof ( SymmetricSignatureProvider ) . ToString ( ) ;
559
+ typeofSignatureProvider = _typeofSymmetricSignatureProvider ;
552
560
createAsymmetric = false ;
553
561
}
554
562
}
@@ -560,12 +568,20 @@ private SignatureProvider CreateSignatureProvider(SecurityKey key, string algori
560
568
}
561
569
else if ( key is SymmetricSecurityKey )
562
570
{
563
- typeofSignatureProvider = typeof ( SymmetricSignatureProvider ) . ToString ( ) ;
571
+ typeofSignatureProvider = _typeofSymmetricSignatureProvider ;
564
572
createAsymmetric = false ;
565
573
}
566
574
567
575
if ( typeofSignatureProvider == null )
568
- throw LogHelper . LogExceptionMessage ( new NotSupportedException ( LogHelper . FormatInvariant ( LogMessages . IDX10621 , LogHelper . MarkAsNonPII ( typeof ( SymmetricSignatureProvider ) ) , LogHelper . MarkAsNonPII ( typeof ( SecurityKey ) ) , LogHelper . MarkAsNonPII ( typeof ( AsymmetricSecurityKey ) ) , LogHelper . MarkAsNonPII ( typeof ( SymmetricSecurityKey ) ) , LogHelper . MarkAsNonPII ( key . GetType ( ) ) ) ) ) ;
576
+ throw LogHelper . LogExceptionMessage (
577
+ new NotSupportedException (
578
+ LogHelper . FormatInvariant (
579
+ LogMessages . IDX10621 ,
580
+ LogHelper . MarkAsNonPII ( typeof ( SymmetricSignatureProvider ) ) ,
581
+ LogHelper . MarkAsNonPII ( typeof ( SecurityKey ) ) ,
582
+ LogHelper . MarkAsNonPII ( typeof ( AsymmetricSecurityKey ) ) ,
583
+ LogHelper . MarkAsNonPII ( typeof ( SymmetricSecurityKey ) ) ,
584
+ LogHelper . MarkAsNonPII ( key . GetType ( ) ) ) ) ) ;
569
585
570
586
if ( CacheSignatureProviders && cacheProvider )
571
587
{
@@ -592,7 +608,7 @@ private SignatureProvider CreateSignatureProvider(SecurityKey key, string algori
592
608
signatureProvider = new SymmetricSignatureProvider ( key , algorithm , willCreateSignatures ) ;
593
609
594
610
if ( ShouldCacheSignatureProvider ( signatureProvider ) )
595
- CryptoProviderCache . TryAdd ( signatureProvider ) ;
611
+ signatureProvider . IsCached = CryptoProviderCache . TryAdd ( signatureProvider ) ;
596
612
}
597
613
}
598
614
else
@@ -737,7 +753,7 @@ public virtual void ReleaseSignatureProvider(SignatureProvider signatureProvider
737
753
signatureProvider . Release ( ) ;
738
754
if ( CustomCryptoProvider != null && CustomCryptoProvider . IsSupportedAlgorithm ( signatureProvider . Algorithm ) )
739
755
CustomCryptoProvider . Release ( signatureProvider ) ;
740
- else if ( signatureProvider . CryptoProviderCache == null && signatureProvider . RefCount == 0 )
756
+ else if ( signatureProvider . CryptoProviderCache == null && signatureProvider . RefCount == 0 && ! signatureProvider . IsCached )
741
757
signatureProvider . Dispose ( ) ;
742
758
}
743
759
}
0 commit comments