internal static unsafe SecurityCredentials CreateFromNative(NativeTypes.FABRIC_SECURITY_CREDENTIALS *nativeCredentials) { SecurityCredentials managedCredentials = null; switch (nativeCredentials->Kind) { case NativeTypes.FABRIC_SECURITY_CREDENTIAL_KIND.FABRIC_SECURITY_CREDENTIAL_KIND_CLAIMS: managedCredentials = ClaimsCredentials.CreateFromNative((NativeTypes.FABRIC_CLAIMS_CREDENTIALS *)nativeCredentials->Value); break; case NativeTypes.FABRIC_SECURITY_CREDENTIAL_KIND.FABRIC_SECURITY_CREDENTIAL_KIND_WINDOWS: managedCredentials = WindowsCredentials.CreateFromNative((NativeTypes.FABRIC_WINDOWS_CREDENTIALS *)nativeCredentials->Value); break; case NativeTypes.FABRIC_SECURITY_CREDENTIAL_KIND.FABRIC_SECURITY_CREDENTIAL_KIND_X509: managedCredentials = X509Credentials.CreateFromNative((NativeTypes.FABRIC_X509_CREDENTIALS *)nativeCredentials->Value); break; case NativeTypes.FABRIC_SECURITY_CREDENTIAL_KIND.FABRIC_SECURITY_CREDENTIAL_KIND_NONE: managedCredentials = NoneSecurityCredentials.CreateFromNative(); break; default: AppTrace.TraceSource.WriteError("SecurityCredentials.FromNative", "Unknown credential type: {0}", nativeCredentials->Kind); ReleaseAssert.Failfast("Unknown credential type: {0}", nativeCredentials->Kind); break; } return(managedCredentials); }
internal static unsafe X509Credentials CreateFromNative(NativeTypes.FABRIC_X509_CREDENTIALS *nativeCredentials) { X509Credentials managedCredentials = new X509Credentials(); managedCredentials.FindType = CreateFromNative(nativeCredentials->FindType); // The only supported find values are currently of type string managedCredentials.FindValue = NativeTypes.FromNativeString(nativeCredentials->FindValue); managedCredentials.ProtectionLevel = CreateFromNative(nativeCredentials->ProtectionLevel); managedCredentials.StoreLocation = CreateFromNative(nativeCredentials->StoreLocation); managedCredentials.StoreName = NativeTypes.FromNativeString(nativeCredentials->StoreName); Requires.Argument <object>("StoreName", managedCredentials.StoreName).NotNullOrEmpty(); var remoteCommonNames = new ItemList <string>(); for (int i = 0; i < nativeCredentials->RemoteCommonNameCount; i++) { IntPtr location = nativeCredentials->RemoteCommonNames + (i * IntPtr.Size); IntPtr value = *((IntPtr *)location); remoteCommonNames.Add(NativeTypes.FromNativeString(value)); } managedCredentials.RemoteCommonNames = remoteCommonNames; if (nativeCredentials->Reserved == IntPtr.Zero) { return(managedCredentials); } NativeTypes.FABRIC_X509_CREDENTIALS_EX1 *x509Ex1 = (NativeTypes.FABRIC_X509_CREDENTIALS_EX1 *)(nativeCredentials->Reserved); var issuerThumbprints = new ItemList <string>(); for (int i = 0; i < x509Ex1->IssuerThumbprintCount; i++) { IntPtr location = x509Ex1->IssuerThumbprints + (i * IntPtr.Size); IntPtr value = *((IntPtr *)location); issuerThumbprints.Add(NativeTypes.FromNativeString(value)); } managedCredentials.IssuerThumbprints = issuerThumbprints; if (x509Ex1->Reserved == IntPtr.Zero) { return(managedCredentials); } NativeTypes.FABRIC_X509_CREDENTIALS_EX2 *x509Ex2 = (NativeTypes.FABRIC_X509_CREDENTIALS_EX2 *)(x509Ex1->Reserved); var remoteCertThumbprints = new ItemList <string>(); for (int i = 0; i < x509Ex2->RemoteCertThumbprintCount; ++i) { IntPtr location = x509Ex2->RemoteCertThumbprints + (i * IntPtr.Size); IntPtr value = *((IntPtr *)location); remoteCertThumbprints.Add(NativeTypes.FromNativeString(value)); } managedCredentials.RemoteCertThumbprints = remoteCertThumbprints; NativeTypes.FABRIC_X509_NAME *x509Names = (NativeTypes.FABRIC_X509_NAME *)(x509Ex2->RemoteX509Names); for (int i = 0; i < x509Ex2->RemoteX509NameCount; ++i) { managedCredentials.RemoteX509Names.Add(new X509Name( NativeTypes.FromNativeString(x509Names[i].Name), NativeTypes.FromNativeString(x509Names[i].IssuerCertThumbprint))); } managedCredentials.FindValueSecondary = NativeTypes.FromNativeString(x509Ex2->FindValueSecondary); if (x509Ex2->Reserved == IntPtr.Zero) { return(managedCredentials); } NativeTypes.FABRIC_X509_CREDENTIALS_EX3 *x509Ex3 = (NativeTypes.FABRIC_X509_CREDENTIALS_EX3 *)(x509Ex2->Reserved); NativeTypes.FABRIC_X509_ISSUER_NAME * x509Issuers = (NativeTypes.FABRIC_X509_ISSUER_NAME *)(x509Ex3->RemoteCertIssuers); for (int i = 0; i < x509Ex3->RemoteCertIssuerCount; ++i) { var issuerStores = new ItemList <string>(); for (int j = 0; j < x509Issuers[i].IssuerStoreCount; ++j) { IntPtr location = x509Issuers[i].IssuerStores + (j * IntPtr.Size); IntPtr value = *((IntPtr *)location); issuerStores.Add(NativeTypes.FromNativeString(value)); } managedCredentials.RemoteCertIssuers.Add(new X509IssuerStore( NativeTypes.FromNativeString(x509Issuers[i].Name), issuerStores)); } return(managedCredentials); }
internal NativeX509CredentialConverter(X509Credentials x509Credentials) { this.x509Credentials = x509Credentials; }