parse_public_key (const gchar *key, gchar** pubkey, gboolean *is_ecma)
{
const gchar *pkey;
- gchar header [16], val, *arr;
+ gchar header [16], val, *arr, *endp;
gint i, j, offset, bitlen, keylen, pkeylen;
keylen = strlen (key) >> 1;
if (!pubkey)
return TRUE;
+ arr = (gchar *)g_malloc (keylen + 4);
/* Encode the size of the blob */
- offset = 0;
- if (keylen <= 127) {
- arr = (gchar *)g_malloc (keylen + 1);
- arr [offset++] = keylen;
- } else {
- arr = (gchar *)g_malloc (keylen + 2);
- arr [offset++] = 0x80; /* 10bs */
- arr [offset++] = keylen;
- }
+ mono_metadata_encode_value (keylen, &arr[0], &endp);
+ offset = (gint)(endp-arr);
for (i = offset, j = 0; i < keylen + offset; i++) {
arr [i] = g_ascii_xdigit_value (key [j++]) << 4;