* commit '759445c5bdb2eb54af9e974f604226596976e078': Verify certificates
This commit is contained in:
@@ -47,6 +47,8 @@ import android.content.res.XmlResourceParser;
|
|||||||
import android.database.ContentObserver;
|
import android.database.ContentObserver;
|
||||||
import android.media.MediaPlayer.OnCompletionListener;
|
import android.media.MediaPlayer.OnCompletionListener;
|
||||||
import android.media.MediaPlayer.OnErrorListener;
|
import android.media.MediaPlayer.OnErrorListener;
|
||||||
|
import android.net.http.CertificateChainValidator;
|
||||||
|
import android.net.http.SslError;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -79,10 +81,12 @@ import com.android.internal.util.XmlUtils;
|
|||||||
|
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.FileDescriptor;
|
import java.io.FileDescriptor;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -113,6 +117,8 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
|
|||||||
protected static final boolean DEBUG_RC = false;
|
protected static final boolean DEBUG_RC = false;
|
||||||
/** Debug volumes */
|
/** Debug volumes */
|
||||||
protected static final boolean DEBUG_VOL = false;
|
protected static final boolean DEBUG_VOL = false;
|
||||||
|
/** Debug cert verification */
|
||||||
|
private static final boolean DEBUG_CERTS = false;
|
||||||
|
|
||||||
/** How long to delay before persisting a change in volume/ringer mode. */
|
/** How long to delay before persisting a change in volume/ringer mode. */
|
||||||
private static final int PERSIST_DELAY = 500;
|
private static final int PERSIST_DELAY = 500;
|
||||||
@@ -6634,6 +6640,43 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
|
|||||||
pw.println(Integer.toHexString(mRingerModeMutedStreams));
|
pw.println(Integer.toHexString(mRingerModeMutedStreams));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int verifyX509CertChain(int numcerts, byte [] chain, String domain, String authType) {
|
||||||
|
|
||||||
|
if (DEBUG_CERTS) {
|
||||||
|
Log.v(TAG, "java side verify for "
|
||||||
|
+ numcerts + " certificates (" + chain.length + " bytes"
|
||||||
|
+ ")for "+ domain + "/" + authType);
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[][] certChain = new byte[numcerts][];
|
||||||
|
|
||||||
|
ByteBuffer buf = ByteBuffer.wrap(chain);
|
||||||
|
for (int i = 0; i < numcerts; i++) {
|
||||||
|
int certlen = buf.getInt();
|
||||||
|
if (DEBUG_CERTS) {
|
||||||
|
Log.i(TAG, "cert " + i +": " + certlen);
|
||||||
|
}
|
||||||
|
certChain[i] = new byte[certlen];
|
||||||
|
buf.get(certChain[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
SslError err = CertificateChainValidator.verifyServerCertificates(certChain,
|
||||||
|
domain, authType);
|
||||||
|
if (DEBUG_CERTS) {
|
||||||
|
Log.i(TAG, "verified: " + err);
|
||||||
|
}
|
||||||
|
if (err == null) {
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
return err.getPrimaryError();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e(TAG, "failed to verify chain: " + e);
|
||||||
|
}
|
||||||
|
return SslError.SSL_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||||
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, TAG);
|
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, TAG);
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ import android.view.KeyEvent;
|
|||||||
*/
|
*/
|
||||||
interface IAudioService {
|
interface IAudioService {
|
||||||
|
|
||||||
|
int verifyX509CertChain(int chainsize, in byte[] chain, String host, String authtype);
|
||||||
|
|
||||||
void adjustVolume(int direction, int flags);
|
void adjustVolume(int direction, int flags);
|
||||||
|
|
||||||
oneway void adjustLocalOrRemoteStreamVolume(int streamType, int direction);
|
oneway void adjustLocalOrRemoteStreamVolume(int streamType, int direction);
|
||||||
|
|||||||
Reference in New Issue
Block a user