Ejemplo n.º 1
0
 def testDeleteSignedBinary(self):
   binary1_urn = rdfvalue.RDFURN("aff4:/config/executables/foo1")
   binary2_urn = rdfvalue.RDFURN("aff4:/config/executables/foo2")
   signed_binary_utils.WriteSignedBinaryBlobs(
       binary1_urn, [rdf_crypto.SignedBlob().Sign(b"\x00", self._private_key)])
   signed_binary_utils.WriteSignedBinaryBlobs(
       binary2_urn, [rdf_crypto.SignedBlob().Sign(b"\x11", self._private_key)])
   self.assertCountEqual(signed_binary_utils.FetchURNsForAllSignedBinaries(),
                         [binary1_urn, binary2_urn])
   signed_binary_utils.DeleteSignedBinary(binary1_urn)
   self.assertCountEqual(signed_binary_utils.FetchURNsForAllSignedBinaries(),
                         [binary2_urn])
Ejemplo n.º 2
0
  def Handle(self, args, token=None):
    if not args.path:
      raise ValueError("Invalid binary path: %s" % args.path)

    root_urn = _GetBinaryRootUrn(args.type)
    signed_binary_utils.WriteSignedBinaryBlobs(
        root_urn.Add(args.path), list(args.blobs))
Ejemplo n.º 3
0
 def testWriteSignedBinaryBlobs(self):
     test_urn = rdfvalue.RDFURN("aff4:/config/executables/foo")
     test_blobs = [
         rdf_crypto.SignedBlob().Sign(b"\x00\x11\x22", self._private_key),
         rdf_crypto.SignedBlob().Sign(b"\x33\x44\x55", self._private_key),
         rdf_crypto.SignedBlob().Sign(b"\x66\x77\x88", self._private_key),
         rdf_crypto.SignedBlob().Sign(b"\x99", self._private_key)
     ]
     signed_binary_utils.WriteSignedBinaryBlobs(test_urn, test_blobs)
     blobs_iter, timestamp = signed_binary_utils.FetchBlobsForSignedBinaryByURN(
         test_urn)
     self.assertGreater(timestamp.AsMicrosecondsSinceEpoch(), 0)
     self.assertCountEqual(list(blobs_iter), test_blobs)
Ejemplo n.º 4
0
 def testFetchSizeOfSignedBinary(self):
     binary1_urn = rdfvalue.RDFURN("aff4:/config/executables/foo1")
     binary2_urn = rdfvalue.RDFURN("aff4:/config/executables/foo2")
     binary1_data = b"\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99"
     binary2_blobs = [
         rdf_crypto.SignedBlob().Sign(b"\x00\x11\x22", self._private_key),
         rdf_crypto.SignedBlob().Sign(b"\x33\x44", self._private_key)
     ]
     signed_binary_utils.WriteSignedBinary(binary1_urn,
                                           binary1_data,
                                           private_key=self._private_key,
                                           public_key=self._public_key,
                                           chunk_size=3)
     signed_binary_utils.WriteSignedBinaryBlobs(binary2_urn, binary2_blobs)
     binary1_size = signed_binary_utils.FetchSizeOfSignedBinary(binary1_urn)
     binary2_size = signed_binary_utils.FetchSizeOfSignedBinary(binary2_urn)
     self.assertEqual(binary1_size, 10)
     self.assertEqual(binary2_size, 5)
Ejemplo n.º 5
0
  def Handle(self, args, context=None):
    if not args.path:
      raise ValueError("Invalid binary path: %s" % args.path)

    root_urn = _GetBinaryRootUrn(args.type)
    urn = root_urn.Add(args.path)

    # If GRR binaries are readonly, check if a binary with the given
    # name and type exists and raise if it does.
    if config.CONFIG["Server.grr_binaries_readonly"]:
      try:
        signed_binary_utils.FetchBlobsForSignedBinaryByURN(urn)
        raise GrrBinaryIsNotOverwritableError(
            f"GRR binary ({args.path}, {args.type}) can't be overwritten: "
            "all binaries are read-only.")
      except signed_binary_utils.SignedBinaryNotFoundError:
        pass

    signed_binary_utils.WriteSignedBinaryBlobs(urn, list(args.blobs))
Ejemplo n.º 6
0
  def testReadIndividualBlobsFromSignedBinary(self):
    test_urn = rdfvalue.RDFURN("aff4:/config/executables/foo")
    test_blobs = [
        rdf_crypto.SignedBlob().Sign(b"\x00\x11\x22", self._private_key),
        rdf_crypto.SignedBlob().Sign(b"\x33\x44\x55", self._private_key),
        rdf_crypto.SignedBlob().Sign(b"\x66\x77\x88", self._private_key),
        rdf_crypto.SignedBlob().Sign(b"\x99", self._private_key)
    ]
    signed_binary_utils.WriteSignedBinaryBlobs(test_urn, test_blobs)

    with self.assertRaises(ValueError):
      signed_binary_utils.FetchBlobForSignedBinaryByURN(test_urn, -1)

    for i, test_blob in enumerate(test_blobs):
      blob = signed_binary_utils.FetchBlobForSignedBinaryByURN(test_urn, i)
      self.assertEqual(blob.data, test_blob.data)

    with self.assertRaises(signed_binary_utils.BlobIndexOutOfBoundsError):
      signed_binary_utils.FetchBlobForSignedBinaryByURN(test_urn,
                                                        len(test_blobs))