|
| 1 | +package io.iohk.atala.prism.apollo.utils |
| 2 | + |
| 3 | +import io.iohk.atala.prism.apollo.base64.base64UrlDecodedBytes |
| 4 | +import io.iohk.atala.prism.apollo.base64.base64UrlEncoded |
| 5 | +import kotlin.test.Test |
| 6 | +import kotlin.test.assertEquals |
| 7 | +import kotlin.test.assertNotNull |
| 8 | +import kotlin.test.assertTrue |
| 9 | + |
| 10 | +class KMMECSecp256k1KeysTests { |
| 11 | + @Test |
| 12 | + fun testSigning() { |
| 13 | + val privateKeyBase64 = "N_JFgvYaReyRXwassz5FHg33A4I6dczzdXrjdHGksmg" |
| 14 | + val base64ByteArray = privateKeyBase64.base64UrlDecodedBytes |
| 15 | + val privateKey = KMMECSecp256k1PrivateKey.secp256k1FromByteArray(base64ByteArray) |
| 16 | + val message = "Test" |
| 17 | + val signature = privateKey.sign(message.encodeToByteArray()) |
| 18 | + assertEquals("MEUCIQCFeGlhJrH-9R70X4JzrurWs52SwuxCnJ8ky6riFwMOrwIgT7zlLo7URMHW5tiMgG73IOw2Dm3XyLl1iqW1-t5NFWQ", signature.base64UrlEncoded) |
| 19 | + } |
| 20 | + |
| 21 | + @Test |
| 22 | + fun testVerifyingFromPrivateKey() { |
| 23 | + val privateKeyBase64 = "N_JFgvYaReyRXwassz5FHg33A4I6dczzdXrjdHGksmg" |
| 24 | + val base64ByteArray = privateKeyBase64.base64UrlDecodedBytes |
| 25 | + val privateKey = KMMECSecp256k1PrivateKey.secp256k1FromByteArray(base64ByteArray) |
| 26 | + val message = "Test" |
| 27 | + val signature = privateKey.sign(message.encodeToByteArray()) |
| 28 | + assertEquals("MEUCIQCFeGlhJrH-9R70X4JzrurWs52SwuxCnJ8ky6riFwMOrwIgT7zlLo7URMHW5tiMgG73IOw2Dm3XyLl1iqW1-t5NFWQ", signature.base64UrlEncoded) |
| 29 | + assertTrue(privateKey.verify(signature, message.encodeToByteArray())) |
| 30 | + } |
| 31 | + |
| 32 | + @Test |
| 33 | + fun testVerifyingFromPublicKey() { |
| 34 | + val privateKeyBase64 = "N_JFgvYaReyRXwassz5FHg33A4I6dczzdXrjdHGksmg" |
| 35 | + val base64ByteArray = privateKeyBase64.base64UrlDecodedBytes |
| 36 | + val privateKey = KMMECSecp256k1PrivateKey.secp256k1FromByteArray(base64ByteArray) |
| 37 | + val message = "Test" |
| 38 | + val signature = privateKey.sign(message.encodeToByteArray()) |
| 39 | + assertEquals("MEUCIQCFeGlhJrH-9R70X4JzrurWs52SwuxCnJ8ky6riFwMOrwIgT7zlLo7URMHW5tiMgG73IOw2Dm3XyLl1iqW1-t5NFWQ", signature.base64UrlEncoded) |
| 40 | + val publicKey = privateKey.getPublicKey() |
| 41 | + assertTrue(publicKey.verify(signature, message.encodeToByteArray())) |
| 42 | + } |
| 43 | + |
| 44 | + @Test |
| 45 | + fun getPublicKeyFromPrivateKey() { |
| 46 | + val privateKeyBase64 = "N_JFgvYaReyRXwassz5FHg33A4I6dczzdXrjdHGksmg" |
| 47 | + val base64ByteArray = privateKeyBase64.base64UrlDecodedBytes |
| 48 | + val privateKey = KMMECSecp256k1PrivateKey.secp256k1FromByteArray(base64ByteArray) |
| 49 | + assertEquals("BD-l4lrQ6Go-oN5XtdpY6o5dyf2V2v5EbMAvRjVGJpE1gYVURJfxKMpNPnKlLr4MOLNVaYvBNOoy9L50E8jVx8Q", privateKey.getPublicKey().raw.base64UrlEncoded) |
| 50 | + } |
| 51 | + |
| 52 | + @Test |
| 53 | + fun testIsPointOnSecp256k1Curve() { |
| 54 | + val point = KMMECPoint( |
| 55 | + "P6XiWtDoaj6g3le12ljqjl3J_ZXa_kRswC9GNUYmkTU".base64UrlDecodedBytes, |
| 56 | + "gYVURJfxKMpNPnKlLr4MOLNVaYvBNOoy9L50E8jVx8Q".base64UrlDecodedBytes |
| 57 | + ) |
| 58 | + try { |
| 59 | + val publicKey = KMMECSecp256k1PublicKey.secp256k1FromByteCoordinates( |
| 60 | + point.x, |
| 61 | + point.y |
| 62 | + ) |
| 63 | + assertNotNull(publicKey) |
| 64 | + assertTrue(true) |
| 65 | + } catch (ex: Exception) { |
| 66 | + assertTrue(false) |
| 67 | + } |
| 68 | + } |
| 69 | + |
| 70 | + @Test |
| 71 | + fun testGetCurvePoint() { |
| 72 | + val publicKey = KMMECSecp256k1PublicKey("BD-l4lrQ6Go-oN5XtdpY6o5dyf2V2v5EbMAvRjVGJpE1gYVURJfxKMpNPnKlLr4MOLNVaYvBNOoy9L50E8jVx8Q".base64UrlDecodedBytes) |
| 73 | + val point = publicKey.getCurvePoint() |
| 74 | + assertEquals("P6XiWtDoaj6g3le12ljqjl3J_ZXa_kRswC9GNUYmkTU", point.x.base64UrlEncoded) |
| 75 | + assertEquals("gYVURJfxKMpNPnKlLr4MOLNVaYvBNOoy9L50E8jVx8Q", point.y.base64UrlEncoded) |
| 76 | + } |
| 77 | + |
| 78 | + @Test |
| 79 | + fun testECSecp256K1FromByteCoordinates() { |
| 80 | + try { |
| 81 | + val publicKey = KMMECSecp256k1PublicKey.secp256k1FromByteCoordinates( |
| 82 | + "P6XiWtDoaj6g3le12ljqjl3J_ZXa_kRswC9GNUYmkTU".base64UrlDecodedBytes, |
| 83 | + "gYVURJfxKMpNPnKlLr4MOLNVaYvBNOoy9L50E8jVx8Q".base64UrlDecodedBytes |
| 84 | + ) |
| 85 | + assertNotNull(publicKey) |
| 86 | + assertTrue(true) |
| 87 | + } catch (ex: Exception) { |
| 88 | + assertTrue(false) |
| 89 | + } |
| 90 | + } |
| 91 | +} |
0 commit comments