57 lines
1.8 KiB
Dart
57 lines
1.8 KiB
Dart
// Author: Hugo Pointcheval
|
|
// Email: git@pcl.ovh
|
|
// -----
|
|
// File: secret_key.dart
|
|
// Created Date: 28/12/2021 13:36:54
|
|
// Last Modified: 26/05/2022 19:26:35
|
|
// -----
|
|
// Copyright (c) 2021
|
|
|
|
import 'dart:typed_data';
|
|
|
|
import 'package:native_crypto/src/interfaces/base_key.dart';
|
|
import 'package:native_crypto/src/interfaces/cipher.dart';
|
|
import 'package:native_crypto/src/platform.dart';
|
|
import 'package:native_crypto/src/utils/extensions.dart';
|
|
import 'package:native_crypto_platform_interface/native_crypto_platform_interface.dart';
|
|
|
|
/// Represents a secret key in NativeCrypto.
|
|
///
|
|
/// [SecretKey] is a [BaseKey] that can be used to store secret keys.
|
|
/// A [SecretKey] is a key that can be used to encrypt or decrypt data with
|
|
/// a symmetric [Cipher].
|
|
class SecretKey extends BaseKey {
|
|
const SecretKey(super.bytes);
|
|
SecretKey.fromBase16(super.encoded) : super.fromBase16();
|
|
SecretKey.fromBase64(super.encoded) : super.fromBase64();
|
|
SecretKey.fromUtf8(super.input) : super.fromUtf8();
|
|
|
|
static Future<SecretKey> fromSecureRandom(int bitsCount) async {
|
|
Uint8List? key;
|
|
try {
|
|
key = await platform.generateSecretKey(bitsCount);
|
|
} catch (e, s) {
|
|
throw NativeCryptoException(
|
|
message: '$e',
|
|
code: NativeCryptoExceptionCode.platform_throws.code,
|
|
stackTrace: s,
|
|
);
|
|
}
|
|
if (key.isNull) {
|
|
throw NativeCryptoException(
|
|
message: 'Failed to generate a secret key! Platform returned null.',
|
|
code: NativeCryptoExceptionCode.platform_returned_null.code,
|
|
);
|
|
}
|
|
|
|
if (key!.isEmpty) {
|
|
throw NativeCryptoException(
|
|
message: 'Failed to generate a secret key! '
|
|
'Platform returned no data.',
|
|
code: NativeCryptoExceptionCode.platform_returned_empty_data.code,
|
|
);
|
|
}
|
|
return SecretKey(key);
|
|
}
|
|
}
|