Let nativeMain handle SRNG through sodium

This commit is contained in:
Ugljesa Jovanovic 2020-05-29 23:52:46 +02:00 committed by Ugljesa Jovanovic
parent 928621eaab
commit 0cb5f33af3
No known key found for this signature in database
GPG Key ID: 178E6DFCECCB0E0F

View File

@ -1,43 +1,44 @@
/* // We will rely on libsodium for randomness
* Copyright 2019 Ugljesa Jovanovic ///*
* // * 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. // * Licensed under the Apache License, Version 2.0 (the "License");
* You may obtain a copy of the License at // * 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 // *
* // * 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, // * Unless required by applicable law or agreed to in writing, software
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // * distributed under the License is distributed on an "AS IS" BASIS,
* See the License for the specific language governing permissions and // * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* limitations under the License. // * See the License for the specific language governing permissions and
*/ // * limitations under the License.
// */
package com.ionspin.kotlin.crypto //
//package com.ionspin.kotlin.crypto
import kotlinx.cinterop.* //
import platform.windows.* //import kotlinx.cinterop.*
//import platform.windows.*
/** //
* Created by Ugljesa Jovanovic ///**
* ugljesa.jovanovic@ionspin.com // * Created by Ugljesa Jovanovic
* on 21-Sep-2019 // * ugljesa.jovanovic@ionspin.com
*/ // * on 21-Sep-2019
actual object SRNG { // */
private val advapi by lazy { LoadLibraryA("ADVAPI32.DLL")} //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") // 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): UByteArray { // @Suppress("EXPERIMENTAL_UNSIGNED_LITERALS")
memScoped { // actual fun getRandomBytes(amount: Int): UByteArray {
val randArray = allocArray<ByteVar>(amount) // memScoped {
val pointer = randArray.getPointer(this) // val randArray = allocArray<ByteVar>(amount)
val status = advapiRandom(pointer.reinterpret(), amount.convert()) // val pointer = randArray.getPointer(this)
return UByteArray(amount) { pointer[it].toUByte() } // val status = advapiRandom(pointer.reinterpret(), amount.convert())
} // return UByteArray(amount) { pointer[it].toUByte() }
} // }
} // }
//}