Prepare primitive wrappers to the switch in the Registry where MutablePrimitiveRegistry will be used under the hood for wrapper registration, and this does not tolerate when a different wrapper object is attempted to be registered for a primitive class for which a wrapper object is already registered.

PiperOrigin-RevId: 495833830
Change-Id: Ieced9abe4c04977e909a3c7462d2d09478ac4e69
diff --git a/src/main/java/com/google/crypto/tink/aead/AeadWrapper.java b/src/main/java/com/google/crypto/tink/aead/AeadWrapper.java
index c81ee40..50b7a92 100644
--- a/src/main/java/com/google/crypto/tink/aead/AeadWrapper.java
+++ b/src/main/java/com/google/crypto/tink/aead/AeadWrapper.java
@@ -42,6 +42,8 @@
 public class AeadWrapper implements PrimitiveWrapper<Aead, Aead> {
   private static final Logger logger = Logger.getLogger(AeadWrapper.class.getName());
 
+  private static final AeadWrapper WRAPPER = new AeadWrapper();
+
   private static class WrappedAead implements Aead {
     private final PrimitiveSet<Aead> pSet;
     private final MonitoringClient.Logger encLogger;
@@ -131,6 +133,6 @@
   }
 
   public static void register() throws GeneralSecurityException {
-    Registry.registerPrimitiveWrapper(new AeadWrapper());
+    Registry.registerPrimitiveWrapper(WRAPPER);
   }
 }
diff --git a/src/main/java/com/google/crypto/tink/daead/DeterministicAeadWrapper.java b/src/main/java/com/google/crypto/tink/daead/DeterministicAeadWrapper.java
index 473b4a1..ae2d908 100644
--- a/src/main/java/com/google/crypto/tink/daead/DeterministicAeadWrapper.java
+++ b/src/main/java/com/google/crypto/tink/daead/DeterministicAeadWrapper.java
@@ -42,7 +42,9 @@
  */
 public class DeterministicAeadWrapper
     implements PrimitiveWrapper<DeterministicAead, DeterministicAead> {
+
   private static final Logger logger = Logger.getLogger(DeterministicAeadWrapper.class.getName());
+  private static final DeterministicAeadWrapper WRAPPER = new DeterministicAeadWrapper();
 
   private static class WrappedDeterministicAead implements DeterministicAead {
     private final PrimitiveSet<DeterministicAead> primitives;
@@ -138,6 +140,6 @@
   }
 
   public static void register() throws GeneralSecurityException {
-    Registry.registerPrimitiveWrapper(new DeterministicAeadWrapper());
+    Registry.registerPrimitiveWrapper(WRAPPER);
   }
 }
diff --git a/src/main/java/com/google/crypto/tink/hybrid/HybridDecryptWrapper.java b/src/main/java/com/google/crypto/tink/hybrid/HybridDecryptWrapper.java
index 267bc82..28507f4 100644
--- a/src/main/java/com/google/crypto/tink/hybrid/HybridDecryptWrapper.java
+++ b/src/main/java/com/google/crypto/tink/hybrid/HybridDecryptWrapper.java
@@ -38,7 +38,9 @@
  * com.google.crypto.tink.proto.OutputPrefixType#RAW}.
  */
 public class HybridDecryptWrapper implements PrimitiveWrapper<HybridDecrypt, HybridDecrypt> {
+
   private static final Logger logger = Logger.getLogger(HybridDecryptWrapper.class.getName());
+  private static final HybridDecryptWrapper WRAPPER = new HybridDecryptWrapper();
 
   private static class WrappedHybridDecrypt implements HybridDecrypt {
     private final PrimitiveSet<HybridDecrypt> primitives;
@@ -116,6 +118,6 @@
    * argument.
    */
   public static void register() throws GeneralSecurityException {
-    Registry.registerPrimitiveWrapper(new HybridDecryptWrapper());
+    Registry.registerPrimitiveWrapper(WRAPPER);
   }
 }
diff --git a/src/main/java/com/google/crypto/tink/hybrid/HybridEncryptWrapper.java b/src/main/java/com/google/crypto/tink/hybrid/HybridEncryptWrapper.java
index 605b6e5..8cf86cd 100644
--- a/src/main/java/com/google/crypto/tink/hybrid/HybridEncryptWrapper.java
+++ b/src/main/java/com/google/crypto/tink/hybrid/HybridEncryptWrapper.java
@@ -34,6 +34,9 @@
  * with the primary key.
  */
 public class HybridEncryptWrapper implements PrimitiveWrapper<HybridEncrypt, HybridEncrypt> {
+
+  private static final HybridEncryptWrapper WRAPPER = new HybridEncryptWrapper();
+
   private static class WrappedHybridEncrypt implements HybridEncrypt {
     final PrimitiveSet<HybridEncrypt> primitives;
 
@@ -95,6 +98,6 @@
    * argument.
    */
   public static void register() throws GeneralSecurityException {
-    Registry.registerPrimitiveWrapper(new HybridEncryptWrapper());
+    Registry.registerPrimitiveWrapper(WRAPPER);
   }
 }
diff --git a/src/main/java/com/google/crypto/tink/jwt/JwtMacWrapper.java b/src/main/java/com/google/crypto/tink/jwt/JwtMacWrapper.java
index 973915c..e66c170 100644
--- a/src/main/java/com/google/crypto/tink/jwt/JwtMacWrapper.java
+++ b/src/main/java/com/google/crypto/tink/jwt/JwtMacWrapper.java
@@ -29,6 +29,9 @@
  * JwtMacWrapper is the implementation of {@link PrimitiveWrapper} for the {@link JwtMac} primitive.
  */
 class JwtMacWrapper implements PrimitiveWrapper<JwtMacInternal, JwtMac> {
+
+  private static final JwtMacWrapper WRAPPER = new JwtMacWrapper();
+
   private static void validate(PrimitiveSet<JwtMacInternal> primitiveSet)
       throws GeneralSecurityException {
     if (primitiveSet.getPrimary() == null) {
@@ -105,6 +108,6 @@
   }
 
  public static void register() throws GeneralSecurityException {
-    Registry.registerPrimitiveWrapper(new JwtMacWrapper());
+    Registry.registerPrimitiveWrapper(WRAPPER);
   }
 }
diff --git a/src/main/java/com/google/crypto/tink/jwt/JwtPublicKeySignWrapper.java b/src/main/java/com/google/crypto/tink/jwt/JwtPublicKeySignWrapper.java
index 02e13af..241d7b4 100644
--- a/src/main/java/com/google/crypto/tink/jwt/JwtPublicKeySignWrapper.java
+++ b/src/main/java/com/google/crypto/tink/jwt/JwtPublicKeySignWrapper.java
@@ -35,6 +35,8 @@
 class JwtPublicKeySignWrapper
     implements PrimitiveWrapper<JwtPublicKeySignInternal, JwtPublicKeySign> {
 
+  private static final JwtPublicKeySignWrapper WRAPPER = new JwtPublicKeySignWrapper();
+
   private static void validate(PrimitiveSet<JwtPublicKeySignInternal> primitiveSet)
       throws GeneralSecurityException {
     if (primitiveSet.getPrimary() == null) {
@@ -94,6 +96,6 @@
    * argument.
    */
   public static void register() throws GeneralSecurityException {
-    Registry.registerPrimitiveWrapper(new JwtPublicKeySignWrapper());
+    Registry.registerPrimitiveWrapper(WRAPPER);
   }
 }
diff --git a/src/main/java/com/google/crypto/tink/jwt/JwtPublicKeyVerifyWrapper.java b/src/main/java/com/google/crypto/tink/jwt/JwtPublicKeyVerifyWrapper.java
index 92b1a48..47c696a 100644
--- a/src/main/java/com/google/crypto/tink/jwt/JwtPublicKeyVerifyWrapper.java
+++ b/src/main/java/com/google/crypto/tink/jwt/JwtPublicKeyVerifyWrapper.java
@@ -29,6 +29,8 @@
 class JwtPublicKeyVerifyWrapper
     implements PrimitiveWrapper<JwtPublicKeyVerifyInternal, JwtPublicKeyVerify> {
 
+  private static final JwtPublicKeyVerifyWrapper WRAPPER = new JwtPublicKeyVerifyWrapper();
+
   private static void validate(PrimitiveSet<JwtPublicKeyVerifyInternal> primitiveSet)
       throws GeneralSecurityException {
     for (List<PrimitiveSet.Entry<JwtPublicKeyVerifyInternal>> entries : primitiveSet.getAll()) {
@@ -100,6 +102,6 @@
    * argument.
    */
   public static void register() throws GeneralSecurityException {
-    Registry.registerPrimitiveWrapper(new JwtPublicKeyVerifyWrapper());
+    Registry.registerPrimitiveWrapper(WRAPPER);
   }
 }
diff --git a/src/main/java/com/google/crypto/tink/mac/MacWrapper.java b/src/main/java/com/google/crypto/tink/mac/MacWrapper.java
index 62718cc..f0ab5bb 100644
--- a/src/main/java/com/google/crypto/tink/mac/MacWrapper.java
+++ b/src/main/java/com/google/crypto/tink/mac/MacWrapper.java
@@ -45,6 +45,7 @@
   private static final Logger logger = Logger.getLogger(MacWrapper.class.getName());
 
   private static final byte[] FORMAT_VERSION = new byte[] {0};
+  private static final MacWrapper WRAPPER = new MacWrapper();
 
   private static class WrappedMac implements Mac {
     private final PrimitiveSet<Mac> primitives;
@@ -169,6 +170,6 @@
   }
 
  public static void register() throws GeneralSecurityException {
-    Registry.registerPrimitiveWrapper(new MacWrapper());
+    Registry.registerPrimitiveWrapper(WRAPPER);
   }
 }
diff --git a/src/main/java/com/google/crypto/tink/prf/PrfSetWrapper.java b/src/main/java/com/google/crypto/tink/prf/PrfSetWrapper.java
index 1417f4e..3108300 100644
--- a/src/main/java/com/google/crypto/tink/prf/PrfSetWrapper.java
+++ b/src/main/java/com/google/crypto/tink/prf/PrfSetWrapper.java
@@ -38,6 +38,9 @@
  */
 @Immutable
 public class PrfSetWrapper implements PrimitiveWrapper<Prf, PrfSet> {
+
+  private static final PrfSetWrapper WRAPPER = new PrfSetWrapper();
+
   private static class WrappedPrfSet extends PrfSet {
     // This map is constructed using Collections.unmodifiableMap
     @SuppressWarnings("Immutable")
@@ -131,6 +134,6 @@
   }
 
   public static void register() throws GeneralSecurityException {
-    Registry.registerPrimitiveWrapper(new PrfSetWrapper());
+    Registry.registerPrimitiveWrapper(WRAPPER);
   }
 }
diff --git a/src/main/java/com/google/crypto/tink/signature/PublicKeySignWrapper.java b/src/main/java/com/google/crypto/tink/signature/PublicKeySignWrapper.java
index 5898f21..b1db7f6 100644
--- a/src/main/java/com/google/crypto/tink/signature/PublicKeySignWrapper.java
+++ b/src/main/java/com/google/crypto/tink/signature/PublicKeySignWrapper.java
@@ -38,6 +38,7 @@
 public class PublicKeySignWrapper implements PrimitiveWrapper<PublicKeySign, PublicKeySign> {
 
   private static final byte[] FORMAT_VERSION = new byte[] {0};
+  private static final PublicKeySignWrapper WRAPPER = new PublicKeySignWrapper();
 
   private static class WrappedPublicKeySign implements PublicKeySign {
     private final PrimitiveSet<PublicKeySign> primitives;
@@ -99,6 +100,6 @@
    * argument.
    */
   public static void register() throws GeneralSecurityException {
-    Registry.registerPrimitiveWrapper(new PublicKeySignWrapper());
+    Registry.registerPrimitiveWrapper(WRAPPER);
   }
 }
diff --git a/src/main/java/com/google/crypto/tink/signature/PublicKeyVerifyWrapper.java b/src/main/java/com/google/crypto/tink/signature/PublicKeyVerifyWrapper.java
index e3a3bd1..520f2cd 100644
--- a/src/main/java/com/google/crypto/tink/signature/PublicKeyVerifyWrapper.java
+++ b/src/main/java/com/google/crypto/tink/signature/PublicKeyVerifyWrapper.java
@@ -43,9 +43,11 @@
  * @since 1.0.0
  */
 class PublicKeyVerifyWrapper implements PrimitiveWrapper<PublicKeyVerify, PublicKeyVerify> {
+
   private static final Logger logger = Logger.getLogger(PublicKeyVerifyWrapper.class.getName());
 
   private static final byte[] FORMAT_VERSION = new byte[] {0};
+  private static final PublicKeyVerifyWrapper WRAPPER = new PublicKeyVerifyWrapper();
 
   private static class WrappedPublicKeyVerify implements PublicKeyVerify {
     private final PrimitiveSet<PublicKeyVerify> primitives;
@@ -131,6 +133,6 @@
    * argument.
    */
   public static void register() throws GeneralSecurityException {
-    Registry.registerPrimitiveWrapper(new PublicKeyVerifyWrapper());
+    Registry.registerPrimitiveWrapper(WRAPPER);
   }
 }
diff --git a/src/main/java/com/google/crypto/tink/streamingaead/StreamingAeadWrapper.java b/src/main/java/com/google/crypto/tink/streamingaead/StreamingAeadWrapper.java
index ef5961c..76711e7 100644
--- a/src/main/java/com/google/crypto/tink/streamingaead/StreamingAeadWrapper.java
+++ b/src/main/java/com/google/crypto/tink/streamingaead/StreamingAeadWrapper.java
@@ -31,6 +31,9 @@
  * {@link com.google.crypto.tink.proto.OutputPrefixType#RAW}.
  */
 public class StreamingAeadWrapper implements PrimitiveWrapper<StreamingAead, StreamingAead> {
+
+  private static final StreamingAeadWrapper WRAPPER = new StreamingAeadWrapper();
+
   StreamingAeadWrapper() {}
 
   /**
@@ -54,6 +57,6 @@
   }
 
   public static void register() throws GeneralSecurityException {
-    Registry.registerPrimitiveWrapper(new StreamingAeadWrapper());
+    Registry.registerPrimitiveWrapper(WRAPPER);
   }
 }