.class public final Lcom/google/api/client/util/SecurityUtils; .super Ljava/lang/Object; .source "SecurityUtils.java" # direct methods .method private constructor ()V .locals 0 .line 1 invoke-direct {p0}, Ljava/lang/Object;->()V return-void .end method .method public static getDefaultKeyStore()Ljava/security/KeyStore; .locals 1 .annotation system Ldalvik/annotation/Throws; value = { Ljava/security/KeyStoreException; } .end annotation .line 1 invoke-static {}, Ljava/security/KeyStore;->getDefaultType()Ljava/lang/String; move-result-object v0 invoke-static {v0}, Ljava/security/KeyStore;->getInstance(Ljava/lang/String;)Ljava/security/KeyStore; move-result-object v0 return-object v0 .end method .method public static getJavaKeyStore()Ljava/security/KeyStore; .locals 1 .annotation system Ldalvik/annotation/Throws; value = { Ljava/security/KeyStoreException; } .end annotation const-string v0, "JKS" .line 1 invoke-static {v0}, Ljava/security/KeyStore;->getInstance(Ljava/lang/String;)Ljava/security/KeyStore; move-result-object v0 return-object v0 .end method .method public static getPkcs12KeyStore()Ljava/security/KeyStore; .locals 1 .annotation system Ldalvik/annotation/Throws; value = { Ljava/security/KeyStoreException; } .end annotation const-string v0, "PKCS12" .line 1 invoke-static {v0}, Ljava/security/KeyStore;->getInstance(Ljava/lang/String;)Ljava/security/KeyStore; move-result-object v0 return-object v0 .end method .method public static getPrivateKey(Ljava/security/KeyStore;Ljava/lang/String;Ljava/lang/String;)Ljava/security/PrivateKey; .locals 0 .annotation system Ldalvik/annotation/Throws; value = { Ljava/security/GeneralSecurityException; } .end annotation .line 1 invoke-virtual {p2}, Ljava/lang/String;->toCharArray()[C move-result-object p2 invoke-virtual {p0, p1, p2}, Ljava/security/KeyStore;->getKey(Ljava/lang/String;[C)Ljava/security/Key; move-result-object p0 check-cast p0, Ljava/security/PrivateKey; return-object p0 .end method .method public static getRsaKeyFactory()Ljava/security/KeyFactory; .locals 1 .annotation system Ldalvik/annotation/Throws; value = { Ljava/security/NoSuchAlgorithmException; } .end annotation const-string v0, "RSA" .line 1 invoke-static {v0}, Ljava/security/KeyFactory;->getInstance(Ljava/lang/String;)Ljava/security/KeyFactory; move-result-object v0 return-object v0 .end method .method public static getSha1WithRsaSignatureAlgorithm()Ljava/security/Signature; .locals 1 .annotation system Ldalvik/annotation/Throws; value = { Ljava/security/NoSuchAlgorithmException; } .end annotation const-string v0, "SHA1withRSA" .line 1 invoke-static {v0}, Ljava/security/Signature;->getInstance(Ljava/lang/String;)Ljava/security/Signature; move-result-object v0 return-object v0 .end method .method public static getSha256WithRsaSignatureAlgorithm()Ljava/security/Signature; .locals 1 .annotation system Ldalvik/annotation/Throws; value = { Ljava/security/NoSuchAlgorithmException; } .end annotation const-string v0, "SHA256withRSA" .line 1 invoke-static {v0}, Ljava/security/Signature;->getInstance(Ljava/lang/String;)Ljava/security/Signature; move-result-object v0 return-object v0 .end method .method public static getX509CertificateFactory()Ljava/security/cert/CertificateFactory; .locals 1 .annotation system Ldalvik/annotation/Throws; value = { Ljava/security/cert/CertificateException; } .end annotation const-string v0, "X.509" .line 1 invoke-static {v0}, Ljava/security/cert/CertificateFactory;->getInstance(Ljava/lang/String;)Ljava/security/cert/CertificateFactory; move-result-object v0 return-object v0 .end method .method public static loadKeyStore(Ljava/security/KeyStore;Ljava/io/InputStream;Ljava/lang/String;)V .locals 0 .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException;, Ljava/security/GeneralSecurityException; } .end annotation .line 1 :try_start_0 invoke-virtual {p2}, Ljava/lang/String;->toCharArray()[C move-result-object p2 invoke-virtual {p0, p1, p2}, Ljava/security/KeyStore;->load(Ljava/io/InputStream;[C)V :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 .line 2 invoke-virtual {p1}, Ljava/io/InputStream;->close()V return-void :catchall_0 move-exception p0 invoke-virtual {p1}, Ljava/io/InputStream;->close()V throw p0 .end method .method public static loadKeyStoreFromCertificates(Ljava/security/KeyStore;Ljava/security/cert/CertificateFactory;Ljava/io/InputStream;)V .locals 2 .annotation system Ldalvik/annotation/Throws; value = { Ljava/security/GeneralSecurityException; } .end annotation .line 1 invoke-virtual {p1, p2}, Ljava/security/cert/CertificateFactory;->generateCertificates(Ljava/io/InputStream;)Ljava/util/Collection; move-result-object p1 invoke-interface {p1}, Ljava/util/Collection;->iterator()Ljava/util/Iterator; move-result-object p1 const/4 p2, 0x0 :goto_0 invoke-interface {p1}, Ljava/util/Iterator;->hasNext()Z move-result v0 if-eqz v0, :cond_0 invoke-interface {p1}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v0 check-cast v0, Ljava/security/cert/Certificate; .line 2 invoke-static {p2}, Ljava/lang/String;->valueOf(I)Ljava/lang/String; move-result-object v1 invoke-virtual {p0, v1, v0}, Ljava/security/KeyStore;->setCertificateEntry(Ljava/lang/String;Ljava/security/cert/Certificate;)V add-int/lit8 p2, p2, 0x1 goto :goto_0 :cond_0 return-void .end method .method public static loadPrivateKeyFromKeyStore(Ljava/security/KeyStore;Ljava/io/InputStream;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/security/PrivateKey; .locals 0 .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException;, Ljava/security/GeneralSecurityException; } .end annotation .line 1 invoke-static {p0, p1, p2}, Lcom/google/api/client/util/SecurityUtils;->loadKeyStore(Ljava/security/KeyStore;Ljava/io/InputStream;Ljava/lang/String;)V .line 2 invoke-static {p0, p3, p4}, Lcom/google/api/client/util/SecurityUtils;->getPrivateKey(Ljava/security/KeyStore;Ljava/lang/String;Ljava/lang/String;)Ljava/security/PrivateKey; move-result-object p0 return-object p0 .end method .method public static sign(Ljava/security/Signature;Ljava/security/PrivateKey;[B)[B .locals 0 .annotation system Ldalvik/annotation/Throws; value = { Ljava/security/InvalidKeyException;, Ljava/security/SignatureException; } .end annotation .line 1 invoke-virtual {p0, p1}, Ljava/security/Signature;->initSign(Ljava/security/PrivateKey;)V .line 2 invoke-virtual {p0, p2}, Ljava/security/Signature;->update([B)V .line 3 invoke-virtual {p0}, Ljava/security/Signature;->sign()[B move-result-object p0 return-object p0 .end method .method public static verify(Ljava/security/Signature;Ljavax/net/ssl/X509TrustManager;Ljava/util/List;[B[B)Ljava/security/cert/X509Certificate; .locals 7 .annotation system Ldalvik/annotation/Signature; value = { "(", "Ljava/security/Signature;", "Ljavax/net/ssl/X509TrustManager;", "Ljava/util/List<", "Ljava/lang/String;", ">;[B[B)", "Ljava/security/cert/X509Certificate;" } .end annotation .annotation system Ldalvik/annotation/Throws; value = { Ljava/security/InvalidKeyException;, Ljava/security/SignatureException; } .end annotation const/4 v0, 0x0 .line 4 :try_start_0 invoke-static {}, Lcom/google/api/client/util/SecurityUtils;->getX509CertificateFactory()Ljava/security/cert/CertificateFactory; move-result-object v1 :try_end_0 .catch Ljava/security/cert/CertificateException; {:try_start_0 .. :try_end_0} :catch_1 .line 5 invoke-interface {p2}, Ljava/util/List;->size()I move-result v2 new-array v2, v2, [Ljava/security/cert/X509Certificate; .line 6 invoke-interface {p2}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object p2 const/4 v3, 0x0 move v4, v3 :goto_0 invoke-interface {p2}, Ljava/util/Iterator;->hasNext()Z move-result v5 if-eqz v5, :cond_1 invoke-interface {p2}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v5 check-cast v5, Ljava/lang/String; .line 7 invoke-static {v5}, Lcom/google/api/client/util/Base64;->decodeBase64(Ljava/lang/String;)[B move-result-object v5 .line 8 new-instance v6, Ljava/io/ByteArrayInputStream; invoke-direct {v6, v5}, Ljava/io/ByteArrayInputStream;->([B)V .line 9 :try_start_1 invoke-virtual {v1, v6}, Ljava/security/cert/CertificateFactory;->generateCertificate(Ljava/io/InputStream;)Ljava/security/cert/Certificate; move-result-object v5 .line 10 instance-of v6, v5, Ljava/security/cert/X509Certificate; if-nez v6, :cond_0 return-object v0 :cond_0 add-int/lit8 v6, v4, 0x1 .line 11 check-cast v5, Ljava/security/cert/X509Certificate; aput-object v5, v2, v4 :try_end_1 .catch Ljava/security/cert/CertificateException; {:try_start_1 .. :try_end_1} :catch_0 move v4, v6 goto :goto_0 :catch_0 return-object v0 :cond_1 :try_start_2 const-string p2, "RSA" .line 12 invoke-interface {p1, v2, p2}, Ljavax/net/ssl/X509TrustManager;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V :try_end_2 .catch Ljava/security/cert/CertificateException; {:try_start_2 .. :try_end_2} :catch_1 .line 13 aget-object p1, v2, v3 invoke-virtual {p1}, Ljava/security/cert/X509Certificate;->getPublicKey()Ljava/security/PublicKey; move-result-object p1 .line 14 invoke-static {p0, p1, p3, p4}, Lcom/google/api/client/util/SecurityUtils;->verify(Ljava/security/Signature;Ljava/security/PublicKey;[B[B)Z move-result p0 if-eqz p0, :cond_2 .line 15 aget-object p0, v2, v3 return-object p0 :catch_1 :cond_2 return-object v0 .end method .method public static verify(Ljava/security/Signature;Ljava/security/PublicKey;[B[B)Z .locals 0 .annotation system Ldalvik/annotation/Throws; value = { Ljava/security/InvalidKeyException;, Ljava/security/SignatureException; } .end annotation .line 1 invoke-virtual {p0, p1}, Ljava/security/Signature;->initVerify(Ljava/security/PublicKey;)V .line 2 invoke-virtual {p0, p3}, Ljava/security/Signature;->update([B)V .line 3 :try_start_0 invoke-virtual {p0, p2}, Ljava/security/Signature;->verify([B)Z move-result p0 :try_end_0 .catch Ljava/security/SignatureException; {:try_start_0 .. :try_end_0} :catch_0 return p0 :catch_0 const/4 p0, 0x0 return p0 .end method