skia2/gn/samples.gni
Mike Klein 5c612ade3b create a sample to demonstrate a timing attack
This sample attempts to re-create an image's alpha channel by drawing it
one pixel at a time and timing how long each pixel takes to draw.

The "abc" text should appear twice normally, and the third and fourth
versions are reconstructed from timing, one by timing 1:1 pixel draws,
the other by timing 1x1:1024x1024 upscale into an offscreen.  It's not
meant to be an exact reconstruction, but you can easily see the shapes,
particularly at -O0, -O1, and -Os.  Auto-vectorization from -O2/-O3 do
a good amount to cover up the problem.

The legacy CPU backend is the main place to look.  I haven't been able
to reconstruct any images using SkRasterPipelineBlitter or SkVMBlitter,
and while on the GPU I do see non-random patterns in the timing, it
appears to be the same single pattern across devices, OSes, GPUs, GPU
APIs and content... I assume it's something like our resource caching
policy.

This can't really be a GM, given how it draws non-deterministically.

Bug: chromium:1088224
Change-Id: I2ec79c8dd407ecb104fd9bf0c8039cb6dd1fe436
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/313466
Commit-Queue: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Reed <reed@google.com>
2020-08-28 16:17:39 +00:00

102 lines
3.6 KiB
Plaintext

# Copyright 2016 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Things are easiest for everyone if these source paths are absolute.
_samplecode = get_path_info("../samplecode", "abspath")
samples_sources = [
"$_samplecode/PerlinPatch.cpp",
"$_samplecode/Sample.cpp",
"$_samplecode/Sample.h",
"$_samplecode/Sample2PtRadial.cpp",
"$_samplecode/Sample3D.cpp",
"$_samplecode/SampleAAClip.cpp",
"$_samplecode/SampleAAGeometry.cpp",
"$_samplecode/SampleAARectModes.cpp",
"$_samplecode/SampleAARects.cpp",
"$_samplecode/SampleAndroidShadows.cpp",
"$_samplecode/SampleAnimBlur.cpp",
"$_samplecode/SampleAnimatedImage.cpp",
"$_samplecode/SampleAnimatedText.cpp",
"$_samplecode/SampleArc.cpp",
"$_samplecode/SampleAtlas.cpp",
"$_samplecode/SampleAudio.cpp",
"$_samplecode/SampleBackdropBounds.cpp",
"$_samplecode/SampleBitmapRect.cpp",
"$_samplecode/SampleCamera.cpp",
"$_samplecode/SampleChart.cpp",
"$_samplecode/SampleChineseFling.cpp",
"$_samplecode/SampleCircle.cpp",
"$_samplecode/SampleClip.cpp",
"$_samplecode/SampleClipDrawMatch.cpp",
"$_samplecode/SampleClock.cpp",
"$_samplecode/SampleColorFilter.cpp",
"$_samplecode/SampleComplexClip.cpp",
"$_samplecode/SampleCowboy.cpp",
"$_samplecode/SampleCusp.cpp",
"$_samplecode/SampleDegenerateQuads.cpp",
"$_samplecode/SampleDegenerateTwoPtRadials.cpp",
"$_samplecode/SampleEffects.cpp",
"$_samplecode/SampleEmboss.cpp",
"$_samplecode/SampleFatBits.cpp",
"$_samplecode/SampleFillType.cpp",
"$_samplecode/SampleFilter2.cpp",
"$_samplecode/SampleFilterQuality.cpp",
"$_samplecode/SampleFitCubicToCircle.cpp",
"$_samplecode/SampleFlutterAnimate.cpp",
"$_samplecode/SampleGlyphTransform.cpp",
"$_samplecode/SampleGradients.cpp",
"$_samplecode/SampleHT.cpp",
"$_samplecode/SampleHairCurves.cpp",
"$_samplecode/SampleHairModes.cpp",
"$_samplecode/SampleHairline.cpp",
"$_samplecode/SampleIdentityScale.cpp",
"$_samplecode/SampleImageFilterDAG.cpp",
"$_samplecode/SampleLCD.cpp",
"$_samplecode/SampleLayerMask.cpp",
"$_samplecode/SampleLayers.cpp",
"$_samplecode/SampleManyRects.cpp",
"$_samplecode/SampleMegaStroke.cpp",
"$_samplecode/SampleMixer.cpp",
"$_samplecode/SamplePatch.cpp",
"$_samplecode/SamplePath.cpp",
"$_samplecode/SamplePathClip.cpp",
"$_samplecode/SamplePathEffects.cpp",
"$_samplecode/SamplePathOverstroke.cpp",
"$_samplecode/SamplePathText.cpp",
"$_samplecode/SamplePolyToPoly.cpp",
"$_samplecode/SampleQuadStroker.cpp",
"$_samplecode/SampleRectanizer.cpp",
"$_samplecode/SampleRegion.cpp",
"$_samplecode/SampleRepeatTile.cpp",
"$_samplecode/SampleSG.cpp",
"$_samplecode/SampleSVGFile.cpp",
"$_samplecode/SampleShaders.cpp",
"$_samplecode/SampleShadowColor.cpp",
"$_samplecode/SampleShadowReference.cpp",
"$_samplecode/SampleShadowUtils.cpp",
"$_samplecode/SampleShip.cpp",
"$_samplecode/SampleSimpleStroker.cpp",
"$_samplecode/SampleSlides.cpp",
"$_samplecode/SampleStringArt.cpp",
"$_samplecode/SampleStrokePath.cpp",
"$_samplecode/SampleStrokeRect.cpp",
"$_samplecode/SampleSubpixelTranslate.cpp",
"$_samplecode/SampleTessellatedWedge.cpp",
"$_samplecode/SampleTextBox.cpp",
"$_samplecode/SampleTextEffects.cpp",
"$_samplecode/SampleTextureUpload.cpp",
"$_samplecode/SampleThinAA.cpp",
"$_samplecode/SampleTiming.cpp",
"$_samplecode/SampleUnpremul.cpp",
"$_samplecode/SampleVertices.cpp",
"$_samplecode/SampleWritePixels.cpp",
"$_samplecode/SampleXfer.cpp",
"$_samplecode/SampleXfermodesBlur.cpp",
"$_samplecode/vertexdump.cpp",
]
samples_sources_ccpr = [ "$_samplecode/SampleCCPRGeometry.cpp" ]