# Signature: encoding a message - transaction to a point of curve y^2=x^3+7 and Bitcoin Core

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.

EDIT:

Bitcoin: Signature generation (ECDSA)

Given a message m to be signed and the private key d,

1. Choose a random integer k in [1,n-1].
2. Compute (x1,y1)=kP, convert x1 into integer and r = x1 mod n.(Return to step1 if r = 0)
4. Signature is (r, s) pair.

Why SHA1(m) should be a curve point? There is only a 50% chance.

• I assume you're talking about section 3. These look like ways of encrypting something using ECDSA, not ways of signing a message. – Nick ODell May 7 '15 at 17:13
• arulbero, are you having trouble pasting something in? – Nick ODell May 7 '15 at 17:56