Exemple #1
0
 def testDecode2(self):
     # Multi-byte integer
     der = DerInteger()
     # Value 0x180L
     der.decode(b('\x02\x02\x01\x80'))
     self.assertEqual(der.value,0x180)
     # One very long integer
     der.decode(
     b('\x02\x82\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')+
     b('\x00\x00\x00\x00\x00\x00\x00\x00\x00'))
     self.assertEqual(der.value,2**2048)
Exemple #2
0
 def testDecode2(self):
     # Multi-byte integer
     der = DerInteger()
     # Value 0x180L
     der.decode(b('\x02\x02\x01\x80'))
     self.assertEquals(der.value, 0x180L)
     # One very long integer
     der.decode(
         b('\x02\x82\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +
         b('\x00\x00\x00\x00\x00\x00\x00\x00\x00'))
     self.assertEquals(der.value, 2L**2048)
    def testStrict1(self):
        number = DerInteger()

        number.decode(b'\x02\x02\x00\x01')
        number.decode(b'\x02\x02\x00\x7F')
        self.assertRaises(ValueError, number.decode, b'\x02\x02\x00\x01', strict=True)
        self.assertRaises(ValueError, number.decode, b'\x02\x02\x00\x7F', strict=True)
Exemple #4
0
    def testStrict1(self):
        number = DerInteger()

        number.decode(b'\x02\x02\x00\x01')
        number.decode(b'\x02\x02\x00\x7F')
        self.assertRaises(ValueError, number.decode, b'\x02\x02\x00\x01', strict=True)
        self.assertRaises(ValueError, number.decode, b'\x02\x02\x00\x7F', strict=True)
Exemple #5
0
 def testDecode3(self):
     # Negative integer
     der = DerInteger()
     # Value -1
     der.decode(b('\x02\x01\xFF'))
     self.assertEquals(der.value, -1)
     # Value -32768
     der.decode(b('\x02\x02\x80\x00'))
     self.assertEquals(der.value, -32768)
Exemple #6
0
 def testDecode3(self):
     # Negative integer
     der = DerInteger()
     # Value -1
     der.decode(b('\x02\x01\xFF'))
     self.assertEqual(der.value, -1)
     # Value -32768
     der.decode(b('\x02\x02\x80\x00'))
     self.assertEqual(der.value, -32768)
def _extract_sp_info(x509_certificate):
    """Extract subjectPublicKeyInfo from a DER X.509 certificate."""

    from Crypto.Util.asn1 import DerSequence, DerInteger

    try:
        # This code will partially parse tbsCertificate
        # to get to subjectPublicKeyInfo.
        #
        # However, the first 2 elements of tbsCertificate are:
        #
        #   version [0]  Version DEFAULT v1,
        #   serialNumber         CertificateSerialNumber,
        #
        # where:
        #
        #   Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }
        #   CertificateSerialNumber  ::=  INTEGER
        #
        # In order to know the position of subjectPublicKeyInfo
        # in the tbsCertificate SEQUENCE, we try to see if the
        # first element is an untagged INTEGER (that is, the
        # certificate serial number).

        x509_tbs_cert = DerSequence()
        x509_tbs_cert.decode(x509_certificate[0])

        index = -1  # Sentinel
        try:
            _ = x509_tbs_cert[0] + 1
            # Still here? There was no version then
            index = 5
        except TypeError:
            # Landed here? Version was there
            x509_version = DerInteger(explicit=0)
            x509_version.decode(x509_tbs_cert[0])
            index = 6

        if index in (5, 6):
            return x509_tbs_cert[index]

    except (TypeError, IndexError, ValueError, EOFError):
        pass

    raise ValueError("Cannot extract subjectPublicKeyInfo")
Exemple #8
0
 def testDecode5(self):
     # We still accept BER integer format
     der = DerInteger()
     # Redundant leading zeroes
     der.decode(b('\x02\x02\x00\x01'))
     self.assertEquals(der.value, 1)
     # Redundant leading 0xFF
     der.decode(b('\x02\x02\xFF\xFF'))
     self.assertEquals(der.value, -1)
     # Empty payload
     der.decode(b('\x02\x00'))
     self.assertEquals(der.value, 0)
Exemple #9
0
 def testDecode1(self):
     # Single-byte integer
     der = DerInteger()
     # Value 0
     der.decode(b('\x02\x01\x00'))
     self.assertEquals(der.value, 0)
     # Value 1
     der.decode(b('\x02\x01\x01'))
     self.assertEquals(der.value, 1)
     # Value 127
     der.decode(b('\x02\x01\x7F'))
     self.assertEquals(der.value, 127)
Exemple #10
0
 def testDecode5(self):
     # We still accept BER integer format
     der = DerInteger()
     # Redundant leading zeroes
     der.decode(b('\x02\x02\x00\x01'))
     self.assertEqual(der.value, 1)
     # Redundant leading 0xFF
     der.decode(b('\x02\x02\xFF\xFF'))
     self.assertEqual(der.value, -1)
     # Empty payload
     der.decode(b('\x02\x00'))
     self.assertEqual(der.value, 0)
Exemple #11
0
 def testDecode1(self):
     # Single-byte integer
     der = DerInteger()
     # Value 0
     der.decode(b('\x02\x01\x00'))
     self.assertEqual(der.value, 0)
     # Value 1
     der.decode(b('\x02\x01\x01'))
     self.assertEqual(der.value, 1)
     # Value 127
     der.decode(b('\x02\x01\x7F'))
     self.assertEqual(der.value, 127)
Exemple #12
0
 def testDecode7(self):
     # Verify decode returns the DerInteger
     der = DerInteger()
     self.assertEquals(der, der.decode(b('\x02\x01\x7F')))
Exemple #13
0
 def testDecode6(self):
     # Explicit encoding
     number = DerInteger(explicit=3)
     number.decode(b('\xa3\x03\x02\x01\x34'))
     self.assertEquals(number.value, 0x34)
Exemple #14
0
 def testDecode7(self):
     # Verify decode returns the DerInteger
     der = DerInteger()
     self.assertEqual(der, der.decode(b('\x02\x01\x7F')))
Exemple #15
0
 def testDecode6(self):
     # Explicit encoding
     number = DerInteger(explicit=3)
     number.decode(b('\xa3\x03\x02\x01\x34'))
     self.assertEqual(number.value, 0x34)