<p><strong>The <a href="http://www.bouncycastle.org/" rel="nofollow">Bouncy Castle</a> library provides support for all languages on the Java VM</strong></p>

<p>This library (and now a derivative library called <a href="http://rtyley.github.com/spongycastle/" rel="nofollow">Spongy Castle</a>) is used in the <a href="http://code.google.com/p/bitcoinj/" rel="nofollow">BitCoinJ</a> library. </p>

<p>The Bouncy Castle library was unfortunately implemented badly in Android which lead to code conflicts that required complex workarounds. Spongy Castle solved those problems making the Java and Android versions work much more cleanly with each other.</p>

<p>There is an <a href="https://bitcointalk.org/?topic=2699.0" rel="nofollow">interesting discussion</a> on the choice of secp256k1 by Satoshi on the forums.</p>

<p>The <a href="http://en.wikipedia.org/wiki/List_of_JVM_languages" rel="nofollow">languages currently supported by the JVM</a> includes (and I quote):</p>

<ul>
<li>Java</li>
<li>Clojure, a functional Lisp dialect</li>
<li>Groovy, a scripting language</li>
<li>Scala, an object-oriented and functional programming language</li>
<li>JavaFX Script, a scripting language targeting the Rich Internet Application domain (discontinued 2010)</li>
<li>JRuby, an implementation of Ruby</li>
<li>Jython, an implementation of Python</li>
<li>Rhino, an implementation of JavaScript</li>
<li>AspectJ, an aspect-oriented extension of Java</li>
</ul>

CC BY-SA 3.0
2012-05-31T08:02:38.740Z
2012-05-31T08:10:15.610Z
2012-05-31T08:10:15.610Z
Gary
<p>I've modified a library for <a href="http://golang.org/" rel="nofollow">Google Go</a> to support a few of the Koblitz Curves, including secp256k1. It is available <a href="https://github.com/ThePiachu/Golang-Koblitz-elliptic-curve-DSA-library" rel="nofollow">here</a>.</p>

CC BY-SA 3.0
2012-06-01T13:46:09.410Z
2012-06-01T13:46:09.410Z
ThePiachu
<p>There's a dedicated C-library for this curve. This is probably the most widely scrutinized library, and it probably has the best performance. Wrappers for other languages are available.</p>

<p><a href="https://github.com/bitcoin/secp256k1" rel="nofollow">https://github.com/bitcoin/secp256k1</a></p>

CC BY-SA 3.0
2015-01-04T18:26:54.887Z
2015-01-04T18:26:54.887Z
Janus Troelsen
<p>I would highly recommend to use bindings for the official <a href="https://github.com/bitcoin/secp256k1" rel="nofollow noreferrer">https://github.com/bitcoin/secp256k1</a> library. <br></p>

<p>Implementing a secure Elliptic Curve library is not easy, so using a random one is a bad idea <br></p>

<p>An example of bindings to a different language, here is a rust bindings: <a href="https://github.com/rust-bitcoin/rust-secp256k1" rel="nofollow noreferrer">https://github.com/rust-bitcoin/rust-secp256k1</a></p>

CC BY-SA 4.0
2019-09-24T20:20:19.180Z
2019-09-24T20:20:19.180Z
elichai2
<p>The <strong>Bouncy Castle</strong> project allows for this and it runs on the Java VM (as was mentioned earlier) as well as the <strong>.NET Runtime</strong>. An example of using it in <strong>C#</strong> is shown in <a href="http://mytenpennies.wikidot.com/blog%3ausing-bouncy-castle" rel="noreferrer">this blog post</a>. You can use the .NET version from <strong>Visual Basic .NET</strong> (as well as any of the other languages on the CLR as well, obviously).</p>

<p>For C++, look at the <strong>Crypto++</strong> library which <a href="http://www.cryptopp.com/wiki/Keys_and_Formats" rel="noreferrer">supports secp256k1</a>.</p>

CC BY-SA 3.0
2012-06-07T14:11:13.683Z
2012-06-07T14:11:13.683Z
Frank Geerlings
<p>Which programming languages have some ready libraries that support Bitcoin's ECDSA curve - secp256k1?</p>

CC BY-SA 3.0
2014-03-25T13:22:26.627Z
This question could easily exist on the Crypto StackExchange as well: http://crypto.stackexchange.com/
Niels Abildgaard
<development><address><standard><ecdsa><library>
Which programming languages support secp256k1?
ThePiachu
# Which programming languages support secp256k1?

(Asked by: username_0 on 2012-05-31)

Which programming languages have some ready libraries that support Bitcoin's ECDSA curve - secp256k1?

**Tags:** development, address, standard, ecdsa, library

> **Comments:**
> **username_1**: This question could easily exist on the Crypto StackExchange as well: http://crypto.stackexchange.com/  

---

## 5 answers

### Answer by username_5 on 2012-06-07. Score: 5 | Accepted answer

The **Bouncy Castle** project allows for this and it runs on the Java VM (as was mentioned earlier) as well as the **.NET Runtime**. An example of using it in **C#** is shown in [this blog post](http://mytenpennies.wikidot.com/blog%3ausing-bouncy-castle). You can use the .NET version from **Visual Basic .NET** (as well as any of the other languages on the CLR as well, obviously).

For C++, look at the **Crypto++** library which [supports secp256k1](http://www.cryptopp.com/wiki/Keys_and_Formats).


---

### Answer by username_2 on 2012-05-31. Score: 3

**The [Bouncy Castle](http://www.bouncycastle.org/) library provides support for all languages on the Java VM**

This library (and now a derivative library called [Spongy Castle](http://rtyley.github.com/spongycastle/)) is used in the [BitCoinJ](http://code.google.com/p/bitcoinj/) library.

The Bouncy Castle library was unfortunately implemented badly in Android which lead to code conflicts that required complex workarounds. Spongy Castle solved those problems making the Java and Android versions work much more cleanly with each other.

There is an [interesting discussion](https://bitcointalk.org/?topic=2699.0) on the choice of secp256k1 by Satoshi on the forums.

The [languages currently supported by the JVM](http://en.wikipedia.org/wiki/List_of_JVM_languages) includes (and I quote):

* Java
* Clojure, a functional Lisp dialect
* Groovy, a scripting language
* Scala, an object-oriented and functional programming language
* JavaFX Script, a scripting language targeting the Rich Internet Application domain (discontinued 2010)
* JRuby, an implementation of Ruby
* Jython, an implementation of Python
* Rhino, an implementation of JavaScript
* AspectJ, an aspect-oriented extension of Java


---

### Answer by username_0 on 2012-06-01. Score: 2

I've modified a library for [Google Go](http://golang.org/) to support a few of the Koblitz Curves, including secp256k1. It is available [here](https://github.com/username_0/Golang-Koblitz-elliptic-curve-DSA-library).


---

### Answer by username_3 on 2015-01-04. Score: 2

There's a dedicated C-library for this curve. This is probably the most widely scrutinized library, and it probably has the best performance. Wrappers for other languages are available.

<https://github.com/bitcoin/secp256k1>


---

### Answer by username_4 on 2019-09-24. Score: 0

I would highly recommend to use bindings for the official <https://github.com/bitcoin/secp256k1> library.

Implementing a secure Elliptic Curve library is not easy, so using a random one is a bad idea

An example of bindings to a different language, here is a rust bindings: <https://github.com/rust-bitcoin/rust-secp256k1>


---

