Guest User

Untitled

a guest
Dec 11th, 2019
409
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.74 KB | None | 0 0
  1. .class public final Lokhttp3/CertificatePinner;
  2. .super Ljava/lang/Object;
  3. .source "CertificatePinner.java"
  4.  
  5.  
  6. # annotations
  7. .annotation system Ldalvik/annotation/MemberClasses;
  8. value = {
  9. Lokhttp3/CertificatePinner$Builder;,
  10. Lokhttp3/CertificatePinner$Pin;
  11. }
  12. .end annotation
  13.  
  14.  
  15. # static fields
  16. .field public static final DEFAULT:Lokhttp3/CertificatePinner;
  17.  
  18.  
  19. # instance fields
  20. .field private final certificateChainCleaner:Lokhttp3/internal/tls/CertificateChainCleaner;
  21.  
  22. .field private final pins:Ljava/util/Set;
  23. .annotation system Ldalvik/annotation/Signature;
  24. value = {
  25. "Ljava/util/Set<",
  26. "Lokhttp3/CertificatePinner$Pin;",
  27. ">;"
  28. }
  29. .end annotation
  30. .end field
  31.  
  32.  
  33. # direct methods
  34. .method static constructor <clinit>()V
  35. .locals 1
  36.  
  37. .line 129
  38. new-instance v0, Lokhttp3/CertificatePinner$Builder;
  39.  
  40. invoke-direct {v0}, Lokhttp3/CertificatePinner$Builder;-><init>()V
  41.  
  42. invoke-virtual {v0}, Lokhttp3/CertificatePinner$Builder;->build()Lokhttp3/CertificatePinner;
  43.  
  44. move-result-object v0
  45.  
  46. sput-object v0, Lokhttp3/CertificatePinner;->DEFAULT:Lokhttp3/CertificatePinner;
  47.  
  48. return-void
  49. .end method
  50.  
  51. .method constructor <init>(Ljava/util/Set;Lokhttp3/internal/tls/CertificateChainCleaner;)V
  52. .locals 0
  53. .annotation system Ldalvik/annotation/Signature;
  54. value = {
  55. "(",
  56. "Ljava/util/Set<",
  57. "Lokhttp3/CertificatePinner$Pin;",
  58. ">;",
  59. "Lokhttp3/internal/tls/CertificateChainCleaner;",
  60. ")V"
  61. }
  62. .end annotation
  63.  
  64. .line 134
  65. invoke-direct {p0}, Ljava/lang/Object;-><init>()V
  66.  
  67. .line 135
  68. iput-object p1, p0, Lokhttp3/CertificatePinner;->pins:Ljava/util/Set;
  69.  
  70. .line 136
  71. iput-object p2, p0, Lokhttp3/CertificatePinner;->certificateChainCleaner:Lokhttp3/internal/tls/CertificateChainCleaner;
  72.  
  73. return-void
  74. .end method
  75.  
  76. .method public static pin(Ljava/security/cert/Certificate;)Ljava/lang/String;
  77.  
  78. .locals 2
  79. return-void
  80. .line 243
  81. instance-of v0, p0, Ljava/security/cert/X509Certificate;
  82.  
  83. if-eqz v0, :cond_0
  84.  
  85. .line 246
  86. new-instance v0, Ljava/lang/StringBuilder;
  87.  
  88. invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
  89.  
  90. const-string v1, "sha256/"
  91.  
  92. invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  93.  
  94. check-cast p0, Ljava/security/cert/X509Certificate;
  95.  
  96. invoke-static {p0}, Lokhttp3/CertificatePinner;->sha256(Ljava/security/cert/X509Certificate;)Ld/f;
  97.  
  98. move-result-object p0
  99.  
  100. invoke-virtual {p0}, Ld/f;->b()Ljava/lang/String;
  101.  
  102. move-result-object p0
  103.  
  104. invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  105.  
  106. invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
  107.  
  108. move-result-object p0
  109.  
  110. return-object p0
  111.  
  112. .line 244
  113. :cond_0
  114. new-instance p0, Ljava/lang/IllegalArgumentException;
  115.  
  116. const-string v0, "Certificate pinning requires X509 certificates"
  117.  
  118. invoke-direct {p0, v0}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
  119.  
  120. throw p0
  121. .end method
  122.  
  123. .method static sha1(Ljava/security/cert/X509Certificate;)Ld/f;
  124. .locals 0
  125.  
  126. .line 250
  127. invoke-virtual {p0}, Ljava/security/cert/X509Certificate;->getPublicKey()Ljava/security/PublicKey;
  128.  
  129. move-result-object p0
  130.  
  131. invoke-interface {p0}, Ljava/security/PublicKey;->getEncoded()[B
  132.  
  133. move-result-object p0
  134.  
  135. invoke-static {p0}, Ld/f;->a([B)Ld/f;
  136.  
  137. move-result-object p0
  138.  
  139. invoke-virtual {p0}, Ld/f;->d()Ld/f;
  140.  
  141. move-result-object p0
  142.  
  143. return-object p0
  144. .end method
  145.  
  146. .method static sha256(Ljava/security/cert/X509Certificate;)Ld/f;
  147. .locals 0
  148.  
  149. .line 254
  150. invoke-virtual {p0}, Ljava/security/cert/X509Certificate;->getPublicKey()Ljava/security/PublicKey;
  151.  
  152. move-result-object p0
  153.  
  154. invoke-interface {p0}, Ljava/security/PublicKey;->getEncoded()[B
  155.  
  156. move-result-object p0
  157.  
  158. invoke-static {p0}, Ld/f;->a([B)Ld/f;
  159.  
  160. move-result-object p0
  161.  
  162. invoke-virtual {p0}, Ld/f;->e()Ld/f;
  163.  
  164. move-result-object p0
  165.  
  166. return-object p0
  167. .end method
  168.  
  169.  
  170. # virtual methods
  171. .method public check(Ljava/lang/String;Ljava/util/List;)V
  172. .locals 12
  173. .annotation system Ldalvik/annotation/Signature;
  174. value = {
  175. "(",
  176. "Ljava/lang/String;",
  177. "Ljava/util/List<",
  178. "Ljava/security/cert/Certificate;",
  179. ">;)V"
  180. }
  181. .end annotation
  182.  
  183. .line 162
  184. invoke-virtual {p0, p1}, Lokhttp3/CertificatePinner;->findMatchingPins(Ljava/lang/String;)Ljava/util/List;
  185.  
  186. move-result-object v0
  187.  
  188. .line 163
  189. invoke-interface {v0}, Ljava/util/List;->isEmpty()Z
  190.  
  191. move-result v1
  192.  
  193. if-eqz v1, :cond_0
  194.  
  195. return-void
  196.  
  197. .line 165
  198. :cond_0
  199. iget-object v1, p0, Lokhttp3/CertificatePinner;->certificateChainCleaner:Lokhttp3/internal/tls/CertificateChainCleaner;
  200.  
  201. if-eqz v1, :cond_1
  202.  
  203. .line 166
  204. invoke-virtual {v1, p2, p1}, Lokhttp3/internal/tls/CertificateChainCleaner;->clean(Ljava/util/List;Ljava/lang/String;)Ljava/util/List;
  205.  
  206. move-result-object p2
  207.  
  208. .line 169
  209. :cond_1
  210. invoke-interface {p2}, Ljava/util/List;->size()I
  211.  
  212. move-result v1
  213.  
  214. const/4 v2, 0x0
  215.  
  216. const/4 v3, 0x0
  217.  
  218. :goto_0
  219. if-ge v3, v1, :cond_8
  220.  
  221. .line 170
  222. invoke-interface {p2, v3}, Ljava/util/List;->get(I)Ljava/lang/Object;
  223.  
  224. move-result-object v4
  225.  
  226. check-cast v4, Ljava/security/cert/X509Certificate;
  227.  
  228. .line 176
  229. invoke-interface {v0}, Ljava/util/List;->size()I
  230.  
  231. move-result v5
  232.  
  233. const/4 v6, 0x0
  234.  
  235. move-object v7, v6
  236.  
  237. move-object v8, v7
  238.  
  239. const/4 v6, 0x0
  240.  
  241. :goto_1
  242. if-ge v6, v5, :cond_7
  243.  
  244. .line 177
  245. invoke-interface {v0, v6}, Ljava/util/List;->get(I)Ljava/lang/Object;
  246.  
  247. move-result-object v9
  248.  
  249. check-cast v9, Lokhttp3/CertificatePinner$Pin;
  250.  
  251. .line 178
  252. iget-object v10, v9, Lokhttp3/CertificatePinner$Pin;->hashAlgorithm:Ljava/lang/String;
  253.  
  254. const-string v11, "sha256/"
  255.  
  256. invoke-virtual {v10, v11}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  257.  
  258. move-result v10
  259.  
  260. if-eqz v10, :cond_3
  261.  
  262. if-nez v7, :cond_2
  263.  
  264. .line 179
  265. invoke-static {v4}, Lokhttp3/CertificatePinner;->sha256(Ljava/security/cert/X509Certificate;)Ld/f;
  266.  
  267. move-result-object v7
  268.  
  269. .line 180
  270. :cond_2
  271. iget-object v9, v9, Lokhttp3/CertificatePinner$Pin;->hash:Ld/f;
  272.  
  273. invoke-virtual {v9, v7}, Ld/f;->equals(Ljava/lang/Object;)Z
  274.  
  275. move-result v9
  276.  
  277. if-eqz v9, :cond_5
  278.  
  279. return-void
  280.  
  281. .line 181
  282. :cond_3
  283. iget-object v10, v9, Lokhttp3/CertificatePinner$Pin;->hashAlgorithm:Ljava/lang/String;
  284.  
  285. const-string v11, "sha1/"
  286.  
  287. invoke-virtual {v10, v11}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  288.  
  289. move-result v10
  290.  
  291. if-eqz v10, :cond_6
  292.  
  293. if-nez v8, :cond_4
  294.  
  295. .line 182
  296. invoke-static {v4}, Lokhttp3/CertificatePinner;->sha1(Ljava/security/cert/X509Certificate;)Ld/f;
  297.  
  298. move-result-object v8
  299.  
  300. .line 183
  301. :cond_4
  302. iget-object v9, v9, Lokhttp3/CertificatePinner$Pin;->hash:Ld/f;
  303.  
  304. invoke-virtual {v9, v8}, Ld/f;->equals(Ljava/lang/Object;)Z
  305.  
  306. move-result v9
  307.  
  308. if-eqz v9, :cond_5
  309.  
  310. return-void
  311.  
  312. :cond_5
  313. add-int/lit8 v6, v6, 0x1
  314.  
  315. goto :goto_1
  316.  
  317. .line 185
  318. :cond_6
  319. new-instance p1, Ljava/lang/AssertionError;
  320.  
  321. new-instance p2, Ljava/lang/StringBuilder;
  322.  
  323. invoke-direct {p2}, Ljava/lang/StringBuilder;-><init>()V
  324.  
  325. const-string v0, "unsupported hashAlgorithm: "
  326.  
  327. invoke-virtual {p2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  328.  
  329. iget-object v0, v9, Lokhttp3/CertificatePinner$Pin;->hashAlgorithm:Ljava/lang/String;
  330.  
  331. invoke-virtual {p2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  332.  
  333. invoke-virtual {p2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
  334.  
  335. move-result-object p2
  336.  
  337. invoke-direct {p1, p2}, Ljava/lang/AssertionError;-><init>(Ljava/lang/Object;)V
  338.  
  339. throw p1
  340.  
  341. :cond_7
  342. add-int/lit8 v3, v3, 0x1
  343.  
  344. goto :goto_0
  345.  
  346. .line 191
  347. :cond_8
  348. new-instance v1, Ljava/lang/StringBuilder;
  349.  
  350. invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
  351.  
  352. const-string v3, "Certificate pinning failure!"
  353.  
  354. .line 192
  355. invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  356.  
  357. const-string v3, "\n Peer certificate chain:"
  358.  
  359. .line 193
  360. invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  361.  
  362. .line 194
  363. invoke-interface {p2}, Ljava/util/List;->size()I
  364.  
  365. move-result v3
  366.  
  367. const/4 v4, 0x0
  368.  
  369. :goto_2
  370. if-ge v4, v3, :cond_9
  371.  
  372. .line 195
  373. invoke-interface {p2, v4}, Ljava/util/List;->get(I)Ljava/lang/Object;
  374.  
  375. move-result-object v5
  376.  
  377. check-cast v5, Ljava/security/cert/X509Certificate;
  378.  
  379. const-string v6, "\n "
  380.  
  381. .line 196
  382. invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  383.  
  384. invoke-static {v5}, Lokhttp3/CertificatePinner;->pin(Ljava/security/cert/Certificate;)Ljava/lang/String;
  385.  
  386. move-result-object v6
  387.  
  388. invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  389.  
  390. const-string v6, ": "
  391.  
  392. .line 197
  393. invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  394.  
  395. invoke-virtual {v5}, Ljava/security/cert/X509Certificate;->getSubjectDN()Ljava/security/Principal;
  396.  
  397. move-result-object v5
  398.  
  399. invoke-interface {v5}, Ljava/security/Principal;->getName()Ljava/lang/String;
  400.  
  401. move-result-object v5
  402.  
  403. invoke-virtual {v1, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  404.  
  405. add-int/lit8 v4, v4, 0x1
  406.  
  407. goto :goto_2
  408.  
  409. :cond_9
  410. const-string p2, "\n Pinned certificates for "
  411.  
  412. .line 199
  413. invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  414.  
  415. invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  416.  
  417. const-string p1, ":"
  418.  
  419. invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  420.  
  421. .line 200
  422. invoke-interface {v0}, Ljava/util/List;->size()I
  423.  
  424. move-result p1
  425.  
  426. :goto_3
  427. if-ge v2, p1, :cond_a
  428.  
  429. .line 201
  430. invoke-interface {v0, v2}, Ljava/util/List;->get(I)Ljava/lang/Object;
  431.  
  432. move-result-object p2
  433.  
  434. check-cast p2, Lokhttp3/CertificatePinner$Pin;
  435.  
  436. const-string v3, "\n "
  437.  
  438. .line 202
  439. invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  440.  
  441. invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
  442.  
  443. add-int/lit8 v2, v2, 0x1
  444.  
  445. goto :goto_3
  446.  
  447. .line 204
  448. :cond_a
  449. new-instance p1, Ljavax/net/ssl/SSLPeerUnverifiedException;
  450.  
  451. invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
  452.  
  453. move-result-object p2
  454.  
  455. invoke-direct {p1, p2}, Ljavax/net/ssl/SSLPeerUnverifiedException;-><init>(Ljava/lang/String;)V
  456.  
  457. throw p1
  458. .end method
  459.  
  460. .method public varargs check(Ljava/lang/String;[Ljava/security/cert/Certificate;)V
  461. .locals 0
  462.  
  463. .line 210
  464. invoke-static {p2}, Ljava/util/Arrays;->asList([Ljava/lang/Object;)Ljava/util/List;
  465.  
  466. move-result-object p2
  467.  
  468. invoke-virtual {p0, p1, p2}, Lokhttp3/CertificatePinner;->check(Ljava/lang/String;Ljava/util/List;)V
  469.  
  470. return-void
  471. .end method
  472.  
  473. .method public equals(Ljava/lang/Object;)Z
  474. .locals 3
  475.  
  476. const/4 v0, 0x1
  477.  
  478. if-ne p1, p0, :cond_0
  479.  
  480. return v0
  481.  
  482. .line 141
  483. :cond_0
  484. instance-of v1, p1, Lokhttp3/CertificatePinner;
  485.  
  486. if-eqz v1, :cond_1
  487.  
  488. iget-object v1, p0, Lokhttp3/CertificatePinner;->certificateChainCleaner:Lokhttp3/internal/tls/CertificateChainCleaner;
  489.  
  490. check-cast p1, Lokhttp3/CertificatePinner;
  491.  
  492. iget-object v2, p1, Lokhttp3/CertificatePinner;->certificateChainCleaner:Lokhttp3/internal/tls/CertificateChainCleaner;
  493.  
  494. .line 142
  495. invoke-static {v1, v2}, Lokhttp3/internal/Util;->equal(Ljava/lang/Object;Ljava/lang/Object;)Z
  496.  
  497. move-result v1
  498.  
  499. if-eqz v1, :cond_1
  500.  
  501. iget-object v1, p0, Lokhttp3/CertificatePinner;->pins:Ljava/util/Set;
  502.  
  503. iget-object p1, p1, Lokhttp3/CertificatePinner;->pins:Ljava/util/Set;
  504.  
  505. .line 143
  506. invoke-interface {v1, p1}, Ljava/util/Set;->equals(Ljava/lang/Object;)Z
  507.  
  508. move-result p1
  509.  
  510. if-eqz p1, :cond_1
  511.  
  512. goto :goto_0
  513.  
  514. :cond_1
  515. const/4 v0, 0x0
  516.  
  517. :goto_0
  518. return v0
  519. .end method
  520.  
  521. .method findMatchingPins(Ljava/lang/String;)Ljava/util/List;
  522. .locals 4
  523. .annotation system Ldalvik/annotation/Signature;
  524. value = {
  525. "(",
  526. "Ljava/lang/String;",
  527. ")",
  528. "Ljava/util/List<",
  529. "Lokhttp3/CertificatePinner$Pin;",
  530. ">;"
  531. }
  532. .end annotation
  533.  
  534. .line 218
  535. invoke-static {}, Ljava/util/Collections;->emptyList()Ljava/util/List;
  536.  
  537. move-result-object v0
  538.  
  539. .line 219
  540. iget-object v1, p0, Lokhttp3/CertificatePinner;->pins:Ljava/util/Set;
  541.  
  542. invoke-interface {v1}, Ljava/util/Set;->iterator()Ljava/util/Iterator;
  543.  
  544. move-result-object v1
  545.  
  546. :cond_0
  547. :goto_0
  548. invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
  549.  
  550. move-result v2
  551.  
  552. if-eqz v2, :cond_2
  553.  
  554. invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
  555.  
  556. move-result-object v2
  557.  
  558. check-cast v2, Lokhttp3/CertificatePinner$Pin;
  559.  
  560. .line 220
  561. invoke-virtual {v2, p1}, Lokhttp3/CertificatePinner$Pin;->matches(Ljava/lang/String;)Z
  562.  
  563. move-result v3
  564.  
  565. if-eqz v3, :cond_0
  566.  
  567. .line 221
  568. invoke-interface {v0}, Ljava/util/List;->isEmpty()Z
  569.  
  570. move-result v3
  571.  
  572. if-eqz v3, :cond_1
  573.  
  574. new-instance v0, Ljava/util/ArrayList;
  575.  
  576. invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
  577.  
  578. .line 222
  579. :cond_1
  580. invoke-interface {v0, v2}, Ljava/util/List;->add(Ljava/lang/Object;)Z
  581.  
  582. goto :goto_0
  583.  
  584. :cond_2
  585. return-object v0
  586. .end method
  587.  
  588. .method public hashCode()I
  589. .locals 2
  590.  
  591. .line 147
  592. iget-object v0, p0, Lokhttp3/CertificatePinner;->certificateChainCleaner:Lokhttp3/internal/tls/CertificateChainCleaner;
  593.  
  594. if-eqz v0, :cond_0
  595.  
  596. invoke-virtual {v0}, Ljava/lang/Object;->hashCode()I
  597.  
  598. move-result v0
  599.  
  600. goto :goto_0
  601.  
  602. :cond_0
  603. const/4 v0, 0x0
  604.  
  605. :goto_0
  606. mul-int/lit8 v0, v0, 0x1f
  607.  
  608. .line 148
  609. iget-object v1, p0, Lokhttp3/CertificatePinner;->pins:Ljava/util/Set;
  610.  
  611. invoke-interface {v1}, Ljava/util/Set;->hashCode()I
  612.  
  613. move-result v1
  614.  
  615. add-int/2addr v0, v1
  616.  
  617. return v0
  618. .end method
  619.  
  620. .method withCertificateChainCleaner(Lokhttp3/internal/tls/CertificateChainCleaner;)Lokhttp3/CertificatePinner;
  621. .locals 2
  622.  
  623. .line 231
  624. iget-object v0, p0, Lokhttp3/CertificatePinner;->certificateChainCleaner:Lokhttp3/internal/tls/CertificateChainCleaner;
  625.  
  626. invoke-static {v0, p1}, Lokhttp3/internal/Util;->equal(Ljava/lang/Object;Ljava/lang/Object;)Z
  627.  
  628. move-result v0
  629.  
  630. if-eqz v0, :cond_0
  631.  
  632. move-object v0, p0
  633.  
  634. goto :goto_0
  635.  
  636. .line 233
  637. :cond_0
  638. new-instance v0, Lokhttp3/CertificatePinner;
  639.  
  640. iget-object v1, p0, Lokhttp3/CertificatePinner;->pins:Ljava/util/Set;
  641.  
  642. invoke-direct {v0, v1, p1}, Lokhttp3/CertificatePinner;-><init>(Ljava/util/Set;Lokhttp3/internal/tls/CertificateChainCleaner;)V
  643.  
  644. :goto_0
  645. return-object v0
  646. .end method
Advertisement
Add Comment
Please, Sign In to add comment