<p>Have you looked at references of <a href="http://en.wikipedia.org/wiki/Elliptic_Curve_DSA" rel="nofollow">http://en.wikipedia.org/wiki/Elliptic_Curve_DSA</a>
Like:
Certicom Research, Standards for efficient cryptography, SEC 1: Elliptic Curve Cryptography, Version 2.0, May 21, 2009.</p>

CC BY-SA 3.0
2012-12-18T08:07:29.860Z
2012-12-18T08:07:29.860Z
Daniel Alexandre
<p>The <a href="http://en.bitcoin.it/wiki/Technical_background_of_Bitcoin_addresses" rel="nofollow noreferrer">Technical background of Bitcoin addresses</a> article in the Bitcoin Wiki describes in detail how a Bitcoin address is obtained from a <a href="http://en.bitcoin.it/wiki/Private_key" rel="nofollow noreferrer">Private key</a>.</p>

<p><img src="https://i.sstatic.net/GxItB.png" alt="Private key to Bitcoin Address"></p>

CC BY-SA 3.0
2012-12-18T02:27:18.970Z
I saw this but I don't see where the private key becomes the public key.  That is just ECC public key to Base58.  The article you link says `When a private key is imported, it always corresponds to exactly one Bitcoin address. Any utility which performs the conversion can display the matching Bitcoin address. The mathematical conversion is somewhat complex and best left to a computer,` ... that last part is leaving me hanging, and the details on the other link don't help as far as I can tell.
makerofthings7
CC BY-SA 3.0
2012-12-18T09:39:45.203Z
If you multiply the private key by the order of the curve, you get the public key point. If `x` is the private key `Gx` is the public key. So it's a simple EC multiplication to get the public key from the private key.
David Schwartz
CC BY-SA 3.0
2012-12-19T06:44:41.533Z
@DavidSchwartz Is there any primer on this for the non-mathematician?  Perhaps secep256 is unique, but I just don't understand that variant of ECC yet.
makerofthings7
CC BY-SA 3.0
2012-12-19T06:58:19.827Z
It is going to be language specific.  Python: http://bitcointalk.org/index.php?topic=84238.0  Shell (Bash): https://github.com/grondilu/bitcoin-bash-tools And there may be others.
Stephen Gornick
CC BY-SA 3.0
2012-12-18T00:48:40.100Z
2012-12-18T00:54:23.183Z
2012-12-18T00:54:23.183Z
Stephen Gornick
<p>You ought to ask this question on CryptoSE, as the problem is not Bitcoin-specific. I've even <a href="https://crypto.stackexchange.com/q/5756/843">done that for you</a>.</p>

<p>In short:</p>

<blockquote>
  <p>The public key is QA=dAG where G is the base point on the curve defined in the publicly agreed upon parameters.</p>
</blockquote>

<p>And you can find the <a href="https://en.bitcoin.it/wiki/Secp256k1" rel="nofollow noreferrer">Bitcoin curve (secp256k1) parameters</a> in the wiki.</p>

CC BY-SA 3.0
2012-12-18T12:46:50.563Z
2012-12-18T12:46:50.563Z
2017-04-13T12:48:25.933Z
ThePiachu
<p>Suppose I just used vanitygen to create this key:</p>

<pre><code>Pattern: 1a
Address: e1aMGYXuGpUwDGH9gz3ZBs8UH746nRdEk6
Privkey: 5KhCszBi22hEZZixPEQkLAMtUVkxbGaxBFsH7a9iefqrxHmSXgH
</code></pre>

<p>All I had to do to import this key was import the Privkey. Nothing with "Address' was needed with ImportPrivKey.</p>

<p>I'd like to know the technical details on how the Address can be extracted when all that is known is the private key.   </p>

<p>I've read <a href="https://bitcoin.stackexchange.com/questions/1786/given-a-private-key-how-do-you-get-a-public-address">this</a> and <a href="https://bitcoin.stackexchange.com/q/1389/1878">this</a> question, but still haven't found the secret sauce on how an Address is calculated or found in binary format given only a private key. How is the Address extracted from the private key alone?</p>

<p>My intent is to learn this process and implement it in C#. Note that I already know the Base58Check format, and there is no mention of the private key in any wiki I've seen regarding that. </p>

CC BY-SA 3.0
2012-12-18T08:25:08.993Z
Getting public key from a private key would be better answered in a cryptography SE, as it is not Bitcoin-specific.
ThePiachu
CC BY-SA 3.0
2012-12-19T05:55:56.093Z
It could be made Bitcoin-specific if we exchange the term "address" for the term "public key" - although the base question (and its answer) is still the same.
David Perry
CC BY-SA 3.0
2012-12-19T06:39:07.833Z
@DavidPerry I'm breaking that habit... ;) and updated the post
makerofthings7
<development><private-key><public-key><import>
How does ImportPrivateKey get the Address if I don't explicitly send it?
makerofthings7
# How does ImportPrivateKey get the Address if I don't explicitly send it?

(Asked by: username_0 on 2012-12-17)

Suppose I just used vanitygen to create this key:
Pattern: 1a
Address: e1aMGYXuGpUwDGH9gz3ZBs8UH746nRdEk6
Privkey: 5KhCszBi22hEZZixPEQkLAMtUVkxbGaxBFsH7a9iefqrxHmSXgH

All I had to do to import this key was import the Privkey. Nothing with "Address' was needed with ImportPrivKey.
I'd like to know the technical details on how the Address can be extracted when all that is known is the private key.   
I've read this and this question, but still haven't found the secret sauce on how an Address is calculated or found in binary format given only a private key. How is the Address extracted from the private key alone?
My intent is to learn this process and implement it in C#. Note that I already know the Base58Check format, and there is no mention of the private key in any wiki I've seen regarding that.

**Tags:** development, private-key, public-key, import

> **Comments:**
> **username_1**: Getting public key from a private key would be better answered in a cryptography SE, as it is not Bitcoin-specific.  
> **username_2**: It could be made Bitcoin-specific if we exchange the term "address" for the term "public key" - although the base question (and its answer) is still the same.  
> **username_0**: @DavidPerry I'm breaking that habit... ;) and updated the post  

---

## 3 answers

### Answer by username_1 on 2012-12-18. Score: 4 | Accepted answer

You ought to ask this question on CryptoSE, as the problem is not Bitcoin-specific. I've even [done that for you](https://crypto.stackexchange.com/q/5756/843).

In short:

> The public key is QA=dAG where G is the base point on the curve defined in the publicly agreed upon parameters.

And you can find the [Bitcoin curve (secp256k1) parameters](https://en.bitcoin.it/wiki/Secp256k1) in the wiki.


---

### Answer by username_3 on 2012-12-18. Score: 3

Have you looked at references of <http://en.wikipedia.org/wiki/Elliptic_Curve_DSA>
Like:
Certicom Research, Standards for efficient cryptography, SEC 1: Elliptic Curve Cryptography, Version 2.0, May 21, 2009.


---

### Answer by username_4 on 2012-12-18. Score: 1

The [Technical background of Bitcoin addresses](http://en.bitcoin.it/wiki/Technical_background_of_Bitcoin_addresses) article in the Bitcoin Wiki describes in detail how a Bitcoin address is obtained from a [Private key](http://en.bitcoin.it/wiki/Private_key).

![Private key to Bitcoin Address](https://i.sstatic.net/GxItB.png)

> **Comments:**
> **username_0**: I saw this but I don't see where the private key becomes the public key.  That is just ECC public key to Base58.  The article you link says `When a private key is imported, it always corresponds to exactly one Bitcoin address. Any utility which performs the conversion can display the matching Bitcoin address. The mathematical conversion is somewhat complex and best left to a computer,` ... that last part is leaving me hanging, and the details on the other link don't help as far as I can tell.  
> **username_5**: If you multiply the private key by the order of the curve, you get the public key point. If `x` is the private key `Gx` is the public key. So it's a simple EC multiplication to get the public key from the private key.  
> **username_0**: @DavidSchwartz Is there any primer on this for the non-mathematician?  Perhaps secep256 is unique, but I just don't understand that variant of ECC yet.  
> **username_4**: It is going to be language specific.  Python: http://bitcointalk.org/index.php?topic=84238.0  Shell (Bash): https://github.com/grondilu/bitcoin-bash-tools And there may be others.  

---

