Where should I look at in Bitcoin Core source code to figure out how the signature process trasform a message in a curve point?
To sign a transaction (message) in Bitcoin system, you need to encode the message to a point of the curve y^2=x^3+7. I read this Koblitz's paper. There are three encoding schemes. I read this question too.
If I look at in Bitcoin Core source code I can't see any of these encoding schemes, it seems to me that message M is directly encoded in a point m=hash(M) without check; obviously that is not possible, there is roughly a 50% chance that a random 256 bit string don't correspond to a point of the curve. I can't find out how/if the ECDSA library checks if hash(M) is on the curve or not and especially what it does if the hash(M) is not on the curve.
What encoding scheme does Bitcoin-ECDSA implement and where is it in the source code?
Thanks and sorry for my English.
Bitcoin: Signature generation (ECDSA)
Given a message m to be signed and the private key d,
- Choose a random integer k in [1,n-1].
- Compute (x1,y1)=kP, convert x1 into integer and r = x1 mod n.(Return to step1 if r = 0)
- Computes=(k^-1)*(SHA1(m)+ dr). (Return to step 1 if s= 0)
- Signature is (r, s) pair.
Why SHA1(m) should be a curve point? There is only a 50% chance.