Adding pull secretstream definition

This commit is contained in:
Ugljesa Jovanovic authored and Ugljesa Jovanovic committed 2020-08-15 11:53:11 +02:00
1 parent 28995c065f
commit df87dae376
11 files changed
+223 -30

No files matched your search

@@ -126,7 +126,9 @@ enum class TypeDefinition(override val typeName: TypeName) : GeneralTypeDefiniti
INT(Int::class.asTypeName()),
STRING(String::class.asTypeName()),
UNIT(Unit::class.asTypeName()),
UBYTE(UByte::class.asTypeName())
UBYTE(UByte::class.asTypeName()),
IRRELEVANT(Unit::class.asTypeName()),
NULL(Unit::class.asTypeName())
}
enum class TargetPlatform {
@@ -68,7 +68,7 @@ fun ClassDefinition.defineSecretStreamFunctions() {
+funcDef(
"crypto_secretstream_xchacha20poly1305_init_push",
codeDocumentation = """
Initialize a state and generate a random header. Both are returned inside `SecretStreamStateAndHeader` object
Initialize a state and generate a random header. Both are returned inside `SecretStreamStateAndHeader` object.
""".trimIndent(),
returnType = CustomTypeDefinition(withPackageName("SecretStreamStateAndHeader")),
dynamicJsReturn = true,
@@ -81,6 +81,32 @@ fun ClassDefinition.defineSecretStreamFunctions() {
)
}
+funcDef(
"crypto_secretstream_xchacha20poly1305_init_pull",
codeDocumentation = """
Initialize state from header and key. The state can then be used for decryption.
""".trimIndent(),
returnType = CustomTypeDefinition(withPackageName("SecretStreamState")),
dynamicJsReturn = true,
isStateCreationFunction = true,
) {
+ParameterDefinition(
"state",
parameterType = CustomTypeDefinition(withPackageName("SecretStreamState")),
dropParameterFromDefinition = true,
isStateType = true
)
+ParameterDefinition(
"header",
parameterType = TypeDefinition.ARRAY_OF_UBYTES_NO_SIZE
)
+ParameterDefinition(
"key",
parameterType = TypeDefinition.ARRAY_OF_UBYTES_NO_SIZE
)
}
+funcDef(
name = "crypto_secretstream_xchacha20poly1305_push",
codeDocumentation = """
@@ -94,10 +120,15 @@ fun ClassDefinition.defineSecretStreamFunctions() {
)
+ParameterDefinition(
"c",
TypeDefinition.ARRAY_OF_UBYTES_LONG_SIZE,
TypeDefinition.ARRAY_OF_UBYTES_NO_SIZE,
isActuallyAnOutputParam = true,
dropParameterFromDefinition = true
)
+ParameterDefinition(
"clen",
TypeDefinition.NULL,
dropParameterFromDefinition = true
)
+ParameterDefinition(
"m",
TypeDefinition.ARRAY_OF_UBYTES_LONG_SIZE,
@@ -113,5 +144,43 @@ fun ClassDefinition.defineSecretStreamFunctions() {
)
}
+funcDef(
name = "crypto_secretstream_xchacha20poly1305_pull",
codeDocumentation = """
Decrypt next block of data using the previously initialized state. Returns decrypted block.
""".trimIndent(),
returnType = TypeDefinition.ARRAY_OF_UBYTES
) {
+ParameterDefinition(
"state",
CustomTypeDefinition(withPackageName("SecretStreamState"))
)
+ParameterDefinition(
"m",
TypeDefinition.ARRAY_OF_UBYTES_NO_SIZE,
isActuallyAnOutputParam = true,
dropParameterFromDefinition = true
)
+ParameterDefinition(
"mlen",
TypeDefinition.NULL,
dropParameterFromDefinition = true
)
+ParameterDefinition(
"tag_p",
TypeDefinition.NULL
)
+ParameterDefinition(
"c",
TypeDefinition.ARRAY_OF_UBYTES_LONG_SIZE,
modifiesReturn = true
)
+ParameterDefinition(
"ad",
TypeDefinition.ARRAY_OF_UBYTES_LONG_SIZE
)
}
}
@@ -3,6 +3,7 @@ package com.ionspin.kotlin.crypto.generator.libsodium.generator
import com.ionspin.kotlin.crypto.generator.libsodium.definitions.FunctionDefinition
import com.ionspin.kotlin.crypto.generator.libsodium.definitions.InnerClassDefinition
import com.ionspin.kotlin.crypto.generator.libsodium.definitions.KotlinFileDefinition
import com.ionspin.kotlin.crypto.generator.libsodium.definitions.TypeDefinition
import com.squareup.kotlinpoet.*
/**
@@ -56,9 +57,11 @@ object CommonLibsodiumGenerator {
var actualReturnTypeFound : Boolean = false
for (paramDefinition in methodDefinition.parameterList) {
if ((paramDefinition.isStateType.not() || methodDefinition.isStateCreationFunction.not()) && paramDefinition.dropParameterFromDefinition.not()) {
val parameterSpec =
ParameterSpec.builder(paramDefinition.parameterName, paramDefinition.parameterType.typeName)
methodBuilder.addParameter(parameterSpec.build())
if (paramDefinition.parameterType != TypeDefinition.NULL) {
val parameterSpec =
ParameterSpec.builder(paramDefinition.parameterName, paramDefinition.parameterType.typeName)
methodBuilder.addParameter(parameterSpec.build())
}
}
if (paramDefinition.isActuallyAnOutputParam) {
actualReturnTypeFound = true
@@ -68,9 +68,11 @@ object JsLibsodiumGenerator {
var actualReturnTypeFound: Boolean = false
for (paramDefinition in methodDefinition.parameterList) {
if ((paramDefinition.isStateType.not() || methodDefinition.isStateCreationFunction.not()) && paramDefinition.isActuallyAnOutputParam.not()) {
val parameterSpec =
ParameterSpec.builder(paramDefinition.parameterName, paramDefinition.parameterType.typeName)
methodBuilder.addParameter(parameterSpec.build())
if (paramDefinition.parameterType != TypeDefinition.NULL) {
val parameterSpec =
ParameterSpec.builder(paramDefinition.parameterName, paramDefinition.parameterType.typeName)
methodBuilder.addParameter(parameterSpec.build())
}
}
if (paramDefinition.modifiesReturn) {
if (returnModifierFound == true) {
@@ -158,7 +160,7 @@ object JsLibsodiumGenerator {
paramsBuilder.append(paramDefinition.parameterName + ".toUInt8Array()" + separator)
}
TypeDefinition.ARRAY_OF_UBYTES_LONG_SIZE -> {
paramsBuilder.append(paramDefinition.parameterName + ".toUInt8Array(), " + separator)
paramsBuilder.append(paramDefinition.parameterName + ".toUInt8Array()" + separator)
}
TypeDefinition.ARRAY_OF_UBYTES_NO_SIZE -> {
paramsBuilder.append(paramDefinition.parameterName + ".toUInt8Array()" + separator)
@@ -175,6 +177,10 @@ object JsLibsodiumGenerator {
TypeDefinition.UBYTE -> {
paramsBuilder.append(paramDefinition.parameterName + separator)
}
TypeDefinition.NULL -> {
println("Got null parameter in js")
// paramsBuilder.append("null" + separator)
}
}
}
@@ -63,9 +63,11 @@ object JvmLibsodiumGenerator {
createStateParam(paramDefinition, methodBuilder)
}
if ((paramDefinition.isStateType.not() || methodDefinition.isStateCreationFunction.not()) && paramDefinition.isActuallyAnOutputParam.not()) {
val parameterSpec =
ParameterSpec.builder(paramDefinition.parameterName, paramDefinition.parameterType.typeName)
methodBuilder.addParameter(parameterSpec.build())
if (paramDefinition.parameterType != TypeDefinition.NULL) {
val parameterSpec =
ParameterSpec.builder(paramDefinition.parameterName, paramDefinition.parameterType.typeName)
methodBuilder.addParameter(parameterSpec.build())
}
}
if (paramDefinition.modifiesReturn) {
if (returnModifierFound == true) {
@@ -213,7 +215,10 @@ object JvmLibsodiumGenerator {
paramsBuilder.append(paramDefinition.parameterName + separator)
}
TypeDefinition.UBYTE -> {
paramsBuilder.append(paramDefinition.parameterName + separator)
paramsBuilder.append(paramDefinition.parameterName + ".toByte()" + separator)
}
TypeDefinition.NULL -> {
paramsBuilder.append("null" + separator)
}
}
}
@@ -78,9 +78,11 @@ object NativeLibsodiumGenerator {
createStateParam(paramDefinition, methodBuilder)
}
if ((paramDefinition.isStateType.not() || methodDefinition.isStateCreationFunction.not()) && paramDefinition.isActuallyAnOutputParam.not()) {
val parameterSpec =
ParameterSpec.builder(paramDefinition.parameterName, paramDefinition.parameterType.typeName)
methodBuilder.addParameter(parameterSpec.build())
if (paramDefinition.parameterType != TypeDefinition.NULL) {
val parameterSpec =
ParameterSpec.builder(paramDefinition.parameterName, paramDefinition.parameterType.typeName)
methodBuilder.addParameter(parameterSpec.build())
}
}
if (paramDefinition.modifiesReturn) {
if (returnModifierFound == true) {
@@ -293,6 +295,9 @@ object NativeLibsodiumGenerator {
TypeDefinition.UBYTE -> {
paramsBuilder.append(paramDefinition.parameterName + separator)
}
TypeDefinition.NULL -> {
paramsBuilder.append("null" + separator)
}
}
}
@@ -12,3 +12,4 @@ import org.junit.Test
class DebugTest {
}