sign method

  1. @override
Future<Signature> sign(
  1. List<int> message, {
  2. required KeyPair keyPair,
})

Signs bytes.

Example

In this example, we use Ed25519:

import 'package:cryptography/cryptography.dart';

Future<void> main() async {
  final signedMessage = [1,2,3];

  final ed25519 = Ed25519();
  final keyPair = await ed25519.newKeyPair();
  final signature = await ed25519.sign(
    signedMessage,
    keyPair: keyPair,
  );

  // ...

  final isRealSignature = await ed25519.verify(
    signedMessage,
    signature: signature,
  );

  print('Signature verification result: $isRealSignature');
}

Implementation

@override
Future<Signature> sign(List<int> message, {required KeyPair keyPair}) async {
  if (isSupportedPlatform) {
    final rsaKeyPair = await keyPair.extract();
    if (rsaKeyPair is! RsaKeyPairData) {
      throw ArgumentError.value(
        keyPair,
        'keyPair',
      );
    }
    final result = await invokeMethod(
      'RsaSsaPkcs1v15.sign',
      {
        'data': Uint8List.fromList(message),
        'hash': hashAlgorithmName,
        'd': Uint8List.fromList(rsaKeyPair.d),
        'e': Uint8List.fromList(rsaKeyPair.e),
        'n': Uint8List.fromList(rsaKeyPair.n),
        'p': Uint8List.fromList(rsaKeyPair.p),
        'q': Uint8List.fromList(rsaKeyPair.q),
      },
    );
    final bytes = base64Decode(result['bytes'] as String);
    return Signature(bytes, publicKey: await rsaKeyPair.extractPublicKey());
  }
  return await fallback.sign(message, keyPair: keyPair);
}