Added signing
This commit is contained in:
parent
d4955dc7cd
commit
7f703aa6b9
1502
multiplatform-crypto-libsodium-bindings/hs_err_pid2945029.log
Normal file
1502
multiplatform-crypto-libsodium-bindings/hs_err_pid2945029.log
Normal file
File diff suppressed because it is too large
Load Diff
1501
multiplatform-crypto-libsodium-bindings/hs_err_pid2945645.log
Normal file
1501
multiplatform-crypto-libsodium-bindings/hs_err_pid2945645.log
Normal file
File diff suppressed because it is too large
Load Diff
1529
multiplatform-crypto-libsodium-bindings/hs_err_pid2945854.log
Normal file
1529
multiplatform-crypto-libsodium-bindings/hs_err_pid2945854.log
Normal file
File diff suppressed because it is too large
Load Diff
@ -42,6 +42,16 @@ class Blake2bState : Structure() {
|
|||||||
val opaque = ByteArray(384)
|
val opaque = ByteArray(384)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//typedef struct crypto_sign_ed25519ph_state {
|
||||||
|
// crypto_hash_sha512_state hs;
|
||||||
|
//} crypto_sign_ed25519ph_state;
|
||||||
|
class Ed25519SignatureState : Structure() {
|
||||||
|
override fun getFieldOrder() = listOf("hs")
|
||||||
|
|
||||||
|
@JvmField
|
||||||
|
var hs: Hash512State = Hash512State()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// typedef struct crypto_secretstream_xchacha20poly1305_state {
|
// typedef struct crypto_secretstream_xchacha20poly1305_state {
|
||||||
// unsigned char k[crypto_stream_chacha20_ietf_KEYBYTES];
|
// unsigned char k[crypto_stream_chacha20_ietf_KEYBYTES];
|
||||||
@ -785,7 +795,7 @@ interface JnaLibsodiumInterface : Library {
|
|||||||
publicKey: ByteArray,
|
publicKey: ByteArray,
|
||||||
secretKey: ByteArray,
|
secretKey: ByteArray,
|
||||||
seed: ByteArray
|
seed: ByteArray
|
||||||
) : Int
|
): Int
|
||||||
|
|
||||||
// int crypto_box_easy(unsigned char *c, const unsigned char *m,
|
// int crypto_box_easy(unsigned char *c, const unsigned char *m,
|
||||||
// unsigned long long mlen, const unsigned char *n,
|
// unsigned long long mlen, const unsigned char *n,
|
||||||
@ -797,7 +807,7 @@ interface JnaLibsodiumInterface : Library {
|
|||||||
nonce: ByteArray,
|
nonce: ByteArray,
|
||||||
recipientPublicKey: ByteArray,
|
recipientPublicKey: ByteArray,
|
||||||
senderSecretKey: ByteArray
|
senderSecretKey: ByteArray
|
||||||
) : Int
|
): Int
|
||||||
|
|
||||||
// int crypto_box_open_easy(unsigned char *m, const unsigned char *c,
|
// int crypto_box_open_easy(unsigned char *m, const unsigned char *c,
|
||||||
// unsigned long long clen, const unsigned char *n,
|
// unsigned long long clen, const unsigned char *n,
|
||||||
@ -809,7 +819,7 @@ interface JnaLibsodiumInterface : Library {
|
|||||||
nonce: ByteArray,
|
nonce: ByteArray,
|
||||||
senderPublickKey: ByteArray,
|
senderPublickKey: ByteArray,
|
||||||
recipientSecretKey: ByteArray
|
recipientSecretKey: ByteArray
|
||||||
) : Int
|
): Int
|
||||||
|
|
||||||
// int crypto_box_detached(unsigned char *c, unsigned char *mac,
|
// int crypto_box_detached(unsigned char *c, unsigned char *mac,
|
||||||
// const unsigned char *m, unsigned long long mlen,
|
// const unsigned char *m, unsigned long long mlen,
|
||||||
@ -823,7 +833,7 @@ interface JnaLibsodiumInterface : Library {
|
|||||||
nonce: ByteArray,
|
nonce: ByteArray,
|
||||||
recipientPublicKey: ByteArray,
|
recipientPublicKey: ByteArray,
|
||||||
senderSecretKey: ByteArray
|
senderSecretKey: ByteArray
|
||||||
) : Int
|
): Int
|
||||||
|
|
||||||
// int crypto_box_open_detached(
|
// int crypto_box_open_detached(
|
||||||
// unsigned char *m, const unsigned char *c,
|
// unsigned char *m, const unsigned char *c,
|
||||||
@ -840,7 +850,7 @@ interface JnaLibsodiumInterface : Library {
|
|||||||
nonce: ByteArray,
|
nonce: ByteArray,
|
||||||
senderPublickKey: ByteArray,
|
senderPublickKey: ByteArray,
|
||||||
recipientSecretKey: ByteArray
|
recipientSecretKey: ByteArray
|
||||||
) : Int
|
): Int
|
||||||
|
|
||||||
// int crypto_box_beforenm(unsigned char *k, const unsigned char *pk,
|
// int crypto_box_beforenm(unsigned char *k, const unsigned char *pk,
|
||||||
// const unsigned char *sk)
|
// const unsigned char *sk)
|
||||||
@ -848,7 +858,8 @@ interface JnaLibsodiumInterface : Library {
|
|||||||
sessionKey: ByteArray,
|
sessionKey: ByteArray,
|
||||||
publicKey: ByteArray,
|
publicKey: ByteArray,
|
||||||
secretKey: ByteArray
|
secretKey: ByteArray
|
||||||
) : Int
|
): Int
|
||||||
|
|
||||||
// int crypto_box_easy_afternm(unsigned char *c, const unsigned char *m,
|
// int crypto_box_easy_afternm(unsigned char *c, const unsigned char *m,
|
||||||
// unsigned long long mlen, const unsigned char *n,
|
// unsigned long long mlen, const unsigned char *n,
|
||||||
// const unsigned char *k)
|
// const unsigned char *k)
|
||||||
@ -858,7 +869,7 @@ interface JnaLibsodiumInterface : Library {
|
|||||||
messageLength: Long,
|
messageLength: Long,
|
||||||
nonce: ByteArray,
|
nonce: ByteArray,
|
||||||
sessionKey: ByteArray
|
sessionKey: ByteArray
|
||||||
) : Int
|
): Int
|
||||||
|
|
||||||
// int crypto_box_open_easy_afternm(unsigned char *m, const unsigned char *c,
|
// int crypto_box_open_easy_afternm(unsigned char *m, const unsigned char *c,
|
||||||
// unsigned long long clen, const unsigned char *n,
|
// unsigned long long clen, const unsigned char *n,
|
||||||
@ -869,7 +880,8 @@ interface JnaLibsodiumInterface : Library {
|
|||||||
ciphertextLength: Long,
|
ciphertextLength: Long,
|
||||||
nonce: ByteArray,
|
nonce: ByteArray,
|
||||||
sessionKey: ByteArray
|
sessionKey: ByteArray
|
||||||
) : Int
|
): Int
|
||||||
|
|
||||||
// int crypto_box_seal(unsigned char *c, const unsigned char *m,
|
// int crypto_box_seal(unsigned char *c, const unsigned char *m,
|
||||||
// unsigned long long mlen, const unsigned char *pk)
|
// unsigned long long mlen, const unsigned char *pk)
|
||||||
fun crypto_box_seal(
|
fun crypto_box_seal(
|
||||||
@ -877,7 +889,7 @@ interface JnaLibsodiumInterface : Library {
|
|||||||
message: ByteArray,
|
message: ByteArray,
|
||||||
messageLength: Long,
|
messageLength: Long,
|
||||||
recipientPublicKey: ByteArray
|
recipientPublicKey: ByteArray
|
||||||
) : Int
|
): Int
|
||||||
|
|
||||||
|
|
||||||
// int crypto_box_seal_open(unsigned char *m, const unsigned char *c,
|
// int crypto_box_seal_open(unsigned char *m, const unsigned char *c,
|
||||||
@ -889,25 +901,124 @@ interface JnaLibsodiumInterface : Library {
|
|||||||
ciphertextLength: Long,
|
ciphertextLength: Long,
|
||||||
senderPublickKey: ByteArray,
|
senderPublickKey: ByteArray,
|
||||||
recipientSecretKey: ByteArray
|
recipientSecretKey: ByteArray
|
||||||
) : Int
|
): Int
|
||||||
//
|
//
|
||||||
// // ---- Box end ----
|
// // ---- Box end ----
|
||||||
//
|
//
|
||||||
// // ---- Sign start ----
|
// // ---- Sign start ----
|
||||||
// fun crypto_sign(message: Uint8Array, secretKey: Uint8Array) : Uint8Array
|
|
||||||
// fun crypto_sign_detached(message: Uint8Array, secretKey: Uint8Array) : Uint8Array
|
// int crypto_sign(
|
||||||
// fun crypto_sign_ed25519_pk_to_curve25519(ed25519PublicKey: Uint8Array) : Uint8Array
|
// unsigned char *sm, unsigned long long *smlen_p,
|
||||||
// fun crypto_sign_ed25519_sk_to_curve25519(ed25519SecretKey: Uint8Array) : Uint8Array
|
// const unsigned char *m, unsigned long long mlen,
|
||||||
// fun crypto_sign_ed25519_sk_to_pk(ed25519SecretKey: Uint8Array) : Uint8Array
|
// const unsigned char *sk)
|
||||||
// fun crypto_sign_ed25519_sk_to_seed(ed25519SecretKey: Uint8Array) : Uint8Array
|
fun crypto_sign(
|
||||||
// fun crypto_sign_final_create(state: dynamic, secretKey: Uint8Array) : Uint8Array
|
signedMessage: ByteArray,
|
||||||
// fun crypto_sign_final_verify(state: dynamic, signature: Uint8Array, publicKey: Uint8Array) : Boolean
|
signedMessageLength: LongArray?,
|
||||||
// fun crypto_sign_init() : dynamic
|
message: ByteArray,
|
||||||
// fun crypto_sign_keypair() : dynamic
|
messageLength: Long,
|
||||||
// fun crypto_sign_open(signedMessage: Uint8Array, publicKey: Uint8Array) : Uint8Array
|
secretKey: ByteArray
|
||||||
// fun crypto_sign_seed_keypair(seed: Uint8Array) : dynamic
|
) : Int
|
||||||
// fun crypto_sign_update(state: dynamic, message: Uint8Array)
|
// int crypto_sign_open(
|
||||||
// fun crypto_sign_verify_detached(signature: Uint8Array, message: Uint8Array, publicKey: Uint8Array) : Boolean
|
// unsigned char *m, unsigned long long *mlen_p,
|
||||||
|
// const unsigned char *sm, unsigned long long smlen,
|
||||||
|
// const unsigned char *pk)
|
||||||
|
fun crypto_sign_open(
|
||||||
|
message: ByteArray,
|
||||||
|
messageLength: LongArray?,
|
||||||
|
signedMessage: ByteArray,
|
||||||
|
signedMessageLength: Long,
|
||||||
|
publicKey: ByteArray
|
||||||
|
) : Int
|
||||||
|
// int crypto_sign_detached(
|
||||||
|
// unsigned char *sig, unsigned long long *siglen_p,
|
||||||
|
// const unsigned char *m, unsigned long long mlen,
|
||||||
|
// const unsigned char *sk)
|
||||||
|
fun crypto_sign_detached(
|
||||||
|
signature: ByteArray,
|
||||||
|
signatureLength: LongArray?,
|
||||||
|
message: ByteArray,
|
||||||
|
messageLength: Long,
|
||||||
|
secretKey: ByteArray
|
||||||
|
) : Int
|
||||||
|
// int crypto_sign_verify_detached(
|
||||||
|
// const unsigned char *sig,
|
||||||
|
// const unsigned char *m,
|
||||||
|
// unsigned long long mlen,
|
||||||
|
// const unsigned char *pk)
|
||||||
|
fun crypto_sign_verify_detached(
|
||||||
|
signature: ByteArray,
|
||||||
|
message: ByteArray,
|
||||||
|
messageLength: Long,
|
||||||
|
publicKey: ByteArray
|
||||||
|
) : Int
|
||||||
|
// int crypto_sign_ed25519_pk_to_curve25519(
|
||||||
|
// unsigned char *curve25519_pk,
|
||||||
|
// const unsigned char *ed25519_pk)
|
||||||
|
fun crypto_sign_ed25519_pk_to_curve25519(
|
||||||
|
curve25519PublicKey: ByteArray,
|
||||||
|
ed25519PublicKey: ByteArray
|
||||||
|
) : Int
|
||||||
|
|
||||||
|
// int crypto_sign_ed25519_sk_to_curve25519(unsigned char *curve25519_sk,
|
||||||
|
// const unsigned char *ed25519_sk)
|
||||||
|
fun crypto_sign_ed25519_sk_to_curve25519(
|
||||||
|
curve25519SecretKey: ByteArray,
|
||||||
|
ed25519SecretKey: ByteArray
|
||||||
|
) : Int
|
||||||
|
|
||||||
|
// int crypto_sign_ed25519_sk_to_pk(unsigned char *pk, const unsigned char *sk)
|
||||||
|
fun crypto_sign_ed25519_sk_to_pk(
|
||||||
|
ed25519PublicKey: ByteArray,
|
||||||
|
ed25519SecretKey: ByteArray
|
||||||
|
) : Int
|
||||||
|
// int crypto_sign_ed25519_sk_to_seed(unsigned char *seed,
|
||||||
|
// const unsigned char *sk)
|
||||||
|
fun crypto_sign_ed25519_sk_to_seed(
|
||||||
|
seed: ByteArray,
|
||||||
|
ed25519SecretKey: ByteArray
|
||||||
|
) : Int
|
||||||
|
// int crypto_sign_init(crypto_sign_state *state);
|
||||||
|
fun crypto_sign_init(state: Ed25519SignatureState)
|
||||||
|
|
||||||
|
// int crypto_sign_update(crypto_sign_state *state,
|
||||||
|
// const unsigned char *m, unsigned long long mlen)
|
||||||
|
fun crypto_sign_update(
|
||||||
|
state: Ed25519SignatureState,
|
||||||
|
message: ByteArray,
|
||||||
|
messageLength: Long
|
||||||
|
) : Int
|
||||||
|
// int crypto_sign_final_create(crypto_sign_state *state, unsigned char *sig,
|
||||||
|
// unsigned long long *siglen_p,
|
||||||
|
// const unsigned char *sk)
|
||||||
|
fun crypto_sign_final_create(
|
||||||
|
state: Ed25519SignatureState,
|
||||||
|
signature: ByteArray,
|
||||||
|
signatureLength: LongArray?,
|
||||||
|
secretKey: ByteArray
|
||||||
|
) : Int
|
||||||
|
// int crypto_sign_final_verify(crypto_sign_state *state, const unsigned char *sig,
|
||||||
|
// const unsigned char *pk)
|
||||||
|
fun crypto_sign_final_verify(
|
||||||
|
state: Ed25519SignatureState,
|
||||||
|
signature: ByteArray,
|
||||||
|
publicKey: ByteArray
|
||||||
|
) : Int
|
||||||
|
// int crypto_sign_keypair(unsigned char *pk, unsigned char *sk)
|
||||||
|
fun crypto_sign_keypair(
|
||||||
|
publicKey: ByteArray, secretKey: ByteArray
|
||||||
|
)
|
||||||
|
// int crypto_sign_seed_keypair(unsigned char *pk, unsigned char *sk,
|
||||||
|
// const unsigned char *seed)
|
||||||
|
fun crypto_sign_seed_keypair(
|
||||||
|
publicKey: ByteArray,
|
||||||
|
secretKey: ByteArray,
|
||||||
|
seed: ByteArray
|
||||||
|
) : Int
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// // ---- Sign end ----
|
// // ---- Sign end ----
|
||||||
@ -930,18 +1041,7 @@ interface JnaLibsodiumInterface : Library {
|
|||||||
//
|
//
|
||||||
// // ---- Password hashing end ----
|
// // ---- Password hashing end ----
|
||||||
//
|
//
|
||||||
// // ---- Utils ----
|
|
||||||
//
|
|
||||||
// fun memcmp(first: Uint8Array, second: Uint8Array) : Boolean
|
|
||||||
// fun memzero(data: Uint8Array)
|
|
||||||
// fun pad(data : Uint8Array, blocksize: Int) : Uint8Array
|
|
||||||
// fun unpad(data: Uint8Array, blocksize: Int) : Uint8Array
|
|
||||||
// fun to_base64(data: Uint8Array, variant: Int) : String
|
|
||||||
// fun to_hex(data: Uint8Array) : String
|
|
||||||
// fun to_string(data: Uint8Array) : String
|
|
||||||
// fun from_base64(data: String, variant: Int): Uint8Array
|
|
||||||
// fun from_hex(data : String): Uint8Array
|
|
||||||
// fun from_string(data : String): Uint8Array
|
|
||||||
//
|
//
|
||||||
// // ---- > ---- Random ---- < -----
|
// // ---- > ---- Random ---- < -----
|
||||||
//
|
//
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package com.ionspin.kotlin.crypto.signature
|
package com.ionspin.kotlin.crypto.signature
|
||||||
|
|
||||||
import com.goterl.lazycode.lazysodium.interfaces.Sign
|
import com.ionspin.kotlin.crypto.Ed25519SignatureState
|
||||||
import com.ionspin.kotlin.crypto.LibsodiumInitializer.sodium
|
import com.ionspin.kotlin.crypto.LibsodiumInitializer.sodiumJna
|
||||||
|
|
||||||
actual typealias SignatureState = Sign.StateCryptoSign
|
actual typealias SignatureState = Ed25519SignatureState
|
||||||
|
|
||||||
actual object Signature {
|
actual object Signature {
|
||||||
actual fun init(): SignatureState {
|
actual fun init(): SignatureState {
|
||||||
@ -11,7 +11,7 @@ actual object Signature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
actual fun update(state: SignatureState, data: UByteArray) {
|
actual fun update(state: SignatureState, data: UByteArray) {
|
||||||
sodium.crypto_sign_update(state, data.asByteArray(), data.size.toLong())
|
sodiumJna.crypto_sign_update(state, data.asByteArray(), data.size.toLong())
|
||||||
}
|
}
|
||||||
|
|
||||||
actual fun finalCreate(
|
actual fun finalCreate(
|
||||||
@ -19,7 +19,7 @@ actual object Signature {
|
|||||||
secretKey: UByteArray
|
secretKey: UByteArray
|
||||||
): UByteArray {
|
): UByteArray {
|
||||||
val signature = UByteArray(crypto_sign_BYTES)
|
val signature = UByteArray(crypto_sign_BYTES)
|
||||||
sodium.crypto_sign_final_create(
|
sodiumJna.crypto_sign_final_create(
|
||||||
state,
|
state,
|
||||||
signature.asByteArray(),
|
signature.asByteArray(),
|
||||||
null,
|
null,
|
||||||
@ -33,7 +33,7 @@ actual object Signature {
|
|||||||
signature: UByteArray,
|
signature: UByteArray,
|
||||||
publicKey: UByteArray
|
publicKey: UByteArray
|
||||||
) {
|
) {
|
||||||
val verificationResult = sodium.crypto_sign_final_verify(
|
val verificationResult = sodiumJna.crypto_sign_final_verify(
|
||||||
state,
|
state,
|
||||||
signature.asByteArray(),
|
signature.asByteArray(),
|
||||||
publicKey.asByteArray()
|
publicKey.asByteArray()
|
||||||
@ -50,7 +50,7 @@ actual object Signature {
|
|||||||
actual fun keypair(): SignatureKeyPair {
|
actual fun keypair(): SignatureKeyPair {
|
||||||
val publicKey = UByteArray(crypto_sign_PUBLICKEYBYTES)
|
val publicKey = UByteArray(crypto_sign_PUBLICKEYBYTES)
|
||||||
val secretKey = UByteArray(crypto_sign_SECRETKEYBYTES)
|
val secretKey = UByteArray(crypto_sign_SECRETKEYBYTES)
|
||||||
sodium.crypto_sign_keypair(
|
sodiumJna.crypto_sign_keypair(
|
||||||
publicKey.asByteArray(),
|
publicKey.asByteArray(),
|
||||||
secretKey.asByteArray(),
|
secretKey.asByteArray(),
|
||||||
)
|
)
|
||||||
@ -67,7 +67,7 @@ actual object Signature {
|
|||||||
val secretKey = UByteArray(crypto_sign_SECRETKEYBYTES)
|
val secretKey = UByteArray(crypto_sign_SECRETKEYBYTES)
|
||||||
|
|
||||||
|
|
||||||
sodium.crypto_sign_seed_keypair(
|
sodiumJna.crypto_sign_seed_keypair(
|
||||||
publicKey.asByteArray(),
|
publicKey.asByteArray(),
|
||||||
secretKey.asByteArray(),
|
secretKey.asByteArray(),
|
||||||
seed.asByteArray()
|
seed.asByteArray()
|
||||||
@ -76,13 +76,13 @@ actual object Signature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The sodium.crypto_sign() function prepends a signature to a message m whose length is mlen bytes, using the secret key sk.
|
* The sodiumJna.crypto_sign() function prepends a signature to a message m whose length is mlen bytes, using the secret key sk.
|
||||||
* The signed message, which includes the signature + a plain copy of the message, is put into sm, and is sodium.crypto_sign_BYTES + mlen bytes long.
|
* The signed message, which includes the signature + a plain copy of the message, is put into sm, and is sodiumJna.crypto_sign_BYTES + mlen bytes long.
|
||||||
*/
|
*/
|
||||||
actual fun sign(message: UByteArray, secretKey: UByteArray): UByteArray {
|
actual fun sign(message: UByteArray, secretKey: UByteArray): UByteArray {
|
||||||
val signedMessage = UByteArray(message.size + crypto_sign_BYTES)
|
val signedMessage = UByteArray(message.size + crypto_sign_BYTES)
|
||||||
|
|
||||||
sodium.crypto_sign(
|
sodiumJna.crypto_sign(
|
||||||
signedMessage.asByteArray(),
|
signedMessage.asByteArray(),
|
||||||
null,
|
null,
|
||||||
message.asByteArray(),
|
message.asByteArray(),
|
||||||
@ -94,13 +94,13 @@ actual object Signature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The sodium.crypto_sign_open() function checks that the signed message sm whose length is smlen bytes has a valid signature for the public key pk.
|
* The sodiumJna.crypto_sign_open() function checks that the signed message sm whose length is smlen bytes has a valid signature for the public key pk.
|
||||||
* If the signature is doesn't appear to be valid, the function throws an exception
|
* If the signature is doesn't appear to be valid, the function throws an exception
|
||||||
*/
|
*/
|
||||||
actual fun open(signedMessage: UByteArray, publicKey: UByteArray): UByteArray {
|
actual fun open(signedMessage: UByteArray, publicKey: UByteArray): UByteArray {
|
||||||
val message = UByteArray(signedMessage.size - crypto_sign_BYTES)
|
val message = UByteArray(signedMessage.size - crypto_sign_BYTES)
|
||||||
|
|
||||||
val verificationResult = sodium.crypto_sign_open(
|
val verificationResult = sodiumJna.crypto_sign_open(
|
||||||
message.asByteArray(),
|
message.asByteArray(),
|
||||||
null,
|
null,
|
||||||
signedMessage.asByteArray(),
|
signedMessage.asByteArray(),
|
||||||
@ -115,13 +115,13 @@ actual object Signature {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* In detached mode, the signature is stored without attaching a copy of the original message to it.
|
* In detached mode, the signature is stored without attaching a copy of the original message to it.
|
||||||
* The sodium.crypto_sign_detached() function signs the message m whose length is mlen bytes, using the secret key sk,
|
* The sodiumJna.crypto_sign_detached() function signs the message m whose length is mlen bytes, using the secret key sk,
|
||||||
* and puts the signature into sig, which can be up to sodium.crypto_sign_BYTES bytes long.
|
* and puts the signature into sig, which can be up to sodiumJna.crypto_sign_BYTES bytes long.
|
||||||
*/
|
*/
|
||||||
actual fun detached(message: UByteArray, secretKey: UByteArray): UByteArray {
|
actual fun detached(message: UByteArray, secretKey: UByteArray): UByteArray {
|
||||||
val signature = UByteArray(crypto_sign_BYTES)
|
val signature = UByteArray(crypto_sign_BYTES)
|
||||||
|
|
||||||
sodium.crypto_sign_detached(
|
sodiumJna.crypto_sign_detached(
|
||||||
signature.asByteArray(),
|
signature.asByteArray(),
|
||||||
null,
|
null,
|
||||||
message.asByteArray(),
|
message.asByteArray(),
|
||||||
@ -133,7 +133,7 @@ actual object Signature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The sodium.crypto_sign_verify_detached() function verifies that sig is a valid signature for the message m whose length
|
* The sodiumJna.crypto_sign_verify_detached() function verifies that sig is a valid signature for the message m whose length
|
||||||
* is mlen bytes, using the signer's public key pk.
|
* is mlen bytes, using the signer's public key pk.
|
||||||
*/
|
*/
|
||||||
actual fun verifyDetached(
|
actual fun verifyDetached(
|
||||||
@ -142,7 +142,7 @@ actual object Signature {
|
|||||||
publicKey: UByteArray
|
publicKey: UByteArray
|
||||||
) {
|
) {
|
||||||
|
|
||||||
val verificationResult = sodium.crypto_sign_verify_detached(
|
val verificationResult = sodiumJna.crypto_sign_verify_detached(
|
||||||
signature.asByteArray(),
|
signature.asByteArray(),
|
||||||
message.asByteArray(),
|
message.asByteArray(),
|
||||||
message.size.toLong(),
|
message.size.toLong(),
|
||||||
@ -155,11 +155,11 @@ actual object Signature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The sodium.crypto_sign_ed25519_pk_to_curve25519() function converts an Ed25519 public key ed25519_pk to an X25519 public key and stores it into x25519_pk.
|
* The sodiumJna.crypto_sign_ed25519_pk_to_curve25519() function converts an Ed25519 public key ed25519_pk to an X25519 public key and stores it into x25519_pk.
|
||||||
*/
|
*/
|
||||||
actual fun ed25519PkToCurve25519(ed25519PublicKey: UByteArray) : UByteArray {
|
actual fun ed25519PkToCurve25519(ed25519PublicKey: UByteArray) : UByteArray {
|
||||||
val x25519PublicKey = UByteArray(crypto_scalarmult_curve25519_BYTES)
|
val x25519PublicKey = UByteArray(crypto_scalarmult_curve25519_BYTES)
|
||||||
sodium.crypto_sign_ed25519_sk_to_curve25519(
|
sodiumJna.crypto_sign_ed25519_sk_to_curve25519(
|
||||||
x25519PublicKey.asByteArray(),
|
x25519PublicKey.asByteArray(),
|
||||||
ed25519PublicKey.asByteArray()
|
ed25519PublicKey.asByteArray()
|
||||||
)
|
)
|
||||||
@ -168,7 +168,7 @@ actual object Signature {
|
|||||||
|
|
||||||
actual fun ed25519SkToCurve25519(ed25519SecretKey: UByteArray) : UByteArray {
|
actual fun ed25519SkToCurve25519(ed25519SecretKey: UByteArray) : UByteArray {
|
||||||
val x25519SecretKey = UByteArray(crypto_scalarmult_curve25519_BYTES)
|
val x25519SecretKey = UByteArray(crypto_scalarmult_curve25519_BYTES)
|
||||||
sodium.crypto_sign_ed25519_sk_to_curve25519(
|
sodiumJna.crypto_sign_ed25519_sk_to_curve25519(
|
||||||
x25519SecretKey.asByteArray(),
|
x25519SecretKey.asByteArray(),
|
||||||
ed25519SecretKey.asByteArray()
|
ed25519SecretKey.asByteArray()
|
||||||
)
|
)
|
||||||
@ -176,13 +176,13 @@ actual object Signature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The secret key actually includes the seed (either a random seed or the one given to sodium.crypto_sign_seed_keypair()) as well as the public key.
|
* The secret key actually includes the seed (either a random seed or the one given to sodiumJna.crypto_sign_seed_keypair()) as well as the public key.
|
||||||
* While the public key can always be derived from the seed, the precomputation saves a significant amount of CPU cycles when signing.
|
* While the public key can always be derived from the seed, the precomputation saves a significant amount of CPU cycles when signing.
|
||||||
*/
|
*/
|
||||||
actual fun ed25519SkToSeed(secretKey: UByteArray): UByteArray {
|
actual fun ed25519SkToSeed(secretKey: UByteArray): UByteArray {
|
||||||
val seed = UByteArray(crypto_sign_SEEDBYTES)
|
val seed = UByteArray(crypto_sign_SEEDBYTES)
|
||||||
|
|
||||||
sodium.crypto_sign_ed25519_sk_to_seed(
|
sodiumJna.crypto_sign_ed25519_sk_to_seed(
|
||||||
seed.asByteArray(),
|
seed.asByteArray(),
|
||||||
secretKey.asByteArray()
|
secretKey.asByteArray()
|
||||||
)
|
)
|
||||||
@ -192,13 +192,13 @@ actual object Signature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The secret key actually includes the seed (either a random seed or the one given to sodium.crypto_sign_seed_keypair()) as well as the public key.
|
* The secret key actually includes the seed (either a random seed or the one given to sodiumJna.crypto_sign_seed_keypair()) as well as the public key.
|
||||||
* While the public key can always be derived from the seed, the precomputation saves a significant amount of CPU cycles when signing.
|
* While the public key can always be derived from the seed, the precomputation saves a significant amount of CPU cycles when signing.
|
||||||
*/
|
*/
|
||||||
actual fun ed25519SkToPk(secretKey: UByteArray): UByteArray {
|
actual fun ed25519SkToPk(secretKey: UByteArray): UByteArray {
|
||||||
val publicKey = UByteArray(crypto_sign_PUBLICKEYBYTES)
|
val publicKey = UByteArray(crypto_sign_PUBLICKEYBYTES)
|
||||||
|
|
||||||
sodium.crypto_sign_ed25519_sk_to_pk(
|
sodiumJna.crypto_sign_ed25519_sk_to_pk(
|
||||||
publicKey.asByteArray(),
|
publicKey.asByteArray(),
|
||||||
secretKey.asByteArray()
|
secretKey.asByteArray()
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user