From: rab rub Date: 2012-04-12T20:14:05+09:00 Subject: Re: Ruby openssl ECC help plz Yes, what I am implementing requires me to treat the shared secret as an integer. I think I might be kind of close to figuring it out: q = OpenSSL::PKey::EC.new("secp128r2") q.generate_key pub = OpenSSL::PKey::EC.new(q.group) pub.public_key = q.public_key a = pub.public_key.to_bn ss = q.dh_compute_key(pub.public_key) puts ss.unpack('I>*') this puts a series of numbers such as the following: 2755907301 4161034086 221727499 1603331514 or 2041301904 2634281936 2269031273 1943826378 Just to see if this works, I have then been combining these into big integers, so far just by hand. My theory is that if the resulting integer is the same bit size as the curve, that it is an indication I may not be doing it incorrectly. And I am so close to almost not certainly doing it wrong, because sometimes it does make output that equals 128 bits when I convert it to binary, for example 275590730141610340862217274991603331514 but alas sometimes it is slightly more or less than 128 bits, as with 2041301904263428193622690312731943826378 which is 131 bits regardless of the curve I use the output is either the correct size or near it, but I don't understand the variation. ss.length always returns a number of bytes that when multiplied by 8 is the size of the curve, assuming that the curve consists of a number of bits that is divisible by 8 anyway. I could be way off on this and doing it totally wrong, but since I hit a total dead end I figured that I might as well try doing things until I at least get the correct size integer and then try to confirm it as being correct further from there, but I can just get close. thanks :). -- Posted via http://www.ruby-forum.com/.