cfec1a
diff -up openssl-1.0.2d/crypto/ec/ec_curve.c.secp256k1 openssl-1.0.2d/crypto/ec/ec_curve.c
cfec1a
--- openssl-1.0.2d/crypto/ec/ec_curve.c.secp256k1	2015-08-12 14:55:15.203415420 -0400
cfec1a
+++ openssl-1.0.2d/crypto/ec/ec_curve.c	2015-08-12 15:07:12.659113262 -0400
cfec1a
@@ -86,6 +86,42 @@ typedef struct {
cfec1a
     unsigned int cofactor;      /* promoted to BN_ULONG */
cfec1a
 } EC_CURVE_DATA;
cfec1a
 
cfec1a
+static const struct {
cfec1a
+    EC_CURVE_DATA h;
cfec1a
+    unsigned char data[0 + 32 * 6];
cfec1a
+} _EC_SECG_PRIME_256K1 = {
cfec1a
+    {
cfec1a
+        NID_X9_62_prime_field, 0, 32, 1
cfec1a
+    },
cfec1a
+    {
cfec1a
+        /* no seed */
cfec1a
+        /* p */
cfec1a
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
cfec1a
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
cfec1a
+        0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFC, 0x2F,
cfec1a
+        /* a */
cfec1a
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
cfec1a
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
cfec1a
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
cfec1a
+        /* b */
cfec1a
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
cfec1a
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
cfec1a
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
cfec1a
+        /* x */
cfec1a
+        0x79, 0xBE, 0x66, 0x7E, 0xF9, 0xDC, 0xBB, 0xAC, 0x55, 0xA0, 0x62, 0x95,
cfec1a
+        0xCE, 0x87, 0x0B, 0x07, 0x02, 0x9B, 0xFC, 0xDB, 0x2D, 0xCE, 0x28, 0xD9,
cfec1a
+        0x59, 0xF2, 0x81, 0x5B, 0x16, 0xF8, 0x17, 0x98,
cfec1a
+        /* y */
cfec1a
+        0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc,
cfec1a
+        0x0e, 0x11, 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19,
cfec1a
+        0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10, 0xd4, 0xb8,
cfec1a
+        /* order */
cfec1a
+        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
cfec1a
+        0xFF, 0xFF, 0xFF, 0xFE, 0xBA, 0xAE, 0xDC, 0xE6, 0xAF, 0x48, 0xA0, 0x3B,
cfec1a
+        0xBF, 0xD2, 0x5E, 0x8C, 0xD0, 0x36, 0x41, 0x41
cfec1a
+    }
cfec1a
+};
cfec1a
+
cfec1a
 /* the nist prime curves */
cfec1a
 static const struct {
cfec1a
     EC_CURVE_DATA h;
cfec1a
@@ -235,6 +271,8 @@ typedef struct _ec_list_element_st {
cfec1a
 static const ec_list_element curve_list[] = {
cfec1a
     /* prime field curves */
cfec1a
     /* secg curves */
cfec1a
+    {NID_secp256k1, &_EC_SECG_PRIME_256K1.h, 0,
cfec1a
+     "SECG curve over a 256 bit prime field"},
cfec1a
     /* SECG secp256r1 is the same as X9.62 prime256v1 and hence omitted */
cfec1a
     {NID_secp384r1, &_EC_NIST_PRIME_384.h, 0,
cfec1a
      "NIST/SECG curve over a 384 bit prime field"},
cfec1a
diff -up openssl-1.0.2d/ssl/t1_lib.c.secp256k1 openssl-1.0.2d/ssl/t1_lib.c
cfec1a
--- openssl-1.0.2d/ssl/t1_lib.c.secp256k1	2015-08-12 15:04:42.876925441 -0400
cfec1a
+++ openssl-1.0.2d/ssl/t1_lib.c	2015-08-12 15:04:47.837699822 -0400
cfec1a
@@ -269,6 +269,7 @@ static const unsigned char eccurves_auto
cfec1a
     /* Other >= 256-bit prime curves. */
cfec1a
     0, 25,                      /* secp521r1 (25) */
cfec1a
     0, 24,                      /* secp384r1 (24) */
cfec1a
+    0, 22,                      /* secp256k1 (22) */
cfec1a
 # ifndef OPENSSL_NO_EC2M
cfec1a
     /* >= 256-bit binary curves. */
cfec1a
     0, 14,                      /* sect571r1 (14) */
cfec1a
@@ -286,6 +287,7 @@ static const unsigned char eccurves_all[
cfec1a
     /* Other >= 256-bit prime curves. */
cfec1a
     0, 25,                      /* secp521r1 (25) */
cfec1a
     0, 24,                      /* secp384r1 (24) */
cfec1a
+    0, 22,                      /* secp256k1 (22) */
cfec1a
 # ifndef OPENSSL_NO_EC2M
cfec1a
     /* >= 256-bit binary curves. */
cfec1a
     0, 14,                      /* sect571r1 (14) */
cfec1a
@@ -333,6 +335,7 @@ static const unsigned char fips_curves_d
cfec1a
     0, 9,                       /* sect283k1 (9) */
cfec1a
     0, 10,                      /* sect283r1 (10) */
cfec1a
 #  endif
cfec1a
+    0, 22,                      /* secp256k1 (22) */
cfec1a
     0, 23,                      /* secp256r1 (23) */
cfec1a
 #  ifndef OPENSSL_NO_EC2M
cfec1a
     0, 8,                       /* sect239k1 (8) */