Inject version bytes if missing from existing EC pre-keys
This commit is contained in:
parent
7f1ee015d1
commit
e8f01be8ef
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,7 +47,8 @@ class ECPublicKeyAdapterTest {
|
|||
return Stream.of(
|
||||
Arguments.of(String.format(template, "null"), null),
|
||||
Arguments.of(String.format(template, "\"\""), null),
|
||||
Arguments.of(String.format(template, "\"" + Base64.getEncoder().encodeToString(EC_PUBLIC_KEY.serialize()) + "\""), EC_PUBLIC_KEY)
|
||||
Arguments.of(String.format(template, "\"" + Base64.getEncoder().encodeToString(EC_PUBLIC_KEY.serialize()) + "\""), EC_PUBLIC_KEY),
|
||||
Arguments.of(String.format(template, "\"" + Base64.getEncoder().encodeToString(EC_PUBLIC_KEY.getPublicKeyBytes()) + "\""), EC_PUBLIC_KEY)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,7 +49,8 @@ class IdentityKeyAdapterTest {
|
|||
return Stream.of(
|
||||
Arguments.of(String.format(template, "null"), null),
|
||||
Arguments.of(String.format(template, "\"\""), null),
|
||||
Arguments.of(String.format(template, "\"" + Base64.getEncoder().encodeToString(IDENTITY_KEY.serialize()) + "\""), IDENTITY_KEY)
|
||||
Arguments.of(String.format(template, "\"" + Base64.getEncoder().encodeToString(IDENTITY_KEY.serialize()) + "\""), IDENTITY_KEY),
|
||||
Arguments.of(String.format(template, "\"" + Base64.getEncoder().encodeToString(IDENTITY_KEY.getPublicKey().getPublicKeyBytes()) + "\""), IDENTITY_KEY)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue