Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(secp256k1): add library to be our dependency for secp256k1 in js #75

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitleaksignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,6 @@ a3cb543f5569a83597a4fcada367914beb55ed70:base-asymmetric-encryption/src/commonTe
c8e0b0e540e5b35e2b87be63d3866895afc2e709:base-asymmetric-encryption/src/commonMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMECSecp256k1KeyPair.kt:generic-api-key:4
c8e0b0e540e5b35e2b87be63d3866895afc2e709:ecdsa/src/commonTest/kotlin/io/iohk/atala/prism/apollo/ecdsa/KMMECDSATests.kt:generic-api-key:125
4227c2c7612f2f209438746185751419f9e52efc:base-asymmetric-encryption/src/commonMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519KeyPair.kt:generic-api-key:4
cdc2fd1aed19fe56bf1c0bf08c8cbb5f34a2f344:base-asymmetric-encryption/src/commonTest/kotlin/io/iohk/atala/prism/apollo/utils/GenerateECKeyPairTests.kt:generic-api-key:58
cdc2fd1aed19fe56bf1c0bf08c8cbb5f34a2f344:base-asymmetric-encryption/src/commonTest/kotlin/io/iohk/atala/prism/apollo/utils/Secp256k1LibTests.kt:generic-api-key:34
cdc2fd1aed19fe56bf1c0bf08c8cbb5f34a2f344:base-asymmetric-encryption/src/commonTest/kotlin/io/iohk/atala/prism/apollo/utils/Secp256k1LibTests.kt:generic-api-key:43
4 changes: 2 additions & 2 deletions base-asymmetric-encryption/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ kotlin {
val commonTest by getting {
dependencies {
implementation(kotlin("test"))
implementation(project(":base64"))
}
}
val jvmMain by getting {
Expand All @@ -160,8 +161,7 @@ kotlin {
dependencies {
implementation(npm("elliptic", "6.5.4"))
implementation(npm("@types/elliptic", "6.4.14"))
implementation(npm("bip32", "2.0.6"))
implementation(npm("bip39", "3.0.4"))
implementation(npm("@noble/secp256k1", "2.0.0"))

// Polyfill dependencies
implementation(npm("stream-browserify", "3.0.0"))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,252 @@
// Automatically generated by dukat and then slightly adjusted manually to make it compile
@file:Suppress("ktlint")
// @file:Suppress("INTERFACE_WITH_SUPERCLASS", "OVERRIDING_FINAL_MEMBER", "RETURN_TYPE_MISMATCH_ON_OVERRIDE", "CONFLICTING_OVERLOADS")
@file:JsModule("@noble/secp256k1")
/* ktlint-disable */
package io.iohk.atala.prism.apollo.utils.external.secp256k1

import kotlin.js.*
import org.khronos.webgl.*
import org.w3c.dom.*
import org.w3c.dom.events.*
import org.w3c.dom.parsing.*
import org.w3c.dom.svg.*
import org.w3c.dom.url.*
import org.w3c.fetch.*
import org.w3c.files.*
import org.w3c.notifications.*
import org.w3c.performance.*
import org.w3c.workers.*
import org.w3c.xhr.*
import org.khronos.webgl.Uint8Array

external object CURVE {
var p: Any
var n: Any
var a: Any
var b: Any
var Gx: Any
var Gy: Any
}

external interface AffinePoint {
var x: Any
var y: Any
}

external open class Point(px: Any, py: Any, pz: Any) {
open var px: Any
open var py: Any
open var pz: Any
open fun equals(other: Point): Boolean
open fun negate(): Point
open fun double(): Point
open fun add(other: Point): Point
open fun mul(n: Any, safe: Boolean = definedExternally): Point
open fun mulAddQUns(R: Point, u1: Any, u2: Any): Point
open fun toAffine(): AffinePoint
open fun assertValidity(): Point
open fun multiply(n: Any): Point
open fun aff(): AffinePoint
open fun ok(): Point
open fun toHex(isCompressed: Boolean = definedExternally): String
open fun toRawBytes(isCompressed: Boolean = definedExternally): Uint8Array

companion object {
var BASE: Point
var ZERO: Point
fun fromAffine(p: AffinePoint): Point
fun fromHex(hex: Uint8Array): Point
fun fromHex(hex: String): Point
fun fromPrivateKey(k: Uint8Array): Point
fun fromPrivateKey(k: String): Point
fun fromPrivateKey(k: Any): Point
}
}

external fun getPublicKey(privKey: Uint8Array, isCompressed: Boolean = definedExternally): Uint8Array

external fun getPublicKey(privKey: Uint8Array): Uint8Array

external fun getPublicKey(privKey: String, isCompressed: Boolean = definedExternally): Uint8Array

external fun getPublicKey(privKey: String): Uint8Array

external fun getPublicKey(privKey: Any, isCompressed: Boolean = definedExternally): Uint8Array

external fun getPublicKey(privKey: Any): Uint8Array

external open class Signature(r: Any, s: Any, recovery: Number? = definedExternally) {
open var r: Any
open var s: Any
open var recovery: Number?
open fun assertValidity(): Signature /* this */
open fun addRecoveryBit(rec: Number): Signature /* Signature & `T$2` */
open fun hasHighS(): Boolean
open fun recoverPublicKey(msgh: Uint8Array): Point
open fun recoverPublicKey(msgh: String): Point
open fun toCompactRawBytes(): Uint8Array
open fun toCompactHex(): String

companion object {
fun fromCompact(hex: Uint8Array): Signature
fun fromCompact(hex: String): Signature
}
}

external interface `T$0` {
var lowS: Boolean?
get() = definedExternally
set(value) = definedExternally
var extraEntropy: dynamic /* Boolean? | Uint8Array? | String? */
get() = definedExternally
set(value) = definedExternally
}

external fun signAsync(msgh: Uint8Array, priv: Uint8Array, opts: `T$0` = definedExternally): Promise<Signature /* Signature & `T$2` */>

external fun signAsync(msgh: Uint8Array, priv: Uint8Array): Promise<Signature /* Signature & `T$2` */>

external fun signAsync(msgh: Uint8Array, priv: String, opts: `T$0` = definedExternally): Promise<Signature /* Signature & `T$2` */>

external fun signAsync(msgh: Uint8Array, priv: String): Promise<Signature /* Signature & `T$2` */>

external fun signAsync(msgh: Uint8Array, priv: Any, opts: `T$0` = definedExternally): Promise<Signature /* Signature & `T$2` */>

external fun signAsync(msgh: Uint8Array, priv: Any): Promise<Signature /* Signature & `T$2` */>

external fun signAsync(msgh: String, priv: Uint8Array, opts: `T$0` = definedExternally): Promise<Signature /* Signature & `T$2` */>

external fun signAsync(msgh: String, priv: Uint8Array): Promise<Signature /* Signature & `T$2` */>

external fun signAsync(msgh: String, priv: String, opts: `T$0` = definedExternally): Promise<Signature /* Signature & `T$2` */>

external fun signAsync(msgh: String, priv: String): Promise<Signature /* Signature & `T$2` */>

external fun signAsync(msgh: String, priv: Any, opts: `T$0` = definedExternally): Promise<Signature /* Signature & `T$2` */>

external fun signAsync(msgh: String, priv: Any): Promise<Signature /* Signature & `T$2` */>

external fun sign(msgh: Uint8Array, priv: Uint8Array, opts: `T$0` = definedExternally): Signature /* Signature & `T$2` */

external fun sign(msgh: Uint8Array, priv: Uint8Array): Signature /* Signature & `T$2` */

external fun sign(msgh: Uint8Array, priv: String, opts: `T$0` = definedExternally): Signature /* Signature & `T$2` */

external fun sign(msgh: Uint8Array, priv: String): Signature /* Signature & `T$2` */

external fun sign(msgh: Uint8Array, priv: Any, opts: `T$0` = definedExternally): Signature /* Signature & `T$2` */

external fun sign(msgh: Uint8Array, priv: Any): Signature /* Signature & `T$2` */

external fun sign(msgh: String, priv: Uint8Array, opts: `T$0` = definedExternally): Signature /* Signature & `T$2` */

external fun sign(msgh: String, priv: Uint8Array): Signature /* Signature & `T$2` */

external fun sign(msgh: String, priv: String, opts: `T$0` = definedExternally): Signature /* Signature & `T$2` */

external fun sign(msgh: String, priv: String): Signature /* Signature & `T$2` */

external fun sign(msgh: String, priv: Any, opts: `T$0` = definedExternally): Signature /* Signature & `T$2` */

external fun sign(msgh: String, priv: Any): Signature /* Signature & `T$2` */

external interface SigLike {
var r: Any
var s: Any
}

external interface `T$1` {
var lowS: Boolean?
get() = definedExternally
set(value) = definedExternally
}

external fun verify(sig: Uint8Array, msgh: Uint8Array, pub: Uint8Array, opts: `T$1` = definedExternally): Boolean

external fun verify(sig: Uint8Array, msgh: Uint8Array, pub: Uint8Array): Boolean

external fun verify(sig: Uint8Array, msgh: Uint8Array, pub: String, opts: `T$1` = definedExternally): Boolean

external fun verify(sig: Uint8Array, msgh: Uint8Array, pub: String): Boolean

external fun verify(sig: Uint8Array, msgh: String, pub: Uint8Array, opts: `T$1` = definedExternally): Boolean

external fun verify(sig: Uint8Array, msgh: String, pub: Uint8Array): Boolean

external fun verify(sig: Uint8Array, msgh: String, pub: String, opts: `T$1` = definedExternally): Boolean

external fun verify(sig: Uint8Array, msgh: String, pub: String): Boolean

external fun verify(sig: String, msgh: Uint8Array, pub: Uint8Array, opts: `T$1` = definedExternally): Boolean

external fun verify(sig: String, msgh: Uint8Array, pub: Uint8Array): Boolean

external fun verify(sig: String, msgh: Uint8Array, pub: String, opts: `T$1` = definedExternally): Boolean

external fun verify(sig: String, msgh: Uint8Array, pub: String): Boolean

external fun verify(sig: String, msgh: String, pub: Uint8Array, opts: `T$1` = definedExternally): Boolean

external fun verify(sig: String, msgh: String, pub: Uint8Array): Boolean

external fun verify(sig: String, msgh: String, pub: String, opts: `T$1` = definedExternally): Boolean

external fun verify(sig: String, msgh: String, pub: String): Boolean

external fun verify(sig: SigLike, msgh: Uint8Array, pub: Uint8Array, opts: `T$1` = definedExternally): Boolean

external fun verify(sig: SigLike, msgh: Uint8Array, pub: Uint8Array): Boolean

external fun verify(sig: SigLike, msgh: Uint8Array, pub: String, opts: `T$1` = definedExternally): Boolean

external fun verify(sig: SigLike, msgh: Uint8Array, pub: String): Boolean

external fun verify(sig: SigLike, msgh: String, pub: Uint8Array, opts: `T$1` = definedExternally): Boolean

external fun verify(sig: SigLike, msgh: String, pub: Uint8Array): Boolean

external fun verify(sig: SigLike, msgh: String, pub: String, opts: `T$1` = definedExternally): Boolean

external fun verify(sig: SigLike, msgh: String, pub: String): Boolean

external fun getSharedSecret(privA: Uint8Array, pubB: Uint8Array, isCompressed: Boolean = definedExternally): Uint8Array

external fun getSharedSecret(privA: Uint8Array, pubB: Uint8Array): Uint8Array

external fun getSharedSecret(privA: Uint8Array, pubB: String, isCompressed: Boolean = definedExternally): Uint8Array

external fun getSharedSecret(privA: Uint8Array, pubB: String): Uint8Array

external fun getSharedSecret(privA: String, pubB: Uint8Array, isCompressed: Boolean = definedExternally): Uint8Array

external fun getSharedSecret(privA: String, pubB: Uint8Array): Uint8Array

external fun getSharedSecret(privA: String, pubB: String, isCompressed: Boolean = definedExternally): Uint8Array

external fun getSharedSecret(privA: String, pubB: String): Uint8Array

external fun hashToPrivateKey(hash: Uint8Array): Uint8Array

external fun hashToPrivateKey(hash: String): Uint8Array

external object etc {
var hexToBytes: (hex: String) -> Uint8Array
var bytesToHex: (b: Uint8Array) -> String
var concatBytes: (arrs: Uint8Array) -> Uint8Array
var bytesToNumberBE: (b: Uint8Array) -> Any
var numberToBytesBE: (num: Any) -> Uint8Array
var mod: (a: Any, b: Any) -> Any
var invert: (num: Any, md: Any) -> Any
var hmacSha256Async: (key: Uint8Array, msgs: Uint8Array) -> Promise<Uint8Array>
var hmacSha256Sync: ((key: Uint8Array, msgs: Uint8Array) -> Uint8Array)?
var hashToPrivateKey: Any
var randomBytes: (len: Number) -> Uint8Array
}

external object utils {
var normPrivateKeyToScalar: (p: dynamic /* Uint8Array | String | Any */) -> Any
var isValidPrivateKey: (key: dynamic /* Uint8Array | String */) -> Boolean
var randomPrivateKey: () -> Uint8Array
fun precompute(w: Number = definedExternally, p: Point = definedExternally): Point
}
7 changes: 5 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -66,23 +66,26 @@ subprojects {
"/github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/Curve.kt",
"/github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/PresetCurve.kt",
"/github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/Ellipticjs.kt",
"./github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/secp256k1js.kt",

"github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/**",
"github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/*",
"github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/BNjs.kt",
"github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/Curve.kt",
"github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/PresetCurve.kt",
"github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/Ellipticjs.kt",
"./github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/secp256k1js.kt",

"./github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/**",
"./github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/*",
"./github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/BNjs.kt",
"./github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/Curve.kt",
"./github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/PresetCurve.kt",
"./github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/Ellipticjs.kt"
"./github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/Ellipticjs.kt",
"./github/workspace/base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/secp256k1js.kt"
)
exclude {
it.file.toString() == "BNjs.kt" || it.file.toString() == "Curve.kt" || it.file.toString() == "PresetCurve.kt" || it.file.toString() == "Ellipticjs.kt"
it.file.toString() == "BNjs.kt" || it.file.toString() == "Curve.kt" || it.file.toString() == "PresetCurve.kt" || it.file.toString() == "Ellipticjs.kt" || it.file.toString() == "secp256k1js.kt"
}
exclude("./base-asymmetric-encryption/src/jsMain/kotlin/io/iohk/atala/prism/apollo/utils/external/**")
exclude {
Expand Down
Loading