def testDecodeOpenTypesUnknownId(self): s, r = decoder.decode(ints2octs((48, 128, 2, 1, 3, 6, 1, 12, 0, 0)), asn1Spec=self.s, decodeOpenTypes=True) assert not r assert s[0] == 3 assert s[1] == univ.OctetString(hexValue='06010c')
def testDecodeOpenTypesChoiceOne(self): s, r = decoder.decode(ints2octs((48, 128, 2, 1, 1, 2, 1, 12, 0, 0)), asn1Spec=self.s, decodeOpenTypes=True) assert not r assert s[0] == 1 assert s[1] == 12
def testDontDecodeOpenTypesChoiceOne(self): s, r = decoder.decode(ints2octs( (48, 128, 2, 1, 1, 49, 128, 2, 1, 12, 0, 0, 0, 0)), asn1Spec=self.s) assert not r assert s[0] == 1 assert s[1][0] == ints2octs((2, 1, 12))
def testDontDecodeOpenTypesChoiceTwo(self): s, r = decoder.decode( ints2octs((48, 128, 2, 1, 2, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0)), asn1Spec=self.s ) assert not r assert s[0] == 2 assert s[1] == ints2octs((4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110))
def testDecodeOpenTypesChoiceOne(self): s, r = decoder.decode(ints2octs( (48, 10, 2, 1, 1, 49, 5, 131, 3, 2, 1, 12)), asn1Spec=self.s, decodeOpenTypes=True) assert not r assert s[0] == 1 assert s[1][0] == 12
def testDecodeOpenTypesUnknownId(self): s, r = decoder.decode(ints2octs( (48, 10, 2, 1, 3, 49, 5, 131, 3, 2, 1, 12)), asn1Spec=self.s, decodeOpenTypes=True) assert not r assert s[0] == 3 assert s[1][0] == univ.OctetString(hexValue='02010C')
def testDecodeOpenTypesChoiceTwo(self): s, r = decoder.decode(ints2octs( (48, 128, 2, 1, 2, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0)), asn1Spec=self.s, decodeOpenTypes=True) assert not r assert s[0] == 2 assert s[1] == univ.OctetString('quick brown')
def testDecodeOpenTypesUnknownType(self): try: s, r = decoder.decode(ints2octs( (48, 128, 6, 1, 1, 2, 1, 12, 0, 0)), asn1Spec=self.s, decodeOpenTypes=True) except PyAsn1Error: pass else: assert False, 'unknown open type tolerated'
def receive_and_convert_vehicle_manifest(self, vin, encoded_manifest): """ manifest here is a binary, ASN.1 BER/CER/DER object representing the vehicle manifest. It is an object matching uptane.clients.applicationmodule.MetadataFile """ # Check argument format. uptane.formats.VIN_SCHEMA.check_match(vin) # Convert manifest to uptane.formats.VEHICLE_VERSION_MANIFEST_SCHEMA. # TODO: Move imports up later. import pyasn1.type #from pyasn1.type import univ, char, namedtype, namedval, tag, constraint, useful from pyasn1.codec.cer import decoder import uptane.clients.applicationmodule as appmodule decoded_tuples = decoder.decode(encoded_manifest, asn1Spec=appmodule.MetadataFile()) signed_metadata = decoded_tuples[0][3]['signed'] signatures = decoded_tuples[0][3]['signatures'] #print(signed_metadata.prettyPrint()) # 1. Convert this signed_metadata object: # From: uptane.clients.applicationmodule.Metadata (ASN1) # Into: uptane.formats.SIGNABLE_VEHICLE_VERSION_MANIFEST_SCHEMA (JSON) # 2. Validate signatures on these objects. # - Determine key to use. # - Get cryptographic hash of the original object: # (a uptane.clients.applicationmodule.Metadata object or no??) # - Check signature. print('Signed contents of object are:') print(signed_metadata.prettyPrint()) print('Not yet converting to JSON or checking signature!!')
def testFalse(self): assert decoder.decode(ints2octs((1, 1, 0))) == (0, null)
def testEmpty(self): try: decoder.decode(ints2octs((1, 0))) except PyAsn1Error: pass
def testLongMode(self): assert decoder.decode( ints2octs((36, 128, 4, 130, 3, 232) + (81,)*1000 + (4, 1, 81, 0, 0)) ) == (str2octs('Q'*1001), null)
def testTrue(self): assert decoder.decode(ints2octs((1, 1, 255))) == (1, null)
def testShortMode(self): assert decoder.decode( ints2octs((4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120)), ) == (str2octs('Quick brown fox'), null)
def testOverflow(self): try: decoder.decode(ints2octs((1, 2, 0, 0))) except PyAsn1Error: pass
def testShortMode(self): assert decoder.decode( ints2octs((3, 3, 6, 170, 128)) ) == (((1, 0) * 5), null)
def testLongMode(self): assert decoder.decode( ints2octs((36, 128, 4, 130, 3, 232) + (81, ) * 1000 + (4, 1, 81, 0, 0))) == (str2octs('Q' * 1001), null)
def testFalse(self): assert decoder.decode('\001\001\000') == (0, '')
def testLongMode(self): assert decoder.decode(ints2octs((3, 127, 6) + (170, ) * 125 + (128, ))) == (((1, 0) * 501), null)
def testShortMode(self): assert decoder.decode( '\004\017Quick brown fox' ) == ('Quick brown fox', '')
def testLongMode(self): assert decoder.decode( '$\200\004\202\003\350' + 'Q'*1000 + '\004\001Q\000\000' ) == ('Q'*1001, '')
def testShortMode(self): assert decoder.decode(ints2octs( (3, 3, 6, 170, 128))) == (((1, 0) * 5), null)
def testLongMode(self): assert decoder.decode( ints2octs((3, 127, 6) + (170,) * 125 + (128,)) ) == (((1, 0) * 501), null)
def testShortMode(self): assert decoder.decode( ints2octs( (4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120)), ) == (str2octs('Quick brown fox'), null)
signature['value'] = signed_hash['sig'] signatures[0] = signature metadata['signatures'] = signatures print(metadata.prettyPrint()) before = encoder.encode(metadata) filename = 'root.cer' with open(filename, 'wb') as a: a.write(before) # Decode with open(filename, 'rb') as b: after = b.read() tuples = decoder.decode(after, asn1Spec=Metadata()) recovered = tuples[0] print(recovered.prettyPrint()) recoveredSigned = recovered['signed'] # Because we know there's only one signature. recoveredSignature = str(recovered['signatures'][0]['value']) recoveredHexString = hashlib.sha256( encoder.encode(recoveredSigned)).hexdigest() # The 0s here are us cheating. One would actually loop through the roles to # find root and then the keyids to find the keyid that matches. recoveredRootPublicKeyID = str( recovered['signed']['body']['rootMetadata']['roles'][0]['keyids'][0])
def testTrue(self): assert decoder.decode('\001\001\377') == (1, '')