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)
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)
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)
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")
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)
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)
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)
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)
def testDecode7(self): # Verify decode returns the DerInteger der = DerInteger() self.assertEquals(der, der.decode(b('\x02\x01\x7F')))
def testDecode6(self): # Explicit encoding number = DerInteger(explicit=3) number.decode(b('\xa3\x03\x02\x01\x34')) self.assertEquals(number.value, 0x34)
def testDecode7(self): # Verify decode returns the DerInteger der = DerInteger() self.assertEqual(der, der.decode(b('\x02\x01\x7F')))
def testDecode6(self): # Explicit encoding number = DerInteger(explicit=3) number.decode(b('\xa3\x03\x02\x01\x34')) self.assertEqual(number.value, 0x34)