Add an optional argument to allow "single-operation" style calling, in which
authorRyan Sleevi <sleevi@google.com>
Mon, 10 Dec 2012 00:43:38 -0800
changeset 19 7b1f9a44887d
parent 18 ddc3bad3f496
child 20 2f4f03785843
Add an optional argument to allow "single-operation" style calling, in which
the returned CryptoOperation effectively functions as a Promise for a cycle
of .process() and .finish()
spec/Overview-WebCryptoAPI.xml
spec/Overview.html
--- a/spec/Overview-WebCryptoAPI.xml	Mon Dec 10 00:41:49 2012 -0800
+++ b/spec/Overview-WebCryptoAPI.xml	Mon Dec 10 00:43:38 2012 -0800
@@ -1346,11 +1346,11 @@
         <h2>Crypto interface</h2>
         <x:codeblock language="idl">
 interface <dfn id="dfn-crypto">Crypto</dfn> {
-  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-encrypt">encrypt</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, <a href="#dfn-Key">Key</a> key);
-  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-decrypt">decrypt</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, <a href="#dfn-Key">Key</a> key);
-  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-sign">sign</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, <a href="#dfn-Key">Key</a> key);
-  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-verify">verify</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, <a href="#dfn-Key">Key</a> key, ArrayBufferView signature);
-  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-digest">digest</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm);
+  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-encrypt">encrypt</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, <a href="#dfn-Key">Key</a> key, optional ArrayBufferView? buffer = null);
+  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-decrypt">decrypt</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, <a href="#dfn-Key">Key</a> key, optional ArrayBufferView? buffer = null);
+  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-sign">sign</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, <a href="#dfn-Key">Key</a> key, optional ArrayBufferView? buffer = null);
+  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-verify">verify</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, <a href="#dfn-Key">Key</a> key, ArrayBufferView signature, optional ArrayBufferView? buffer = null);
+  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-digest">digest</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, optional ArrayBufferView? buffer = null);
 
   <span class="comment">// TBD: <a href="https://www.w3.org/2012/webcrypto/track/issues/36">ISSUE-36</a></span>
   <a href="#dfn-KeyGenerator">KeyGenerator</a> <a href="#dfn-Crypto-method-generateKey">generateKey</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm,
@@ -1425,7 +1425,7 @@
               </li>
               <li>
                 <p>
-                  Return a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
+                  Create a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
                   <var>S</var> with the following characteristics:
                 </p>
                 <ol>
@@ -1449,6 +1449,53 @@
                   </li>
                 </ol>
               </li>
+              <li>
+                <p>
+                  If <var>buffer</var> is specified:
+                </p>
+                <ol>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-process"><code>process()</code></a>
+                      method on the new object, with <var>buffer</var> as the <code>buffer</code> argument.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-finish"><code>finish()</code></a>
+                      method on the new object.
+                    </p>
+                  </li>
+                </ol>
+                <div class="ednote">
+                  <p>
+                    Supporting single-part operations is intended to address two use cases:
+                  </p>
+                  <ol>
+                    <li>
+                      <p>
+                        Developers that "just" want to perform a simple operation. The single-method invocation best matches
+                        existing JavaScript cryptographic libraries, particularly the synchronous aspect.
+                      </p>
+                    </li>
+                    <li>
+                      <p>
+                        User agents that can optimize implementation when there is only a single operation being performed.
+                      </p>
+                    </li>
+                  </ol>
+                  <p>
+                    Having the single-part operation return a <code>CryptoOperation</code> may change,
+                    as may make it easier for developers if a <em>Promise</em> type object (whether through
+                    TC39 or through DOM) is returned, since the only possible results are "success" and "error".
+                  </p>
+                </div>
+              </li>
+              <li>
+                <p>
+                  Return the new object.
+                </p>
+              </li>
             </ol>
           </div>
 
@@ -1480,7 +1527,7 @@
               </li>
               <li>
                 <p>
-                  Return a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
+                  Create a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
                   <var>S</var> with the following characteristics:
                 </p>
                 <ol>
@@ -1504,6 +1551,53 @@
                   </li>                
                 </ol>
               </li>
+              <li>
+                <p>
+                  If <var>buffer</var> is specified:
+                </p>
+                <ol>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-process"><code>process()</code></a>
+                      method on the new object, with <var>buffer</var> as the <code>buffer</code> argument.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-finish"><code>finish()</code></a>
+                      method on the new object.
+                    </p>
+                  </li>
+                </ol>
+                <div class="ednote">
+                  <p>
+                    Supporting single-part operations is intended to address two use cases:
+                  </p>
+                  <ol>
+                    <li>
+                      <p>
+                        Developers that "just" want to perform a simple operation. The single-method invocation best matches
+                        existing JavaScript cryptographic libraries, particularly the synchronous aspect.
+                      </p>
+                    </li>
+                    <li>
+                      <p>
+                        User agents that can optimize implementation when there is only a single operation being performed.
+                      </p>
+                    </li>
+                  </ol>
+                  <p>
+                    Having the single-part operation return a <code>CryptoOperation</code> may change,
+                    as may make it easier for developers if a <em>Promise</em> type object (whether through
+                    TC39 or through DOM) is returned, since the only possible results are "success" and "error".
+                  </p>
+                </div>
+              </li>
+              <li>
+                <p>
+                  Return the new object.
+                </p>
+              </li>
             </ol>
           </div>
 
@@ -1534,7 +1628,7 @@
               </li>
               <li>
                 <p>
-                  Return a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
+                  Create a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
                   <var>S</var> with the following characteristics:
                 </p>
                 <ol>
@@ -1558,6 +1652,53 @@
                   </li>
                 </ol>
               </li>
+              <li>
+                <p>
+                  If <var>buffer</var> is specified:
+                </p>
+                <ol>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-process"><code>process()</code></a>
+                      method on the new object, with <var>buffer</var> as the <code>buffer</code> argument.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-finish"><code>finish()</code></a>
+                      method on the new object.
+                    </p>
+                  </li>
+                </ol>
+                <div class="ednote">
+                  <p>
+                    Supporting single-part operations is intended to address two use cases:
+                  </p>
+                  <ol>
+                    <li>
+                      <p>
+                        Developers that "just" want to perform a simple operation. The single-method invocation best matches
+                        existing JavaScript cryptographic libraries, particularly the synchronous aspect.
+                      </p>
+                    </li>
+                    <li>
+                      <p>
+                        User agents that can optimize implementation when there is only a single operation being performed.
+                      </p>
+                    </li>
+                  </ol>
+                  <p>
+                    Having the single-part operation return a <code>CryptoOperation</code> may change,
+                    as may make it easier for developers if a <em>Promise</em> type object (whether through
+                    TC39 or through DOM) is returned, since the only possible results are "success" and "error".
+                  </p>
+                </div>
+              </li>
+              <li>
+                <p>
+                  Return the new object.
+                </p>
+              </li>
             </ol>
           </div>
 
@@ -1588,7 +1729,7 @@
               </li>
               <li>
                 <p>
-                  Return a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
+                  Create a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
                   <var>S</var> with the following characteristics:
                 </p>
                 <ol>
@@ -1612,6 +1753,53 @@
                   </li>
                 </ol>
               </li>
+              <li>
+                <p>
+                  If <var>buffer</var> is specified:
+                </p>
+                <ol>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-process"><code>process()</code></a>
+                      method on the new object, with <var>buffer</var> as the <code>buffer</code> argument.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-finish"><code>finish()</code></a>
+                      method on the new object.
+                    </p>
+                  </li>
+                </ol>
+                <div class="ednote">
+                  <p>
+                    Supporting single-part operations is intended to address two use cases:
+                  </p>
+                  <ol>
+                    <li>
+                      <p>
+                        Developers that "just" want to perform a simple operation. The single-method invocation best matches
+                        existing JavaScript cryptographic libraries, particularly the synchronous aspect.
+                      </p>
+                    </li>
+                    <li>
+                      <p>
+                        User agents that can optimize implementation when there is only a single operation being performed.
+                      </p>
+                    </li>
+                  </ol>
+                  <p>
+                    Having the single-part operation return a <code>CryptoOperation</code> may change,
+                    as may make it easier for developers if a <em>Promise</em> type object (whether through
+                    TC39 or through DOM) is returned, since the only possible results are "success" and "error".
+                  </p>
+                </div>
+              </li>
+              <li>
+                <p>
+                  Return the new object.
+                </p>
+              </li>
             </ol>
           </div>
 
@@ -1642,7 +1830,7 @@
               </li>
               <li>
                 <p>
-                  Return a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
+                  Create a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
                   <var>S</var> with the following characteristics:
                 </p>
                 <ol>
@@ -1666,6 +1854,53 @@
                   </li>
                 </ol>
               </li>
+              <li>
+                <p>
+                  If <var>buffer</var> is specified:
+                </p>
+                <ol>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-process"><code>process()</code></a>
+                      method on the new object, with <var>buffer</var> as the <code>buffer</code> argument.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-finish"><code>finish()</code></a>
+                      method on the new object.
+                    </p>
+                  </li>
+                </ol>
+                <div class="ednote">
+                  <p>
+                    Supporting single-part operations is intended to address two use cases:
+                  </p>
+                  <ol>
+                    <li>
+                      <p>
+                        Developers that "just" want to perform a simple operation. The single-method invocation best matches
+                        existing JavaScript cryptographic libraries, particularly the synchronous aspect.
+                      </p>
+                    </li>
+                    <li>
+                      <p>
+                        User agents that can optimize implementation when there is only a single operation being performed.
+                      </p>
+                    </li>
+                  </ol>
+                  <p>
+                    Having the single-part operation return a <code>CryptoOperation</code> may change,
+                    as may make it easier for developers if a <em>Promise</em> type object (whether through
+                    TC39 or through DOM) is returned, since the only possible results are "success" and "error".
+                  </p>
+                </div>
+              </li>
+              <li>
+                <p>
+                  Return the new object.
+                </p>
+              </li>
             </ol>
           </div>
 
--- a/spec/Overview.html	Mon Dec 10 00:41:49 2012 -0800
+++ b/spec/Overview.html	Mon Dec 10 00:43:38 2012 -0800
@@ -49,7 +49,7 @@
 communications.
       </p>
   
-      <div class="ednote"><div class="ednoteHeader">Editorial note</div><p>There are 15 further editorial notes in the document.</p></div>
+      <div class="ednote"><div class="ednoteHeader">Editorial note</div><p>There are 20 further editorial notes in the document.</p></div>
     </div>
 
     <div class="section">
@@ -1342,11 +1342,11 @@
         <h2>16. Crypto interface</h2>
         <div class="block"><div class="blockTitleDiv"><span class="blockTitle">IDL</span></div><div class="blockContent"><pre class="code"><code class="idl-code">
 interface <dfn id="dfn-crypto">Crypto</dfn> {
-  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-encrypt">encrypt</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, <a href="#dfn-Key">Key</a> key);
-  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-decrypt">decrypt</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, <a href="#dfn-Key">Key</a> key);
-  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-sign">sign</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, <a href="#dfn-Key">Key</a> key);
-  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-verify">verify</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, <a href="#dfn-Key">Key</a> key, ArrayBufferView signature);
-  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-digest">digest</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm);
+  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-encrypt">encrypt</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, <a href="#dfn-Key">Key</a> key, optional ArrayBufferView? buffer = null);
+  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-decrypt">decrypt</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, <a href="#dfn-Key">Key</a> key, optional ArrayBufferView? buffer = null);
+  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-sign">sign</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, <a href="#dfn-Key">Key</a> key, optional ArrayBufferView? buffer = null);
+  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-verify">verify</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, <a href="#dfn-Key">Key</a> key, ArrayBufferView signature, optional ArrayBufferView? buffer = null);
+  <a href="#dfn-CryptoOperation">CryptoOperation</a> <a href="#dfn-Crypto-method-digest">digest</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm, optional ArrayBufferView? buffer = null);
 
   <span class="comment">// TBD: <a href="https://www.w3.org/2012/webcrypto/track/issues/36">ISSUE-36</a></span>
   <a href="#dfn-KeyGenerator">KeyGenerator</a> <a href="#dfn-Crypto-method-generateKey">generateKey</a>(<a href="#dfn-AlgorithmIdentifier">AlgorithmIdentifier</a> algorithm,
@@ -1421,7 +1421,7 @@
               </li>
               <li>
                 <p>
-                  Return a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
+                  Create a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
                   <var>S</var> with the following characteristics:
                 </p>
                 <ol>
@@ -1445,6 +1445,53 @@
                   </li>
                 </ol>
               </li>
+              <li>
+                <p>
+                  If <var>buffer</var> is specified:
+                </p>
+                <ol>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-process"><code>process()</code></a>
+                      method on the new object, with <var>buffer</var> as the <code>buffer</code> argument.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-finish"><code>finish()</code></a>
+                      method on the new object.
+                    </p>
+                  </li>
+                </ol>
+                <div class="ednote"><div class="ednoteHeader">Editorial note</div>
+                  <p>
+                    Supporting single-part operations is intended to address two use cases:
+                  </p>
+                  <ol>
+                    <li>
+                      <p>
+                        Developers that "just" want to perform a simple operation. The single-method invocation best matches
+                        existing JavaScript cryptographic libraries, particularly the synchronous aspect.
+                      </p>
+                    </li>
+                    <li>
+                      <p>
+                        User agents that can optimize implementation when there is only a single operation being performed.
+                      </p>
+                    </li>
+                  </ol>
+                  <p>
+                    Having the single-part operation return a <code>CryptoOperation</code> may change,
+                    as may make it easier for developers if a <em>Promise</em> type object (whether through
+                    TC39 or through DOM) is returned, since the only possible results are "success" and "error".
+                  </p>
+                </div>
+              </li>
+              <li>
+                <p>
+                  Return the new object.
+                </p>
+              </li>
             </ol>
           </div>
 
@@ -1476,7 +1523,7 @@
               </li>
               <li>
                 <p>
-                  Return a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
+                  Create a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
                   <var>S</var> with the following characteristics:
                 </p>
                 <ol>
@@ -1500,6 +1547,53 @@
                   </li>                
                 </ol>
               </li>
+              <li>
+                <p>
+                  If <var>buffer</var> is specified:
+                </p>
+                <ol>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-process"><code>process()</code></a>
+                      method on the new object, with <var>buffer</var> as the <code>buffer</code> argument.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-finish"><code>finish()</code></a>
+                      method on the new object.
+                    </p>
+                  </li>
+                </ol>
+                <div class="ednote"><div class="ednoteHeader">Editorial note</div>
+                  <p>
+                    Supporting single-part operations is intended to address two use cases:
+                  </p>
+                  <ol>
+                    <li>
+                      <p>
+                        Developers that "just" want to perform a simple operation. The single-method invocation best matches
+                        existing JavaScript cryptographic libraries, particularly the synchronous aspect.
+                      </p>
+                    </li>
+                    <li>
+                      <p>
+                        User agents that can optimize implementation when there is only a single operation being performed.
+                      </p>
+                    </li>
+                  </ol>
+                  <p>
+                    Having the single-part operation return a <code>CryptoOperation</code> may change,
+                    as may make it easier for developers if a <em>Promise</em> type object (whether through
+                    TC39 or through DOM) is returned, since the only possible results are "success" and "error".
+                  </p>
+                </div>
+              </li>
+              <li>
+                <p>
+                  Return the new object.
+                </p>
+              </li>
             </ol>
           </div>
 
@@ -1530,7 +1624,7 @@
               </li>
               <li>
                 <p>
-                  Return a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
+                  Create a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
                   <var>S</var> with the following characteristics:
                 </p>
                 <ol>
@@ -1554,6 +1648,53 @@
                   </li>
                 </ol>
               </li>
+              <li>
+                <p>
+                  If <var>buffer</var> is specified:
+                </p>
+                <ol>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-process"><code>process()</code></a>
+                      method on the new object, with <var>buffer</var> as the <code>buffer</code> argument.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-finish"><code>finish()</code></a>
+                      method on the new object.
+                    </p>
+                  </li>
+                </ol>
+                <div class="ednote"><div class="ednoteHeader">Editorial note</div>
+                  <p>
+                    Supporting single-part operations is intended to address two use cases:
+                  </p>
+                  <ol>
+                    <li>
+                      <p>
+                        Developers that "just" want to perform a simple operation. The single-method invocation best matches
+                        existing JavaScript cryptographic libraries, particularly the synchronous aspect.
+                      </p>
+                    </li>
+                    <li>
+                      <p>
+                        User agents that can optimize implementation when there is only a single operation being performed.
+                      </p>
+                    </li>
+                  </ol>
+                  <p>
+                    Having the single-part operation return a <code>CryptoOperation</code> may change,
+                    as may make it easier for developers if a <em>Promise</em> type object (whether through
+                    TC39 or through DOM) is returned, since the only possible results are "success" and "error".
+                  </p>
+                </div>
+              </li>
+              <li>
+                <p>
+                  Return the new object.
+                </p>
+              </li>
             </ol>
           </div>
 
@@ -1584,7 +1725,7 @@
               </li>
               <li>
                 <p>
-                  Return a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
+                  Create a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
                   <var>S</var> with the following characteristics:
                 </p>
                 <ol>
@@ -1608,6 +1749,53 @@
                   </li>
                 </ol>
               </li>
+              <li>
+                <p>
+                  If <var>buffer</var> is specified:
+                </p>
+                <ol>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-process"><code>process()</code></a>
+                      method on the new object, with <var>buffer</var> as the <code>buffer</code> argument.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-finish"><code>finish()</code></a>
+                      method on the new object.
+                    </p>
+                  </li>
+                </ol>
+                <div class="ednote"><div class="ednoteHeader">Editorial note</div>
+                  <p>
+                    Supporting single-part operations is intended to address two use cases:
+                  </p>
+                  <ol>
+                    <li>
+                      <p>
+                        Developers that "just" want to perform a simple operation. The single-method invocation best matches
+                        existing JavaScript cryptographic libraries, particularly the synchronous aspect.
+                      </p>
+                    </li>
+                    <li>
+                      <p>
+                        User agents that can optimize implementation when there is only a single operation being performed.
+                      </p>
+                    </li>
+                  </ol>
+                  <p>
+                    Having the single-part operation return a <code>CryptoOperation</code> may change,
+                    as may make it easier for developers if a <em>Promise</em> type object (whether through
+                    TC39 or through DOM) is returned, since the only possible results are "success" and "error".
+                  </p>
+                </div>
+              </li>
+              <li>
+                <p>
+                  Return the new object.
+                </p>
+              </li>
             </ol>
           </div>
 
@@ -1638,7 +1826,7 @@
               </li>
               <li>
                 <p>
-                  Return a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
+                  Create a new <a href="#dfn-CryptoOperation"><code>CryptoOperation</code></a> object
                   <var>S</var> with the following characteristics:
                 </p>
                 <ol>
@@ -1662,6 +1850,53 @@
                   </li>
                 </ol>
               </li>
+              <li>
+                <p>
+                  If <var>buffer</var> is specified:
+                </p>
+                <ol>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-process"><code>process()</code></a>
+                      method on the new object, with <var>buffer</var> as the <code>buffer</code> argument.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Queue a task to invoke the <a href="#dfn-CryptoOperation-method-finish"><code>finish()</code></a>
+                      method on the new object.
+                    </p>
+                  </li>
+                </ol>
+                <div class="ednote"><div class="ednoteHeader">Editorial note</div>
+                  <p>
+                    Supporting single-part operations is intended to address two use cases:
+                  </p>
+                  <ol>
+                    <li>
+                      <p>
+                        Developers that "just" want to perform a simple operation. The single-method invocation best matches
+                        existing JavaScript cryptographic libraries, particularly the synchronous aspect.
+                      </p>
+                    </li>
+                    <li>
+                      <p>
+                        User agents that can optimize implementation when there is only a single operation being performed.
+                      </p>
+                    </li>
+                  </ol>
+                  <p>
+                    Having the single-part operation return a <code>CryptoOperation</code> may change,
+                    as may make it easier for developers if a <em>Promise</em> type object (whether through
+                    TC39 or through DOM) is returned, since the only possible results are "success" and "error".
+                  </p>
+                </div>
+              </li>
+              <li>
+                <p>
+                  Return the new object.
+                </p>
+              </li>
             </ol>
           </div>