anchor.diff:      throw UnimplementedError('TODO: implement AES-CTR');
     }
   
  +  static Future<AesCtrSecretKey> importJsonWebKey({
  +    @required List<int> jwk,
  +    @required bool extractable,
  +    @required List<KeyUsage> usages,
  +  }) {
  +    ArgumentError.checkNotNull(jwk, 'jwk');
  +    ArgumentError.checkNotNull(extractable, 'extractable');
  +    checkAllowedUsages('AES-CTR', usages, [
  +      KeyUsage.encrypt,
  +      KeyUsage.decrypt,
  +      // KeyUsage.wrapKey,
  +      // KeyUsage.unwrapKey,
  +    ]);
  +    usages = normalizeUsages(usages);
  +
  +    throw UnimplementedError('TODO: implement AES-CTR');
  +  }
  +
     Stream<List<int>> encrypt({
       @required Stream<List<int>> data,
       @required TypedData counter,
  
positive.code:   // TODO: add unwrapKey support
  
    Future<List<int>> exportRawKey();
  }
  
  abstract class AesKwSecretKey implements CryptoKey {
    AesKwSecretKey._(); // keep the constructor private.
  
  
negative.code:     throw UnimplementedError('TODO: implement AES-CBC');
    }
  
    static Future<AesCbcSecretKey> importJsonWebKey({
      @required List<int> jwk,
      @required bool extractable,
      @required List<KeyUsage> usages,
    }) {
      ArgumentError.checkNotNull(jwk, 'jwk');
      ArgumentError.checkNotNull(extractable, 'extractable');
      checkAllowedUsages('AES-CBC', usages, [
        KeyUsage.encrypt,
        KeyUsage.decrypt,
        // KeyUsage.wrapKey,
        // KeyUsage.unwrapKey,
      ]);
      usages = normalizeUsages(usages);
  
      throw UnimplementedError('TODO: implement AES-CBC');
    }
  
    Stream<List<int>> encrypt({
      @required Stream<List<int>> data,
      @required TypedData iv,
  