- SG_MD5_CTX md5_ctx;
- SG_MD5Init(&md5_ctx);
- SG_MD5Update(&md5_ctx, (unsigned char*)str.c_str(), str.size());
-
- unsigned char digest[MD5_DIGEST_LENGTH];
- SG_MD5Final(digest, &md5_ctx);
-
- // TODO make something more generic
- // convert final sum to hex
- const char hexChar[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
- std::stringstream hexMd5;
- for (int i=0; i<MD5_DIGEST_LENGTH;++i) {
- hexMd5 << hexChar[digest[i] >> 4];
- hexMd5 << hexChar[digest[i] & 0x0f];
- }
-
- return ctx.to_nasal(hexMd5.str());
+ return nasal::to_nasal(
+ c,
+ simgear::strutils::md5(naStr_data(args[0]), naStr_len(args[0]))
+ );