3131import java .io .IOException ;
3232import java .io .InputStream ;
3333import java .io .InputStreamReader ;
34+ import java .math .BigInteger ;
35+ import java .net .InetAddress ;
3436import java .nio .charset .StandardCharsets ;
37+ import java .security .InvalidKeyException ;
38+ import java .security .NoSuchAlgorithmException ;
39+ import java .security .NoSuchProviderException ;
40+ import java .security .Principal ;
41+ import java .security .PublicKey ;
42+ import java .security .SignatureException ;
43+ import java .security .cert .CertificateEncodingException ;
44+ import java .security .cert .CertificateException ;
45+ import java .security .cert .CertificateExpiredException ;
3546import java .security .cert .CertificateFactory ;
47+ import java .security .cert .CertificateNotYetValidException ;
3648import java .security .cert .X509Certificate ;
49+ import java .util .ArrayList ;
3750import java .util .Arrays ;
51+ import java .util .Collection ;
3852import java .util .Collections ;
53+ import java .util .Date ;
3954import java .util .List ;
55+ import java .util .Set ;
4056
4157import javax .net .ssl .SSLException ;
4258
@@ -548,4 +564,210 @@ void testMatchIdentity() {
548564 );
549565 }
550566
567+
568+ @ Test
569+ void testSimulatedByteProperties () throws Exception {
570+ // Simulated byte array for an IP address
571+ final byte [] ipAsByteArray = {1 , 1 , 1 , 1 }; // 1.1.1.1 in byte form
572+
573+ final List <List <?>> entries = new ArrayList <>();
574+ final List <Object > entry = new ArrayList <>();
575+ entry .add (SubjectName .IP );
576+ entry .add (ipAsByteArray );
577+ entries .add (entry );
578+
579+ // Mocking the certificate behavior
580+ final X509Certificate mockCert = generateX509Certificate (entries );
581+
582+ final List <SubjectName > result = DefaultHostnameVerifier .getSubjectAltNames (mockCert , -1 );
583+ Assertions .assertEquals (1 , result .size (), "Should have one SubjectAltName" );
584+
585+ final SubjectName sn = result .get (0 );
586+ Assertions .assertEquals (SubjectName .IP , sn .getType (), "Should be an IP type" );
587+ // Here, you'll need logic to convert byte array to string for assertion
588+ Assertions .assertEquals ("1.1.1.1" , sn .getValue (), "IP address should match after conversion" );
589+ }
590+
591+ @ Test
592+ void testSimulatedBytePropertiesIPv6 () throws Exception {
593+ final byte [] ipv6AsByteArray = InetAddress .getByName ("2001:db8:85a3::8a2e:370:7334" ).getAddress ();
594+ // IPv6 2001:db8:85a3::8a2e:370:7334
595+
596+ final List <List <?>> entries = new ArrayList <>();
597+ final List <Object > entry = new ArrayList <>();
598+ entry .add (SubjectName .IP );
599+ entry .add (ipv6AsByteArray );
600+ entries .add (entry );
601+
602+ // Mocking the certificate behavior
603+ final X509Certificate mockCert = generateX509Certificate (entries );
604+
605+ final List <SubjectName > result = DefaultHostnameVerifier .getSubjectAltNames (mockCert , -1 );
606+ Assertions .assertEquals (1 , result .size (), "Should have one SubjectAltName" );
607+
608+ final SubjectName sn = result .get (0 );
609+ Assertions .assertEquals (SubjectName .IP , sn .getType (), "Should be an IP type" );
610+ // Here, you'll need logic to convert byte array to string for assertion
611+ Assertions .assertEquals ("2001:0db8:85a3:0000:0000:8a2e:0370:7334" , sn .getValue (), "IP address should match after conversion" );
612+ }
613+
614+
615+ @ Test
616+ void testSimulatedBytePropertiesRawHex () throws Exception {
617+ final byte [] rawHexByteArray = {0x0A , 0x1B , 0x2C , 0x3D , 0x4E , 0x5F }; // Random binary data
618+
619+ final List <List <?>> entries = new ArrayList <>();
620+ final List <Object > entry = new ArrayList <>();
621+ entry .add (SubjectName .IP );
622+ entry .add (rawHexByteArray );
623+ entries .add (entry );
624+
625+ // Mocking the certificate behavior
626+ final X509Certificate mockCert = generateX509Certificate (entries );
627+ Assertions .assertThrows (IllegalArgumentException .class , () -> DefaultHostnameVerifier .getSubjectAltNames (mockCert , -1 ));
628+
629+ }
630+
631+
632+ private X509Certificate generateX509Certificate (final List <List <?>> entries ) {
633+ return new X509Certificate () {
634+
635+ @ Override
636+ public boolean hasUnsupportedCriticalExtension () {
637+ return false ;
638+ }
639+
640+ @ Override
641+ public Set <String > getCriticalExtensionOIDs () {
642+ return null ;
643+ }
644+
645+ @ Override
646+ public Set <String > getNonCriticalExtensionOIDs () {
647+ return null ;
648+ }
649+
650+ @ Override
651+ public byte [] getExtensionValue (final String oid ) {
652+ return new byte [0 ];
653+ }
654+
655+ @ Override
656+ public byte [] getEncoded () throws CertificateEncodingException {
657+ return new byte [0 ];
658+ }
659+
660+ @ Override
661+ public void verify (final PublicKey key ) throws CertificateException , NoSuchAlgorithmException , InvalidKeyException , NoSuchProviderException , SignatureException {
662+
663+ }
664+
665+ @ Override
666+ public void verify (final PublicKey key , final String sigProvider ) throws CertificateException , NoSuchAlgorithmException , InvalidKeyException , NoSuchProviderException , SignatureException {
667+
668+ }
669+
670+ @ Override
671+ public String toString () {
672+ return "" ;
673+ }
674+
675+ @ Override
676+ public PublicKey getPublicKey () {
677+ return null ;
678+ }
679+
680+ @ Override
681+ public void checkValidity () throws CertificateExpiredException , CertificateNotYetValidException {
682+
683+ }
684+
685+ @ Override
686+ public void checkValidity (final Date date ) throws CertificateExpiredException , CertificateNotYetValidException {
687+
688+ }
689+
690+ @ Override
691+ public int getVersion () {
692+ return 0 ;
693+ }
694+
695+ @ Override
696+ public BigInteger getSerialNumber () {
697+ return null ;
698+ }
699+
700+ @ Override
701+ public Principal getIssuerDN () {
702+ return null ;
703+ }
704+
705+ @ Override
706+ public Principal getSubjectDN () {
707+ return null ;
708+ }
709+
710+ @ Override
711+ public Date getNotBefore () {
712+ return null ;
713+ }
714+
715+ @ Override
716+ public Date getNotAfter () {
717+ return null ;
718+ }
719+
720+ @ Override
721+ public byte [] getTBSCertificate () throws CertificateEncodingException {
722+ return new byte [0 ];
723+ }
724+
725+ @ Override
726+ public byte [] getSignature () {
727+ return new byte [0 ];
728+ }
729+
730+ @ Override
731+ public String getSigAlgName () {
732+ return "" ;
733+ }
734+
735+ @ Override
736+ public String getSigAlgOID () {
737+ return "" ;
738+ }
739+
740+ @ Override
741+ public byte [] getSigAlgParams () {
742+ return new byte [0 ];
743+ }
744+
745+ @ Override
746+ public boolean [] getIssuerUniqueID () {
747+ return new boolean [0 ];
748+ }
749+
750+ @ Override
751+ public boolean [] getSubjectUniqueID () {
752+ return new boolean [0 ];
753+ }
754+
755+ @ Override
756+ public boolean [] getKeyUsage () {
757+ return new boolean [0 ];
758+ }
759+
760+ @ Override
761+ public int getBasicConstraints () {
762+ return 0 ;
763+ }
764+
765+ @ Override
766+ public Collection <List <?>> getSubjectAlternativeNames () {
767+ return entries ;
768+ }
769+ };
770+
771+ }
772+
551773}
0 commit comments