Added box:

This commit is contained in:
Ugljesa Jovanovic 2021-02-22 22:51:15 +01:00
parent f0511e0ff1
commit f7815d009e
No known key found for this signature in database
GPG Key ID: 178E6DFCECCB0E0F
2 changed files with 129 additions and 42 deletions

View File

@ -770,39 +770,126 @@ interface JnaLibsodiumInterface : Library {
inputLength: Long,
key: ByteArray
): Int
//
//
// // ---- Auth end ----
//
// // ---- Box ----
//
// fun crypto_box_keypair() : dynamic
// fun crypto_box_seed_keypair(seed : Uint8Array) : dynamic
// fun crypto_box_easy(message: Uint8Array,
// nonce: Uint8Array,
// recipientsPublicKey: Uint8Array,
// sendersSecretKey: Uint8Array) : Uint8Array
// fun crypto_box_open_easy(ciphertext: Uint8Array,
// nonce: Uint8Array,
// sendersPublicKey: Uint8Array,
// recipientsSecretKey: Uint8Array) : Uint8Array
// fun crypto_box_detached(message: Uint8Array,
// nonce: Uint8Array,
// recipientsPublicKey: Uint8Array,
// sendersSecretKey: Uint8Array) : dynamic
// fun crypto_box_open_detached(ciphertext: Uint8Array,
// tag: Uint8Array,
// nonce: Uint8Array,
// sendersPublicKey: Uint8Array,
// recipientsSecretKey: Uint8Array) : Uint8Array
// fun crypto_box_beforenm(publicKey: Uint8Array, secretKey: Uint8Array) : Uint8Array
// fun crypto_box_easy_afternm(message: Uint8Array,
// nonce: Uint8Array,
// precomputedKey: Uint8Array) : Uint8Array
// fun crypto_box_open_easy_afternm(ciphertext: Uint8Array,
// nonce: Uint8Array,
// precomputedKey: Uint8Array) : Uint8Array
// fun crypto_box_seal(message: Uint8Array, recipientsPublicKey: Uint8Array) : Uint8Array
// fun crypto_box_seal_open(ciphertext: Uint8Array, recipientsPublicKey: Uint8Array, recipientsSecretKey: Uint8Array) : Uint8Array
// int crypto_box_keypair(unsigned char *pk, unsigned char *sk)
fun crypto_box_keypair(publicKey: ByteArray, secretKey: ByteArray)
// int crypto_box_seed_keypair(unsigned char *pk, unsigned char *sk,
// const unsigned char *seed)
fun crypto_box_seed_keypair(
publicKey: ByteArray,
secretKey: ByteArray,
seed: ByteArray
) : Int
// int crypto_box_easy(unsigned char *c, const unsigned char *m,
// unsigned long long mlen, const unsigned char *n,
// const unsigned char *pk, const unsigned char *sk)
fun crypto_box_easy(
ciphertext: ByteArray,
message: ByteArray,
messageLength: Long,
nonce: ByteArray,
recipientPublicKey: ByteArray,
senderSecretKey: ByteArray
) : Int
// int crypto_box_open_easy(unsigned char *m, const unsigned char *c,
// unsigned long long clen, const unsigned char *n,
// const unsigned char *pk, const unsigned char *sk)
fun crypto_box_open_easy(
message: ByteArray,
ciphertext: ByteArray,
ciphertextLength: Long,
nonce: ByteArray,
senderPublickKey: ByteArray,
recipientSecretKey: ByteArray
) : Int
// int crypto_box_detached(unsigned char *c, unsigned char *mac,
// const unsigned char *m, unsigned long long mlen,
// const unsigned char *n, const unsigned char *pk,
// const unsigned char *sk)
fun crypto_box_detached(
ciphertext: ByteArray,
mac: ByteArray,
message: ByteArray,
messageLength: Long,
nonce: ByteArray,
recipientPublicKey: ByteArray,
senderSecretKey: ByteArray
) : Int
// int crypto_box_open_detached(
// unsigned char *m, const unsigned char *c,
// const unsigned char *mac,
// unsigned long long clen,
// const unsigned char *n,
// const unsigned char *pk,
// const unsigned char *sk)
fun crypto_box_open_detached(
message: ByteArray,
ciphertext: ByteArray,
mac: ByteArray,
ciphertextLength: Long,
nonce: ByteArray,
senderPublickKey: ByteArray,
recipientSecretKey: ByteArray
) : Int
// int crypto_box_beforenm(unsigned char *k, const unsigned char *pk,
// const unsigned char *sk)
fun crypto_box_beforenm(
sessionKey: ByteArray,
publicKey: ByteArray,
secretKey: ByteArray
) : Int
// int crypto_box_easy_afternm(unsigned char *c, const unsigned char *m,
// unsigned long long mlen, const unsigned char *n,
// const unsigned char *k)
fun crypto_box_easy_afternm(
ciphertext: ByteArray,
message: ByteArray,
messageLength: Long,
nonce: ByteArray,
sessionKey: ByteArray
) : Int
// int crypto_box_open_easy_afternm(unsigned char *m, const unsigned char *c,
// unsigned long long clen, const unsigned char *n,
// const unsigned char *k)
fun crypto_box_open_easy_afternm(
message: ByteArray,
ciphertext: ByteArray,
ciphertextLength: Long,
nonce: ByteArray,
sessionKey: ByteArray
) : Int
// int crypto_box_seal(unsigned char *c, const unsigned char *m,
// unsigned long long mlen, const unsigned char *pk)
fun crypto_box_seal(
ciphertext: ByteArray,
message: ByteArray,
messageLength: Long,
recipientPublicKey: ByteArray
) : Int
// int crypto_box_seal_open(unsigned char *m, const unsigned char *c,
// unsigned long long clen,
// const unsigned char *pk, const unsigned char *sk)
fun crypto_box_seal_open(
message: ByteArray,
ciphertext: ByteArray,
ciphertextLength: Long,
senderPublickKey: ByteArray,
recipientSecretKey: ByteArray
) : Int
//
// // ---- Box end ----
//

View File

@ -1,6 +1,6 @@
package com.ionspin.kotlin.crypto.box
import com.ionspin.kotlin.crypto.LibsodiumInitializer.sodium
import com.ionspin.kotlin.crypto.LibsodiumInitializer.sodiumJna
actual object Box {
/**
@ -11,7 +11,7 @@ actual object Box {
actual fun keypair(): BoxKeyPair {
val publicKey = UByteArray(crypto_box_PUBLICKEYBYTES)
val secretKey = UByteArray(crypto_box_SECRETKEYBYTES)
sodium.crypto_box_keypair(publicKey.asByteArray(), secretKey.asByteArray())
sodiumJna.crypto_box_keypair(publicKey.asByteArray(), secretKey.asByteArray())
return BoxKeyPair(publicKey, secretKey)
}
@ -21,7 +21,7 @@ actual object Box {
actual fun seedKeypair(seed: UByteArray): BoxKeyPair {
val publicKey = UByteArray(crypto_box_PUBLICKEYBYTES)
val secretKey = UByteArray(crypto_box_SECRETKEYBYTES)
sodium.crypto_box_seed_keypair(publicKey.asByteArray(), secretKey.asByteArray(), seed.asByteArray())
sodiumJna.crypto_box_seed_keypair(publicKey.asByteArray(), secretKey.asByteArray(), seed.asByteArray())
return BoxKeyPair(publicKey, secretKey)
}
@ -39,7 +39,7 @@ actual object Box {
sendersSecretKey: UByteArray
): UByteArray {
val ciphertext = UByteArray(message.size + crypto_box_MACBYTES)
sodium.crypto_box_easy(
sodiumJna.crypto_box_easy(
ciphertext.asByteArray(),
message.asByteArray(),
message.size.toLong(),
@ -64,7 +64,7 @@ actual object Box {
recipientsSecretKey: UByteArray
): UByteArray {
val message = UByteArray(ciphertext.size - crypto_box_MACBYTES)
val validationResult = sodium.crypto_box_open_easy(
val validationResult = sodiumJna.crypto_box_open_easy(
message.asByteArray(),
ciphertext.asByteArray(),
ciphertext.size.toLong(),
@ -85,7 +85,7 @@ actual object Box {
*/
actual fun beforeNM(publicKey: UByteArray, secretKey: UByteArray): UByteArray {
val sessionKey = UByteArray(crypto_box_BEFORENMBYTES)
sodium.crypto_box_beforenm(sessionKey.asByteArray(), publicKey.asByteArray(), secretKey.asByteArray())
sodiumJna.crypto_box_beforenm(sessionKey.asByteArray(), publicKey.asByteArray(), secretKey.asByteArray())
return sessionKey
}
@ -99,7 +99,7 @@ actual object Box {
): UByteArray {
val ciphertext = UByteArray(message.size + crypto_box_MACBYTES)
sodium.crypto_box_easy_afternm(
sodiumJna.crypto_box_easy_afternm(
ciphertext.asByteArray(),
message.asByteArray(),
message.size.toLong(),
@ -119,7 +119,7 @@ actual object Box {
precomputedKey: UByteArray
): UByteArray {
val message = UByteArray(ciphertext.size - crypto_box_MACBYTES)
val validationResult = sodium.crypto_box_open_easy_afternm(
val validationResult = sodiumJna.crypto_box_open_easy_afternm(
message.asByteArray(),
ciphertext.asByteArray(),
ciphertext.size.toLong(),
@ -149,7 +149,7 @@ actual object Box {
val ciphertext = UByteArray(message.size)
val tag = UByteArray(crypto_box_MACBYTES)
sodium.crypto_box_detached(
sodiumJna.crypto_box_detached(
ciphertext.asByteArray(),
tag.asByteArray(),
message.asByteArray(),
@ -177,7 +177,7 @@ actual object Box {
): UByteArray {
val message = UByteArray(ciphertext.size)
val validationResult = sodium.crypto_box_open_detached(
val validationResult = sodiumJna.crypto_box_open_detached(
message.asByteArray(),
ciphertext.asByteArray(),
tag.asByteArray(),
@ -196,7 +196,7 @@ actual object Box {
actual fun seal(message: UByteArray, recipientsPublicKey: UByteArray): UByteArray {
val ciphertextWithPublicKey = UByteArray(message.size + crypto_box_SEALBYTES)
sodium.crypto_box_seal(
sodiumJna.crypto_box_seal(
ciphertextWithPublicKey.asByteArray(),
message.asByteArray(),
message.size.toLong(),
@ -207,7 +207,7 @@ actual object Box {
actual fun sealOpen(ciphertext: UByteArray, recipientsPublicKey: UByteArray, recipientsSecretKey: UByteArray): UByteArray {
val message = UByteArray(ciphertext.size - crypto_box_SEALBYTES)
val validationResult = sodium.crypto_box_seal_open(
val validationResult = sodiumJna.crypto_box_seal_open(
message.asByteArray(),
ciphertext.asByteArray(),
ciphertext.size.toLong(),
@ -223,4 +223,4 @@ actual object Box {
}
}
}