HI All,

I have been working on creating .json configuration files with certificate 
info, for example

            {
                "credid": 1,
                "credusage": "oic.sec.cred.mfgcert",
                "subjectuuid": "22222222-2222-2222-2222-222222222222",
                "credtype": 8,
                "publicdata": {
                   "encoding": "oic.sec.encoding.der",
                   "data": “308<… bunch of hex …>896"
                },
                "privatedata": {
                   "encoding": "oic.sec.encoding.raw",
                   "data": “307<… bunch of hex …>a86"
                }
             },

I was finding that json2cbor created .dat files for which svrdbeditor could not 
make out the certificate information.  In addition, IoTivity could not decode 
the cert content either.

Upon further investigation (and assuming that the publicData, privateData, 
optionalData in .json files is hex string encoded) json2cbor uses the following 
loop to convert hex strings to byte values:

for(size_t i =0, p =0 ; i < jsonObjLen; i+=2, ++p)
{
  snprintf(tmp, 2, "%c%c", jsonPub->valuestring[i], jsonPub->valuestring[i+1]);
  buf[p] = (char)strtol(tmp, NULL, 16);
}


As best that I can tell this produces improper values.  Lets take the example 
of a hex encoding of '30', which translates to a decimal byte value of 48.  The 
snprintf statement:

snprintf(tmp, 2, "%c%c", '3', '0');
buf[p] = (char)strtol(tmp, NULL, 16);

... produces tmp as: tmp[0] = '3' , tmp[1] = '\000', and buf[p] of decimal 
value 3.

… but it should be tmp[0] = '3' , tmp[1] = '0', and buf[p] of decimal value 48.


If this loop is converted to the following, the encoding happens correctly 
(i.e. but[p] = decimal 48)

for(size_t i =0, p =0 ; i < jsonObjLen; i+=2, ++p)
{
  tmp[0] = jsonPub->valuestring[i];
  tmp[1] = jsonPub->valuestring[i+1];
  tmp[2] = '\0';
  buf[p] = (char)strtol(tmp, NULL, 16);
}

After changing all of the json2cbor loops to the above and generating the .dat 
file, now svrdbeditor can decode and present cert info.

So, I created a Jira Ticket, and I can submit a patch, but I just wanted to 
have the group comment on this, because it seems like such a fundamental 
problem, and I am surprised any cert info in .json files ever worked …. just 
want to make sure that I am not missing something.

https://jira.iotivity.org/browse/IOT-2970

Kind Regards
Steve




_______________________________________________
iotivity-dev mailing list
[email protected]
https://lists.iotivity.org/mailman/listinfo/iotivity-dev

Reply via email to