Bug 25626 - Convert the various KeyAlgorithm interfaces into dictionary types, as recommended by the TAG.
authorRyan Sleevi <sleevi@google.com>
Mon, 16 Jun 2014 00:00:00 -0700
changeset 197 309495c2794e
parent 196 2974ae329b6b
child 198 e78209123956
Bug 25626 - Convert the various KeyAlgorithm interfaces into dictionary types, as recommended by the TAG.
spec/Overview-WebCryptoAPI.xml
spec/Overview.html
--- a/spec/Overview-WebCryptoAPI.xml	Mon Jun 16 00:00:00 2014 -0700
+++ b/spec/Overview-WebCryptoAPI.xml	Mon Jun 16 00:00:00 2014 -0700
@@ -859,32 +859,29 @@
         </div>
       </div>
 
-      <div id="key-algorithm-interface" class="section">
-        <h2>KeyAlgorithm interface</h2>
+      <div id="key-algorithm-dictionary" class="section">
+        <h2>KeyAlgorithm dictionary</h2>
         <p>
-          The KeyAlgorithm interface represents information about the contents of a given
+          The KeyAlgorithm dictionary represents information about the contents of a given
           <a href="#dfn-CryptoKey">CryptoKey</a> object.
         </p>
         <x:codeblock language="idl">
-[NoInterfaceObject]
-interface <dfn id="#dfn-KeyAlgorithm">KeyAlgorithm</dfn> {
-  readonly attribute DOMString <a href="#dfn-KeyAlgorithm-name">name</a>
+dictionary <dfn id="dfn-KeyAlgorithm">KeyAlgorithm</dfn> {
+  DOMString <a href="#dfn-KeyAlgorithm-name">name</a>
 };
         </x:codeblock>
-        <div id="key-algorithm-interface-description" class="section">
+        <div id="key-algorithm-dictionary-description" class="section">
           <h3>Description</h3>
           <p class="norm">This section is non-normative</p>
           <p>
-            The <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> interface is a supplemental interface
-            used to reflect the static, public properties of a <a
-            href="#dfn-CryptoKey">CryptoKey</a> back to an application. These properties can be used
-            for determination of strength (e.g.: an attribute that indicates the size of the key or
-            the parameters of its creation) as well as for protocol negotiations (e.g.: a particular
-            instance of an inner hash).
+            The <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> dictionary is provided to aid in
+            documenting how fixed, public properties of a <a href="#dfn-CryptoKey">CryptoKey</a>
+            are reflected back to an application. The actual dictionary type is never exposed
+            to applications.
           </p>
         </div>
-        <div id="key-algorithm-interface-members" class="section">
-          <h3>KeyAlgorithm interface members</h3>
+        <div id="key-algorithm-dictionary-members" class="section">
+          <h3>KeyAlgorithm dictionary members</h3>
           <dl>
             <dt id="dfn-KeyAlgorithm-name">name</dt>
             <dd>
@@ -908,7 +905,7 @@
 interface <dfn id="dfn-CryptoKey">CryptoKey</dfn> {
   readonly attribute <a href="#dfn-KeyType">KeyType</a> <a href="#dfn-CryptoKey-type">type</a>;
   readonly attribute boolean <a href="#dfn-CryptoKey-extractable">extractable</a>;
-  readonly attribute <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> <a href="#dfn-CryptoKey-algorithm">algorithm</a>;
+  readonly attribute object <a href="#dfn-CryptoKey-algorithm">algorithm</a>;
   readonly attribute object <a href="#dfn-CryptoKey-usages">usages</a>;
 };
         </x:codeblock>
@@ -972,7 +969,10 @@
             </dd>
             <dt id="dfn-CryptoKey-algorithm"><code>algorithm</code></dt>
             <dd>
-              The <a href="#dfn-KeyAlgorithm"><code>KeyAlgorithm</code></a> used to generate the key.
+              A JavaScript Object that contains information about the algorithm used to generate
+              the key. The Object will contain properties defined within the various
+              <a href="#dfn-KeyAlgorithm"><code>KeyAlgorithm</code></a> dictionary and derived
+              dictionaries.
             </dd>
             <dt id="dfn-CryptoKey-usages"><code>usages</code></dt>
             <dd>
@@ -2643,15 +2643,15 @@
       </div>
       
       <div id="keypair" class="section">
-        <h2>KeyPair</h2>
+        <h2>CryptoKeyPair dictionary</h2>
         <x:codeblock language="idl">
-interface <dfn id="dfn-CryptoKeyPair">CryptoKeyPair</dfn> {
-  readonly attribute <a href="#dfn-CryptoKey">CryptoKey</a> publicKey;
-  readonly attribute <a href="#dfn-CryptoKey">CryptoKey</a> privateKey;
+dictionary <dfn id="dfn-CryptoKeyPair">CryptoKeyPair</dfn> {
+  <a href="#dfn-CryptoKey">CryptoKey</a> <dfn id="dfn-CryptoKey-publicKey">publicKey</dfn>;
+  <a href="#dfn-CryptoKey">CryptoKey</a> <dfn id="dfn-CryptoKey-privateKey">privateKey</dfn>;
 };
         </x:codeblock>
         <p>
-          The <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a> interface represents an
+          The <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a> dictionary represents an
           asymmetric key pair that is comprised of both public and private keys.
         </p>
       </div>
@@ -3173,14 +3173,14 @@
 };
             </x:codeblock>
           </div>
-          <div id="RsaKeyAlgorithm-interface" class="section">
-            <h4>RsaKeyAlgorithm interface</h4>
+          <div id="RsaKeyAlgorithm-dictionary" class="section">
+            <h4>RsaKeyAlgorithm dictionary</h4>
             <x:codeblock language="idl">
-interface <dfn id="dfn-RsaKeyAlgorithm">RsaKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
+dictionary <dfn id="dfn-RsaKeyAlgorithm">RsaKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
   <span class="comment">// The length, in bits, of the RSA modulus</span>
-  readonly attribute unsigned long <dfn id="dfn-RsaKeyAlgorithm-modulusLength">modulusLength</dfn>;
+  unsigned long <dfn id="dfn-RsaKeyAlgorithm-modulusLength">modulusLength</dfn>;
   <span class="comment">// The RSA public exponent</span>
-  readonly attribute <a href="#dfn-BigInteger">BigInteger</a> <dfn id="dfn-RsaKeyAlgorithm-publicExponent">publicExponent</dfn>;
+  <a href="#dfn-BigInteger">BigInteger</a> <dfn id="dfn-RsaKeyAlgorithm-publicExponent">publicExponent</dfn>;
 };
             </x:codeblock>
           </div>
@@ -3306,7 +3306,7 @@
                   <li>
                     <p>
                       Let <var>algorithm</var> be a new
-                      <a href="#dfn-RsaKeyAlgorithm">RsaKeyAlgorithm</a> object.
+                      <a href="#dfn-RsaKeyAlgorithm">RsaKeyAlgorithm</a> dictionary.
                     </p>
                   </li>
                   <li>
@@ -3348,7 +3348,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>publicKey</var> to be <var>algorithm</var>.
+                      <var>publicKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -3380,7 +3380,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>privateKey</var> to be <var>algorithm</var>.
+                      <var>privateKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -3400,24 +3400,25 @@
                   <li>
                     <p>
                       Let <var>result</var> be a new <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a>
-                      object.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Set the <a href="#dfn-KeyPair-publicKey">publicKey</a> attribute
+                      dictionary.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Set the <a href="#dfn-CryptoKeyPair-publicKey">publicKey</a> attribute
                       of <var>result</var> to be <var>publicKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Set the <a href="#dfn-KeyPair-privateKey">privateKey</a> attribute
+                      Set the <a href="#dfn-CryptoKeyPair-privateKey">privateKey</a> attribute
                       of <var>result</var> to be <var>privateKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Return <var>result</var>.
+                      Return the result of converting <var>result</var> to an ECMAScript Object, as
+                      defined by [<a href="#WebIDL">WEBIDL</a>].
                     </p>
                   </li>
                 </ol>
@@ -3668,7 +3669,7 @@
                   <li>
                     <p>
                       Let <var>algorithm</var> be a new
-                      <a href="#dfn-RsaKeyAlgorithm">RsaKeyAlgorithm</a>.
+                      <a href="#dfn-RsaKeyAlgorithm">RsaKeyAlgorithm</a> dictionary.
                     </p>
                   </li>
                   <li>
@@ -3694,7 +3695,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>key</var> to <var>algorithm</var>
+                      <var>key</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -3906,7 +3907,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ul>
@@ -3992,13 +3993,12 @@
 };
             </x:codeblock>
           </div>
-          <div id="RsaHashedKeyAlgorithm-interface" class="section">
-            <h4>RsaHashedKeyAlgorithm interface</h4>
+          <div id="RsaHashedKeyAlgorithm-dictionary" class="section">
+            <h4>RsaHashedKeyAlgorithm dictionary</h4>
             <x:codeblock language="idl">
-[NoInterfaceObject]
-interface <dfn id="dfn-RsaHashedKeyAlgorithm">RsaHashedKeyAlgorithm</dfn> : <a href="#dfn-RsaKeyAlgorithm">RsaKeyAlgorithm</a> {
+dictionary <dfn id="dfn-RsaHashedKeyAlgorithm">RsaHashedKeyAlgorithm</dfn> : <a href="#dfn-RsaKeyAlgorithm">RsaKeyAlgorithm</a> {
   <span class="comment">// The hash algorithm that is used with this key</span>
-  readonly attribute <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> <dfn id="dfn-RsaHashedKeyAlgorithm-hash">hash</dfn>;
+  <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> <dfn id="dfn-RsaHashedKeyAlgorithm-hash">hash</dfn>;
 };
             </x:codeblock>
           </div>
@@ -4147,7 +4147,7 @@
                     <p>
                       Let <var>algorithm</var> be a new
                       <a href="#dfn-RsaHashedKeyAlgorithm">RsaHashedKeyAlgorithm</a>
-                      object.
+                      dictionary.
                     </p>
                   </li>
                   <li>
@@ -4197,7 +4197,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>publicKey</var> to be <var>algorithm</var>.
+                      <var>publicKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -4229,7 +4229,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>privateKey</var> to be <var>algorithm</var>.
+                      <var>privateKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -4248,24 +4248,25 @@
                   <li>
                     <p>
                       Let <var>result</var> be a new <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a>
-                      object.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Set the <a href="#dfn-KeyPair-publicKey">publicKey</a> attribute
+                      dictionary.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Set the <a href="#dfn-CryptoKeyPair-publicKey">publicKey</a> attribute
                       of <var>result</var> to be <var>publicKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Set the <a href="#dfn-KeyPair-privateKey">privateKey</a> attribute
+                      Set the <a href="#dfn-CryptoKeyPair-privateKey">privateKey</a> attribute
                       of <var>result</var> to be <var>privateKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Return <var>result</var>.
+                      Return the result of converting <var>result</var> to an ECMAScript Object, as
+                      defined by [<a href="#WebIDL">WEBIDL</a>].
                     </p>
                   </li>
                 </ol>
@@ -4750,7 +4751,7 @@
                   <li>
                     <p>
                       Let <var>algorithm</var> be a new
-                      <a href="#dfn-RsaHashedKeyAlgorithm">RsaHashedKeyAlgorithm</a>.
+                      <a href="#dfn-RsaHashedKeyAlgorithm">RsaHashedKeyAlgorithm</a> dictionary.
                     </p>
                   </li>
                   <li>
@@ -4783,7 +4784,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>key</var> to <var>algorithm</var>
+                      <var>key</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -5039,7 +5040,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ul>
@@ -5296,7 +5297,7 @@
                     <p>
                       Let <var>algorithm</var> be a new
                       <a href="#dfn-RsaHashedKeyAlgorithm">RsaHashedKeyAlgorithm</a>
-                      object.
+                      dictionary.
                     </p>
                   </li>
                   <li>
@@ -5346,7 +5347,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>publicKey</var> to be <var>algorithm</var>.
+                      <var>publicKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -5377,7 +5378,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>privateKey</var> to be <var>algorithm</var>.
+                      <var>privateKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -5397,24 +5398,25 @@
                   <li>
                     <p>
                       Let <var>result</var> be a new <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a>
-                      object.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Set the <a href="#dfn-KeyPair-publicKey">publicKey</a> attribute
-                      of <var>result</var> to be <var>publicKey</var>.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Set the <a href="#dfn-KeyPair-privateKey">privateKey</a> attribute
-                      of <var>result</var> to be <var>privateKey</var>.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Return <var>result</var>.
+                      dictionary.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Set the <a href="#dfn-CryptoKeyPair-publicKey">publicKey</a> attribute
+                      of <var>result</var> to <var>publicKey</var>.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Set the <a href="#dfn-CryptoKeyPair-privateKey">privateKey</a> attribute
+                      of <var>result</var> to <var>privateKey</var>.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Return the result of converting <var>result</var> to an ECMAScript Object,
+                      as defined by [<a href="#WebIDL">WEBIDL</a>].
                     </p>
                   </li>
                 </ol>
@@ -6019,7 +6021,7 @@
                   <li>
                     <p>
                       Let <var>algorithm</var> be a new
-                      <a href="#dfn-RsaHashedKeyAlgorithm">RsaHashedKeyAlgorithm</a>.
+                      <a href="#dfn-RsaHashedKeyAlgorithm">RsaHashedKeyAlgorithm</a> dictionary.
                     </p>
                   </li>
                   <li>
@@ -6511,7 +6513,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ul>
@@ -6818,7 +6820,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>publicKey</var> to be <var>algorithm</var>.
+                      <var>publicKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -6850,7 +6852,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>privateKey</var> to be <var>algorithm</var>.
+                      <var>privateKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -6870,24 +6872,25 @@
                   <li>
                     <p>
                       Let <var>result</var> be a new <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a>
-                      object.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Set the <a href="#dfn-KeyPair-publicKey">publicKey</a> attribute
+                      dictionary.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Set the <a href="#dfn-CryptoKeyPair-publicKey">publicKey</a> attribute
                       of <var>result</var> to be <var>publicKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Set the <a href="#dfn-KeyPair-privateKey">privateKey</a> attribute
+                      Set the <a href="#dfn-CryptoKeyPair-privateKey">privateKey</a> attribute
                       of <var>result</var> to be <var>privateKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Return <var>result</var>.
+                      Return the result of converting <var>result</var> to an ECMAScript Object, as
+                      defined by [<a href="#WebIDL">WEBIDL</a>].
                     </p>
                   </li>
                 </ol>
@@ -7964,7 +7967,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ul>
@@ -8076,13 +8079,12 @@
               <dd>NIST recommended curve P-521, also known as <code>secp521r1</code>.</dd>
             </dl>
           </div>
-          <div id="EcKeyAlgorithm-interface" class="section">
-            <h4>EcKeyAlgorithm interface</h4>
+          <div id="EcKeyAlgorithm-dictionary" class="section">
+            <h4>EcKeyAlgorithm dictionary</h4>
             <x:codeblock language="idl">
-[NoInterfaceObject]
-interface <dfn id="dfn-EcKeyAlgorithm">EcKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
+dictionary <dfn id="dfn-EcKeyAlgorithm">EcKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
   <span class="comment">// The named curve that the key uses</span>
-  readonly attribute <a href="#dfn-NamedCurve">NamedCurve</a> <dfn id="dfn-EcKeyAlgorithm-namedCurve">namedCurve</dfn>;
+  <a href="#dfn-NamedCurve">NamedCurve</a> <dfn id="dfn-EcKeyAlgorithm-namedCurve">namedCurve</dfn>;
 };
             </x:codeblock>
           </div>
@@ -8355,7 +8357,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>publicKey</var> to be <var>algorithm</var>.
+                      <var>publicKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -8385,7 +8387,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>privateKey</var> to be <var>algorithm</var>.
+                      <var>privateKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -8405,24 +8407,25 @@
                   <li>
                     <p>
                       Let <var>result</var> be a new <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a>
-                      object.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Set the <a href="#dfn-KeyPair-publicKey">publicKey</a> attribute
+                      dictionary.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Set the <a href="#dfn-CryptoKeyPair-publicKey">publicKey</a> attribute
                       of <var>result</var> to be <var>publicKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Set the <a href="#dfn-KeyPair-privateKey">privateKey</a> attribute
+                      Set the <a href="#dfn-CryptoKeyPair-privateKey">privateKey</a> attribute
                       of <var>result</var> to be <var>privateKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Return <var>result</var>.
+                      Return the result of converting <var>result</var> to an ECMAScript Object, as
+                      defined by [<a href="#WebIDL">WEBIDL</a>].
                     </p>
                   </li>
                 </ol>
@@ -9294,7 +9297,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -9457,7 +9460,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>publicKey</var> to be <var>algorithm</var>.
+                      <var>publicKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -9487,7 +9490,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>privateKey</var> to be <var>algorithm</var>.
+                      <var>privateKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -9507,24 +9510,25 @@
                   <li>
                     <p>
                       Let <var>result</var> be a new <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a>
-                      object.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Set the <a href="#dfn-KeyPair-publicKey">publicKey</a> attribute
+                      dictionary.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Set the <a href="#dfn-CryptoKeyPair-publicKey">publicKey</a> attribute
                       of <var>result</var> to be <var>publicKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Set the <a href="#dfn-KeyPair-privateKey">privateKey</a> attribute
+                      Set the <a href="#dfn-CryptoKeyPair-privateKey">privateKey</a> attribute
                       of <var>result</var> to be <var>privateKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Return <var>result</var>.
+                      Return the result of converting <var>result</var> to an ECMAScript Object, as
+                      defined by [<a href="#WebIDL">WEBIDL</a>].
                     </p>
                   </li>
                 </ol>
@@ -10546,7 +10550,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -10677,12 +10681,11 @@
 };
             </x:codeblock>
           </div>
-          <div id="AesKeyAlgorithm-interface" class="section">
+          <div id="AesKeyAlgorithm-dictionary" class="section">
             <x:codeblock language="idl">
-[NoInterfaceObject]
-interface <dfn id="dfn-AesKeyAlgorithm">AesKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
+dictionary <dfn id="dfn-AesKeyAlgorithm">AesKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
   <span class="comment">// The length, in bits, of the key.</span>
-  readonly attribute unsigned short <dfn id="dfn-AesKeyAlgorithm-length">length</dfn>;
+  unsigned short <dfn id="dfn-AesKeyAlgorithm-length">length</dfn>;
 };
             </x:codeblock>
           </div>
@@ -11182,7 +11185,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -11782,7 +11785,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -12326,7 +12329,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -13014,7 +13017,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -13586,7 +13589,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -14093,7 +14096,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -14215,15 +14218,14 @@
 };
             </x:codeblock>
           </div>
-          <div id="hmac-keyalgorithm" class="section">
-            <h4>HmacKeyAlgorithm interface</h4>
+          <div id="HmacKeyAlgorithm-dictionary" class="section">
+            <h4>HmacKeyAlgorithm dictionary</h4>
             <x:codeblock language="idl">
-[NoInterfaceObject]
-interface <dfn id="dfn-HmacKeyAlgorithm">HmacKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
+dictionary <dfn id="dfn-HmacKeyAlgorithm">HmacKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
   <span class="comment">// The inner hash function to use.</span>
-  readonly attribute KeyAlgorithm <dfn id="dfn-HmacKeyAlgorithm-hash">hash</dfn>;
+  KeyAlgorithm <dfn id="dfn-HmacKeyAlgorithm-hash">hash</dfn>;
   <span class="comment">// The length (in bits) of the key.</span>
-  readonly attribute unsigned long <dfn id="dfn-HmacKeyAlgorithm-length">length</dfn>;
+  unsigned long <dfn id="dfn-HmacKeyAlgorithm-length">length</dfn>;
 };
             </x:codeblock>
           </div>
@@ -14867,7 +14869,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -14996,14 +14998,13 @@
             </x:codeblock>
           </div>
           <div id="dh-DhKeyAlgorithm" class="section">
-            <h4>DhKeyAlgorithm interface</h4>
+            <h4>DhKeyAlgorithm dictionary</h4>
             <x:codeblock language="idl">
-[NoInterfaceObject]
-interface <dfn id="dfn-DhKeyAlgorithm">DhKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
+dictionary <dfn id="dfn-DhKeyAlgorithm">DhKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
   <span class="comment">// The prime p.</span>
-  readonly attribute BigInteger <dfn id="dfn-DhKeyAlgorithm-prime">prime</dfn>;
+  BigInteger <dfn id="dfn-DhKeyAlgorithm-prime">prime</dfn>;
   <span class="comment">// The base g.</span>
-  readonly attribute BigInteger <dfn id="dfn-DhKeyAlgorithm-generator">generator</dfn>;
+  BigInteger <dfn id="dfn-DhKeyAlgorithm-generator">generator</dfn>;
 };
             </x:codeblock>
           </div>
@@ -15117,7 +15118,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>publicKey</var> to be <var>algorithm</var>.
+                      <var>publicKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -15147,7 +15148,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>privateKey</var> to be <var>algorithm</var>.
+                      <var>privateKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -15165,24 +15166,25 @@
                   <li>
                     <p>
                       Let <var>result</var> be a new <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a>
-                      object.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Set the <a href="#dfn-KeyPair-publicKey">publicKey</a> attribute
+                      dictionary.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Set the <a href="#dfn-CryptoKeyPair-publicKey">publicKey</a> attribute
                       of <var>result</var> to be <var>publicKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Set the <a href="#dfn-KeyPair-privateKey">privateKey</a> attribute
+                      Set the <a href="#dfn-CryptoKeyPair-privateKey">privateKey</a> attribute
                       of <var>result</var> to be <var>privateKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Return <var>result</var>.
+                      Return the result of converting <var>result</var> to an ECMAScript Object, as
+                      defined by [<a href="#WebIDL">WEBIDL</a>].
                     </p>
                   </li>
                 </ol>
--- a/spec/Overview.html	Mon Jun 16 00:00:00 2014 -0700
+++ b/spec/Overview.html	Mon Jun 16 00:00:00 2014 -0700
@@ -134,7 +134,7 @@
 
     <div id="toc">
       <h2>Table of Contents</h2>
-      <div class="toc"><ul><li><a href="#introduction">1. Introduction</a></li><li><a href="#use-cases">2. Use Cases</a><ul><li><a href="#multifactor-authentication">2.1. Multi-factor Authentication</a></li><li><a href="#protected-document">2.2. Protected Document Exchange</a></li><li><a href="#cloud-storage">2.3. Cloud Storage</a></li><li><a href="#document-signing">2.4. Document Signing</a></li><li><a href="#data-integrity-protection">2.5. Data Integrity Protection</a></li><li><a href="#secure-messaging">2.6. Secure Messaging</a></li><li><a href="#jose">2.7. Javascript Object Signing and Encryption (JOSE)</a></li></ul></li><li><a href="#conformance">3. Conformance</a></li><li><a href="#scope">4. Scope</a><ul><li><a href="#scope-abstraction">4.1. Level of abstraction</a></li><li><a href="#scope-algorithms">4.2. Cryptographic algorithms</a></li><li><a href="#scope-operations">4.3. Operations</a></li><li><a href="#scope-out-of-scope">4.4. Out of scope</a></li></ul></li><li><a href="#security">5. Security considerations</a><ul><li><a href="#security-implementers">5.1. Security considerations for implementers</a></li><li><a href="#security-developers">5.2. Security considerations for authors</a></li></ul></li><li><a href="#privacy">6. Privacy considerations</a></li><li><a href="#dependencies">7. Dependencies</a></li><li><a href="#terminology">8. Terminology</a></li><li><a href="#RandomSource-interface">9. RandomSource interface</a><ul><li><a href="#RandomSource-description">9.1. Description</a></li><li><a href="#RandomSource-interface-methods">9.2. Methods and Parameters</a><ul><li><a href="#RandomSource-method-getRandomValues">9.2.1. The getRandomValues method</a></li></ul></li></ul></li><li><a href="#algorithm-dictionary">10. Algorithm dictionary</a><ul><li><a href="#algorithm-dictionary-members">10.1. Algorithm Dictionary Members</a></li></ul></li><li><a href="#key-algorithm-interface">11. KeyAlgorithm interface</a><ul><li><a href="#key-algorithm-interface-description">11.1. Description</a></li><li><a href="#key-algorithm-interface-members">11.2. KeyAlgorithm interface members</a></li></ul></li><li><a href="#cryptokey-interface">12. CryptoKey interface</a><ul><li><a href="#cryptokey-interface-description">12.1. Description</a></li><li><a href="#cryptokey-interface-types">12.2. Key interface data types</a></li><li><a href="#cryptokey-interface-members">12.3. CryptoKey interface members</a></li><li><a href="#cryptokey-interface-clone">12.4. Structured clone algorithm</a></li></ul></li><li><a href="#crypto-interface">13. Crypto interface</a></li><li><a href="#subtlecrypto-interface">14. SubtleCrypto interface</a><ul><li><a href="#subtlecrypto-interface-description">14.1. Description</a></li><li><a href="#subtlecrypto-interface-datatypes">14.2. Data Types</a></li><li><a href="#subtlecrypto-interface-methods">14.3. Methods and Parameters</a><ul><li><a href="#SubtleCrypto-method-encrypt">14.3.1. The encrypt method</a></li><li><a href="#SubtleCrypto-method-decrypt">14.3.2. The decrypt method</a></li><li><a href="#SubtleCrypto-method-sign">14.3.3. The sign method</a></li><li><a href="#SubtleCrypto-method-verify">14.3.4. The verify method</a></li><li><a href="#SubtleCrypto-method-digest">14.3.5. The digest method</a></li><li><a href="#SubtleCrypto-method-generateKey">14.3.6. The generateKey method</a></li><li><a href="#SubtleCrypto-method-deriveKey">14.3.7. The deriveKey method</a></li><li><a href="#SubtleCrypto-method-deriveBits">14.3.8. The deriveBits method</a></li><li><a href="#SubtleCrypto-method-importKey">14.3.9. The importKey method</a></li><li><a href="#SubtleCrypto-method-exportKey">14.3.10. The exportKey method</a></li><li><a href="#SubtleCrypto-method-wrapKey">14.3.11. The wrapKey method</a></li><li><a href="#SubtleCrypto-method-unwrapKey">14.3.12. The unwrapKey method</a></li></ul></li><li><a href="#SubtleCrypto-Exceptions">14.4. Exceptions</a></li></ul></li><li><a href="#JsonWebKey-dictionary">15. JsonWebKey dictionary</a></li><li><a href="#WorkerCrypto-interface">16. WorkerCrypto interface</a><ul><li><a href="#WorkerCrypto-description">16.1. Description</a></li></ul></li><li><a href="#big-integer">17. BigInteger</a></li><li><a href="#keypair">18. KeyPair</a></li><li><a href="#algorithms">19. Algorithms</a><ul><li><a href="#algorithms-index">19.1. Registered algorithms</a></li><li><a href="#recommended-algorithms">19.2. Recommended algorithms</a></li><li><a href="#defining-an-algorithm">19.3. Defining an algorithm</a><ul><li><a href="#recognized-algorithm-name">19.3.1. Recognized algorithm name</a></li><li><a href="#supported-operations">19.3.2. Supported operations</a></li><li><a href="#algorithm-specific-params">19.3.3. Algorithm-specific parameters</a></li><li><a href="#algorithm-result">19.3.4. Algorithm results</a></li><li><a href="#algorithm-alias">19.3.5. Algorithm aliases</a></li></ul></li><li><a href="#rsaes-pkcs1">19.4. RSAES-PKCS1-v1_5</a><ul><li><a href="#rsaes-pkcs1-description">19.4.1. Description</a></li><li><a href="#rsaes-pkcs1-registration">19.4.2. Registration</a></li><li><a href="#RsaKeyGenParams-dictionary">19.4.3. RsaKeyGenParams dictionary</a></li><li><a href="#RsaKeyAlgorithm-interface">19.4.4. RsaKeyAlgorithm interface</a></li><li><a href="#rsaes-pkcs1-operations">19.4.5. Operations</a></li></ul></li><li><a href="#rsassa-pkcs1">19.5. RSASSA-PKCS1-v1_5</a><ul><li><a href="#rsassa-pkcs1-description">19.5.1. Description</a></li><li><a href="#rsassa-pkcs1-registration">19.5.2. Registration</a></li><li><a href="#RsaHashedKeyGenParams-dictionary">19.5.3. RsaHashedKeyGenParams dictionary</a></li><li><a href="#RsaHashedKeyAlgorithm-interface">19.5.4. RsaHashedKeyAlgorithm interface</a></li><li><a href="#RsaHashedImportParams-dictionary">19.5.5. RsaHashedImportParams dictionary</a></li><li><a href="#rsassa-pkcs1-operations">19.5.6. Operations</a></li></ul></li><li><a href="#rsa-pss">19.6. RSA-PSS</a><ul><li><a href="#rsa-pss-description">19.6.1. Description</a></li><li><a href="#rsa-pss-registration">19.6.2. Registration</a></li><li><a href="#RsaPssParams-dictionary">19.6.3. RsaPssParams dictionary</a></li><li><a href="#rsa-pss-operations">19.6.4. Operations</a></li></ul></li><li><a href="#rsa-oaep">19.7. RSA-OAEP</a><ul><li><a href="#rsa-oaep-description">19.7.1. Description</a></li><li><a href="#rsa-oaep-registration">19.7.2. Registration</a></li><li><a href="#rsa-oaep-params">19.7.3. RsaOaepParams dictionary</a></li><li><a href="#rsa-oaep-operations">19.7.4. Operations</a></li></ul></li><li><a href="#ecdsa">19.8. ECDSA</a><ul><li><a href="#ecdsa-description">19.8.1. Description</a></li><li><a href="#ecdsa-registration">19.8.2. Registration</a></li><li><a href="#EcdsaParams-dictionary">19.8.3. EcdsaParams dictionary</a></li><li><a href="#EcKeyGenParams-dictionary">19.8.4. EcKeyGenParams dictionary</a></li><li><a href="#EcKeyAlgorithm-interface">19.8.5. EcKeyAlgorithm interface</a></li><li><a href="#EcKeyImportParams-dictionary">19.8.6. EcKeyImportParams dictionary</a></li><li><a href="#ecdsa-operations">19.8.7. Operations</a></li></ul></li><li><a href="#ecdh">19.9. ECDH</a><ul><li><a href="#ecdh-description">19.9.1. Description</a></li><li><a href="#ecdh-registration">19.9.2. Registration</a></li><li><a href="#dh-EcdhKeyDeriveParams">19.9.3. EcdhKeyDeriveParams dictionary</a></li><li><a href="#ecdh-operations">19.9.4. Operations</a></li></ul></li><li><a href="#aes-ctr">19.10. AES-CTR</a><ul><li><a href="#aes-ctr-description">19.10.1. Description</a></li><li><a href="#aes-ctr-registration">19.10.2. Registration</a></li><li><a href="#aes-ctr-params">19.10.3. AesCtrParams dictionary</a></li><li><a href="#AesKeyAlgorithm-interface">19.10.4. </a></li><li><a href="#aes-keygen-params">19.10.5. AesKeyGenParams dictionary</a></li><li><a href="#aes-derivedkey-params">19.10.6. AesDerivedKeyParams dictionary</a></li><li><a href="#aes-ctr-operations">19.10.7. Operations</a></li></ul></li><li><a href="#aes-cbc">19.11. AES-CBC</a><ul><li><a href="#aes-cbc-description">19.11.1. Description</a></li><li><a href="#aes-cbc-registration">19.11.2. Registration</a></li><li><a href="#aes-cbc-params">19.11.3. AesCbcParams dictionary</a></li><li><a href="#aes-cbc-operations">19.11.4. Operations</a></li></ul></li><li><a href="#aes-cmac">19.12. AES-CMAC</a><ul><li><a href="#aes-cmac-description">19.12.1. Description</a></li><li><a href="#aes-cmac-registration">19.12.2. Registration</a></li><li><a href="#aes-cmac-params">19.12.3. AesCmacParams dictionary</a></li><li><a href="#aes-cmac-operations">19.12.4. Operations</a></li></ul></li><li><a href="#aes-gcm">19.13. AES-GCM</a><ul><li><a href="#aes-gcm-description">19.13.1. Description</a></li><li><a href="#aes-gcm-registration">19.13.2. Registration</a></li><li><a href="#aes-gcm-params">19.13.3. AesGcmParams dictionary</a></li><li><a href="#aes-gcm-operations">19.13.4. Operations</a></li></ul></li><li><a href="#aes-cfb">19.14. AES-CFB</a><ul><li><a href="#aes-cfb-description">19.14.1. Description</a></li><li><a href="#aes-cfb-registration">19.14.2. Registration</a></li><li><a href="#aes-cfb-params">19.14.3. AesCfbParams dictionary</a></li><li><a href="#aes-cfb-operations">19.14.4. Operations</a></li></ul></li><li><a href="#aes-kw">19.15. AES-KW</a><ul><li><a href="#aes-kw-description">19.15.1. Description</a></li><li><a href="#aes-kw-registration">19.15.2. Registration</a></li><li><a href="#aes-kw-operations">19.15.3. Operations</a></li></ul></li><li><a href="#hmac">19.16. HMAC</a><ul><li><a href="#hmac-description">19.16.1. Description</a></li><li><a href="#hmac-registration">19.16.2. Registration</a></li><li><a href="#hmac-importparams">19.16.3. HmacImportParams dictionary</a></li><li><a href="#hmac-keyalgorithm">19.16.4. HmacKeyAlgorithm interface</a></li><li><a href="#hmac-keygen-params">19.16.5. HmacKeyGenParams dictionary</a></li><li><a href="#hmac-derivedkey-params">19.16.6. HmacDerivedKeyParams dictionary</a></li><li><a href="#hmac-operations">19.16.7. Operations</a></li></ul></li><li><a href="#dh">19.17. Diffie-Hellman</a><ul><li><a href="#dh-description">19.17.1. Description</a></li><li><a href="#dh-registration">19.17.2. Registration</a></li><li><a href="#dh-DhKeyGenParams">19.17.3. DhKeyGenParams dictionary</a></li><li><a href="#dh-DhKeyAlgorithm">19.17.4. DhKeyAlgorithm interface</a></li><li><a href="#dh-DhKeyDeriveParams">19.17.5. DhKeyDeriveParams dictionary</a></li><li><a href="#dh-DhImportKeyParams">19.17.6. DhImportKeyParams dictionary</a></li><li><a href="#dh-operations">19.17.7. Operations</a></li></ul></li><li><a href="#sha">19.18. SHA</a><ul><li><a href="#sha-description">19.18.1. Description</a></li><li><a href="#sha-registration">19.18.2. Registration</a></li><li><a href="#sha-operations">19.18.3. Operations</a></li></ul></li><li><a href="#concatkdf">19.19. Concat KDF</a><ul><li><a href="#concatkdf-description">19.19.1. Description</a></li><li><a href="#concatkdf-registration">19.19.2. Registration</a></li><li><a href="#concat-params">19.19.3. ConcatParams dictionary</a></li><li><a href="#concat-operations">19.19.4. Operations</a></li></ul></li><li><a href="#hkdf-ctr">19.20. HKDF-CTR</a><ul><li><a href="#hkdf-ctr-description">19.20.1. Description</a></li><li><a href="#hkdf-ctr-registration">19.20.2. Registration</a></li><li><a href="#hkdf-ctr-params">19.20.3. HkdfCtrParams dictionary</a></li><li><a href="#hkdf2-ctr-operations">19.20.4. Operations</a></li></ul></li><li><a href="#pbkdf2">19.21. PBKDF2</a><ul><li><a href="#pbkdf2-description">19.21.1. Description</a></li><li><a href="#pbkdf2-registration">19.21.2. Registration</a></li><li><a href="#pbkdf2-params">19.21.3. Pbkdf2Params dictionary</a></li><li><a href="#pbkdf2-operations">19.21.4. Operations</a></li></ul></li></ul></li><li><a href="#algorithm-normalizing-rules">20. Algorithm normalizing rules</a></li><li><a href="#examples-section">21. JavaScript Example Code</a><ul><li><a href="#examples-signing">21.1. Generate a signing key pair, sign some data</a></li><li><a href="#examples-symmetric-encryption">21.2. Symmetric Encryption</a></li></ul></li><li><a href="#iana-section">22. IANA Considerations</a><ul><li><a href="#iana-section-jws-jwa">22.1. JSON Web Signature and Encryption Algorithms Registration</a></li><li><a href="#iana-section-jwk">22.2. JSON Web Key Parameters Registration</a></li></ul></li><li><a href="#acknowledgements-section">23. Acknowledgements</a></li><li><a href="#references">24. References</a><ul><li><a href="#normative-references">24.1. Normative References</a></li><li><a href="#informative-references">24.2. Informative References</a></li></ul></li></ul><ul><li><a href="#jwk-mapping">A. Mapping between JSON Web Key / JSON Web Algorithm</a><ul><li><a href="#jwk-mapping-alg">A.1. Algorithm mappings</a></li><li><a href="#jwk-mapping-usage">A.2. Usage mapping</a></li></ul></li><li><a href="#spki-mapping">B. Mapping between Algorithm and SubjectPublicKeyInfo</a></li><li><a href="#pkcs8-mapping">C. Mapping between Algorithm and PKCS#8 PrivateKeyInfo</a></li></ul></div>
+      <div class="toc"><ul><li><a href="#introduction">1. Introduction</a></li><li><a href="#use-cases">2. Use Cases</a><ul><li><a href="#multifactor-authentication">2.1. Multi-factor Authentication</a></li><li><a href="#protected-document">2.2. Protected Document Exchange</a></li><li><a href="#cloud-storage">2.3. Cloud Storage</a></li><li><a href="#document-signing">2.4. Document Signing</a></li><li><a href="#data-integrity-protection">2.5. Data Integrity Protection</a></li><li><a href="#secure-messaging">2.6. Secure Messaging</a></li><li><a href="#jose">2.7. Javascript Object Signing and Encryption (JOSE)</a></li></ul></li><li><a href="#conformance">3. Conformance</a></li><li><a href="#scope">4. Scope</a><ul><li><a href="#scope-abstraction">4.1. Level of abstraction</a></li><li><a href="#scope-algorithms">4.2. Cryptographic algorithms</a></li><li><a href="#scope-operations">4.3. Operations</a></li><li><a href="#scope-out-of-scope">4.4. Out of scope</a></li></ul></li><li><a href="#security">5. Security considerations</a><ul><li><a href="#security-implementers">5.1. Security considerations for implementers</a></li><li><a href="#security-developers">5.2. Security considerations for authors</a></li></ul></li><li><a href="#privacy">6. Privacy considerations</a></li><li><a href="#dependencies">7. Dependencies</a></li><li><a href="#terminology">8. Terminology</a></li><li><a href="#RandomSource-interface">9. RandomSource interface</a><ul><li><a href="#RandomSource-description">9.1. Description</a></li><li><a href="#RandomSource-interface-methods">9.2. Methods and Parameters</a><ul><li><a href="#RandomSource-method-getRandomValues">9.2.1. The getRandomValues method</a></li></ul></li></ul></li><li><a href="#algorithm-dictionary">10. Algorithm dictionary</a><ul><li><a href="#algorithm-dictionary-members">10.1. Algorithm Dictionary Members</a></li></ul></li><li><a href="#key-algorithm-dictionary">11. KeyAlgorithm dictionary</a><ul><li><a href="#key-algorithm-dictionary-description">11.1. Description</a></li><li><a href="#key-algorithm-dictionary-members">11.2. KeyAlgorithm dictionary members</a></li></ul></li><li><a href="#cryptokey-interface">12. CryptoKey interface</a><ul><li><a href="#cryptokey-interface-description">12.1. Description</a></li><li><a href="#cryptokey-interface-types">12.2. Key interface data types</a></li><li><a href="#cryptokey-interface-members">12.3. CryptoKey interface members</a></li><li><a href="#cryptokey-interface-clone">12.4. Structured clone algorithm</a></li></ul></li><li><a href="#crypto-interface">13. Crypto interface</a></li><li><a href="#subtlecrypto-interface">14. SubtleCrypto interface</a><ul><li><a href="#subtlecrypto-interface-description">14.1. Description</a></li><li><a href="#subtlecrypto-interface-datatypes">14.2. Data Types</a></li><li><a href="#subtlecrypto-interface-methods">14.3. Methods and Parameters</a><ul><li><a href="#SubtleCrypto-method-encrypt">14.3.1. The encrypt method</a></li><li><a href="#SubtleCrypto-method-decrypt">14.3.2. The decrypt method</a></li><li><a href="#SubtleCrypto-method-sign">14.3.3. The sign method</a></li><li><a href="#SubtleCrypto-method-verify">14.3.4. The verify method</a></li><li><a href="#SubtleCrypto-method-digest">14.3.5. The digest method</a></li><li><a href="#SubtleCrypto-method-generateKey">14.3.6. The generateKey method</a></li><li><a href="#SubtleCrypto-method-deriveKey">14.3.7. The deriveKey method</a></li><li><a href="#SubtleCrypto-method-deriveBits">14.3.8. The deriveBits method</a></li><li><a href="#SubtleCrypto-method-importKey">14.3.9. The importKey method</a></li><li><a href="#SubtleCrypto-method-exportKey">14.3.10. The exportKey method</a></li><li><a href="#SubtleCrypto-method-wrapKey">14.3.11. The wrapKey method</a></li><li><a href="#SubtleCrypto-method-unwrapKey">14.3.12. The unwrapKey method</a></li></ul></li><li><a href="#SubtleCrypto-Exceptions">14.4. Exceptions</a></li></ul></li><li><a href="#JsonWebKey-dictionary">15. JsonWebKey dictionary</a></li><li><a href="#WorkerCrypto-interface">16. WorkerCrypto interface</a><ul><li><a href="#WorkerCrypto-description">16.1. Description</a></li></ul></li><li><a href="#big-integer">17. BigInteger</a></li><li><a href="#keypair">18. CryptoKeyPair dictionary</a></li><li><a href="#algorithms">19. Algorithms</a><ul><li><a href="#algorithms-index">19.1. Registered algorithms</a></li><li><a href="#recommended-algorithms">19.2. Recommended algorithms</a></li><li><a href="#defining-an-algorithm">19.3. Defining an algorithm</a><ul><li><a href="#recognized-algorithm-name">19.3.1. Recognized algorithm name</a></li><li><a href="#supported-operations">19.3.2. Supported operations</a></li><li><a href="#algorithm-specific-params">19.3.3. Algorithm-specific parameters</a></li><li><a href="#algorithm-result">19.3.4. Algorithm results</a></li><li><a href="#algorithm-alias">19.3.5. Algorithm aliases</a></li></ul></li><li><a href="#rsaes-pkcs1">19.4. RSAES-PKCS1-v1_5</a><ul><li><a href="#rsaes-pkcs1-description">19.4.1. Description</a></li><li><a href="#rsaes-pkcs1-registration">19.4.2. Registration</a></li><li><a href="#RsaKeyGenParams-dictionary">19.4.3. RsaKeyGenParams dictionary</a></li><li><a href="#RsaKeyAlgorithm-dictionary">19.4.4. RsaKeyAlgorithm dictionary</a></li><li><a href="#rsaes-pkcs1-operations">19.4.5. Operations</a></li></ul></li><li><a href="#rsassa-pkcs1">19.5. RSASSA-PKCS1-v1_5</a><ul><li><a href="#rsassa-pkcs1-description">19.5.1. Description</a></li><li><a href="#rsassa-pkcs1-registration">19.5.2. Registration</a></li><li><a href="#RsaHashedKeyGenParams-dictionary">19.5.3. RsaHashedKeyGenParams dictionary</a></li><li><a href="#RsaHashedKeyAlgorithm-dictionary">19.5.4. RsaHashedKeyAlgorithm dictionary</a></li><li><a href="#RsaHashedImportParams-dictionary">19.5.5. RsaHashedImportParams dictionary</a></li><li><a href="#rsassa-pkcs1-operations">19.5.6. Operations</a></li></ul></li><li><a href="#rsa-pss">19.6. RSA-PSS</a><ul><li><a href="#rsa-pss-description">19.6.1. Description</a></li><li><a href="#rsa-pss-registration">19.6.2. Registration</a></li><li><a href="#RsaPssParams-dictionary">19.6.3. RsaPssParams dictionary</a></li><li><a href="#rsa-pss-operations">19.6.4. Operations</a></li></ul></li><li><a href="#rsa-oaep">19.7. RSA-OAEP</a><ul><li><a href="#rsa-oaep-description">19.7.1. Description</a></li><li><a href="#rsa-oaep-registration">19.7.2. Registration</a></li><li><a href="#rsa-oaep-params">19.7.3. RsaOaepParams dictionary</a></li><li><a href="#rsa-oaep-operations">19.7.4. Operations</a></li></ul></li><li><a href="#ecdsa">19.8. ECDSA</a><ul><li><a href="#ecdsa-description">19.8.1. Description</a></li><li><a href="#ecdsa-registration">19.8.2. Registration</a></li><li><a href="#EcdsaParams-dictionary">19.8.3. EcdsaParams dictionary</a></li><li><a href="#EcKeyGenParams-dictionary">19.8.4. EcKeyGenParams dictionary</a></li><li><a href="#EcKeyAlgorithm-dictionary">19.8.5. EcKeyAlgorithm dictionary</a></li><li><a href="#EcKeyImportParams-dictionary">19.8.6. EcKeyImportParams dictionary</a></li><li><a href="#ecdsa-operations">19.8.7. Operations</a></li></ul></li><li><a href="#ecdh">19.9. ECDH</a><ul><li><a href="#ecdh-description">19.9.1. Description</a></li><li><a href="#ecdh-registration">19.9.2. Registration</a></li><li><a href="#dh-EcdhKeyDeriveParams">19.9.3. EcdhKeyDeriveParams dictionary</a></li><li><a href="#ecdh-operations">19.9.4. Operations</a></li></ul></li><li><a href="#aes-ctr">19.10. AES-CTR</a><ul><li><a href="#aes-ctr-description">19.10.1. Description</a></li><li><a href="#aes-ctr-registration">19.10.2. Registration</a></li><li><a href="#aes-ctr-params">19.10.3. AesCtrParams dictionary</a></li><li><a href="#AesKeyAlgorithm-dictionary">19.10.4. </a></li><li><a href="#aes-keygen-params">19.10.5. AesKeyGenParams dictionary</a></li><li><a href="#aes-derivedkey-params">19.10.6. AesDerivedKeyParams dictionary</a></li><li><a href="#aes-ctr-operations">19.10.7. Operations</a></li></ul></li><li><a href="#aes-cbc">19.11. AES-CBC</a><ul><li><a href="#aes-cbc-description">19.11.1. Description</a></li><li><a href="#aes-cbc-registration">19.11.2. Registration</a></li><li><a href="#aes-cbc-params">19.11.3. AesCbcParams dictionary</a></li><li><a href="#aes-cbc-operations">19.11.4. Operations</a></li></ul></li><li><a href="#aes-cmac">19.12. AES-CMAC</a><ul><li><a href="#aes-cmac-description">19.12.1. Description</a></li><li><a href="#aes-cmac-registration">19.12.2. Registration</a></li><li><a href="#aes-cmac-params">19.12.3. AesCmacParams dictionary</a></li><li><a href="#aes-cmac-operations">19.12.4. Operations</a></li></ul></li><li><a href="#aes-gcm">19.13. AES-GCM</a><ul><li><a href="#aes-gcm-description">19.13.1. Description</a></li><li><a href="#aes-gcm-registration">19.13.2. Registration</a></li><li><a href="#aes-gcm-params">19.13.3. AesGcmParams dictionary</a></li><li><a href="#aes-gcm-operations">19.13.4. Operations</a></li></ul></li><li><a href="#aes-cfb">19.14. AES-CFB</a><ul><li><a href="#aes-cfb-description">19.14.1. Description</a></li><li><a href="#aes-cfb-registration">19.14.2. Registration</a></li><li><a href="#aes-cfb-params">19.14.3. AesCfbParams dictionary</a></li><li><a href="#aes-cfb-operations">19.14.4. Operations</a></li></ul></li><li><a href="#aes-kw">19.15. AES-KW</a><ul><li><a href="#aes-kw-description">19.15.1. Description</a></li><li><a href="#aes-kw-registration">19.15.2. Registration</a></li><li><a href="#aes-kw-operations">19.15.3. Operations</a></li></ul></li><li><a href="#hmac">19.16. HMAC</a><ul><li><a href="#hmac-description">19.16.1. Description</a></li><li><a href="#hmac-registration">19.16.2. Registration</a></li><li><a href="#hmac-importparams">19.16.3. HmacImportParams dictionary</a></li><li><a href="#HmacKeyAlgorithm-dictionary">19.16.4. HmacKeyAlgorithm dictionary</a></li><li><a href="#hmac-keygen-params">19.16.5. HmacKeyGenParams dictionary</a></li><li><a href="#hmac-derivedkey-params">19.16.6. HmacDerivedKeyParams dictionary</a></li><li><a href="#hmac-operations">19.16.7. Operations</a></li></ul></li><li><a href="#dh">19.17. Diffie-Hellman</a><ul><li><a href="#dh-description">19.17.1. Description</a></li><li><a href="#dh-registration">19.17.2. Registration</a></li><li><a href="#dh-DhKeyGenParams">19.17.3. DhKeyGenParams dictionary</a></li><li><a href="#dh-DhKeyAlgorithm">19.17.4. DhKeyAlgorithm dictionary</a></li><li><a href="#dh-DhKeyDeriveParams">19.17.5. DhKeyDeriveParams dictionary</a></li><li><a href="#dh-DhImportKeyParams">19.17.6. DhImportKeyParams dictionary</a></li><li><a href="#dh-operations">19.17.7. Operations</a></li></ul></li><li><a href="#sha">19.18. SHA</a><ul><li><a href="#sha-description">19.18.1. Description</a></li><li><a href="#sha-registration">19.18.2. Registration</a></li><li><a href="#sha-operations">19.18.3. Operations</a></li></ul></li><li><a href="#concatkdf">19.19. Concat KDF</a><ul><li><a href="#concatkdf-description">19.19.1. Description</a></li><li><a href="#concatkdf-registration">19.19.2. Registration</a></li><li><a href="#concat-params">19.19.3. ConcatParams dictionary</a></li><li><a href="#concat-operations">19.19.4. Operations</a></li></ul></li><li><a href="#hkdf-ctr">19.20. HKDF-CTR</a><ul><li><a href="#hkdf-ctr-description">19.20.1. Description</a></li><li><a href="#hkdf-ctr-registration">19.20.2. Registration</a></li><li><a href="#hkdf-ctr-params">19.20.3. HkdfCtrParams dictionary</a></li><li><a href="#hkdf2-ctr-operations">19.20.4. Operations</a></li></ul></li><li><a href="#pbkdf2">19.21. PBKDF2</a><ul><li><a href="#pbkdf2-description">19.21.1. Description</a></li><li><a href="#pbkdf2-registration">19.21.2. Registration</a></li><li><a href="#pbkdf2-params">19.21.3. Pbkdf2Params dictionary</a></li><li><a href="#pbkdf2-operations">19.21.4. Operations</a></li></ul></li></ul></li><li><a href="#algorithm-normalizing-rules">20. Algorithm normalizing rules</a></li><li><a href="#examples-section">21. JavaScript Example Code</a><ul><li><a href="#examples-signing">21.1. Generate a signing key pair, sign some data</a></li><li><a href="#examples-symmetric-encryption">21.2. Symmetric Encryption</a></li></ul></li><li><a href="#iana-section">22. IANA Considerations</a><ul><li><a href="#iana-section-jws-jwa">22.1. JSON Web Signature and Encryption Algorithms Registration</a></li><li><a href="#iana-section-jwk">22.2. JSON Web Key Parameters Registration</a></li></ul></li><li><a href="#acknowledgements-section">23. Acknowledgements</a></li><li><a href="#references">24. References</a><ul><li><a href="#normative-references">24.1. Normative References</a></li><li><a href="#informative-references">24.2. Informative References</a></li></ul></li></ul><ul><li><a href="#jwk-mapping">A. Mapping between JSON Web Key / JSON Web Algorithm</a><ul><li><a href="#jwk-mapping-alg">A.1. Algorithm mappings</a></li><li><a href="#jwk-mapping-usage">A.2. Usage mapping</a></li></ul></li><li><a href="#spki-mapping">B. Mapping between Algorithm and SubjectPublicKeyInfo</a></li><li><a href="#pkcs8-mapping">C. Mapping between Algorithm and PKCS#8 PrivateKeyInfo</a></li></ul></div>
     </div>
 
     <div id="sections">
@@ -865,31 +865,29 @@
         </div>
       </div>
 
-      <div id="key-algorithm-interface" class="section">
-        <h2>11. KeyAlgorithm interface</h2>
+      <div id="key-algorithm-dictionary" class="section">
+        <h2>11. KeyAlgorithm dictionary</h2>
         <p>
-          The KeyAlgorithm interface represents information about the contents of a given
+          The KeyAlgorithm dictionary represents information about the contents of a given
           <a href="#dfn-CryptoKey">CryptoKey</a> object.
         </p>
         <div class="block"><div class="blockTitleDiv"><span class="blockTitle">IDL</span></div><div class="blockContent"><pre class="code"><code class="idl-code">
-[NoInterfaceObject]
-interface <dfn id="#dfn-KeyAlgorithm">KeyAlgorithm</dfn> {
-  readonly attribute DOMString <a href="#dfn-KeyAlgorithm-name">name</a>
+dictionary <dfn id="dfn-KeyAlgorithm">KeyAlgorithm</dfn> {
+  DOMString <a href="#dfn-KeyAlgorithm-name">name</a>
 };
         </code></pre></div></div>
-        <div id="key-algorithm-interface-description" class="section">
+        <div id="key-algorithm-dictionary-description" class="section">
           <h3>11.1. Description</h3>
           <p class="norm">This section is non-normative</p>
           <p>
-            The <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> interface is a supplemental interface
-            used to reflect the static, public properties of a <a href="#dfn-CryptoKey">CryptoKey</a> back to an application. These properties can be used
-            for determination of strength (e.g.: an attribute that indicates the size of the key or
-            the parameters of its creation) as well as for protocol negotiations (e.g.: a particular
-            instance of an inner hash).
+            The <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> dictionary is provided to aid in
+            documenting how fixed, public properties of a <a href="#dfn-CryptoKey">CryptoKey</a>
+            are reflected back to an application. The actual dictionary type is never exposed
+            to applications.
           </p>
         </div>
-        <div id="key-algorithm-interface-members" class="section">
-          <h3>11.2. KeyAlgorithm interface members</h3>
+        <div id="key-algorithm-dictionary-members" class="section">
+          <h3>11.2. KeyAlgorithm dictionary members</h3>
           <dl>
             <dt id="dfn-KeyAlgorithm-name">name</dt>
             <dd>
@@ -913,7 +911,7 @@
 interface <dfn id="dfn-CryptoKey">CryptoKey</dfn> {
   readonly attribute <a href="#dfn-KeyType">KeyType</a> <a href="#dfn-CryptoKey-type">type</a>;
   readonly attribute boolean <a href="#dfn-CryptoKey-extractable">extractable</a>;
-  readonly attribute <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> <a href="#dfn-CryptoKey-algorithm">algorithm</a>;
+  readonly attribute object <a href="#dfn-CryptoKey-algorithm">algorithm</a>;
   readonly attribute object <a href="#dfn-CryptoKey-usages">usages</a>;
 };
         </code></pre></div></div>
@@ -977,7 +975,10 @@
             </dd>
             <dt id="dfn-CryptoKey-algorithm"><code>algorithm</code></dt>
             <dd>
-              The <a href="#dfn-KeyAlgorithm"><code>KeyAlgorithm</code></a> used to generate the key.
+              A JavaScript Object that contains information about the algorithm used to generate
+              the key. The Object will contain properties defined within the various
+              <a href="#dfn-KeyAlgorithm"><code>KeyAlgorithm</code></a> dictionary and derived
+              dictionaries.
             </dd>
             <dt id="dfn-CryptoKey-usages"><code>usages</code></dt>
             <dd>
@@ -2619,15 +2620,15 @@
       </div>
       
       <div id="keypair" class="section">
-        <h2>18. KeyPair</h2>
+        <h2>18. CryptoKeyPair dictionary</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-CryptoKeyPair">CryptoKeyPair</dfn> {
-  readonly attribute <a href="#dfn-CryptoKey">CryptoKey</a> publicKey;
-  readonly attribute <a href="#dfn-CryptoKey">CryptoKey</a> privateKey;
+dictionary <dfn id="dfn-CryptoKeyPair">CryptoKeyPair</dfn> {
+  <a href="#dfn-CryptoKey">CryptoKey</a> <dfn id="dfn-CryptoKey-publicKey">publicKey</dfn>;
+  <a href="#dfn-CryptoKey">CryptoKey</a> <dfn id="dfn-CryptoKey-privateKey">privateKey</dfn>;
 };
         </code></pre></div></div>
         <p>
-          The <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a> interface represents an
+          The <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a> dictionary represents an
           asymmetric key pair that is comprised of both public and private keys.
         </p>
       </div>
@@ -3149,14 +3150,14 @@
 };
             </code></pre></div></div>
           </div>
-          <div id="RsaKeyAlgorithm-interface" class="section">
-            <h4>19.4.4. RsaKeyAlgorithm interface</h4>
+          <div id="RsaKeyAlgorithm-dictionary" class="section">
+            <h4>19.4.4. RsaKeyAlgorithm dictionary</h4>
             <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-RsaKeyAlgorithm">RsaKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
+dictionary <dfn id="dfn-RsaKeyAlgorithm">RsaKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
   <span class="comment">// The length, in bits, of the RSA modulus</span>
-  readonly attribute unsigned long <dfn id="dfn-RsaKeyAlgorithm-modulusLength">modulusLength</dfn>;
+  unsigned long <dfn id="dfn-RsaKeyAlgorithm-modulusLength">modulusLength</dfn>;
   <span class="comment">// The RSA public exponent</span>
-  readonly attribute <a href="#dfn-BigInteger">BigInteger</a> <dfn id="dfn-RsaKeyAlgorithm-publicExponent">publicExponent</dfn>;
+  <a href="#dfn-BigInteger">BigInteger</a> <dfn id="dfn-RsaKeyAlgorithm-publicExponent">publicExponent</dfn>;
 };
             </code></pre></div></div>
           </div>
@@ -3276,7 +3277,7 @@
                   <li>
                     <p>
                       Let <var>algorithm</var> be a new
-                      <a href="#dfn-RsaKeyAlgorithm">RsaKeyAlgorithm</a> object.
+                      <a href="#dfn-RsaKeyAlgorithm">RsaKeyAlgorithm</a> dictionary.
                     </p>
                   </li>
                   <li>
@@ -3318,7 +3319,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>publicKey</var> to be <var>algorithm</var>.
+                      <var>publicKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -3350,7 +3351,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>privateKey</var> to be <var>algorithm</var>.
+                      <var>privateKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -3370,24 +3371,25 @@
                   <li>
                     <p>
                       Let <var>result</var> be a new <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a>
-                      object.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Set the <a href="#dfn-KeyPair-publicKey">publicKey</a> attribute
+                      dictionary.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Set the <a href="#dfn-CryptoKeyPair-publicKey">publicKey</a> attribute
                       of <var>result</var> to be <var>publicKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Set the <a href="#dfn-KeyPair-privateKey">privateKey</a> attribute
+                      Set the <a href="#dfn-CryptoKeyPair-privateKey">privateKey</a> attribute
                       of <var>result</var> to be <var>privateKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Return <var>result</var>.
+                      Return the result of converting <var>result</var> to an ECMAScript Object, as
+                      defined by [<a href="#WebIDL">WEBIDL</a>].
                     </p>
                   </li>
                 </ol>
@@ -3634,7 +3636,7 @@
                   <li>
                     <p>
                       Let <var>algorithm</var> be a new
-                      <a href="#dfn-RsaKeyAlgorithm">RsaKeyAlgorithm</a>.
+                      <a href="#dfn-RsaKeyAlgorithm">RsaKeyAlgorithm</a> dictionary.
                     </p>
                   </li>
                   <li>
@@ -3660,7 +3662,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>key</var> to <var>algorithm</var>
+                      <var>key</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -3864,7 +3866,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ul>
@@ -3950,13 +3952,12 @@
 };
             </code></pre></div></div>
           </div>
-          <div id="RsaHashedKeyAlgorithm-interface" class="section">
-            <h4>19.5.4. RsaHashedKeyAlgorithm interface</h4>
+          <div id="RsaHashedKeyAlgorithm-dictionary" class="section">
+            <h4>19.5.4. RsaHashedKeyAlgorithm dictionary</h4>
             <div class="block"><div class="blockTitleDiv"><span class="blockTitle">IDL</span></div><div class="blockContent"><pre class="code"><code class="idl-code">
-[NoInterfaceObject]
-interface <dfn id="dfn-RsaHashedKeyAlgorithm">RsaHashedKeyAlgorithm</dfn> : <a href="#dfn-RsaKeyAlgorithm">RsaKeyAlgorithm</a> {
+dictionary <dfn id="dfn-RsaHashedKeyAlgorithm">RsaHashedKeyAlgorithm</dfn> : <a href="#dfn-RsaKeyAlgorithm">RsaKeyAlgorithm</a> {
   <span class="comment">// The hash algorithm that is used with this key</span>
-  readonly attribute <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> <dfn id="dfn-RsaHashedKeyAlgorithm-hash">hash</dfn>;
+  <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> <dfn id="dfn-RsaHashedKeyAlgorithm-hash">hash</dfn>;
 };
             </code></pre></div></div>
           </div>
@@ -4096,7 +4097,7 @@
                     <p>
                       Let <var>algorithm</var> be a new
                       <a href="#dfn-RsaHashedKeyAlgorithm">RsaHashedKeyAlgorithm</a>
-                      object.
+                      dictionary.
                     </p>
                   </li>
                   <li>
@@ -4146,7 +4147,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>publicKey</var> to be <var>algorithm</var>.
+                      <var>publicKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -4178,7 +4179,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>privateKey</var> to be <var>algorithm</var>.
+                      <var>privateKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -4197,24 +4198,25 @@
                   <li>
                     <p>
                       Let <var>result</var> be a new <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a>
-                      object.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Set the <a href="#dfn-KeyPair-publicKey">publicKey</a> attribute
+                      dictionary.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Set the <a href="#dfn-CryptoKeyPair-publicKey">publicKey</a> attribute
                       of <var>result</var> to be <var>publicKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Set the <a href="#dfn-KeyPair-privateKey">privateKey</a> attribute
+                      Set the <a href="#dfn-CryptoKeyPair-privateKey">privateKey</a> attribute
                       of <var>result</var> to be <var>privateKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Return <var>result</var>.
+                      Return the result of converting <var>result</var> to an ECMAScript Object, as
+                      defined by [<a href="#WebIDL">WEBIDL</a>].
                     </p>
                   </li>
                 </ol>
@@ -4680,7 +4682,7 @@
                   <li>
                     <p>
                       Let <var>algorithm</var> be a new
-                      <a href="#dfn-RsaHashedKeyAlgorithm">RsaHashedKeyAlgorithm</a>.
+                      <a href="#dfn-RsaHashedKeyAlgorithm">RsaHashedKeyAlgorithm</a> dictionary.
                     </p>
                   </li>
                   <li>
@@ -4713,7 +4715,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>key</var> to <var>algorithm</var>
+                      <var>key</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -4961,7 +4963,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ul>
@@ -5207,7 +5209,7 @@
                     <p>
                       Let <var>algorithm</var> be a new
                       <a href="#dfn-RsaHashedKeyAlgorithm">RsaHashedKeyAlgorithm</a>
-                      object.
+                      dictionary.
                     </p>
                   </li>
                   <li>
@@ -5257,7 +5259,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>publicKey</var> to be <var>algorithm</var>.
+                      <var>publicKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -5288,7 +5290,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>privateKey</var> to be <var>algorithm</var>.
+                      <var>privateKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -5308,24 +5310,25 @@
                   <li>
                     <p>
                       Let <var>result</var> be a new <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a>
-                      object.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Set the <a href="#dfn-KeyPair-publicKey">publicKey</a> attribute
-                      of <var>result</var> to be <var>publicKey</var>.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Set the <a href="#dfn-KeyPair-privateKey">privateKey</a> attribute
-                      of <var>result</var> to be <var>privateKey</var>.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Return <var>result</var>.
+                      dictionary.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Set the <a href="#dfn-CryptoKeyPair-publicKey">publicKey</a> attribute
+                      of <var>result</var> to <var>publicKey</var>.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Set the <a href="#dfn-CryptoKeyPair-privateKey">privateKey</a> attribute
+                      of <var>result</var> to <var>privateKey</var>.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Return the result of converting <var>result</var> to an ECMAScript Object,
+                      as defined by [<a href="#WebIDL">WEBIDL</a>].
                     </p>
                   </li>
                 </ol>
@@ -5901,7 +5904,7 @@
                   <li>
                     <p>
                       Let <var>algorithm</var> be a new
-                      <a href="#dfn-RsaHashedKeyAlgorithm">RsaHashedKeyAlgorithm</a>.
+                      <a href="#dfn-RsaHashedKeyAlgorithm">RsaHashedKeyAlgorithm</a> dictionary.
                     </p>
                   </li>
                   <li>
@@ -6365,7 +6368,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ul>
@@ -6663,7 +6666,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>publicKey</var> to be <var>algorithm</var>.
+                      <var>publicKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -6695,7 +6698,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>privateKey</var> to be <var>algorithm</var>.
+                      <var>privateKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -6715,24 +6718,25 @@
                   <li>
                     <p>
                       Let <var>result</var> be a new <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a>
-                      object.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Set the <a href="#dfn-KeyPair-publicKey">publicKey</a> attribute
+                      dictionary.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Set the <a href="#dfn-CryptoKeyPair-publicKey">publicKey</a> attribute
                       of <var>result</var> to be <var>publicKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Set the <a href="#dfn-KeyPair-privateKey">privateKey</a> attribute
+                      Set the <a href="#dfn-CryptoKeyPair-privateKey">privateKey</a> attribute
                       of <var>result</var> to be <var>privateKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Return <var>result</var>.
+                      Return the result of converting <var>result</var> to an ECMAScript Object, as
+                      defined by [<a href="#WebIDL">WEBIDL</a>].
                     </p>
                   </li>
                 </ol>
@@ -7743,7 +7747,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ul>
@@ -7855,13 +7859,12 @@
               <dd>NIST recommended curve P-521, also known as <code>secp521r1</code>.</dd>
             </dl>
           </div>
-          <div id="EcKeyAlgorithm-interface" class="section">
-            <h4>19.8.5. EcKeyAlgorithm interface</h4>
+          <div id="EcKeyAlgorithm-dictionary" class="section">
+            <h4>19.8.5. EcKeyAlgorithm dictionary</h4>
             <div class="block"><div class="blockTitleDiv"><span class="blockTitle">IDL</span></div><div class="blockContent"><pre class="code"><code class="idl-code">
-[NoInterfaceObject]
-interface <dfn id="dfn-EcKeyAlgorithm">EcKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
+dictionary <dfn id="dfn-EcKeyAlgorithm">EcKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
   <span class="comment">// The named curve that the key uses</span>
-  readonly attribute <a href="#dfn-NamedCurve">NamedCurve</a> <dfn id="dfn-EcKeyAlgorithm-namedCurve">namedCurve</dfn>;
+  <a href="#dfn-NamedCurve">NamedCurve</a> <dfn id="dfn-EcKeyAlgorithm-namedCurve">namedCurve</dfn>;
 };
             </code></pre></div></div>
           </div>
@@ -8132,7 +8135,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>publicKey</var> to be <var>algorithm</var>.
+                      <var>publicKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -8162,7 +8165,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>privateKey</var> to be <var>algorithm</var>.
+                      <var>privateKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -8182,24 +8185,25 @@
                   <li>
                     <p>
                       Let <var>result</var> be a new <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a>
-                      object.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Set the <a href="#dfn-KeyPair-publicKey">publicKey</a> attribute
+                      dictionary.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Set the <a href="#dfn-CryptoKeyPair-publicKey">publicKey</a> attribute
                       of <var>result</var> to be <var>publicKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Set the <a href="#dfn-KeyPair-privateKey">privateKey</a> attribute
+                      Set the <a href="#dfn-CryptoKeyPair-privateKey">privateKey</a> attribute
                       of <var>result</var> to be <var>privateKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Return <var>result</var>.
+                      Return the result of converting <var>result</var> to an ECMAScript Object, as
+                      defined by [<a href="#WebIDL">WEBIDL</a>].
                     </p>
                   </li>
                 </ol>
@@ -9025,7 +9029,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -9188,7 +9192,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>publicKey</var> to be <var>algorithm</var>.
+                      <var>publicKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -9218,7 +9222,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>privateKey</var> to be <var>algorithm</var>.
+                      <var>privateKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -9238,24 +9242,25 @@
                   <li>
                     <p>
                       Let <var>result</var> be a new <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a>
-                      object.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Set the <a href="#dfn-KeyPair-publicKey">publicKey</a> attribute
+                      dictionary.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Set the <a href="#dfn-CryptoKeyPair-publicKey">publicKey</a> attribute
                       of <var>result</var> to be <var>publicKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Set the <a href="#dfn-KeyPair-privateKey">privateKey</a> attribute
+                      Set the <a href="#dfn-CryptoKeyPair-privateKey">privateKey</a> attribute
                       of <var>result</var> to be <var>privateKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Return <var>result</var>.
+                      Return the result of converting <var>result</var> to an ECMAScript Object, as
+                      defined by [<a href="#WebIDL">WEBIDL</a>].
                     </p>
                   </li>
                 </ol>
@@ -10224,7 +10229,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -10352,12 +10357,11 @@
 };
             </code></pre></div></div>
           </div>
-          <div id="AesKeyAlgorithm-interface" class="section">
+          <div id="AesKeyAlgorithm-dictionary" class="section">
             <div class="block"><div class="blockTitleDiv"><span class="blockTitle">IDL</span></div><div class="blockContent"><pre class="code"><code class="idl-code">
-[NoInterfaceObject]
-interface <dfn id="dfn-AesKeyAlgorithm">AesKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
+dictionary <dfn id="dfn-AesKeyAlgorithm">AesKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
   <span class="comment">// The length, in bits, of the key.</span>
-  readonly attribute unsigned short <dfn id="dfn-AesKeyAlgorithm-length">length</dfn>;
+  unsigned short <dfn id="dfn-AesKeyAlgorithm-length">length</dfn>;
 };
             </code></pre></div></div>
           </div>
@@ -10842,7 +10846,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -11434,7 +11438,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -11978,7 +11982,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -12654,7 +12658,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -13220,7 +13224,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -13727,7 +13731,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -13849,15 +13853,14 @@
 };
             </code></pre></div></div>
           </div>
-          <div id="hmac-keyalgorithm" class="section">
-            <h4>19.16.4. HmacKeyAlgorithm interface</h4>
+          <div id="HmacKeyAlgorithm-dictionary" class="section">
+            <h4>19.16.4. HmacKeyAlgorithm dictionary</h4>
             <div class="block"><div class="blockTitleDiv"><span class="blockTitle">IDL</span></div><div class="blockContent"><pre class="code"><code class="idl-code">
-[NoInterfaceObject]
-interface <dfn id="dfn-HmacKeyAlgorithm">HmacKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
+dictionary <dfn id="dfn-HmacKeyAlgorithm">HmacKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
   <span class="comment">// The inner hash function to use.</span>
-  readonly attribute KeyAlgorithm <dfn id="dfn-HmacKeyAlgorithm-hash">hash</dfn>;
+  KeyAlgorithm <dfn id="dfn-HmacKeyAlgorithm-hash">hash</dfn>;
   <span class="comment">// The length (in bits) of the key.</span>
-  readonly attribute unsigned long <dfn id="dfn-HmacKeyAlgorithm-length">length</dfn>;
+  unsigned long <dfn id="dfn-HmacKeyAlgorithm-length">length</dfn>;
 };
             </code></pre></div></div>
           </div>
@@ -14494,7 +14497,7 @@
                           <li>
                             <p>
                               Let <var>result</var> be the result of converting <var>jwk</var>
-                              to an ECMAScript Object.
+                              to an ECMAScript Object, as defined by [<a href="#WebIDL">WEBIDL</a>].
                             </p>
                           </li>
                         </ol>
@@ -14623,14 +14626,13 @@
             </code></pre></div></div>
           </div>
           <div id="dh-DhKeyAlgorithm" class="section">
-            <h4>19.17.4. DhKeyAlgorithm interface</h4>
+            <h4>19.17.4. DhKeyAlgorithm dictionary</h4>
             <div class="block"><div class="blockTitleDiv"><span class="blockTitle">IDL</span></div><div class="blockContent"><pre class="code"><code class="idl-code">
-[NoInterfaceObject]
-interface <dfn id="dfn-DhKeyAlgorithm">DhKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
+dictionary <dfn id="dfn-DhKeyAlgorithm">DhKeyAlgorithm</dfn> : <a href="#dfn-KeyAlgorithm">KeyAlgorithm</a> {
   <span class="comment">// The prime p.</span>
-  readonly attribute BigInteger <dfn id="dfn-DhKeyAlgorithm-prime">prime</dfn>;
+  BigInteger <dfn id="dfn-DhKeyAlgorithm-prime">prime</dfn>;
   <span class="comment">// The base g.</span>
-  readonly attribute BigInteger <dfn id="dfn-DhKeyAlgorithm-generator">generator</dfn>;
+  BigInteger <dfn id="dfn-DhKeyAlgorithm-generator">generator</dfn>;
 };
             </code></pre></div></div>
           </div>
@@ -14744,7 +14746,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>publicKey</var> to be <var>algorithm</var>.
+                      <var>publicKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -14774,7 +14776,7 @@
                   <li>
                     <p>
                       Set the <a href="#dfn-CryptoKey-algorithm">algorithm</a> attribute of
-                      <var>privateKey</var> to be <var>algorithm</var>.
+                      <var>privateKey</var> to <var>algorithm</var>.
                     </p>
                   </li>
                   <li>
@@ -14792,24 +14794,25 @@
                   <li>
                     <p>
                       Let <var>result</var> be a new <a href="#dfn-CryptoKeyPair">CryptoKeyPair</a>
-                      object.
-                    </p>
-                  </li>
-                  <li>
-                    <p>
-                      Set the <a href="#dfn-KeyPair-publicKey">publicKey</a> attribute
+                      dictionary.
+                    </p>
+                  </li>
+                  <li>
+                    <p>
+                      Set the <a href="#dfn-CryptoKeyPair-publicKey">publicKey</a> attribute
                       of <var>result</var> to be <var>publicKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Set the <a href="#dfn-KeyPair-privateKey">privateKey</a> attribute
+                      Set the <a href="#dfn-CryptoKeyPair-privateKey">privateKey</a> attribute
                       of <var>result</var> to be <var>privateKey</var>.
                     </p>
                   </li>
                   <li>
                     <p>
-                      Return <var>result</var>.
+                      Return the result of converting <var>result</var> to an ECMAScript Object, as
+                      defined by [<a href="#WebIDL">WEBIDL</a>].
                     </p>
                   </li>
                 </ol>