Name and README update
This commit is contained in:
parent
6d8024cf7f
commit
91616fe0e0
36
README.md
36
README.md
@ -11,7 +11,7 @@ This is an extremely early release, currently only consisting of Blake2b and SHA
|
||||
|
||||
**The API will move fast and break often until v1.0**
|
||||
|
||||
Make SHA hashes "updateable" like Blake2b
|
||||
Make SHA hashes "updatable" like Blake2b
|
||||
|
||||
After that tenative plan is to add 25519 curve based signing and key exchange next.
|
||||
|
||||
@ -48,11 +48,17 @@ implementation("com.ionspin.kotlin:crypto:0.0.1-SNAPSHOT")
|
||||
|
||||
## Usage
|
||||
|
||||
### Blake2b
|
||||
### Hashes
|
||||
|
||||
Hashes are provided in two versions, "stateless", usually the companion object of the hash,
|
||||
which takes the data to be hashed in one go, and "updatable" which can be fed data in chunks.
|
||||
|
||||
|
||||
#### Blake2b
|
||||
|
||||
You can use Blake 2b in two modes
|
||||
|
||||
#### Using a `Blake2b` object
|
||||
##### Stateless version
|
||||
You need to deliver the complete data that is to be hashed in one go
|
||||
|
||||
```kotlin
|
||||
@ -62,9 +68,9 @@ val result = Blake2b.digest(input)
|
||||
|
||||
Result is returned as a `Array<Byte>`
|
||||
|
||||
#### Using a `Blake2b` instance
|
||||
##### Updatable instance version
|
||||
You can create an instance and feed the data by using `update(input : Array<Byte>)` call. Once all data is supplied,
|
||||
you should call `digest()` or `digestString()` convinence method that converts the `Array<Byte>` into hexadecimal string.
|
||||
you should call `digest()` or `digestString()` convenience method that converts the `Array<Byte>` into hexadecimal string.
|
||||
|
||||
If you want to use Blake2b with a key, you should supply it when creating the `Blake2b` instance.
|
||||
|
||||
@ -77,7 +83,9 @@ val result = blake2b.digest()
|
||||
```
|
||||
|
||||
After digest is called, the instance is reset and can be reused (Keep in mind key stays the same for the particular instance).
|
||||
### SHA2 (SHA256 and SHA512)
|
||||
#### SHA2 (SHA256 and SHA512)
|
||||
|
||||
##### Stateless version
|
||||
|
||||
You need to deliver the complete data that is to be hashed in one go. You can either provide the `Array<Byte>` as input
|
||||
or `String`. Result is always returned as `Array<Byte>` (At least in verision 0.0.1)
|
||||
@ -94,6 +102,22 @@ val result = Sha512.digest(message = input.encodeToByteArray().map { it.toUByte(
|
||||
|
||||
Result is returned as a `Array<Byte>`
|
||||
|
||||
##### Updateable version
|
||||
|
||||
Or you can use the updatable instance version
|
||||
|
||||
```kotlin
|
||||
val sha256 = Sha256()
|
||||
sha256.update("abc")
|
||||
val result = sha256.digest()
|
||||
```
|
||||
|
||||
```kotlin
|
||||
val sha512 = Sha512()
|
||||
sha512.update("abc")
|
||||
val result = sha512.digest()
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -27,7 +27,7 @@ interface Hash {
|
||||
}
|
||||
|
||||
@ExperimentalUnsignedTypes
|
||||
interface UpdateableHash : Hash {
|
||||
interface UpdatableHash : Hash {
|
||||
fun update(data : Array<UByte>)
|
||||
|
||||
fun update(data : String)
|
||||
|
@ -20,7 +20,7 @@ import com.ionspin.kotlin.bignum.integer.BigInteger
|
||||
import com.ionspin.kotlin.bignum.integer.toBigInteger
|
||||
import com.ionspin.kotlin.crypto.*
|
||||
import com.ionspin.kotlin.crypto.hash.StatelessHash
|
||||
import com.ionspin.kotlin.crypto.hash.UpdateableHash
|
||||
import com.ionspin.kotlin.crypto.hash.UpdatableHash
|
||||
|
||||
/**
|
||||
* Created by Ugljesa Jovanovic
|
||||
@ -29,7 +29,7 @@ import com.ionspin.kotlin.crypto.hash.UpdateableHash
|
||||
*/
|
||||
|
||||
@ExperimentalUnsignedTypes
|
||||
class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : UpdateableHash {
|
||||
class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : UpdatableHash {
|
||||
|
||||
companion object : StatelessHash {
|
||||
|
||||
|
@ -18,7 +18,7 @@ package com.ionspin.kotlin.crypto.hash.sha
|
||||
|
||||
import com.ionspin.kotlin.crypto.chunked
|
||||
import com.ionspin.kotlin.crypto.hash.StatelessHash
|
||||
import com.ionspin.kotlin.crypto.hash.UpdateableHash
|
||||
import com.ionspin.kotlin.crypto.hash.UpdatableHash
|
||||
import com.ionspin.kotlin.crypto.rotateRight
|
||||
|
||||
|
||||
@ -30,7 +30,7 @@ import com.ionspin.kotlin.crypto.rotateRight
|
||||
|
||||
|
||||
@ExperimentalUnsignedTypes
|
||||
class Sha256 : UpdateableHash {
|
||||
class Sha256 : UpdatableHash {
|
||||
|
||||
override val MAX_HASH_BYTES: Int = 32
|
||||
|
||||
|
@ -18,7 +18,7 @@ package com.ionspin.kotlin.crypto.hash.sha
|
||||
|
||||
import com.ionspin.kotlin.crypto.chunked
|
||||
import com.ionspin.kotlin.crypto.hash.StatelessHash
|
||||
import com.ionspin.kotlin.crypto.hash.UpdateableHash
|
||||
import com.ionspin.kotlin.crypto.hash.UpdatableHash
|
||||
import com.ionspin.kotlin.crypto.rotateRight
|
||||
|
||||
/**
|
||||
@ -28,7 +28,7 @@ import com.ionspin.kotlin.crypto.rotateRight
|
||||
*/
|
||||
|
||||
@ExperimentalUnsignedTypes
|
||||
class Sha512 : UpdateableHash {
|
||||
class Sha512 : UpdatableHash {
|
||||
|
||||
override val MAX_HASH_BYTES: Int = 32
|
||||
|
||||
|
@ -96,5 +96,32 @@ class ReadmeTest {
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
@Test
|
||||
fun sha256UpdatableExample() {
|
||||
val sha256 = Sha256()
|
||||
sha256.update("abc")
|
||||
val result = sha256.digest()
|
||||
val expectedResult = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
|
||||
assertTrue {
|
||||
result.contentEquals(expectedResult.chunked(2).map { it.toUByte(16) }.toTypedArray())
|
||||
}
|
||||
}
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
@Test
|
||||
fun sha512UpdatableExample() {
|
||||
val sha512 = Sha512()
|
||||
sha512.update("abc")
|
||||
val result = sha512.digest()
|
||||
val expectedResult = "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" +
|
||||
"2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"
|
||||
assertTrue {
|
||||
result.contentEquals(expectedResult.chunked(2).map { it.toUByte(16) }.toTypedArray())
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -29,7 +29,7 @@ import kotlin.test.assertTrue
|
||||
class Blake2bInstanceTest {
|
||||
|
||||
@Test
|
||||
fun testUpdateableBlake2b() {
|
||||
fun testUpdatableBlake2b() {
|
||||
val updates = 14
|
||||
val input = "1234567890"
|
||||
val expectedResult = arrayOf<UByte>(
|
||||
|
@ -26,7 +26,7 @@ import kotlin.test.assertTrue
|
||||
* on 17-Jul-2019
|
||||
*/
|
||||
@ExperimentalUnsignedTypes
|
||||
class Sha256UpdateableTest {
|
||||
class Sha256UpdatableTest {
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
@Test
|
||||
@ -38,8 +38,6 @@ class Sha256UpdateableTest {
|
||||
assertTrue {
|
||||
result.contentEquals(expectedResult.chunked(2).map { it.toUByte(16) }.toTypedArray())
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
@ -99,5 +97,4 @@ class Sha256UpdateableTest {
|
||||
resultDoubleBlock.contentEquals(expectedResultForDoubleBlock.chunked(2).map { it.toUByte(16) }.toTypedArray())
|
||||
}
|
||||
}
|
||||
//50e72a0e 26442fe2 552dc393 8ac58658 228c0cbf b1d2ca87 2ae43526 6fcd055e
|
||||
}
|
@ -25,7 +25,7 @@ import kotlin.test.assertTrue
|
||||
* ugljesa.jovanovic@ionspin.com
|
||||
* on 21-Jul-2019
|
||||
*/
|
||||
class Sha512UpdateableTest {
|
||||
class Sha512UpdatableTest {
|
||||
@ExperimentalStdlibApi
|
||||
@Test
|
||||
fun testWellKnownValue() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user