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