Michael Paus
07/02/2024, 11:17 AMMichael Paus
07/02/2024, 11:18 AM@OptIn(ExperimentalForeignApi::class)
actual fun hexChecksum(byteArray: ByteArray): String {
require(algorithm == "SHA-256")
val data = byteArray.toData()
/*
uint8_t digest[CC_SHA256_DIGEST_LENGTH];
CC_SHA256(data.bytes, data.length, digest);
NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
[output appendFormat:@"%02x", digest[i]];
}
return output; // convert to Kotlin String
*/
}
@OptIn(ExperimentalForeignApi::class, BetaInteropApi::class)
internal inline fun ByteArray.toData(offset: Int = 0): NSData {
if (isEmpty()) return NSData()
val pinned = pin()
return NSData.create(
bytesNoCopy = pinned.addressOf(offset),
length = size.toULong(),
deallocator = { _, _ -> pinned.unpin() }
)
}
tylerwilson
07/02/2024, 1:28 PMMichael Paus
07/02/2024, 3:14 PMtylerwilson
07/02/2024, 3:15 PMtylerwilson
07/02/2024, 3:16 PMfun Platform.signSha256(value: String, key: String): String {
return HmacSHA256(key.toByteArray()).doFinal(value.toByteArray()).encodeBase64()
}
nice and clean and simple