Test secret stream generated code

This commit is contained in:
Ugljesa Jovanovic authored and Ugljesa Jovanovic committed 2020-08-15 17:50:46 +02:00
1 parent df87dae376
commit 0c098e57db
13 files changed
+137 -39

No files matched your search

@@ -95,7 +95,8 @@ class FunctionDefinition(
class ParameterDefinition(
val parameterName: String,
val parameterType: GeneralTypeDefinition,
val modifiesReturn: Boolean = false,
val modifiesReturnObjectSize: Boolean = false,
val specificReturnModification : String? = null,
val isActuallyAnOutputParam: Boolean = false,
val isStateType: Boolean = false,
val dropParameterFromDefinition: Boolean = false,
@@ -33,6 +33,6 @@ fun ClassDefinition.defineGenericHashFunctions() {
specificJvmInitializer = "sodium.crypto_generichash_statebytes()"
)
+ParameterDefinition("key", TypeDefinition.ARRAY_OF_UBYTES)
+ParameterDefinition("outlen", TypeDefinition.INT, modifiesReturn = true)
+ParameterDefinition("outlen", TypeDefinition.INT, modifiesReturnObjectSize = true)
}
}
@@ -1,7 +1,5 @@
package com.ionspin.kotlin.crypto.generator.libsodium.definitions
import com.squareup.kotlinpoet.ClassName
/**
* Created by Ugljesa Jovanovic (jovanovic.ugljesa@gmail.com) on 14/Aug/2020
*/
@@ -132,7 +130,8 @@ fun ClassDefinition.defineSecretStreamFunctions() {
+ParameterDefinition(
"m",
TypeDefinition.ARRAY_OF_UBYTES_LONG_SIZE,
modifiesReturn = true
modifiesReturnObjectSize = true,
specificReturnModification = "m.size + 17"
)
+ParameterDefinition(
"ad",
@@ -173,7 +172,8 @@ fun ClassDefinition.defineSecretStreamFunctions() {
+ParameterDefinition(
"c",
TypeDefinition.ARRAY_OF_UBYTES_LONG_SIZE,
modifiesReturn = true
modifiesReturnObjectSize = true,
specificReturnModification = "c.size - 17"
)
+ParameterDefinition(
"ad",
@@ -183,4 +183,5 @@ fun ClassDefinition.defineSecretStreamFunctions() {
}
}
@@ -63,7 +63,7 @@ object JsLibsodiumGenerator {
val methodBuilder = FunSpec.builder(methodDefinition.name)
var returnModifierFound = false
var returnModifierName = ""
var returnModifierValue = ""
var actualReturnType: TypeName = DYNAMIC
var actualReturnTypeFound: Boolean = false
for (paramDefinition in methodDefinition.parameterList) {
@@ -74,18 +74,22 @@ object JsLibsodiumGenerator {
methodBuilder.addParameter(parameterSpec.build())
}
}
if (paramDefinition.modifiesReturn) {
if (paramDefinition.modifiesReturnObjectSize) {
if (returnModifierFound == true) {
throw RuntimeException("Return modifier already found")
}
returnModifierFound = true
when (paramDefinition.parameterType) {
TypeDefinition.ARRAY_OF_UBYTES_LONG_SIZE -> {
returnModifierName = "${paramDefinition.parameterName}.size"
}
TypeDefinition.INT -> {
returnModifierName = paramDefinition.parameterName
if (paramDefinition.specificReturnModification == null) {
when (paramDefinition.parameterType) {
TypeDefinition.ARRAY_OF_UBYTES_LONG_SIZE -> {
returnModifierValue = "${paramDefinition.parameterName}.size"
}
TypeDefinition.INT -> {
returnModifierValue = paramDefinition.parameterName
}
}
} else {
returnModifierValue = paramDefinition.specificReturnModification!!
}
}
if (paramDefinition.isActuallyAnOutputParam) {
@@ -55,7 +55,7 @@ object JvmLibsodiumGenerator {
val methodBuilder = FunSpec.builder(methodDefinition.name)
methodBuilder.modifiers += MultiplatformModifier.ACTUAL.modifierList
var returnModifierFound = false
var returnModifierName = ""
var returnModifierValue = ""
lateinit var actualReturnParameterDefinition: ParameterDefinition
var actualReturnTypeFound: Boolean = false
for (paramDefinition in methodDefinition.parameterList) {
@@ -69,18 +69,23 @@ object JvmLibsodiumGenerator {
methodBuilder.addParameter(parameterSpec.build())
}
}
if (paramDefinition.modifiesReturn) {
if (paramDefinition.modifiesReturnObjectSize) {
if (returnModifierFound == true) {
throw RuntimeException("Return modifier already found")
}
returnModifierFound = true
when (paramDefinition.parameterType) {
TypeDefinition.ARRAY_OF_UBYTES_LONG_SIZE -> {
returnModifierName = "${paramDefinition.parameterName}.size"
}
TypeDefinition.INT -> {
returnModifierName = paramDefinition.parameterName
if (paramDefinition.specificReturnModification == null) {
when (paramDefinition.parameterType) {
TypeDefinition.ARRAY_OF_UBYTES_LONG_SIZE -> {
returnModifierValue = "${paramDefinition.parameterName}.size"
}
TypeDefinition.INT -> {
returnModifierValue = paramDefinition.parameterName
}
}
} else {
returnModifierValue = paramDefinition.specificReturnModification!!
}
}
if (paramDefinition.isActuallyAnOutputParam) {
@@ -92,7 +97,7 @@ object JvmLibsodiumGenerator {
if (returnModifierFound) {
createOutputParam(
actualReturnParameterDefinition,
returnModifierName,
returnModifierValue,
methodBuilder
)
} else {
@@ -70,7 +70,7 @@ object NativeLibsodiumGenerator {
val methodBuilder = FunSpec.builder(methodDefinition.name)
methodBuilder.modifiers += MultiplatformModifier.ACTUAL.modifierList
var returnModifierFound = false
var returnModifierName = ""
var returnModifierValue = ""
lateinit var actualReturnParameterDefinition: ParameterDefinition
var actualReturnTypeFound: Boolean = false
for (paramDefinition in methodDefinition.parameterList) {
@@ -84,18 +84,22 @@ object NativeLibsodiumGenerator {
methodBuilder.addParameter(parameterSpec.build())
}
}
if (paramDefinition.modifiesReturn) {
if (paramDefinition.modifiesReturnObjectSize) {
if (returnModifierFound == true) {
throw RuntimeException("Return modifier already found")
}
returnModifierFound = true
when (paramDefinition.parameterType) {
TypeDefinition.ARRAY_OF_UBYTES_LONG_SIZE -> {
returnModifierName = "${paramDefinition.parameterName}.size"
}
TypeDefinition.INT -> {
returnModifierName = paramDefinition.parameterName
if (paramDefinition.specificReturnModification == null) {
when (paramDefinition.parameterType) {
TypeDefinition.ARRAY_OF_UBYTES_LONG_SIZE -> {
returnModifierValue = "${paramDefinition.parameterName}.size"
}
TypeDefinition.INT -> {
returnModifierValue = paramDefinition.parameterName
}
}
} else {
returnModifierValue = paramDefinition.specificReturnModification!!
}
}
@@ -106,7 +110,7 @@ object NativeLibsodiumGenerator {
}
if (actualReturnTypeFound) {
if (returnModifierFound) {
createOutputParam(actualReturnParameterDefinition, returnModifierName, methodBuilder)
createOutputParam(actualReturnParameterDefinition, returnModifierValue, methodBuilder)
} else {
if (methodDefinition.outputLengthWhenArray == -1) {
throw RuntimeException("Function definition lacks a way to define output array length, function ${methodDefinition.name}")