@@ -13,19 +13,43 @@ internal sealed class Base64EncodedCertificateLoader : ICredentialLoader
1313
1414 public void LoadIfNeeded ( CredentialDescription credentialDescription )
1515 {
16- credentialDescription . Certificate = LoadFromBase64Encoded (
17- credentialDescription . Base64EncodedValue ! ,
18- CertificateLoaderHelper . DetermineX509KeyStorageFlag ( credentialDescription ) ) ;
16+ _ = credentialDescription ?? throw new ArgumentNullException ( nameof ( credentialDescription ) ) ;
17+
18+ if ( credentialDescription . Certificate != null )
19+ return ;
20+
21+ if ( string . IsNullOrEmpty ( credentialDescription . CertificatePassword ) )
22+ {
23+ credentialDescription . Certificate = LoadFromBase64Encoded (
24+ credentialDescription . Base64EncodedValue ! ,
25+ CertificateLoaderHelper . DetermineX509KeyStorageFlag ( credentialDescription ) ) ;
26+ }
27+ else
28+ {
29+ credentialDescription . Certificate = LoadFromBase64Encoded (
30+ credentialDescription . Base64EncodedValue ! ,
31+ credentialDescription . CertificatePassword ! ,
32+ CertificateLoaderHelper . DetermineX509KeyStorageFlag ( credentialDescription ) ) ;
33+ }
34+
1935 credentialDescription . CachedValue = credentialDescription . Certificate ;
36+
2037 }
2138
2239 internal static X509Certificate2 LoadFromBase64Encoded ( string certificateBase64 , X509KeyStorageFlags x509KeyStorageFlags )
2340 {
24- byte [ ] decoded = Convert . FromBase64String ( certificateBase64 ) ;
2541 return new X509Certificate2 (
26- decoded ,
42+ Convert . FromBase64String ( certificateBase64 ) ,
2743 ( string ? ) null ,
2844 x509KeyStorageFlags ) ;
2945 }
46+
47+ internal static X509Certificate2 LoadFromBase64Encoded ( string certificateBase64 , string password , X509KeyStorageFlags x509KeyStorageFlags )
48+ {
49+ return new X509Certificate2 (
50+ Convert . FromBase64String ( certificateBase64 ) ,
51+ password ,
52+ x509KeyStorageFlags ) ;
53+ }
3054 }
3155}
0 commit comments