@@ -124,7 +124,7 @@ SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1secke
124
124
}
125
125
126
126
SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1pubkey_1create
127
- (JNIEnv * env , jclass classObject , jobject byteBufferObject , jlong ctx_l )
127
+ (JNIEnv * env , jclass classObject , jobject byteBufferObject , jlong ctx_l , jboolean compressed )
128
128
{
129
129
secp256k1_context * ctx = (secp256k1_context * )(uintptr_t )ctx_l ;
130
130
const unsigned char * secKey = (unsigned char * ) (* env )-> GetDirectBufferAddress (env , byteBufferObject );
@@ -137,11 +137,11 @@ SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1e
137
137
138
138
int ret = secp256k1_ec_pubkey_create (ctx , & pubkey , secKey );
139
139
140
- unsigned char outputSer [33 ];
141
- size_t outputLen = 33 ;
140
+ unsigned char outputSer [65 ];
141
+ size_t outputLen = 65 ;
142
142
143
143
if ( ret ) {
144
- int ret2 = secp256k1_ec_pubkey_serialize (ctx ,outputSer , & outputLen , & pubkey ,SECP256K1_EC_COMPRESSED );(void )ret2 ;
144
+ int ret2 = secp256k1_ec_pubkey_serialize (ctx ,outputSer , & outputLen , & pubkey , compressed ? SECP256K1_EC_COMPRESSED : SECP256K1_EC_UNCOMPRESSED );(void )ret2 ;
145
145
}
146
146
147
147
intsarray [0 ] = outputLen ;
@@ -236,18 +236,17 @@ SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1p
236
236
}
237
237
238
238
SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1pubkey_1tweak_1add
239
- (JNIEnv * env , jclass classObject , jobject byteBufferObject , jlong ctx_l , jint publen )
239
+ (JNIEnv * env , jclass classObject , jobject byteBufferObject , jlong ctx_l , jint publen , jboolean compressed )
240
240
{
241
241
secp256k1_context * ctx = (secp256k1_context * )(uintptr_t )ctx_l ;
242
- /* secp256k1_pubkey* pubkey = (secp256k1_pubkey*) (*env)->GetDirectBufferAddress(env, byteBufferObject);*/
243
242
unsigned char * pkey = (* env )-> GetDirectBufferAddress (env , byteBufferObject );
244
243
const unsigned char * tweak = (unsigned char * ) (pkey + publen );
245
244
246
245
jobjectArray retArray ;
247
246
jbyteArray pubArray , intsByteArray ;
248
247
unsigned char intsarray [2 ];
249
- unsigned char outputSer [33 ];
250
- size_t outputLen = 33 ;
248
+ unsigned char outputSer [65 ];
249
+ size_t outputLen = 65 ;
251
250
252
251
secp256k1_pubkey pubkey ;
253
252
int ret = secp256k1_ec_pubkey_parse (ctx , & pubkey , pkey , publen );
@@ -257,7 +256,7 @@ SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1p
257
256
}
258
257
259
258
if ( ret ) {
260
- int ret2 = secp256k1_ec_pubkey_serialize (ctx ,outputSer , & outputLen , & pubkey ,SECP256K1_EC_COMPRESSED );(void )ret2 ;
259
+ int ret2 = secp256k1_ec_pubkey_serialize (ctx ,outputSer , & outputLen , & pubkey , compressed ? SECP256K1_EC_COMPRESSED : SECP256K1_EC_UNCOMPRESSED );(void )ret2 ;
261
260
}
262
261
263
262
intsarray [0 ] = outputLen ;
@@ -281,7 +280,7 @@ SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1p
281
280
}
282
281
283
282
SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1pubkey_1tweak_1mul
284
- (JNIEnv * env , jclass classObject , jobject byteBufferObject , jlong ctx_l , jint publen )
283
+ (JNIEnv * env , jclass classObject , jobject byteBufferObject , jlong ctx_l , jint publen , jboolean compressed )
285
284
{
286
285
secp256k1_context * ctx = (secp256k1_context * )(uintptr_t )ctx_l ;
287
286
unsigned char * pkey = (* env )-> GetDirectBufferAddress (env , byteBufferObject );
@@ -290,8 +289,8 @@ SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1p
290
289
jobjectArray retArray ;
291
290
jbyteArray pubArray , intsByteArray ;
292
291
unsigned char intsarray [2 ];
293
- unsigned char outputSer [33 ];
294
- size_t outputLen = 33 ;
292
+ unsigned char outputSer [65 ];
293
+ size_t outputLen = 65 ;
295
294
296
295
secp256k1_pubkey pubkey ;
297
296
int ret = secp256k1_ec_pubkey_parse (ctx , & pubkey , pkey , publen );
@@ -301,7 +300,7 @@ SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1p
301
300
}
302
301
303
302
if ( ret ) {
304
- int ret2 = secp256k1_ec_pubkey_serialize (ctx ,outputSer , & outputLen , & pubkey ,SECP256K1_EC_COMPRESSED );(void )ret2 ;
303
+ int ret2 = secp256k1_ec_pubkey_serialize (ctx ,outputSer , & outputLen , & pubkey , compressed ? SECP256K1_EC_COMPRESSED : SECP256K1_EC_UNCOMPRESSED );(void )ret2 ;
305
304
}
306
305
307
306
intsarray [0 ] = outputLen ;
@@ -332,6 +331,47 @@ SECP256K1_API jlong JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1p
332
331
return 0 ;
333
332
}
334
333
334
+ SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1pubkey_1decompress
335
+ (JNIEnv * env , jclass classObject , jobject byteBufferObject , jlong ctx_l , jint publen )
336
+ {
337
+ secp256k1_context * ctx = (secp256k1_context * )(uintptr_t )ctx_l ;
338
+ const unsigned char * pubdata = (* env )-> GetDirectBufferAddress (env , byteBufferObject );
339
+
340
+ secp256k1_pubkey pubkey ;
341
+
342
+ jobjectArray retArray ;
343
+ jbyteArray pubkeyArray , intsByteArray ;
344
+ unsigned char intsarray [2 ];
345
+
346
+ int ret = secp256k1_ec_pubkey_parse (ctx , & pubkey , pubdata , publen );
347
+
348
+ unsigned char outputSer [65 ];
349
+ size_t outputLen = 65 ;
350
+
351
+ if ( ret ) {
352
+ int ret2 = secp256k1_ec_pubkey_serialize (ctx ,outputSer , & outputLen , & pubkey , SECP256K1_EC_UNCOMPRESSED );(void )ret2 ;
353
+ }
354
+
355
+ intsarray [0 ] = outputLen ;
356
+ intsarray [1 ] = ret ;
357
+
358
+ retArray = (* env )-> NewObjectArray (env , 2 ,
359
+ (* env )-> FindClass (env , "[B" ),
360
+ (* env )-> NewByteArray (env , 1 ));
361
+
362
+ pubkeyArray = (* env )-> NewByteArray (env , outputLen );
363
+ (* env )-> SetByteArrayRegion (env , pubkeyArray , 0 , outputLen , (jbyte * )outputSer );
364
+ (* env )-> SetObjectArrayElement (env , retArray , 0 , pubkeyArray );
365
+
366
+ intsByteArray = (* env )-> NewByteArray (env , 2 );
367
+ (* env )-> SetByteArrayRegion (env , intsByteArray , 0 , 2 , (jbyte * )intsarray );
368
+ (* env )-> SetObjectArrayElement (env , retArray , 1 , intsByteArray );
369
+
370
+ (void )classObject ;
371
+
372
+ return retArray ;
373
+ }
374
+
335
375
SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdh
336
376
(JNIEnv * env , jclass classObject , jobject byteBufferObject , jlong ctx_l , jint publen )
337
377
{
0 commit comments