Inject version bytes if missing from existing EC pre-keys

This commit is contained in:
Jon Chambers
2023-06-09 11:41:51 -04:00
committed by GitHub
parent 7f1ee015d1
commit e8f01be8ef
3 changed files with 16 additions and 3 deletions

View File

@@ -14,11 +14,17 @@ import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.util.Base64;
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.Metrics;
import org.signal.libsignal.protocol.InvalidKeyException;
import org.signal.libsignal.protocol.ecc.ECPublicKey;
import org.whispersystems.textsecuregcm.metrics.MetricsUtil;
public class ECPublicKeyAdapter {
private static final Counter EC_PUBLIC_KEY_WITHOUT_VERSION_BYTE_COUNTER =
Metrics.counter(MetricsUtil.name(ECPublicKeyAdapter.class, "keyWithoutVersionByte"));
public static class Serializer extends JsonSerializer<ECPublicKey> {
@Override
@@ -49,7 +55,12 @@ public class ECPublicKeyAdapter {
try {
return new ECPublicKey(ecPublicKeyBytes);
} catch (final InvalidKeyException e) {
throw new JsonParseException(parser, "Could not interpret key bytes as an EC public key", e);
if (ecPublicKeyBytes.length == ECPublicKey.KEY_SIZE - 1) {
EC_PUBLIC_KEY_WITHOUT_VERSION_BYTE_COUNTER.increment();
return ECPublicKey.fromPublicKeyBytes(ecPublicKeyBytes);
}
throw new JsonParseException(parser, "Could not interpret identity key bytes as an EC public key", e);
}
}
}