Implemented mingw srng, add some more gradle handling for idea, disabled mingwx86 for now as it's not supported by coroutines, and I want to use coroutines eventually
This commit is contained in:
		
							parent
							
								
									84799b4ede
								
							
						
					
					
						commit
						63df04a7b6
					
				@ -51,9 +51,22 @@ version = "0.0.3-SNAPSHOT"
 | 
			
		||||
 | 
			
		||||
val ideaActive = System.getProperty("idea.active") == "true"
 | 
			
		||||
 | 
			
		||||
fun getHostOsName(): String {
 | 
			
		||||
    val target = System.getProperty("os.name")
 | 
			
		||||
    if (target == "Linux") return "linux"
 | 
			
		||||
    if (target.startsWith("Windows")) return "windows"
 | 
			
		||||
    if (target.startsWith("Mac")) return "macos"
 | 
			
		||||
    return "unknown"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
kotlin {
 | 
			
		||||
    val hostOsName = getHostOsName()
 | 
			
		||||
    if (ideaActive) {
 | 
			
		||||
        linuxX64("native")
 | 
			
		||||
        when(hostOsName) {
 | 
			
		||||
            "linux" -> linuxX64("native")
 | 
			
		||||
            "macos" -> macosX64("native")
 | 
			
		||||
            "windows" -> mingwX64("native")
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    jvm()
 | 
			
		||||
    js {
 | 
			
		||||
@ -131,13 +144,13 @@ kotlin {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    mingwX86() {
 | 
			
		||||
        binaries {
 | 
			
		||||
            staticLib {
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
//    mingwX86() {
 | 
			
		||||
//        binaries {
 | 
			
		||||
//            staticLib {
 | 
			
		||||
//
 | 
			
		||||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
    linuxArm32Hfp() {
 | 
			
		||||
        binaries {
 | 
			
		||||
@ -168,7 +181,6 @@ kotlin {
 | 
			
		||||
            dependencies {
 | 
			
		||||
                implementation(kotlin(Deps.Common.test))
 | 
			
		||||
                implementation(kotlin(Deps.Common.testAnnotation))
 | 
			
		||||
                implementation(Deps.Common.coroutines)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        val jvmMain by getting {
 | 
			
		||||
@ -263,20 +275,26 @@ kotlin {
 | 
			
		||||
            dependsOn(nativeTest)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val mingwX86Main by getting {
 | 
			
		||||
            dependsOn(nativeMain)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val mingwX86Test by getting {
 | 
			
		||||
            dependsOn(nativeTest)
 | 
			
		||||
        }
 | 
			
		||||
//        val mingwX86Main by getting {
 | 
			
		||||
//            dependsOn(commonMain)
 | 
			
		||||
//            dependencies {
 | 
			
		||||
//                implementation(Deps.Native.coroutines)
 | 
			
		||||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
//
 | 
			
		||||
//        val mingwX86Test by getting {
 | 
			
		||||
//            dependsOn(commonTest)
 | 
			
		||||
//        }
 | 
			
		||||
 | 
			
		||||
        val mingwX64Main by getting {
 | 
			
		||||
            dependsOn(nativeMain)
 | 
			
		||||
            dependsOn(commonMain)
 | 
			
		||||
            dependencies {
 | 
			
		||||
                implementation(Deps.Native.coroutines)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val mingwX64Test by getting {
 | 
			
		||||
            dependsOn(nativeTest)
 | 
			
		||||
            dependsOn(commonTest)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val linuxArm32HfpMain by getting {
 | 
			
		||||
@ -347,6 +365,14 @@ tasks {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    val mingwX64Test by getting(KotlinNativeTest::class) {
 | 
			
		||||
 | 
			
		||||
        testLogging {
 | 
			
		||||
            events("PASSED", "FAILED", "SKIPPED")
 | 
			
		||||
            showStandardStreams = true
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    val jsNodeTest by getting(KotlinJsTest::class) {
 | 
			
		||||
 | 
			
		||||
        testLogging {
 | 
			
		||||
 | 
			
		||||
@ -27,9 +27,11 @@ import kotlin.test.assertTrue
 | 
			
		||||
class SRNGTest {
 | 
			
		||||
    @Test
 | 
			
		||||
    fun testSrng() {
 | 
			
		||||
        //Just a sanity test, need to add better srng tests.
 | 
			
		||||
        val randomBytes1 = SRNG.getRandomBytes(10)
 | 
			
		||||
        val randomBytes2 = SRNG.getRandomBytes(10)
 | 
			
		||||
//        assertTrue { !randomBytes1.contentEquals(randomBytes2) }
 | 
			
		||||
        //TODO implement SRNG for minGW
 | 
			
		||||
        randomBytes1.forEach { println("RB1: $it")}
 | 
			
		||||
        randomBytes2.forEach { println("RB2: $it")}
 | 
			
		||||
        assertTrue { !randomBytes1.contentEquals(randomBytes2) }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,43 @@
 | 
			
		||||
/*
 | 
			
		||||
 *    Copyright 2019 Ugljesa Jovanovic
 | 
			
		||||
 *
 | 
			
		||||
 *    Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 *    you may not use this file except in compliance with the License.
 | 
			
		||||
 *    You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *        http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 *    Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 *    distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 *    See the License for the specific language governing permissions and
 | 
			
		||||
 *    limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package com.ionspin.kotlin.crypto
 | 
			
		||||
 | 
			
		||||
import kotlinx.cinterop.*
 | 
			
		||||
import platform.windows.*
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created by Ugljesa Jovanovic
 | 
			
		||||
 * ugljesa.jovanovic@ionspin.com
 | 
			
		||||
 * on 21-Sep-2019
 | 
			
		||||
 */
 | 
			
		||||
actual object SRNG {
 | 
			
		||||
    private val advapi by lazy { LoadLibraryA("ADVAPI32.DLL")}
 | 
			
		||||
 | 
			
		||||
    private val advapiRandom by lazy {
 | 
			
		||||
        GetProcAddress(advapi, "SystemFunction036")?.reinterpret<CFunction<Function2<CPointer<ByteVar>, ULong, Int>>>() ?: error("Failed getting advapi random")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Suppress("EXPERIMENTAL_UNSIGNED_LITERALS")
 | 
			
		||||
    actual fun getRandomBytes(amount: Int): Array<UByte> {
 | 
			
		||||
        memScoped {
 | 
			
		||||
            val randArray = allocArray<ByteVar>(amount)
 | 
			
		||||
            val pointer = randArray.getPointer(this)
 | 
			
		||||
            val status = advapiRandom(pointer.reinterpret(), amount.convert())
 | 
			
		||||
            return Array<UByte>(amount) { pointer[it].toUByte() }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,27 @@
 | 
			
		||||
/*
 | 
			
		||||
 *    Copyright 2019 Ugljesa Jovanovic
 | 
			
		||||
 *
 | 
			
		||||
 *    Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 *    you may not use this file except in compliance with the License.
 | 
			
		||||
 *    You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *        http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 *    Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 *    distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 *    See the License for the specific language governing permissions and
 | 
			
		||||
 *    limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package com.ionspin.kotlin.crypto.util
 | 
			
		||||
 | 
			
		||||
import kotlinx.coroutines.CoroutineScope
 | 
			
		||||
import kotlinx.coroutines.runBlocking
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created by Ugljesa Jovanovic
 | 
			
		||||
 * ugljesa.jovanovic@ionspin.com
 | 
			
		||||
 * on 20-Jul-2019
 | 
			
		||||
 */
 | 
			
		||||
actual fun testBlocking(block: suspend (scope: CoroutineScope) -> Unit) = runBlocking { block(this) }
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user