Skip to content

Commit a8afcd6

Browse files
ATL-6924: Simplify types
This commit replaces some uses of Array and uses Vector instead to allow more transparent equality checks
1 parent 01967cc commit a8afcd6

File tree

12 files changed

+53
-76
lines changed

12 files changed

+53
-76
lines changed

node/src/main/scala/io/iohk/atala/prism/node/crypto/CryptoUtils.scala

+4-4
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ object CryptoUtils {
5656
def checkECDSASignature(msg: Array[Byte], sig: Array[Byte], pubKey: SecpPublicKey): Boolean = {
5757
val ecdsaVerify = Signature.getInstance("SHA256withECDSA", provider)
5858
ecdsaVerify.initVerify(pubKey.publicKey)
59-
ecdsaVerify.update(msg)
60-
ecdsaVerify.verify(sig)
59+
ecdsaVerify.update(msg.toArray)
60+
ecdsaVerify.verify(sig.toArray)
6161
}
6262

6363
def unsafeToSecpPublicKeyFromByteCoordinates(x: Array[Byte], y: Array[Byte]): SecpPublicKey = {
@@ -88,12 +88,12 @@ object CryptoUtils {
8888
SecpPublicKey.fromPublicKey(fact.generatePublic(keySpec))
8989
}
9090

91-
def unsafeToSecpPublicKeyFromCompressed(com: Array[Byte]): SecpPublicKey = {
91+
def unsafeToSecpPublicKeyFromCompressed(com: Vector[Byte]): SecpPublicKey = {
9292
val params = ECNamedCurveTable.getParameterSpec("secp256k1")
9393
val fact = KeyFactory.getInstance("ECDSA", provider)
9494
val curve = params.getCurve
9595
val ellipticCurve = EC5Util.convertCurve(curve, params.getSeed)
96-
val point = ECPointUtil.decodePoint(ellipticCurve, com)
96+
val point = ECPointUtil.decodePoint(ellipticCurve, com.toArray)
9797
val params2 = EC5Util.convertSpec(ellipticCurve, params)
9898
val keySpec = new ECPublicKeySpec(point, params2)
9999
SecpPublicKey.fromPublicKey(fact.generatePublic(keySpec))

node/src/main/scala/io/iohk/atala/prism/node/grpc/ProtoCodecs.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ object ProtoCodecs {
101101
node_models
102102
.CompressedECKeyData()
103103
.withCurve(key.curveName)
104-
.withData(ByteString.copyFrom(key.compressedKey))
104+
.withData(ByteString.copyFrom(key.compressedKey.toArray))
105105
}
106106

107107
def toProtoKeyUsage(keyUsage: models.KeyUsage): node_models.KeyUsage = {

node/src/main/scala/io/iohk/atala/prism/node/models/package.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@ package object models {
117117
}
118118

119119
case class PublicKeyData(
120-
curveName: String,
121-
compressedKey: Array[Byte]
120+
curveName: String,
121+
compressedKey: Vector[Byte]
122122
)
123123

124124
object nodeState {

node/src/main/scala/io/iohk/atala/prism/node/operations/ParsingUtils.scala

+3-10
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,7 @@ package io.iohk.atala.prism.node.operations
33
import cats.implicits._
44
import com.google.protobuf.ByteString
55
import io.iohk.atala.prism.crypto.Sha256Digest
6-
import io.iohk.atala.prism.node.models.{
7-
PublicKeyData,
8-
DIDPublicKey,
9-
DIDService,
10-
DidSuffix,
11-
KeyUsage,
12-
ProtocolConstants,
13-
}
6+
import io.iohk.atala.prism.node.models.{PublicKeyData, DIDPublicKey, DIDService, DidSuffix, KeyUsage, ProtocolConstants}
147
import io.iohk.atala.prism.node.operations.ValidationError.{InvalidValue, MissingValue}
158
import io.iohk.atala.prism.node.operations.path.ValueAtPath
169
import io.iohk.atala.prism.protos.node_models
@@ -58,7 +51,7 @@ object ParsingUtils {
5851
ecData(_.x.toByteArray),
5952
ecData(_.y.toByteArray)
6053
)
61-
PublicKeyData(key.curveName, key.compressed)
54+
PublicKeyData(key.curveName, key.compressed.toVector)
6255
}.toEither.left
6356
.map(ex =>
6457
InvalidValue(
@@ -83,7 +76,7 @@ object ParsingUtils {
8376
Left(ecData.child(_.curve, "curve").invalid(s"Unsupported curve - $curve"))
8477
} else {
8578
Right(
86-
PublicKeyData(curve, ecData(_.data.toByteArray))
79+
PublicKeyData(curve, ecData(_.data.toByteArray).toVector)
8780
)
8881
}
8982
}

node/src/main/scala/io/iohk/atala/prism/node/repositories/daos/package.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ package object daos extends BaseDAO {
7474
)
7575
].contramap { key =>
7676
val curveName = key.key.curveName
77-
val compressed = key.key.compressedKey
77+
val compressed = key.key.compressedKey.toArray
7878
(
7979
key.didSuffix,
8080
key.keyId,
@@ -130,7 +130,7 @@ package object daos extends BaseDAO {
130130
) =>
131131
val publicKeyData: PublicKeyData = PublicKeyData(
132132
curveId,
133-
compressed
133+
compressed.toVector
134134
)
135135
val revokeLedgerData =
136136
for (

node/src/main/scala/io/iohk/atala/prism/node/services/BlockProcessingService.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,8 @@ class BlockProcessingServiceImpl(applyOperationConfig: ApplyOperationConfig) ext
195195
}
196196

197197
def verifySignature(
198-
key: SecpPublicKey,
199-
protoOperation: node_models.SignedAtalaOperation
198+
key: SecpPublicKey,
199+
protoOperation: node_models.SignedAtalaOperation
200200
): Either[StateError, Unit] = {
201201
try {
202202
Either.cond(

node/src/test/scala/io/iohk/atala/prism/node/NodeServiceSpec.scala

+5-3
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,11 @@ class NodeServiceSpec
146146
publicKey.addedOn.value mustBe ProtoCodecs.toLedgerData(dummyLedgerData)
147147
publicKey.revokedOn mustBe empty
148148

149-
ParsingUtils.parseCompressedECKey(
150-
ValueAtPath(publicKey.getCompressedEcKeyData, Path.root)
151-
).map(_.compressedKey.toVector) must beRight(key.key.compressedKey.toVector)
149+
ParsingUtils
150+
.parseCompressedECKey(
151+
ValueAtPath(publicKey.getCompressedEcKeyData, Path.root)
152+
)
153+
.map(_.compressedKey.toVector) must beRight(key.key.compressedKey.toVector)
152154

153155
response.lastSyncedBlockTimestamp must be(
154156
Some(dummySyncTimestamp.toProtoTimestamp)

node/src/test/scala/io/iohk/atala/prism/node/crypto/CryptoTestUtils.scala

+3-10
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package io.iohk.atala.prism.node.crypto
33
import io.iohk.atala.prism.crypto.EC
44
import io.iohk.atala.prism.crypto.keys.{ECKeyPair, ECPublicKey}
55
import io.iohk.atala.prism.node.crypto.CryptoUtils.SecpPublicKey
6-
import io.iohk.atala.prism.node.models.{DIDPublicKey, PublicKeyData}
6+
import io.iohk.atala.prism.node.models.PublicKeyData
77

88
object CryptoTestUtils {
99

@@ -13,20 +13,13 @@ object CryptoTestUtils {
1313

1414
def generatePublicKeyData(): PublicKeyData = toPublicKeyData(generatePublicKey())
1515

16-
def compareDIDPubKeys(k1: DIDPublicKey, k2: DIDPublicKey): Boolean = {
17-
k1.didSuffix == k2.didSuffix &&
18-
k1.keyId == k2.keyId &&
19-
k1.keyUsage == k2.keyUsage &&
20-
k1.key.compressedKey.toVector == k2.key.compressedKey.toVector
21-
}
22-
2316
def getUnderlyingKey(secpKey: SecpPublicKey): ECPublicKey = EC.INSTANCE.toPublicKeyFromCompressed(secpKey.compressed)
2417

2518
def toPublicKeyData(ecKey: ECPublicKey): PublicKeyData = {
26-
val ecK = CryptoUtils.unsafeToSecpPublicKeyFromCompressed(ecKey.getEncodedCompressed)
19+
val ecK = CryptoUtils.unsafeToSecpPublicKeyFromCompressed(ecKey.getEncodedCompressed.toVector)
2720
PublicKeyData(
2821
ecK.curveName,
29-
ecK.compressed
22+
ecK.compressed.toVector
3023
)
3124
}
3225
}

node/src/test/scala/io/iohk/atala/prism/node/crypto/CryptoTestsSpec.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class CryptoTestsSpec extends AnyWordSpec {
1010
"Must generate the same key from different encodings" in {
1111
val pair = EC.INSTANCE.generateKeyPair()
1212
val compressedPub = pair.getPublicKey.getEncodedCompressed
13-
val secpKeyFromCompressed = CryptoUtils.unsafeToSecpPublicKeyFromCompressed(compressedPub)
13+
val secpKeyFromCompressed = CryptoUtils.unsafeToSecpPublicKeyFromCompressed(compressedPub.toVector)
1414
val x = secpKeyFromCompressed.x
1515
val y = secpKeyFromCompressed.y
1616
val secpFromCoordinates = CryptoUtils.unsafeToSecpPublicKeyFromByteCoordinates(x, y)

node/src/test/scala/io/iohk/atala/prism/node/operations/CreateDIDOperationSpec.scala

+9-16
Original file line numberDiff line numberDiff line change
@@ -1004,28 +1004,21 @@ class CreateDIDOperationSpec extends AtalaWithPostgresSpec {
10041004

10051005
didState.didSuffix mustBe parsedOperation.id
10061006
didState.lastOperation mustBe parsedOperation.digest
1007-
1008-
val foundDIDs = didState.keys.map(toDIDPublicKey).sortBy(_.keyId)
1009-
val originalKeys = parsedOperation.keys.sortBy(_.keyId)
1010-
1011-
foundDIDs.lazyZip(originalKeys).foreach { case (d1, d2) =>
1012-
CryptoTestUtils.compareDIDPubKeys(d1, d2) mustBe true
1013-
}
1007+
didState.keys.map(
1008+
toDIDPublicKey
1009+
) must contain theSameElementsAs parsedOperation.keys
10141010

10151011
didState.context.sorted mustBe parsedOperation.context.sorted
10161012

10171013
for (key <- parsedOperation.keys) {
10181014
val keyState =
10191015
DataPreparation.findKey(parsedOperation.id, key.keyId).value
1020-
CryptoTestUtils.compareDIDPubKeys(
1021-
DIDPublicKey(
1022-
keyState.didSuffix,
1023-
keyState.keyId,
1024-
keyState.keyUsage,
1025-
keyState.key
1026-
),
1027-
key
1028-
) mustBe true
1016+
DIDPublicKey(
1017+
keyState.didSuffix,
1018+
keyState.keyId,
1019+
keyState.keyUsage,
1020+
keyState.key
1021+
) mustBe key
10291022
keyState.addedOn.timestampInfo mustBe dummyLedgerData.timestampInfo
10301023
keyState.revokedOn mustBe None
10311024
}

node/src/test/scala/io/iohk/atala/prism/node/operations/UpdateDIDOperationSpec.scala

+13-8
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,13 @@ import io.iohk.atala.prism.node.{AtalaWithPostgresSpec, DataPreparation}
1010
import io.iohk.atala.prism.node.DataPreparation.{dummyApplyOperationConfig, dummyLedgerData, dummyTimestampInfo}
1111
import io.iohk.atala.prism.node.crypto.CryptoTestUtils
1212
import io.iohk.atala.prism.node.grpc.ProtoCodecs
13-
import io.iohk.atala.prism.node.models.{DIDService, KeyUsage, ProtocolConstants}
14-
import io.iohk.atala.prism.node.operations.CreateDIDOperationSpec.{issuingEcKeyData, masterEcKeyData, randomCompressedECKeyData, randomECKeyData}
13+
import io.iohk.atala.prism.node.models.{DIDPublicKey, DIDService, KeyUsage, ProtocolConstants}
14+
import io.iohk.atala.prism.node.operations.CreateDIDOperationSpec.{
15+
issuingEcKeyData,
16+
masterEcKeyData,
17+
randomCompressedECKeyData,
18+
randomECKeyData
19+
}
1520
import io.iohk.atala.prism.node.repositories.daos.{ContextDAO, PublicKeysDAO, ServicesDAO}
1621
import io.iohk.atala.prism.node.services.BlockProcessingServiceSpec
1722
import io.iohk.atala.prism.protos.node_models
@@ -551,15 +556,15 @@ class UpdateDIDOperationSpec extends AtalaWithPostgresSpec with ProtoParsingTest
551556
newKey.keyUsage mustBe KeyUsage.MasterKey
552557
newKey.didSuffix mustBe createDidOperation.id
553558

554-
val actionKey = parsedOperation.actions.head
559+
DIDPublicKey(
560+
newKey.didSuffix,
561+
newKey.keyId,
562+
newKey.keyUsage,
563+
newKey.key
564+
) mustBe parsedOperation.actions.head
555565
.asInstanceOf[AddKeyAction]
556566
.key
557567

558-
newKey.didSuffix mustBe actionKey.didSuffix
559-
newKey.keyId mustBe actionKey.keyId
560-
newKey.keyUsage mustBe actionKey.keyUsage
561-
newKey.key.compressedKey mustBe actionKey.key.compressedKey
562-
563568
newKey.addedOn.timestampInfo mustBe dummyLedgerData.timestampInfo
564569
newKey.revokedOn mustBe None
565570
didInfo.lastOperation mustBe Sha256.compute(

node/src/test/scala/io/iohk/atala/prism/node/repositories/daos/PublicKeysDAOSpec.scala

+8-17
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,12 @@ class PublicKeysDAOSpec extends AtalaWithPostgresSpec {
5858
DataPreparation.createDID(didData, dummyLedgerData)
5959
val result = DataPreparation.findKey(didSuffix, "issuing").value
6060

61-
CryptoTestUtils.compareDIDPubKeys(
62-
DIDPublicKey(
63-
result.didSuffix,
64-
result.keyId,
65-
result.keyUsage,
66-
result.key
67-
),
68-
keys.tail.head
69-
) mustBe true
61+
DIDPublicKey(
62+
result.didSuffix,
63+
result.keyId,
64+
result.keyUsage,
65+
result.key
66+
) mustBe keys.tail.head
7067

7168
result.addedOn mustBe dummyLedgerData
7269
result.revokedOn mustBe None
@@ -92,7 +89,7 @@ class PublicKeysDAOSpec extends AtalaWithPostgresSpec {
9289
DataPreparation.createDID(didData, dummyLedgerData)
9390
val results = DataPreparation.findByDidSuffix(didSuffix).keys
9491

95-
val resultDIDKeys = results
92+
results
9693
.map(didPublicKeyState =>
9794
DIDPublicKey(
9895
didPublicKeyState.didSuffix,
@@ -101,13 +98,7 @@ class PublicKeysDAOSpec extends AtalaWithPostgresSpec {
10198
didPublicKeyState.key
10299
)
103100
)
104-
.sortWith((l, r) => l.keyId < r.keyId)
105-
106-
val originalDIDKeysSorted = keys.sortWith((l, r) => l.keyId < r.keyId)
107-
108-
resultDIDKeys.lazyZip(originalDIDKeysSorted).foreach { case (x, y) =>
109-
CryptoTestUtils.compareDIDPubKeys(x, y) mustBe true
110-
}
101+
.sortWith((l, r) => l.keyId < r.keyId) mustBe keys.sortWith((l, r) => l.keyId < r.keyId)
111102

112103
results.foreach(didPublicKeyState => didPublicKeyState.addedOn mustBe dummyLedgerData)
113104
results.foreach(didPublicKeyState => didPublicKeyState.revokedOn mustBe None)

0 commit comments

Comments
 (0)