package duo.labs.webauthn.util; import android.util.Base64; import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; import java.io.IOException; /** * Base64ByteArrayAdapter is a TypeAdapter for byte arrays that automatically encodes/decodes them * as Base64-encoded strings. * <p> * This makes it easier to communicate with Golang-based APIs that use the native JSON marshalling * functionality, which automatically treats byte array types as Base64-encoed strings. */ public class Base64ByteArrayAdapter extends TypeAdapter<byte[]> { @Override public void write(JsonWriter out, byte[] value) throws IOException { if (value == null) { out.nullValue(); return; } String base64Encoded = Base64.encodeToString(value, Base64.NO_WRAP); out.value(base64Encoded); } @Override public byte[] read(JsonReader in) throws IOException { if (in.peek() == JsonToken.NULL) { in.nextNull(); return null; } String base64Encoded = in.nextString(); return Base64.decode(base64Encoded, Base64.NO_WRAP); } }