Model argon2Matrix
This commit is contained in:
		
							parent
							
								
									f9ddd7bc20
								
							
						
					
					
						commit
						f5b3eb6b92
					
				@ -0,0 +1,48 @@
 | 
			
		||||
/*
 | 
			
		||||
 *    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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@file:Suppress("EXPERIMENTAL_API_USAGE")
 | 
			
		||||
 | 
			
		||||
package com.ionspin.kotlin.crypto.keyderivation.argon2
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created by Ugljesa Jovanovic
 | 
			
		||||
 * ugljesa.jovanovic@ionspin.com
 | 
			
		||||
 * on 21-May-2020
 | 
			
		||||
 */
 | 
			
		||||
 class Argon2Matrix(val columnCount: Int, val rowCount: Int) {
 | 
			
		||||
 | 
			
		||||
    internal val storage: UByteArray = UByteArray(columnCount * rowCount * 1024)
 | 
			
		||||
 | 
			
		||||
    operator fun get(rowPosition: Int, columnPosition: Int, inBlockPosition: Int) : UByte {
 | 
			
		||||
        return storage[rowPosition * (columnCount - 1) * 1024 + columnPosition * 1024 + inBlockPosition]
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    operator fun get(rowPosition: Int, columnPosition: Int) : UByteArray {
 | 
			
		||||
        println("Expensive.")
 | 
			
		||||
        return storage.copyOfRange(
 | 
			
		||||
            rowPosition * (columnCount - 1) * 1024 + columnPosition * 1024,
 | 
			
		||||
            rowPosition * (columnCount - 1) * 1024 + columnPosition * 1024 + 1024
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    operator fun get(rowPosition: Int) : Array<UByteArray> {
 | 
			
		||||
        return Array(columnCount) {
 | 
			
		||||
            this.get(rowPosition, it)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,55 @@
 | 
			
		||||
/*
 | 
			
		||||
 *    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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS")
 | 
			
		||||
 | 
			
		||||
package com.ionspin.kotlin.crypto.hash.argon
 | 
			
		||||
 | 
			
		||||
import com.ionspin.kotlin.crypto.keyderivation.argon2.Argon2Matrix
 | 
			
		||||
import com.ionspin.kotlin.crypto.util.hexColumsPrint
 | 
			
		||||
import kotlin.test.Test
 | 
			
		||||
import kotlin.test.assertTrue
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created by Ugljesa Jovanovic
 | 
			
		||||
 * ugljesa.jovanovic@ionspin.com
 | 
			
		||||
 * on 21-May-2020
 | 
			
		||||
 */
 | 
			
		||||
class Argon2MatrixTest {
 | 
			
		||||
    val zeroesBlock = UByteArray(1024) { 0U }
 | 
			
		||||
    val onesBlock = UByteArray(1024) { 1U }
 | 
			
		||||
    val twosBlock = UByteArray(1024) { 2U }
 | 
			
		||||
    val threesBlock = UByteArray(1024) { 3U }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    fun debugTest() {
 | 
			
		||||
        val argon2Matrix = Argon2Matrix(2, 2)
 | 
			
		||||
        (zeroesBlock + onesBlock + twosBlock + threesBlock).copyInto(argon2Matrix.storage)
 | 
			
		||||
        println(argon2Matrix[0, 0, 0])
 | 
			
		||||
        println(argon2Matrix[1, 0, 0])
 | 
			
		||||
        println(argon2Matrix[2, 0, 0])
 | 
			
		||||
        println(argon2Matrix[3, 0, 0])
 | 
			
		||||
        argon2Matrix.storage.hexColumsPrint(1024)
 | 
			
		||||
        assertTrue {
 | 
			
		||||
            argon2Matrix[0, 0, 0] == 0U.toUByte() &&
 | 
			
		||||
                    argon2Matrix[1, 0, 0] == 1U.toUByte() &&
 | 
			
		||||
                    argon2Matrix[2, 0, 0] == 2U.toUByte() &&
 | 
			
		||||
                    argon2Matrix[3, 0, 0] == 3U.toUByte()
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user