<mxfile host="app.diagrams.net" agent="architecture-diagram" version="24.0.0">
  <diagram name="Signing, Rotation and Consumer Verification" id="13-signing-and-verification">
    <mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1660" pageHeight="970" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="n.subsvc" value="&lt;b&gt;Subscription Service&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="60" y="80" width="240" height="770" as="geometry" />
        </mxCell>
        <mxCell id="_ico1" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACpUlEQVRoge3YTYhNYRzH8Y+3iLzkbZoSdhJZkI1YUWzYWbCxJCU1ZShlpVhQKIoFG28pKxaKDUnyUtTQZJCExZSJEYMMFs+cXMe5955z7jn3jppf/evWfc7/+f6e5/+8nMOIWqsxJeWdhA3YhMUYQG9JfRWqZTiJfvyKxRPsxuyW0VXRHAGsx7/QSfED17ER41rACyYMAVwZAkoDnhTvhRlb2izwWiXSaJRWYvOxDy9yQOWZnW+4jPUaKLFGS+QBdmIGFuGgsAuVXmLTcUS+EnmDA1hQJff4oUG5mnNQ7mNdLfjJeJQx6QDOY61sZ0o7dqErY38/saVa0r0ZEt3BVkzLAF1Ny3EcfSn77sOUpEQ36zz4FkexpADoJI0XFu4lfK/DsjopwdOEhgO4INReWdeOJEUl9iSB6Rc2Rw1H10n0CS/RjcEySKuoF8/wOstDSTMQxaA/x//YIkljahcOs1c1WP6agbQG4mvhIOYWBD0aa6Sr/UIMRFF5KcuzPqYJh93zjP0WZqAyeoSpn5UCPLpPfWmgv8INRPEV57Aqljsa7ax9DDbbQGV0oQOn8Tnjs++wHwtbaSBP3Pb3i87EegbK3BLT6oOwAx0TDq5MaqWBhziFs8KCzqVmG+jHRZzA4yISNtPAGewQFnRhqncXKlLdCoanuQZK0YiBVuu/NzAcDrJqasOeeo0qDXwsjyWT2tCJbcJVIkkfoh+VJXSrRKg0asNh4RW2Q3X4r7iX9Mds4R20rItaZx3wtDfWvbVGYR6uNclAVvA+bMeoWgYirRC+i5ZhYKbwTp0WvH+ofa6PaCtxoyADh2Qf8X2Ymgc8rjJmpJQRb6WRUsHLNNJU8LgaMdJS8LiyGBlW4HHVMjKsweNaKXyW78Zd4atdIdvhiEZUsH4D+zfN9JHFLwAAAAAASUVORK5CYII=;" vertex="1" parent="n.subsvc">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.kms" value="&lt;b&gt;AWS KMS&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#e1d5e7;strokeColor=#9673a6;fontColor=#3a2b44;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="320" y="80" width="240" height="770" as="geometry" />
        </mxCell>
        <mxCell id="_ico2" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,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;" vertex="1" parent="n.kms">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.store" value="&lt;b&gt;Secret Store&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#1e3a1e;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="580" y="80" width="240" height="770" as="geometry" />
        </mxCell>
        <mxCell id="_ico3" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAADIUlEQVRoge3aTWwVVRjG8V9LkW+kwYDY6kLxC5QNJEIMECEGNSa6MCaGHStXrtyqxI0xJLCCDTGBBRuCiSQuTIgxhAUsABP5SAQlCFhlYaB82AqNdfFO06E9U+5M7+29rf0nbyY9M3Pmee85M/Ocd8o0zaVtHOfOwoosuvBEFp2YjTnZMf9kx9/AAK7jGv7ErziHK1VFlEmgE5vwOtbjOXRUvfAIbuI0vscRnMK/9ei4TQg+KH7JwQmKK/hMjGxlVuCHCRSdir/xqZiKpXgFt5osPh9HxH01ihkFbSfwWNmsG8jT6MexkTvaEwcvFU+TVmN1qjGVQKqtFUjqalWxNTMlE7gt7vxWo7fMwV9p/qMzH31YWyaBDuxrAeGD+AtvlRGfZzOON0n4HezG4qri86zCTpxvsOi7+A4fYmFVsV3Yj2UF+7vxAb7At7ikmtG7IVznfnyM1xTYBbyNHakdKTvdjavixjmAPfixoOM8S8RbfEnW76Jc//1Zf/1iHfB79vdYzMF7+AhrcBjv1qBDt9G/1gV8iS1YUEsnFVmObTgkplNewzepE8YagSIGREIXcBG/ZNurYmHSl108da1FmCsWR89msTzbvihGsIjkCFRZUXUYXkqORa9IZpaYDkXze1zUa0mY4tEsGsqU9EKTilQCdakGNICkrlQC19HTWC2VOF3m4LWGbXUrROGifixewtEmC+/D9irih2jDG/ga9yZQ+DV8jieriF6A5xPti/E+9uJn8Uaul+BbYrQ/wTqjyz3tCqoSRVbikjBxu/BbQaJzxdt4ZXbO49l2vmEj1+lBI3dXPCT+EA+Ky/gp2w4mrtGON0WZsUcFMzcgTNRWE/BWzfGyKClezGlJmrmHWYkZeCeL+zgpqmMnDRu5O+MU2yXM3At4FRvwVK0nl/FCM8X8XDeivUckc1lMlV4xVfrE3J4pptVCYermibLlM8KJziuhYRT1MHNDHzY21qGv0kxJLzSpmJIJTJcWGxDTpcVmCP9/lBarfKnvFh+6VwnPMvSl/pGS/dwUpvEszogy43Fh+mpmPP9qMJJ6lxanmRT8B1M0bJ9FjBNdAAAAAElFTkSuQmCC;" vertex="1" parent="n.store">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.worker" value="&lt;b&gt;Delivery Worker&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="840" y="80" width="240" height="770" as="geometry" />
        </mxCell>
        <mxCell id="_ico4" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACpUlEQVRoge3YTYhNYRzH8Y+3iLzkbZoSdhJZkI1YUWzYWbCxJCU1ZShlpVhQKIoFG28pKxaKDUnyUtTQZJCExZSJEYMMFs+cXMe5955z7jn3jppf/evWfc7/+f6e5/+8nMOIWqsxJeWdhA3YhMUYQG9JfRWqZTiJfvyKxRPsxuyW0VXRHAGsx7/QSfED17ER41rACyYMAVwZAkoDnhTvhRlb2izwWiXSaJRWYvOxDy9yQOWZnW+4jPUaKLFGS+QBdmIGFuGgsAuVXmLTcUS+EnmDA1hQJff4oUG5mnNQ7mNdLfjJeJQx6QDOY61sZ0o7dqErY38/saVa0r0ZEt3BVkzLAF1Ny3EcfSn77sOUpEQ36zz4FkexpADoJI0XFu4lfK/DsjopwdOEhgO4INReWdeOJEUl9iSB6Rc2Rw1H10n0CS/RjcEySKuoF8/wOstDSTMQxaA/x//YIkljahcOs1c1WP6agbQG4mvhIOYWBD0aa6Sr/UIMRFF5KcuzPqYJh93zjP0WZqAyeoSpn5UCPLpPfWmgv8INRPEV57Aqljsa7ax9DDbbQGV0oQOn8Tnjs++wHwtbaSBP3Pb3i87EegbK3BLT6oOwAx0TDq5MaqWBhziFs8KCzqVmG+jHRZzA4yISNtPAGewQFnRhqncXKlLdCoanuQZK0YiBVuu/NzAcDrJqasOeeo0qDXwsjyWT2tCJbcJVIkkfoh+VJXSrRKg0asNh4RW2Q3X4r7iX9Mds4R20rItaZx3wtDfWvbVGYR6uNclAVvA+bMeoWgYirRC+i5ZhYKbwTp0WvH+ofa6PaCtxoyADh2Qf8X2Ymgc8rjJmpJQRb6WRUsHLNNJU8LgaMdJS8LiyGBlW4HHVMjKsweNaKXyW78Zd4atdIdvhiEZUsH4D+zfN9JHFLwAAAAAASUVORK5CYII=;" vertex="1" parent="n.worker">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.verify" value="&lt;b&gt;Consumer Verifier&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#f5f5f5;strokeColor=#8c8c8c;fontColor=#333333;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="1110" y="80" width="240" height="770" as="geometry" />
        </mxCell>
        <mxCell id="_ico5" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAAB40lEQVRoge3Yz6sOURzH8dfjXlfuQkoW6ooiIUk2imRna+kvYCMLUlIsWNhYKFtZKUp3y80/YGOHKD+6RCGJErnyazF3MsbM85z73HnmTDnv+tQ0c2bm8znnzJyZL4lEIpH4n+k1dJ21mMJKfMFjvG7o2iNjChfwFL8q9ARnsTqWwTrGcE7W01XGy/qEo5ob7UWxAjPCjJd1DRPtW/7DOG4bznyuqyKOxPkAgyE6jD24IXtOPmMWV7B9VObX4WtDAb73OfYDZ4xglC41ZD5UJ5s038PLlgPMYUOIuSUBbTbJ3vltMoFDIQ1DArRtPmdvSKOQALFW0kXfdxlO4IV253+uOyEmx2v2b8U0tgTHbZ57w564Ex/E6fWynuE4loeaX4VXHTBe1kNsCwlwuQNm6/RuUIg1+NYBo/30SGk6FV+jB7G0X8IOsBlH6g5Oi9/DIZotmi6OQKwVd6Gsl33e4O8AUf+WFsjGfKMYoPNVhAKT+UYxwIMIRoblTdXO3eI/oCGakxUX/qGHux0wOEg3q8zn7JP9l8Y2Waef2NUvAJzqgNE6XRxknmwqnZ5PG9twUdfVf/5Xsh/3O2D8I46pKbUMqr+MzQc5gB2y1Xqy7xnN8BbPcUtWknzfwj0TiUQikWif37lJeEKjXHZHAAAAAElFTkSuQmCC;" vertex="1" parent="n.verify">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.handler" value="&lt;b&gt;Consumer Handler&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#f5f5f5;strokeColor=#8c8c8c;fontColor=#333333;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="1370" y="80" width="240" height="770" as="geometry" />
        </mxCell>
        <mxCell id="_ico6" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAAB40lEQVRoge3Yz6sOURzH8dfjXlfuQkoW6ooiIUk2imRna+kvYCMLUlIsWNhYKFtZKUp3y80/YGOHKD+6RCGJErnyazF3MsbM85z73HnmTDnv+tQ0c2bm8znnzJyZL4lEIpH4n+k1dJ21mMJKfMFjvG7o2iNjChfwFL8q9ARnsTqWwTrGcE7W01XGy/qEo5ob7UWxAjPCjJd1DRPtW/7DOG4bznyuqyKOxPkAgyE6jD24IXtOPmMWV7B9VObX4WtDAb73OfYDZ4xglC41ZD5UJ5s038PLlgPMYUOIuSUBbTbJ3vltMoFDIQ1DArRtPmdvSKOQALFW0kXfdxlO4IV253+uOyEmx2v2b8U0tgTHbZ57w564Ex/E6fWynuE4loeaX4VXHTBe1kNsCwlwuQNm6/RuUIg1+NYBo/30SGk6FV+jB7G0X8IOsBlH6g5Oi9/DIZotmi6OQKwVd6Gsl33e4O8AUf+WFsjGfKMYoPNVhAKT+UYxwIMIRoblTdXO3eI/oCGakxUX/qGHux0wOEg3q8zn7JP9l8Y2Waef2NUvAJzqgNE6XRxknmwqnZ5PG9twUdfVf/5Xsh/3O2D8I46pKbUMqr+MzQc5gB2y1Xqy7xnN8BbPcUtWknzfwj0TiUQikWif37lJeEKjXHZHAAAAAElFTkSuQmCC;" vertex="1" parent="n.handler">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="_m7" value="1. generate data key" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.1195;exitDx=0;exitDy=0;entryX=0.5;entryY=0.1195;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.subsvc" target="n.kms">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m8" value="2. plaintext + wrapped" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=open;endFill=0;dashed=1;strokeColor=#5a6570;exitX=0.5;exitY=0.1714;exitDx=0;exitDy=0;entryX=0.5;entryY=0.1714;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.kms" target="n.subsvc">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m9" value="3. persist wrapped only" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.2234;exitDx=0;exitDy=0;entryX=0.5;entryY=0.2234;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.subsvc" target="n.store">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m10" value="4. show once, never again" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.2753;exitDx=0;exitDy=0;entryX=0.5;entryY=0.3065;entryDx=0;entryDy=0;align=left;spacingLeft=6;" edge="1" parent="1" source="n.subsvc" target="n.subsvc">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="260" y="290" />
              <mxPoint x="260" y="320" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="_m11" value="5. read active secrets" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.3429;exitDx=0;exitDy=0;entryX=0.5;entryY=0.3429;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.worker" target="n.store">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m12" value="6. decrypt, cached 5 min" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.3948;exitDx=0;exitDy=0;entryX=0.5;entryY=0.3948;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.worker" target="n.kms">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m13" value="7. HMAC over ts + raw body" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.4468;exitDx=0;exitDy=0;entryX=0.5;entryY=0.4779;entryDx=0;entryDy=0;align=left;spacingLeft=6;" edge="1" parent="1" source="n.worker" target="n.worker">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1040" y="430" />
              <mxPoint x="1040" y="450" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="_m14" value="8. POST + signature headers" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.5143;exitDx=0;exitDy=0;entryX=0.5;entryY=0.5143;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.worker" target="n.verify">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m15" value="9. recompute over raw bytes" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.5662;exitDx=0;exitDy=0;entryX=0.5;entryY=0.5974;entryDx=0;entryDy=0;align=left;spacingLeft=6;" edge="1" parent="1" source="n.verify" target="n.verify">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1300" y="520" />
              <mxPoint x="1300" y="540" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="_m16" value="10. reject if ts outside window" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.6338;exitDx=0;exitDy=0;entryX=0.5;entryY=0.6649;entryDx=0;entryDy=0;align=left;spacingLeft=6;" edge="1" parent="1" source="n.verify" target="n.verify">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1300" y="570" />
              <mxPoint x="1300" y="590" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="_m17" value="11. dispatch event" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.7013;exitDx=0;exitDy=0;entryX=0.5;entryY=0.7013;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.verify" target="n.handler">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m18" value="12. 200 OK" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=open;endFill=0;dashed=1;strokeColor=#5a6570;exitX=0.5;exitY=0.7532;exitDx=0;exitDy=0;entryX=0.5;entryY=0.7532;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.handler" target="n.worker">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m19" value="13. rotate: second secret active" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=open;endFill=0;dashed=1;strokeColor=#d79b00;exitX=0.5;exitY=0.8052;exitDx=0;exitDy=0;entryX=0.5;entryY=0.8052;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.subsvc" target="n.store">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m20" value="14. both signatures, 7 d overlap" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=open;endFill=0;dashed=1;strokeColor=#d79b00;exitX=0.5;exitY=0.8571;exitDx=0;exitDy=0;entryX=0.5;entryY=0.8571;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.worker" target="n.verify">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m21" value="15. 401 if neither verifies" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;dashed=1;strokeColor=#b85450;fontColor=#b85450;exitX=0.5;exitY=0.9091;exitDx=0;exitDy=0;entryX=0.5;entryY=0.9091;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.verify" target="n.worker">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="title" value="Signing, Rotation and Consumer Verification" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=20;fontStyle=1;fontColor=#16202c;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="20" width="1570" height="30" as="geometry" />
        </mxCell>
        <mxCell id="rule" value="" style="line;strokeWidth=1;html=1;strokeColor=#c9d3de;" vertex="1" parent="1">
          <mxGeometry x="40" y="50" width="1570" height="10" as="geometry" />
        </mxCell>
        <mxCell id="note" value="A 401 from the verifier is a permanent outcome: the platform stops retrying and tells the endpoint's owner." style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="900" width="1570" height="20" as="geometry" />
        </mxCell>
        <mxCell id="foot-rule" value="" style="line;strokeWidth=1;html=1;strokeColor=#e3e9ef;" vertex="1" parent="1">
          <mxGeometry x="40" y="920" width="1570" height="10" as="geometry" />
        </mxCell>
        <mxCell id="foot" value="v 1.0   ·   owner Integration Platform Architecture   ·   date 2026-09" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=9;fontColor=#9aa7b4;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="930" width="1570" height="10" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
