sign method
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);
}