I’m implementing this <https://www.rabbitmq.com/pa...
# announcements
x
I’m implementing this https://www.rabbitmq.com/passwords.html#computing-password-hash, how can I generate this as a byte array in kotlin?
908D C60A
note: I don’t mean generate a salt I mean literally these bytes, I’m trying to test my algorithm and see if I get the same base64 encoded string
s
Byte
is signed by default in Kotlin, so
0x90
is out of range - you could use the experimental unsigned types but that might open up a different can of worms
assuming by “generate this as a byte array” you mean, like, assign this as a literal to compare against, then you’d want something like this I think:
Copy code
ubyteArrayOf(0x90u, 0x8Du, 0xC6u, 0x0Au)
x
hmm
m
actually, it will work just fine without unsigned
s
how do you mean? am I thinking about this the wrong way?
m
it will just be negative if you read it without additional transformation
s
ah, I see
what I was more trying to address is the fact you still can’t do, like,
byteArrayOf(0x90)
, since that’s a compile error
could call
.toByte()
on each int I guess 😬
x
I wonder if they’re supposed to be characters
Concatenate that with the UTF-8 representation of the password (in this case
test12
):
908D C60A 7465 7374 3132
though I haven’t been able to figure out how they’re encoded for that encoding to line up with
test12
frustrating
s
ah, I see
unfortunately I also don’t know 😅
m
it's just hex representation of bytes
so, you're working with bytes entire time, until you do base64 conversion
ask if there is anything unclear
@xenoterracide
x
@Marko Mitic so how’re you suggesting I write it? I’m not used to working with raw bytes, especially not like this
is
ubyteArrayOf
new in 1.3? if so… I’m still using 1.2
m
gimme a bit
x
ok
m
Copy code
import kotlin.random.Random
import kotlin.text.Charsets.UTF_8

fun a(pass: String, seed: Long): String {
    val random = Random(seed)
    val salt: ByteArray = random.nextBytes(4)

    val passBytes = pass.toByteArray(charset = UTF_8)
    val toHash = salt + passBytes
    val hashed = sha256(toHash)
    return toBase64(salt + hashed)
}

fun sha256(toHash: ByteArray): ByteArray {
    TODO("not implemented")
}

fun toBase64(bytes: ByteArray): String {
    TODO("not implemented")
}
sha256, base64 (and random/seed) might depend on your platform
so I didn't type it out
x
yeah I’ve got an implementation from spring
just trying to test it
so yeah, can’t use ubytes yet …