Make the EciesAeadHkdfPrivateKeyManager public, but restrict visibility of the constructor. Then, add a static function which registers it together with the public key manager.
Also, do the same for the Hybrid{En,De}cryptWrappers.
PiperOrigin-RevId: 270243637
diff --git a/java/src/main/java/com/google/crypto/tink/hybrid/EciesAeadHkdfPrivateKeyManager.java b/java/src/main/java/com/google/crypto/tink/hybrid/EciesAeadHkdfPrivateKeyManager.java
index 24e398f..621370c 100644
--- a/java/src/main/java/com/google/crypto/tink/hybrid/EciesAeadHkdfPrivateKeyManager.java
+++ b/java/src/main/java/com/google/crypto/tink/hybrid/EciesAeadHkdfPrivateKeyManager.java
@@ -18,6 +18,7 @@
import com.google.crypto.tink.HybridDecrypt;
import com.google.crypto.tink.PrivateKeyTypeManager;
+import com.google.crypto.tink.Registry;
import com.google.crypto.tink.proto.EciesAeadHkdfKeyFormat;
import com.google.crypto.tink.proto.EciesAeadHkdfParams;
import com.google.crypto.tink.proto.EciesAeadHkdfPrivateKey;
@@ -40,9 +41,9 @@
* This key manager generates new {@code EciesAeadHkdfPrivateKey} keys and produces new instances of
* {@code EciesAeadHkdfHybridDecrypt}.
*/
-class EciesAeadHkdfPrivateKeyManager
+public class EciesAeadHkdfPrivateKeyManager
extends PrivateKeyTypeManager<EciesAeadHkdfPrivateKey, EciesAeadHkdfPublicKey> {
- public EciesAeadHkdfPrivateKeyManager() {
+ EciesAeadHkdfPrivateKeyManager() {
super(
EciesAeadHkdfPrivateKey.class,
EciesAeadHkdfPublicKey.class,
@@ -149,4 +150,14 @@
}
};
}
+
+ /**
+ * Registers the {@link EciesAeadHkdfPrivateKeyManager} and the {@link
+ * EciesAeadHkdfPublicKeyManager} with the registry, so that the the EciesAeadHkdfKeys can be used
+ * with Tink.
+ */
+ public static void registerPair(boolean newKeyAllowed) throws GeneralSecurityException {
+ Registry.registerAsymmetricKeyManagers(
+ new EciesAeadHkdfPrivateKeyManager(), new EciesAeadHkdfPublicKeyManager(), newKeyAllowed);
+ }
}
diff --git a/java/src/main/java/com/google/crypto/tink/hybrid/HybridConfig.java b/java/src/main/java/com/google/crypto/tink/hybrid/HybridConfig.java
index 3fa3f5c..fa268d1 100644
--- a/java/src/main/java/com/google/crypto/tink/hybrid/HybridConfig.java
+++ b/java/src/main/java/com/google/crypto/tink/hybrid/HybridConfig.java
@@ -95,11 +95,8 @@
*/
public static void register() throws GeneralSecurityException {
AeadConfig.register();
- Registry.registerAsymmetricKeyManagers(
- new EciesAeadHkdfPrivateKeyManager(),
- new EciesAeadHkdfPublicKeyManager(),
- /*newKeyAllowed=*/ true);
- Registry.registerPrimitiveWrapper(new HybridDecryptWrapper());
- Registry.registerPrimitiveWrapper(new HybridEncryptWrapper());
+ EciesAeadHkdfPrivateKeyManager.registerPair(/*newKeyAllowed=*/true);
+ HybridDecryptWrapper.register();
+ HybridEncryptWrapper.register();
}
}
diff --git a/java/src/main/java/com/google/crypto/tink/hybrid/HybridDecryptWrapper.java b/java/src/main/java/com/google/crypto/tink/hybrid/HybridDecryptWrapper.java
index ae8c8e6..68fd909 100644
--- a/java/src/main/java/com/google/crypto/tink/hybrid/HybridDecryptWrapper.java
+++ b/java/src/main/java/com/google/crypto/tink/hybrid/HybridDecryptWrapper.java
@@ -19,6 +19,7 @@
import com.google.crypto.tink.HybridDecrypt;
import com.google.crypto.tink.PrimitiveSet;
import com.google.crypto.tink.PrimitiveWrapper;
+import com.google.crypto.tink.Registry;
import java.security.GeneralSecurityException;
import java.util.Arrays;
import java.util.List;
@@ -32,7 +33,7 @@
* the keys associated with the prefix do not work, the primitive tries all keys with {@link
* com.google.crypto.tink.proto.OutputPrefixType#RAW}.
*/
-class HybridDecryptWrapper implements PrimitiveWrapper<HybridDecrypt> {
+public class HybridDecryptWrapper implements PrimitiveWrapper<HybridDecrypt> {
private static final Logger logger = Logger.getLogger(HybridDecryptWrapper.class.getName());
private static class WrappedHybridDecrypt implements HybridDecrypt {
@@ -73,6 +74,8 @@
}
}
+ HybridDecryptWrapper() {}
+
@Override
public HybridDecrypt wrap(final PrimitiveSet<HybridDecrypt> primitives) {
return new WrappedHybridDecrypt(primitives);
@@ -82,4 +85,14 @@
public Class<HybridDecrypt> getPrimitiveClass() {
return HybridDecrypt.class;
}
+
+ /**
+ * Register the wrapper within the registry.
+ *
+ * <p>This is required for calls to {@link Keyset.getPrimitive} with a {@link HybridDecrypt}
+ * argument.
+ */
+ public static void register() throws GeneralSecurityException {
+ Registry.registerPrimitiveWrapper(new HybridDecryptWrapper());
+ }
}
diff --git a/java/src/main/java/com/google/crypto/tink/hybrid/HybridEncryptWrapper.java b/java/src/main/java/com/google/crypto/tink/hybrid/HybridEncryptWrapper.java
index 6bf9c79..6574864 100644
--- a/java/src/main/java/com/google/crypto/tink/hybrid/HybridEncryptWrapper.java
+++ b/java/src/main/java/com/google/crypto/tink/hybrid/HybridEncryptWrapper.java
@@ -18,6 +18,7 @@
import com.google.crypto.tink.HybridEncrypt;
import com.google.crypto.tink.PrimitiveSet;
import com.google.crypto.tink.PrimitiveWrapper;
+import com.google.crypto.tink.Registry;
import com.google.crypto.tink.subtle.Bytes;
import java.security.GeneralSecurityException;
@@ -54,4 +55,14 @@
public Class<HybridEncrypt> getPrimitiveClass() {
return HybridEncrypt.class;
}
+
+ /**
+ * Register the wrapper within the registry.
+ *
+ * <p>This is required for calls to {@link Keyset.getPrimitive} with a {@link HybridEncrypt}
+ * argument.
+ */
+ public static void register() throws GeneralSecurityException {
+ Registry.registerPrimitiveWrapper(new HybridEncryptWrapper());
+ }
}