From d37b2daba749c23d10af5eea57f098329a34beff Mon Sep 17 00:00:00 2001 From: KSAGlory <178437733+KSAGlory@users.noreply.github.com> Date: Tue, 8 Sep 2026 23:06:22 +0200 Subject: [PATCH] docs: move AES-CTR importRawKey example to a separate file --- example/webcrypto/aes_ctr/import_raw_key.dart | 45 +++++++++++++++++++ lib/src/webcrypto/webcrypto.aesctr.dart | 27 +---------- 2 files changed, 46 insertions(+), 26 deletions(-) create mode 100644 example/webcrypto/aes_ctr/import_raw_key.dart diff --git a/example/webcrypto/aes_ctr/import_raw_key.dart b/example/webcrypto/aes_ctr/import_raw_key.dart new file mode 100644 index 00000000..27425eef --- /dev/null +++ b/example/webcrypto/aes_ctr/import_raw_key.dart @@ -0,0 +1,45 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// ignore_for_file: avoid_print + +// #region example +import 'dart:convert' show utf8; +import 'dart:typed_data' show Uint8List; + +import 'package:webcrypto/webcrypto.dart'; + +Future main() async { + final rawKey = Uint8List(16); + fillRandomBytes(rawKey); + + // Import key from raw bytes + final k = await AesCtrSecretKey.importRawKey(rawKey); + + // Use a unique counter for each message. + final ctr = Uint8List(16); // always 16 bytes + fillRandomBytes(ctr); + + // Length of the counter, the N'th right most bits of ctr are incremented + // for each block, the left most 128 - N bits are used as static nonce. + final N = 64; + + // Encrypt a message + final c = await k.encryptBytes(utf8.encode('hello world'), ctr, N); + + // Decrypt message (requires the same counter ctr and length N) + print(utf8.decode(await k.decryptBytes(c, ctr, N))); // hello world +} + +// #endregion diff --git a/lib/src/webcrypto/webcrypto.aesctr.dart b/lib/src/webcrypto/webcrypto.aesctr.dart index 0c152d62..ccb21405 100644 --- a/lib/src/webcrypto/webcrypto.aesctr.dart +++ b/lib/src/webcrypto/webcrypto.aesctr.dart @@ -42,33 +42,8 @@ final class AesCtrSecretKey { /// {@macro AES:no-support-for-AES-192} /// /// **Example** - /// ```dart - /// import 'dart:convert' show utf8; - /// import 'dart:typed_data' show Uint8List; - /// import 'package:webcrypto/webcrypto.dart'; - /// - /// Future main() async { - /// final rawKey = Uint8List(16); - /// fillRandomBytes(rawKey); - /// - /// // Import key from raw bytes - /// final k = await AesCtrSecretKey.importRawKey(rawKey); - /// - /// // Use a unique counter for each message. - /// final ctr = Uint8List(16); // always 16 bytes - /// fillRandomBytes(ctr); /// - /// // Length of the counter, the N'th right most bits of ctr are incremented - /// // for each block, the left most 128 - N bits are used as static nonce. - /// final N = 64; - /// - /// // Encrypt a message - /// final c = await k.encryptBytes(utf8.encode('hello world'), ctr, N); - /// - /// // Decrypt message (requires the same counter ctr and length N) - /// print(utf8.decode(await k.decryptBytes(c, ctr, N))); // hello world - /// } - /// ``` + /// {@example /example/webcrypto/aes_ctr/import_raw_key.dart#example} static Future importRawKey(List keyData) async { final impl = await webCryptImpl.aesCtrSecretKey.importRawKey(keyData); return AesCtrSecretKey._(impl);