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))
Exemple #4
0
 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'
Exemple #9
0
    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!!')
Exemple #10
0
 def testFalse(self):
     assert decoder.decode(ints2octs((1, 1, 0))) == (0, null)
Exemple #11
0
 def testEmpty(self):
     try:
         decoder.decode(ints2octs((1, 0)))
     except PyAsn1Error:
         pass
Exemple #12
0
 def testLongMode(self):
     assert decoder.decode(
         ints2octs((36, 128, 4, 130, 3, 232) + (81,)*1000 + (4, 1, 81, 0, 0))
         ) == (str2octs('Q'*1001), null)
Exemple #13
0
 def testTrue(self):
     assert decoder.decode(ints2octs((1, 1, 255))) == (1, null)
Exemple #14
0
 def testFalse(self):
     assert decoder.decode(ints2octs((1, 1, 0))) == (0, null)
Exemple #15
0
 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)
Exemple #16
0
 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)
Exemple #18
0
 def testLongMode(self):
     assert decoder.decode(
         ints2octs((36, 128, 4, 130, 3, 232) + (81, ) * 1000 +
                   (4, 1, 81, 0, 0))) == (str2octs('Q' * 1001), null)
Exemple #19
0
 def testFalse(self):
     assert decoder.decode('\001\001\000') == (0, '')
Exemple #20
0
 def testLongMode(self):
     assert decoder.decode(ints2octs((3, 127, 6) + (170, ) * 125 +
                                     (128, ))) == (((1, 0) * 501), null)
Exemple #21
0
 def testShortMode(self):
     assert decoder.decode(
         '\004\017Quick brown fox'
         ) == ('Quick brown fox', '')
Exemple #22
0
 def testLongMode(self):
     assert decoder.decode(
         '$\200\004\202\003\350' + 'Q'*1000 + '\004\001Q\000\000'
         ) == ('Q'*1001, '')
Exemple #23
0
 def testOverflow(self):
     try:
         decoder.decode(ints2octs((1, 2, 0, 0)))
     except PyAsn1Error:
         pass
Exemple #24
0
 def testTrue(self):
     assert decoder.decode(ints2octs((1, 1, 255))) == (1, null)
Exemple #25
0
 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)
Exemple #27
0
 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)
Exemple #28
0
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])
Exemple #29
0
 def testEmpty(self):
     try:
         decoder.decode(ints2octs((1, 0)))
     except PyAsn1Error:
         pass
Exemple #30
0
 def testTrue(self):
     assert decoder.decode('\001\001\377') == (1, '')