linux ascii to utf-16 (then sha1 and base64) encode

We have a communication protocol that requires us to Base64 Encoded a SHA1 hash of a UTF-16 encoded password. We have been given Java, javascript, and visual basic examples however we are running under Linux (redhat) the provided test string:TESTED@8691 the final output:rBbBKqbJodT5awZal/CSCYF/sFo= I have tried

iconv_t conv = iconv_open("UTF-16LE","ASCII"); // open succeeds
char *from_string=strdup("TESTED@8691");
size_t from_length=strlen(from_string);
size_t to_length=from_length*3;
size_t original_to_length=to_length;

char *to_string=(char*)calloc(1,to_length);
int convert_return=iconv(conv,&from_string,&from_length,&to_string,&to_length);
// convert_return is 0 indicating success, to_length is 22, from_length is 0

Open in new window


run sha1 and base64 encoding on to_string with a length of 22 resulting output: GCXe7HMDoq/NRqo1WWYJDDYZzP0=

If I loop through to_string I get:

for (int i=0; i<original_to_length-to_length; ++i) {
   printf("to_string %d = %x",i,to_string[i]);  
}

Open in new window


output:
to_string 0 = 0
to_string 1 = 0
to_string 2 = 0
to_string 3 = 0
to_string 4 = 0
to_string 5 = 0
to_string 6 = 0
to_string 7 = 0
to_string 8 = 0
to_string 9 = 0
to_string 10 = 0
to_string 11 = 0
to_string 12 = 0
to_string 13 = 0
to_string 14 = 21
to_string 15 = 0
to_string 16 = 0
to_string 17 = 0
to_string 18 = 4
to_string 19 = 7e
to_string 20 = 13
to_string 21 = e
What am I missing? Thank You
PhilCAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

sarabandeCommented:
utf-16 means the input string must be wchar_t* (2 bytes per character, typedef of short int) .

you were using char* for input what cannot work in my opinion.

Sara
0
PhilCAuthor Commented:
iconv() accepts a char* that is why I used it.  changing to wchar_t* still does not work
Thank you
0
PhilCAuthor Commented:
I have found the answer, I read but did not properly consider the man page, "The  iconv  function converts one multibyte character at a
time, and for  each  character  conversion  it  increments
*inbuf  and  decrements *inbytesleft by the number of con­
verted input bytes, it increments *outbuf  and  decrements
*outbytesleft by the number of converted output bytes, and
it updates the conversion state contained in cd."
so my *to_string needed to be put back to the beginning
thank you
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
PhilCAuthor Commented:
found the solution
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C

From novice to tech pro — start learning today.