Compare commits
5 Commits
v0.14.0
...
snapshot/s
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
61df0e8a9a | ||
|
|
eb92fccbd6 | ||
|
|
d30e2a1b59 | ||
|
|
bae4744bcb | ||
|
|
b2eb68bf83 |
@@ -22,7 +22,7 @@ buildscript {
|
|||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
group = "fr.acinq.secp256k1"
|
group = "fr.acinq.secp256k1"
|
||||||
version = "0.14.0"
|
version = "0.16.0-SNAPSHOT"
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
@@ -58,6 +58,14 @@ kotlin {
|
|||||||
secp256k1CInterop("host")
|
secp256k1CInterop("host")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
macosX64 {
|
||||||
|
secp256k1CInterop("host")
|
||||||
|
}
|
||||||
|
|
||||||
|
macosArm64 {
|
||||||
|
secp256k1CInterop("host")
|
||||||
|
}
|
||||||
|
|
||||||
iosX64 {
|
iosX64 {
|
||||||
secp256k1CInterop("ios")
|
secp256k1CInterop("ios")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ org.gradle.parallel = true
|
|||||||
kotlin.code.style = official
|
kotlin.code.style = official
|
||||||
kotlin.native.ignoreDisabledTargets = true
|
kotlin.native.ignoreDisabledTargets = true
|
||||||
kotlin.mpp.enableCInteropCommonization=true
|
kotlin.mpp.enableCInteropCommonization=true
|
||||||
|
kotlin.native.cacheKind.macosArm64=none
|
||||||
|
|
||||||
# Android
|
# Android
|
||||||
android.useAndroidX = true
|
android.useAndroidX = true
|
||||||
@@ -44,6 +44,11 @@ void JNI_ThrowByName(JNIEnv *penv, const char *name, const char *msg)
|
|||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void secp256k1_noop_illegal_callback_fn(const char* str, void* data) {
|
||||||
|
(void)str;
|
||||||
|
(void)data;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: fr_acinq_bitcoin_Secp256k1Bindings
|
* Class: fr_acinq_bitcoin_Secp256k1Bindings
|
||||||
* Method: secp256k1_context_create
|
* Method: secp256k1_context_create
|
||||||
@@ -51,7 +56,9 @@ void JNI_ThrowByName(JNIEnv *penv, const char *name, const char *msg)
|
|||||||
*/
|
*/
|
||||||
JNIEXPORT jlong JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256k1_1context_1create(JNIEnv *penv, jclass clazz, jint flags)
|
JNIEXPORT jlong JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256k1_1context_1create(JNIEnv *penv, jclass clazz, jint flags)
|
||||||
{
|
{
|
||||||
return (jlong)secp256k1_context_create(flags);
|
jlong ctx = (jlong)secp256k1_context_create(flags);
|
||||||
|
secp256k1_context_set_illegal_callback(ctx, &secp256k1_noop_illegal_callback_fn, NULL);
|
||||||
|
return ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ if [ "$TARGET" == "linux" ]; then
|
|||||||
CC_OPTS="-fPIC"
|
CC_OPTS="-fPIC"
|
||||||
elif [ "$TARGET" == "darwin" ]; then
|
elif [ "$TARGET" == "darwin" ]; then
|
||||||
OUTFILE=libsecp256k1-jni.dylib
|
OUTFILE=libsecp256k1-jni.dylib
|
||||||
|
CC_OPTS="-arch arm64 -arch x86_64"
|
||||||
elif [ "$TARGET" == "mingw" ]; then
|
elif [ "$TARGET" == "mingw" ]; then
|
||||||
OUTFILE=secp256k1-jni.dll
|
OUTFILE=secp256k1-jni.dll
|
||||||
CC=x86_64-w64-mingw32-gcc
|
CC=x86_64-w64-mingw32-gcc
|
||||||
|
|||||||
@@ -12,12 +12,8 @@ dependencies {
|
|||||||
val copyJni by tasks.creating(Sync::class) {
|
val copyJni by tasks.creating(Sync::class) {
|
||||||
onlyIf { org.gradle.internal.os.OperatingSystem.current().isMacOsX }
|
onlyIf { org.gradle.internal.os.OperatingSystem.current().isMacOsX }
|
||||||
dependsOn(":jni:jvm:buildNativeHost")
|
dependsOn(":jni:jvm:buildNativeHost")
|
||||||
val arch = when (System.getProperty("os.arch")) {
|
|
||||||
"aarch64" -> "aarch64"
|
|
||||||
else -> "x86_64"
|
|
||||||
}
|
|
||||||
from(rootDir.resolve("jni/jvm/build/darwin/libsecp256k1-jni.dylib"))
|
from(rootDir.resolve("jni/jvm/build/darwin/libsecp256k1-jni.dylib"))
|
||||||
into(buildDir.resolve("jniResources/fr/acinq/secp256k1/jni/native/darwin-$arch"))
|
into(buildDir.resolve("jniResources/fr/acinq/secp256k1/jni/native/darwin"))
|
||||||
}
|
}
|
||||||
|
|
||||||
(tasks["processResources"] as ProcessResources).apply {
|
(tasks["processResources"] as ProcessResources).apply {
|
||||||
|
|||||||
@@ -19,7 +19,8 @@ internal object OSInfo {
|
|||||||
private const val PPC = "ppc"
|
private const val PPC = "ppc"
|
||||||
private const val PPC64 = "ppc64"
|
private const val PPC64 = "ppc64"
|
||||||
|
|
||||||
@JvmStatic val nativeSuffix: String get() = "$os-$arch"
|
// on macos we build a universal library that contains arm64 and x64 binaries
|
||||||
|
@JvmStatic val nativeSuffix: String get() = if (os == "darwin") os else "$os-$arch"
|
||||||
|
|
||||||
@JvmStatic val os: String get() = translateOSName(System.getProperty("os.name"))
|
@JvmStatic val os: String get() = translateOSName(System.getProperty("os.name"))
|
||||||
|
|
||||||
|
|||||||
@@ -12,18 +12,20 @@ cd "$(dirname "$0")"
|
|||||||
cd secp256k1
|
cd secp256k1
|
||||||
|
|
||||||
if [ "$TARGET" == "mingw" ]; then
|
if [ "$TARGET" == "mingw" ]; then
|
||||||
CONF_OPTS="CFLAGS=-fPIC --host=x86_64-w64-mingw32"
|
CFLAGS="-fPIC"
|
||||||
|
CONF_OPTS=" --host=x86_64-w64-mingw32"
|
||||||
elif [ "$TARGET" == "linux" ]; then
|
elif [ "$TARGET" == "linux" ]; then
|
||||||
CONF_OPTS="CFLAGS=-fPIC"
|
CFLAGS="-fPIC"
|
||||||
elif [ "$TARGET" == "darwin" ]; then
|
elif [ "$TARGET" == "darwin" ]; then
|
||||||
CONF_OPTS=""
|
CFLAGS="-arch arm64 -arch x86_64"
|
||||||
|
LDFLAGS="-arch arm64 -arch x86_64"
|
||||||
else
|
else
|
||||||
echo "Unknown TARGET=$TARGET"
|
echo "Unknown TARGET=$TARGET"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
./autogen.sh
|
./autogen.sh
|
||||||
./configure $CONF_OPTS --enable-experimental --enable-module_ecdh --enable-module-recovery --enable-module-schnorrsig --enable-module-musig --enable-benchmark=no --enable-shared=no --enable-exhaustive-tests=no --enable-tests=no
|
CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" ./configure $CONF_OPTS --enable-experimental --enable-module_ecdh --enable-module-recovery --enable-module-schnorrsig --enable-module-musig --enable-benchmark=no --enable-shared=no --enable-exhaustive-tests=no --enable-tests=no
|
||||||
make clean
|
make clean
|
||||||
make
|
make
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
#!/bin/bash -x
|
#!/bin/bash -x
|
||||||
|
|
||||||
|
if [[ -z "${VERSION}" ]]; then
|
||||||
|
echo "VERSION is not defined"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
if [ $# -eq 0 ]
|
if [ $# -eq 0 ]
|
||||||
then
|
then
|
||||||
echo "specify either snapshot or release"
|
echo "specify either snapshot or release"
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
#!/bin/bash -x
|
#!/bin/bash -x
|
||||||
|
|
||||||
|
if [[ -z "${VERSION}" ]]; then
|
||||||
|
echo "VERSION is not defined"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
if [ $# -eq 0 ]
|
if [ $# -eq 0 ]
|
||||||
then
|
then
|
||||||
echo "specify either snapshot or release"
|
echo "specify either snapshot or release"
|
||||||
|
|||||||
@@ -21,45 +21,52 @@ mvn deploy:deploy-file -DrepositoryId=ossrh -Durl=https://oss.sonatype.org/conte
|
|||||||
-Djavadoc=$ARTIFACT_ID_BASE-$VERSION-javadoc.jar
|
-Djavadoc=$ARTIFACT_ID_BASE-$VERSION-javadoc.jar
|
||||||
popd
|
popd
|
||||||
pushd .
|
pushd .
|
||||||
for i in iosarm64 iossimulatorarm64 iosx64 jni-android jni-common jni-jvm-darwin jni-jvm-extract jni-jvm-linux jni-jvm-mingw jni-jvm jvm linuxx64; do
|
for i in iosarm64 iossimulatorarm64 iosx64 macosarm64 macosx64 jni-android jni-common jni-jvm-darwin jni-jvm-extract jni-jvm-linux jni-jvm-mingw jni-jvm jvm linuxx64; do
|
||||||
cd fr/acinq/secp256k1/secp256k1-kmp-$i/$VERSION
|
cd fr/acinq/secp256k1/secp256k1-kmp-$i/$VERSION
|
||||||
if [ $i == iosarm64 ] || [ $i == iossimulatorarm64 ] || [ $i == iosx64 ]; then
|
|
||||||
mvn deploy:deploy-file -DrepositoryId=ossrh -Durl=https://oss.sonatype.org/content/repositories/snapshots/ \
|
case $i in
|
||||||
-DpomFile=$ARTIFACT_ID_BASE-$i-$VERSION.pom \
|
iosarm64 | iossimulatorarm64 | iosx64 | macosarm64 | macosx64)
|
||||||
-Dfile=$ARTIFACT_ID_BASE-$i-$VERSION.klib \
|
mvn deploy:deploy-file -DrepositoryId=ossrh -Durl=https://oss.sonatype.org/content/repositories/snapshots/ \
|
||||||
-Dfiles=$ARTIFACT_ID_BASE-$i-$VERSION-metadata.jar,$ARTIFACT_ID_BASE-$i-$VERSION.module,$ARTIFACT_ID_BASE-$i-$VERSION-cinterop-libsecp256k1.klib \
|
-DpomFile=$ARTIFACT_ID_BASE-$i-$VERSION.pom \
|
||||||
-Dtypes=jar,module,klib \
|
-Dfile=$ARTIFACT_ID_BASE-$i-$VERSION.klib \
|
||||||
-Dclassifiers=metadata,,cinterop-libsecp256k1 \
|
-Dfiles=$ARTIFACT_ID_BASE-$i-$VERSION-metadata.jar,$ARTIFACT_ID_BASE-$i-$VERSION.module,$ARTIFACT_ID_BASE-$i-$VERSION-cinterop-libsecp256k1.klib \
|
||||||
-Dsources=$ARTIFACT_ID_BASE-$i-$VERSION-sources.jar \
|
-Dtypes=jar,module,klib \
|
||||||
-Djavadoc=$ARTIFACT_ID_BASE-$i-$VERSION-javadoc.jar
|
-Dclassifiers=metadata,,cinterop-libsecp256k1 \
|
||||||
elif [ $i == linuxx64 ]; then
|
-Dsources=$ARTIFACT_ID_BASE-$i-$VERSION-sources.jar \
|
||||||
mvn deploy:deploy-file -DrepositoryId=ossrh -Durl=https://oss.sonatype.org/content/repositories/snapshots/ \
|
-Djavadoc=$ARTIFACT_ID_BASE-$i-$VERSION-javadoc.jar
|
||||||
-DpomFile=$ARTIFACT_ID_BASE-$i-$VERSION.pom \
|
;;
|
||||||
-Dfile=$ARTIFACT_ID_BASE-$i-$VERSION.klib \
|
linuxx64)
|
||||||
-Dfiles=$ARTIFACT_ID_BASE-$i-$VERSION.module,$ARTIFACT_ID_BASE-$i-$VERSION-cinterop-libsecp256k1.klib \
|
mvn deploy:deploy-file -DrepositoryId=ossrh -Durl=https://oss.sonatype.org/content/repositories/snapshots/ \
|
||||||
-Dtypes=module,klib \
|
-DpomFile=$ARTIFACT_ID_BASE-$i-$VERSION.pom \
|
||||||
-Dclassifiers=,cinterop-libsecp256k1 \
|
-Dfile=$ARTIFACT_ID_BASE-$i-$VERSION.klib \
|
||||||
-Dsources=$ARTIFACT_ID_BASE-$i-$VERSION-sources.jar \
|
-Dfiles=$ARTIFACT_ID_BASE-$i-$VERSION.module,$ARTIFACT_ID_BASE-$i-$VERSION-cinterop-libsecp256k1.klib \
|
||||||
-Djavadoc=$ARTIFACT_ID_BASE-$i-$VERSION-javadoc.jar
|
-Dtypes=module,klib \
|
||||||
elif [ $i == jni-android ]; then
|
-Dclassifiers=,cinterop-libsecp256k1 \
|
||||||
mvn deploy:deploy-file -DrepositoryId=ossrh -Durl=https://oss.sonatype.org/content/repositories/snapshots/ \
|
-Dsources=$ARTIFACT_ID_BASE-$i-$VERSION-sources.jar \
|
||||||
-DpomFile=$ARTIFACT_ID_BASE-$i-$VERSION.pom \
|
-Djavadoc=$ARTIFACT_ID_BASE-$i-$VERSION-javadoc.jar
|
||||||
-Dfile=$ARTIFACT_ID_BASE-$i-$VERSION.aar \
|
;;
|
||||||
-Dfiles=$ARTIFACT_ID_BASE-$i-$VERSION.module \
|
jni-android)
|
||||||
-Dtypes=module \
|
mvn deploy:deploy-file -DrepositoryId=ossrh -Durl=https://oss.sonatype.org/content/repositories/snapshots/ \
|
||||||
-Dclassifiers= \
|
-DpomFile=$ARTIFACT_ID_BASE-$i-$VERSION.pom \
|
||||||
-Dsources=$ARTIFACT_ID_BASE-$i-$VERSION-sources.jar \
|
-Dfile=$ARTIFACT_ID_BASE-$i-$VERSION.aar \
|
||||||
-Djavadoc=$ARTIFACT_ID_BASE-$i-$VERSION-javadoc.jar
|
-Dfiles=$ARTIFACT_ID_BASE-$i-$VERSION.module \
|
||||||
else
|
-Dtypes=module \
|
||||||
mvn deploy:deploy-file -DrepositoryId=ossrh -Durl=https://oss.sonatype.org/content/repositories/snapshots/ \
|
-Dclassifiers= \
|
||||||
-DpomFile=$ARTIFACT_ID_BASE-$i-$VERSION.pom \
|
-Dsources=$ARTIFACT_ID_BASE-$i-$VERSION-sources.jar \
|
||||||
-Dfile=$ARTIFACT_ID_BASE-$i-$VERSION.jar \
|
-Djavadoc=$ARTIFACT_ID_BASE-$i-$VERSION-javadoc.jar
|
||||||
-Dfiles=$ARTIFACT_ID_BASE-$i-$VERSION.module \
|
;;
|
||||||
-Dtypes=module \
|
*)
|
||||||
-Dclassifiers= \
|
mvn deploy:deploy-file -DrepositoryId=ossrh -Durl=https://oss.sonatype.org/content/repositories/snapshots/ \
|
||||||
-Dsources=$ARTIFACT_ID_BASE-$i-$VERSION-sources.jar \
|
-DpomFile=$ARTIFACT_ID_BASE-$i-$VERSION.pom \
|
||||||
-Djavadoc=$ARTIFACT_ID_BASE-$i-$VERSION-javadoc.jar
|
-Dfile=$ARTIFACT_ID_BASE-$i-$VERSION.jar \
|
||||||
fi
|
-Dfiles=$ARTIFACT_ID_BASE-$i-$VERSION.module \
|
||||||
|
-Dtypes=module \
|
||||||
|
-Dclassifiers= \
|
||||||
|
-Dsources=$ARTIFACT_ID_BASE-$i-$VERSION-sources.jar \
|
||||||
|
-Djavadoc=$ARTIFACT_ID_BASE-$i-$VERSION-javadoc.jar
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
popd
|
popd
|
||||||
pushd .
|
pushd .
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -3,9 +3,22 @@
|
|||||||
# first you must sign all files:
|
# first you must sign all files:
|
||||||
# find release -type f -print -exec gpg -ab {} \;
|
# find release -type f -print -exec gpg -ab {} \;
|
||||||
|
|
||||||
VERSION=0.6.2
|
if [[ -z "${VERSION}" ]]; then
|
||||||
|
echo "VERSION is not defined"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "${OSS_USER}" ]]; then
|
||||||
|
echo "OSS_USER is not defined"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -p "Password : " -s OSS_PASSWORD
|
||||||
|
|
||||||
|
|
||||||
for i in secp256k1-kmp \
|
for i in secp256k1-kmp \
|
||||||
secp256k1-kmp-iosarm64 \
|
secp256k1-kmp-iosarm64 \
|
||||||
|
secp256k1-kmp-iossimulatorarm64 \
|
||||||
secp256k1-kmp-iosx64 \
|
secp256k1-kmp-iosx64 \
|
||||||
secp256k1-kmp-jni-android \
|
secp256k1-kmp-jni-android \
|
||||||
secp256k1-kmp-jni-common \
|
secp256k1-kmp-jni-common \
|
||||||
@@ -15,14 +28,14 @@ for i in secp256k1-kmp \
|
|||||||
secp256k1-kmp-jni-jvm-linux \
|
secp256k1-kmp-jni-jvm-linux \
|
||||||
secp256k1-kmp-jni-jvm-mingw \
|
secp256k1-kmp-jni-jvm-mingw \
|
||||||
secp256k1-kmp-jvm \
|
secp256k1-kmp-jvm \
|
||||||
secp256k1-kmp-linux
|
secp256k1-kmp-linuxx64
|
||||||
do
|
do
|
||||||
pushd .
|
pushd .
|
||||||
cd release/fr/acinq/secp256k1/$i/$VERSION
|
cd release/fr/acinq/secp256k1/$i/$VERSION
|
||||||
pwd
|
pwd
|
||||||
jar -cvf bundle.jar *
|
jar -cvf bundle.jar *
|
||||||
# use correct sonatype credentials here
|
# use correct sonatype credentials here
|
||||||
curl -v -XPOST -u USER:PASSWORD --upload-file bundle.jar https://oss.sonatype.org/service/local/staging/bundle_upload
|
curl -v -XPOST -u $OSS_USER:$OSS_PASSWORD --upload-file bundle.jar https://oss.sonatype.org/service/local/staging/bundle_upload
|
||||||
popd
|
popd
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,14 @@ staticLibraries.linux = libsecp256k1.a
|
|||||||
libraryPaths.linux = c/secp256k1/build/linux/ native/build/linux/ native/build/darwin/
|
libraryPaths.linux = c/secp256k1/build/linux/ native/build/linux/ native/build/darwin/
|
||||||
linkerOpts.linux = -L/usr/lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/local/lib
|
linkerOpts.linux = -L/usr/lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/local/lib
|
||||||
|
|
||||||
|
staticLibraries.macos_x64 = libsecp256k1.a
|
||||||
|
libraryPaths.macos_x64 = c/secp256k1/build/darwin/ native/build/darwin/
|
||||||
|
linkerOpts.macos_x64 = -framework Security -framework Foundation
|
||||||
|
|
||||||
|
staticLibraries.macos_arm64 = libsecp256k1.a
|
||||||
|
libraryPaths.macos_arm64 = c/secp256k1/build/darwin/ native/build/darwin/
|
||||||
|
linkerOpts.macos_arm64 = -framework Security -framework Foundation
|
||||||
|
|
||||||
staticLibraries.ios = libsecp256k1.a
|
staticLibraries.ios = libsecp256k1.a
|
||||||
libraryPaths.ios_x64 = c/secp256k1/build/ios/ /usr/local/lib native/build/ios/
|
libraryPaths.ios_x64 = c/secp256k1/build/ios/ /usr/local/lib native/build/ios/
|
||||||
libraryPaths.ios_arm64 = c/secp256k1/build/ios/ /usr/local/lib native/build/ios/
|
libraryPaths.ios_arm64 = c/secp256k1/build/ios/ /usr/local/lib native/build/ios/
|
||||||
|
|||||||
@@ -9,8 +9,11 @@ import secp256k1.*
|
|||||||
public object Secp256k1Native : Secp256k1 {
|
public object Secp256k1Native : Secp256k1 {
|
||||||
|
|
||||||
private val ctx: CPointer<secp256k1_context> by lazy {
|
private val ctx: CPointer<secp256k1_context> by lazy {
|
||||||
secp256k1_context_create((SECP256K1_FLAGS_TYPE_CONTEXT or SECP256K1_FLAGS_BIT_CONTEXT_SIGN or SECP256K1_FLAGS_BIT_CONTEXT_VERIFY).toUInt())
|
val c = secp256k1_context_create((SECP256K1_FLAGS_TYPE_CONTEXT or SECP256K1_FLAGS_BIT_CONTEXT_SIGN or SECP256K1_FLAGS_BIT_CONTEXT_VERIFY).toUInt())
|
||||||
?: error("Could not create secp256k1 context")
|
?: error("Could not create secp256k1 context")
|
||||||
|
val callback = staticCFunction { _: CPointer<ByteVar>?, _: COpaquePointer? -> }
|
||||||
|
secp256k1_context_set_illegal_callback(c, callback, null)
|
||||||
|
c
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Int.requireSuccess(message: String): Int = if (this != 1) throw Secp256k1Exception(message) else this
|
private fun Int.requireSuccess(message: String): Int = if (this != 1) throw Secp256k1Exception(message) else this
|
||||||
|
|||||||
@@ -57,6 +57,8 @@ kotlin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
linuxX64()
|
linuxX64()
|
||||||
|
macosX64()
|
||||||
|
macosArm64()
|
||||||
iosX64()
|
iosX64()
|
||||||
iosArm64()
|
iosArm64()
|
||||||
iosSimulatorArm64()
|
iosSimulatorArm64()
|
||||||
|
|||||||
@@ -520,6 +520,29 @@ class Secp256k1Test {
|
|||||||
-1
|
-1
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
assertFails {
|
||||||
|
val privkeys = listOf(
|
||||||
|
"0101010101010101010101010101010101010101010101010101010101010101",
|
||||||
|
"0202020202020202020202020202020202020202020202020202020202020202",
|
||||||
|
).map { Hex.decode(it) }.toTypedArray()
|
||||||
|
val pubkeys = privkeys.map { Secp256k1.pubkeyCreate(it) }
|
||||||
|
|
||||||
|
val sessionId = Hex.decode("0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F")
|
||||||
|
val nonces = pubkeys.map { Secp256k1.musigNonceGen(sessionId, null, it, null, null, null) }
|
||||||
|
val secnonces = nonces.map { it.copyOfRange(0, 132) }
|
||||||
|
val pubnonces = nonces.map { it.copyOfRange(132, 132 + 66) }
|
||||||
|
val aggnonce = Secp256k1.musigNonceAgg(pubnonces.toTypedArray())
|
||||||
|
|
||||||
|
val keyaggCaches = (0 until 2).map { ByteArray(Secp256k1.MUSIG2_PUBLIC_KEYAGG_CACHE_SIZE) }
|
||||||
|
val aggpubkey = Secp256k1.musigPubkeyAgg(pubkeys.toTypedArray(), keyaggCaches[0])
|
||||||
|
assertContentEquals(aggpubkey, Secp256k1.musigPubkeyAgg(pubkeys.toTypedArray(), keyaggCaches[1]))
|
||||||
|
assertContentEquals(keyaggCaches[0], keyaggCaches[1])
|
||||||
|
val msg32 = Hex.decode("0303030303030303030303030303030303030303030303030303030303030303")
|
||||||
|
val sessions = (0 until 2).map { Secp256k1.musigNonceProcess(aggnonce, msg32, keyaggCaches[it]) }
|
||||||
|
|
||||||
|
// we sign with the wrong secret nonce. it should fail (i.e. trigger an exception) but not crash the JVM
|
||||||
|
Secp256k1.musigPartialSign(secnonces[1], privkeys[0], keyaggCaches[0], sessions[0])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user