internal static string FindOidInfo(uint keyType, string keyValue, System.Security.Cryptography.OidGroup oidGroup) { if (keyValue == null) { throw new ArgumentNullException("keyValue"); } if (keyValue.Length == 0) { return(null); } #if MONO switch (keyType) { case CAPI.CRYPT_OID_INFO_OID_KEY: return(CAPI.CryptFindOIDInfoNameFromKey(keyValue, oidGroup)); case CAPI.CRYPT_OID_INFO_NAME_KEY: return(CAPI.CryptFindOIDInfoKeyFromName(keyValue, oidGroup)); default: throw new NotImplementedException(keyType.ToString()); } #else SafeLocalAllocHandle pvKey = SafeLocalAllocHandle.InvalidHandle; try { switch (keyType) { case CAPI.CRYPT_OID_INFO_OID_KEY: pvKey = StringToAnsiPtr(keyValue); break; case CAPI.CRYPT_OID_INFO_NAME_KEY: pvKey = StringToUniPtr(keyValue); break; default: Debug.Assert(false); break; } CAPI.CRYPT_OID_INFO pOidInfo = CAPI.CryptFindOIDInfo(keyType, pvKey, oidGroup); if (keyType == CAPI.CRYPT_OID_INFO_OID_KEY) { return(pOidInfo.pwszName); } else { return(pOidInfo.pszOID); } } finally { pvKey.Dispose(); } #endif }