49 if (!
value || !value_len)
70 TRACE(
"(%ld, %p, %p, %ld)\n", dwValueType,
pValue, psz, csz);
85 if (!psz || !csz)
ret =
len;
86 else if (
len < csz || partial_copy)
99 else if (
len < csz || partial_copy)
110 FIXME(
"string type %ld unimplemented\n", dwValueType);
112 if (psz && csz) psz[
ret] = 0;
153 TRACE(
"(%ld, %p, %p, %ld)\n", dwValueType,
pValue, psz, csz);
196 pValue->pbData[
i] ==
'"' &&
ptr - psz < csz - 1)
199 if (needsQuotes &&
ptr - psz < csz)
213 for (
i = 0;
i < strLen;
i++)
231 for (
i = 0;
i < strLen &&
ptr - psz < csz;
ptr++,
i++)
238 if (needsQuotes &&
ptr - psz < csz)
244 FIXME(
"string type %ld unimplemented\n", dwValueType);
255 TRACE(
"(%ld, %p, %08lx, %p, %ld)\n", encoding_type, name_blob, str_type,
str,
str_len);
301 for (
i = 0;
i < chars;
i++)
303 *(psz + chars) =
'=';
326 *(psz + chars) =
'=';
345 if (dwStrType & unsupportedFlags)
346 FIXME(
"unsupported flags: %08lx\n", dwStrType & unsupportedFlags);
371 if (!csz) psz =
NULL;
372 for (
i = 0;
i <
info->cRDN;
i++)
374 if (psz &&
ret + 1 == csz)
break;
380 if (psz &&
ret + 1 == csz)
break;
400 for (
k = 0;
k < indentLevel;
k++)
411 if (psz &&
ret + 1 == csz)
break;
417 psz ? psz +
ret :
NULL, psz ? csz -
ret - 1 : 0);
424 psz ? psz +
ret :
NULL, psz ? csz -
ret - 1 : 0);
427 if (psz &&
ret + 1 == csz)
break;
430 psz ? psz +
ret :
NULL, psz ? csz -
ret - 1 : 0);
432 if (j < rdn->cRDNAttr - 1)
436 chars =
min(rdnSepLen, csz -
ret - 1);
440 else ret += rdnSepLen;
443 if (psz &&
ret + 1 == csz)
break;
444 if (i < info->cRDN - 1)
448 chars =
min(sepLen, csz -
ret - 1);
459 if (psz && csz) psz[
ret] = 0;
468 TRACE(
"(%ld, %p, %08lx, %p, %ld)\n", dwCertEncodingType,
pName, dwStrType,
484 TRACE(
"(%08lx, %s, %08lx, %p, %p, %p, %p)\n", dwCertEncodingType,
505 *ppszError = pszX500;
506 for (
i = 0;
i < errorStr - x500;
i++)
524 *ppszError = pszX500;
589 *ppszError =
token->start;
620 while (*
str && *
str !=
'"')
624 if (*(
str + 1) !=
'"')
644 map[*separators++] = 1;
690 if (
value->start[
i] ==
'"')
703 if (!
ret && ppszError)
751 if (
info->rgRDN[
info->cRDN].rgRDNAttr)
757 info->rgRDN[
info->cRDN].cRDNAttr = 1;
758 info->rgRDN[
info->cRDN].rgRDNAttr[0].pszObjId =
760 info->rgRDN[
info->cRDN].rgRDNAttr[0].dwValueType =
765 types = defaultTypes;
774 &
info->rgRDN[
info->cRDN].rgRDNAttr[0].Value,
types, ppszError);
795 TRACE(
"(%08lx, %s, %08lx, %p, %p, %p, %p)\n", dwCertEncodingType,
816 *ppszError =
token.start;
854 if (
str && sep_used && *
str == sep_used)
str++;
857 keyOID, &
token, dwStrType, ppszError);
869 0,
NULL, pbEncoded, pcbEncoded);
871 for (
i = 0;
i <
info.cRDN;
i++)
875 for (
j = 0;
j <
info.rgRDN[
i].cRDNAttr;
j++)
889 TRACE(
"(%p, %ld, %08lx, %p, %p, %ld)\n",
cert,
type,
flags, type_para,
name, name_len);
902 if (!
name || !name_len)
920 static const char *oids[][2] =
943 if (
info->rgAltEntry[
i].dwAltNameChoice == entry_type)
946 return &
info->rgAltEntry[
i];
963 unsigned int index = 0;
984 static const LPCSTR attributeOIDs[] =
996 pszNameString, cchNameString,
TRUE);
1006 if (!
dst || !dst_size)
return len + 1;
1017 BOOL alt_name_issuer, search_all_names;
1023 TRACE(
"(%p, %ld, %08lx, %p, %p, %ld)\n",
cert,
type,
flags, type_para, name_string, name_len);
1028 if (
flags & ~supported_flags)
1034 WARN(
"CERT_NAME_SEARCH_ALL_NAMES_FLAG used with type %lu.\n",
type);
1039 name = alt_name_issuer ? &
cert->pCertInfo->Issuer : &
cert->pCertInfo->Subject;
1053 name_string, name_len);
1070 param, name_string, name_len);
1076 name_string, name_len);
1083 0, name_string, name_len);
1087 static const LPCSTR simpleAttributeOIDs[] =
1099 for (
i = 0; !nameAttr &&
i <
ARRAY_SIZE(simpleAttributeOIDs);
i++)
1121 type_para, name_string, name_len);
1131 if (search_all_names)
1135 if (name_string && name_len == 1)
break;
1137 if (name_string && name_len)
1149 if (!search_all_names || name_len != 1)
1151 len = search_all_names && name_len ? name_len - 1 : name_len;
1154 if (name_string) name_string +=
ret;
1158 if (search_all_names)
1160 if (name_string && name_len) *name_string = 0;
1172 FIXME(
"unimplemented for type %lu.\n",
type);
1183 if (name_string && name_len) name_string[0] = 0;
static unsigned char bytes[4]
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static const WCHAR nameW[]
BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR pszObjId, DWORD cExtensions, CERT_EXTENSION rgExtensions[])
BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext, DWORD dwPropId, void *pvData, DWORD *pcbData)
PCERT_RDN_ATTR WINAPI CertFindRDNAttr(LPCSTR pszObjId, PCERT_NAME_INFO pName)
BOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, void *pvEncoded, DWORD *pcbEncoded)
LPVOID WINAPI CryptMemAlloc(ULONG cbSize)
LPVOID WINAPI CryptMemRealloc(LPVOID pv, ULONG cbSize)
VOID WINAPI CryptMemFree(LPVOID pv)
static struct list oidInfo
PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey, DWORD dwGroupId)
DWORD WINAPI CertGetNameStringA(PCCERT_CONTEXT cert, DWORD type, DWORD flags, void *type_para, LPSTR name, DWORD name_len)
BOOL WINAPI CertStrToNameA(DWORD dwCertEncodingType, LPCSTR pszX500, DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded, LPCSTR *ppszError)
static void CRYPT_FreeKeynameKeeper(struct KeynameKeeper *keeper)
DWORD cert_name_to_str_with_indent(DWORD dwCertEncodingType, DWORD indentLevel, const CERT_NAME_BLOB *pName, DWORD dwStrType, LPWSTR psz, DWORD csz)
static BOOL CRYPT_GetNextValueW(LPCWSTR str, DWORD dwFlags, LPCWSTR separators, WCHAR *separator_used, struct X500TokenW *token, LPCWSTR *ppszError)
static PCERT_ALT_NAME_ENTRY cert_find_alt_name_entry(PCCERT_CONTEXT cert, BOOL alt_name_issuer, DWORD entry_type, PCERT_ALT_NAME_INFO *info)
static DWORD CRYPT_AddPrefixAToW(LPCSTR prefix, LPWSTR psz, DWORD csz)
static BOOL cert_get_alt_name_info(PCCERT_CONTEXT cert, BOOL alt_name_issuer, PCERT_ALT_NAME_INFO *info)
static PCERT_ALT_NAME_ENTRY cert_find_next_alt_name_entry(PCERT_ALT_NAME_INFO info, DWORD entry_type, unsigned int *index)
static DWORD copy_output_str(WCHAR *dst, const WCHAR *src, DWORD dst_size)
static DWORD quote_rdn_value_to_str_w(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue, DWORD dwStrType, LPWSTR psz, DWORD csz)
DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT cert, DWORD type, DWORD flags, void *type_para, LPWSTR name_string, DWORD name_len)
static BOOL is_quotable_char(WCHAR c)
DWORD WINAPI CertNameToStrA(DWORD encoding_type, PCERT_NAME_BLOB name_blob, DWORD str_type, LPSTR str, DWORD str_len)
static BOOL CRYPT_EncodeValue(DWORD dwCertEncodingType, const struct X500TokenW *value, PCERT_NAME_BLOB output, const DWORD *types, LPCWSTR *ppszError)
static void CRYPT_InitializeKeynameKeeper(struct KeynameKeeper *keeper)
static BOOL is_spaceW(WCHAR c)
static void CRYPT_KeynameKeeperFromTokenW(struct KeynameKeeper *keeper, const struct X500TokenW *key)
DWORD WINAPI CertNameToStrW(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, DWORD dwStrType, LPWSTR psz, DWORD csz)
BOOL WINAPI CertStrToNameW(DWORD dwCertEncodingType, LPCWSTR pszX500, DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded, LPCWSTR *ppszError)
static DWORD rdn_value_to_strW(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue, LPWSTR psz, DWORD csz, BOOL partial_copy)
static const WCHAR indent[]
static BOOL CRYPT_ValueToRDN(DWORD dwCertEncodingType, PCERT_NAME_INFO info, PCCRYPT_OID_INFO keyOID, struct X500TokenW *value, DWORD dwStrType, LPCWSTR *ppszError)
static BOOL CRYPT_GetNextKeyW(LPCWSTR str, struct X500TokenW *token, LPCWSTR *ppszError)
DWORD WINAPI CertRDNValueToStrA(DWORD type, PCERT_RDN_VALUE_BLOB value_blob, LPSTR value, DWORD value_len)
static BOOL CRYPT_EncodeValueWithType(DWORD dwCertEncodingType, const struct X500TokenW *value, PCERT_NAME_BLOB output, DWORD type, LPCWSTR *ppszError)
static DWORD cert_get_name_from_rdn_attr(DWORD encodingType, const CERT_NAME_BLOB *name, LPCSTR oid, LPWSTR pszNameString, DWORD cchNameString)
static DWORD CRYPT_AddPrefixW(LPCWSTR prefix, LPWSTR psz, DWORD csz)
DWORD WINAPI CertRDNValueToStrW(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue, LPWSTR psz, DWORD csz)
#define WideCharToMultiByte
#define MultiByteToWideChar
static const WCHAR *const ext[]
LPSTR WINAPI CharNextA(const char *ptr)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP size_t __cdecl strlen(const char *)
GLuint GLuint GLsizei GLenum type
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
HLOCAL NTAPI LocalFree(HLOCAL hMem)
int WINAPI lstrlenA(LPCSTR lpString)
#define memcpy(s1, s2, n)
static LPCWSTR LPVOID pvReserved
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
for(i=0;i< sizeof(testsuite)/sizeof(testsuite[0]);++i) ok(call_test(testsuite[i].func)
CERT_RDN_VALUE_BLOB Value
CERT_RDN_VALUE_BLOB Value
CRYPT_DATA_BLOB ExtraInfo
Character const *const prefix
static void reverse(int *pidx, int cch)
DWORD WINAPI GetLastError(void)
#define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG
#define CERT_NAME_STR_NO_QUOTING_FLAG
#define CERT_RDN_UTF8_STRING
#define CERT_RDN_IA5_STRING
#define CERT_RDN_GENERAL_STRING
#define CERT_NAME_SIMPLE_DISPLAY_TYPE
#define CERT_RDN_PRINTABLE_STRING
#define CERT_ALT_NAME_URL
#define CERT_X500_NAME_STR
#define CERT_NAME_EMAIL_TYPE
#define CERT_ALT_NAME_DIRECTORY_NAME
#define szOID_ISSUER_ALT_NAME2
#define CERT_ALT_NAME_RFC822_NAME
#define CERT_RDN_VISIBLE_STRING
#define CERT_NAME_STR_NO_PLUS_FLAG
#define X509_ASN_ENCODING
#define CRYPT_OID_INFO_NAME_KEY
#define CERT_NAME_STR_SEMICOLON_FLAG
#define CERT_NAME_SEARCH_ALL_NAMES_FLAG
#define CRYPT_RDN_ATTR_OID_GROUP_ID
#define CRYPT_DECODE_ALLOC_FLAG
#define CERT_NAME_STR_CRLF_FLAG
#define szOID_ORGANIZATIONAL_UNIT_NAME
#define CERT_FRIENDLY_NAME_PROP_ID
#define CERT_RDN_VIDEOTEX_STRING
#define szOID_RSA_emailAddr
#define CERT_NAME_DNS_TYPE
#define szOID_SUBJECT_ALT_NAME
#define CERT_ALT_NAME_DNS_NAME
#define CERT_NAME_RDN_TYPE
#define szOID_SUBJECT_ALT_NAME2
#define CERT_NAME_ISSUER_FLAG
#define CERT_NAME_STR_COMMA_FLAG
#define CRYPT_ENCODE_ALLOC_FLAG
#define CERT_RDN_ENCODED_BLOB
#define CERT_NAME_ATTR_TYPE
#define CERT_NAME_URL_TYPE
#define CERT_RDN_NUMERIC_STRING
#define CRYPT_OID_INFO_OID_KEY
#define X509_ALTERNATE_NAME
#define szOID_COMMON_NAME
#define CERT_NAME_STR_REVERSE_FLAG
#define CERT_RDN_TELETEX_STRING
#define CERT_RDN_BMP_STRING
#define CERT_OID_NAME_STR
#define CERT_RDN_ANY_TYPE
#define szOID_ISSUER_ALT_NAME
#define CERT_RDN_GRAPHIC_STRING
#define CERT_NAME_FRIENDLY_DISPLAY_TYPE
#define szOID_ORGANIZATION_NAME
#define X509_UNICODE_NAME_VALUE
#define CRYPT_E_INVALID_PRINTABLE_STRING
#define CRYPT_E_INVALID_IA5_STRING
#define CRYPT_E_INVALID_NUMERIC_STRING
#define CRYPT_E_INVALID_X500_STRING