Skip to content

Commit ab619f8

Browse files
committed
Merge branch 'RM-3708' into 'master'
RM-3708: extend EncryptionKeyMaterial.fromPublicKey() with allowed key label types See merge request cdoc2/cdoc2-java-ref-impl!43
2 parents 3850930 + b9a1573 commit ab619f8

File tree

5 files changed

+59
-17
lines changed

5 files changed

+59
-17
lines changed

cdoc2-lib/src/main/java/ee/cyber/cdoc2/crypto/KeyLabelParams.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package ee.cyber.cdoc2.crypto;
22

3+
import java.util.List;
34
import java.util.Map;
45
import java.util.Objects;
56

@@ -31,4 +32,13 @@ public boolean isFromOrigin(EncryptionKeyOrigin origin) {
3132
return this.encryptionKeyOrigin.equals(origin);
3233
}
3334

35+
public boolean ofPublicKeyOrigin() {
36+
List<EncryptionKeyOrigin> pubKeyOrigins = List.of(
37+
EncryptionKeyOrigin.PUBLIC_KEY,
38+
EncryptionKeyOrigin.ID_CARD,
39+
EncryptionKeyOrigin.CERTIFICATE
40+
);
41+
return pubKeyOrigins.contains(this.encryptionKeyOrigin);
42+
}
43+
3444
}

cdoc2-lib/src/main/java/ee/cyber/cdoc2/crypto/keymaterial/EncryptionKeyMaterial.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,12 @@ public interface EncryptionKeyMaterial {
4141
* For backward compatibility. This method doesn't support correct keylabel generation as there
4242
* is no info, where pubKey is coming from (pubkey, cert, LDAP)
4343
* Use {@link #fromPublicKey(PublicKey, KeyLabelParams)} instead.
44-
* @param pubKey
45-
* @param keyLabel
46-
* @return
44+
* @deprecated ecryption key
45+
* @param pubKey public key
46+
* @param keyLabel key label
47+
* @return EncryptionKeyMaterial
4748
*/
48-
@Deprecated
49+
@Deprecated(forRemoval = true)
4950
static EncryptionKeyMaterial fromPublicKey(
5051
PublicKey pubKey,
5152
String keyLabel
@@ -54,7 +55,7 @@ static EncryptionKeyMaterial fromPublicKey(
5455
KeyLabelParams keyLabelParams = createPublicKeyLabelParams(keyLabel, null);
5556
return fromPublicKey(pubKey, keyLabelParams);
5657
} else {
57-
return new PublicKeyEncryptionKeyMaterial(pubKey, keyLabel);
58+
return new PublicKeyEncryptionKeyMaterial(pubKey, keyLabel, EncryptionKeyOrigin.PUBLIC_KEY);
5859
}
5960
}
6061

@@ -71,16 +72,18 @@ static EncryptionKeyMaterial fromPublicKey(
7172
KeyLabelParams keyLabelParams
7273
) {
7374
Objects.requireNonNull(pubKey);
74-
EncryptionKeyOrigin origin = EncryptionKeyOrigin.PUBLIC_KEY;
75-
if (!keyLabelParams.isFromOrigin(origin)) {
76-
throw new IllegalArgumentException("KeyLabelParams must be of type " + origin);
75+
if (!keyLabelParams.ofPublicKeyOrigin()) {
76+
throw new IllegalArgumentException("Invalid Key Label parameters type: "
77+
+ keyLabelParams.encryptionKeyOrigin());
7778
}
7879

7980
KeyLabelParams labelParams = (keyLabelParams == null)
8081
? createPublicKeyLabelParams(null, null)
8182
: keyLabelParams;
8283

83-
return new PublicKeyEncryptionKeyMaterial(pubKey, formatKeyLabel(labelParams));
84+
return new PublicKeyEncryptionKeyMaterial(
85+
pubKey, formatKeyLabel(labelParams), labelParams.encryptionKeyOrigin()
86+
);
8487
}
8588

8689
static EncryptionKeyMaterial fromPassword(char[] passwordChars, String keyLabel) {

cdoc2-lib/src/main/java/ee/cyber/cdoc2/crypto/keymaterial/encrypt/EncryptionKeyMaterialCollectionBuilder.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
import static ee.cyber.cdoc2.crypto.KeyLabelTools.createCertKeyLabelParams;
2626
import static ee.cyber.cdoc2.crypto.KeyLabelTools.createPublicKeyLabelParams;
27-
import static ee.cyber.cdoc2.crypto.KeyLabelTools.formatKeyLabel;
27+
2828

2929
/**
3030
* Class for creating collection of EncryptionKeyMaterial from multiple sources.
@@ -72,12 +72,10 @@ public EncryptionKeyMaterialCollectionBuilder fromX509Certificate(
7272
KeyLabelParams keyLabelParams = createCertKeyLabelParams(
7373
entry.getKeyLabel(), entry.getFingerprint(), entry.getFile()
7474
);
75-
return new PublicKeyEncryptionKeyMaterial(
76-
entry.getPublicKey(), formatKeyLabel(keyLabelParams)
77-
);
75+
return EncryptionKeyMaterial.fromPublicKey(entry.getPublicKey(), keyLabelParams);
7876
}
7977
)
80-
.collect(Collectors.toList());
78+
.toList();
8179

8280
recipients.addAll(keyMaterials);
8381
return this;

cdoc2-lib/src/main/java/ee/cyber/cdoc2/crypto/keymaterial/encrypt/PublicKeyEncryptionKeyMaterial.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
* Represents key material required for encryption key derived from the public key.
1111
*
1212
* @param publicKey public key
13-
* @param keyLabel key label
13+
* @param keyLabel key label
14+
* @param encryptionKeyOrigin encryption key origin
1415
*/
1516
public record PublicKeyEncryptionKeyMaterial(
1617
PublicKey publicKey,
17-
String keyLabel
18+
String keyLabel,
19+
EncryptionKeyOrigin encryptionKeyOrigin
1820
) implements EncryptionKeyMaterial {
1921

2022
@Override
@@ -24,7 +26,7 @@ public String getLabel() {
2426

2527
@Override
2628
public EncryptionKeyOrigin getKeyOrigin() {
27-
return EncryptionKeyOrigin.PUBLIC_KEY;
29+
return encryptionKeyOrigin;
2830
}
2931

3032
/**

cdoc2-lib/src/test/java/ee/cyber/cdoc2/EncryptionKeyMaterialTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,35 @@ void shouldCreateEncryptionKeyMaterialFromPublicKey() throws Exception {
3030
assertEquals(EncryptionKeyOrigin.PUBLIC_KEY, encryptionKeyMaterial.getKeyOrigin());
3131
}
3232

33+
@Test
34+
void shouldCreateEncryptionKeyMaterialFromPublicKeyWithIdCard() throws Exception {
35+
EncryptionKeyMaterial encryptionKeyMaterial = EncryptionKeyMaterial.fromPublicKey(
36+
createPublicKey(),
37+
createKeyLabelParams(EncryptionKeyOrigin.ID_CARD)
38+
);
39+
40+
assertEquals(EncryptionKeyOrigin.ID_CARD, encryptionKeyMaterial.getKeyOrigin());
41+
}
42+
43+
@Test
44+
void shouldCreateEncryptionKeyMaterialFromPublicKeyWithCertificate() throws Exception {
45+
EncryptionKeyMaterial encryptionKeyMaterial = EncryptionKeyMaterial.fromPublicKey(
46+
createPublicKey(),
47+
createKeyLabelParams(EncryptionKeyOrigin.CERTIFICATE)
48+
);
49+
50+
assertEquals(EncryptionKeyOrigin.CERTIFICATE, encryptionKeyMaterial.getKeyOrigin());
51+
}
52+
53+
@Test
54+
void shouldFailToCreateEncryptionKeyMaterialFromPublicKeyWithInvalidKeyOrigin() {
55+
assertThrowsIllegalArgumentException(() ->
56+
EncryptionKeyMaterial.fromPublicKey(
57+
createPublicKey(),
58+
createKeyLabelParams(EncryptionKeyOrigin.PASSWORD))
59+
);
60+
}
61+
3362
@Test
3463
void shouldCreateEncryptionKeyMaterialFromSecretKey() throws Exception {
3564
KeyLabelParams keyLabelParams = createKeyLabelParams(

0 commit comments

Comments
 (0)