agree static method
The 32-byte shared secret between privateKey and peerPublicKey.
Throws OpenSSLException for an all-zero result (small-order peer point), which OpenSSL rejects.
Implementation
static Uint8List agree(List<int> privateKey, List<int> peerPublicKey) =>
using((arena) {
final mine = rawPrivateKey(arena, algorithm, privateKey);
final peer = rawPublicKey(arena, algorithm, peerPublicKey);
final ctx = checkNotNull(
ssl.EVP_PKEY_CTX_new(mine, nullptr),
'EVP_PKEY_CTX_new',
);
arena.using(ctx, ssl.EVP_PKEY_CTX_free);
checkOne(ssl.EVP_PKEY_derive_init(ctx), 'EVP_PKEY_derive_init');
checkOne(
ssl.EVP_PKEY_derive_set_peer(ctx, peer),
'EVP_PKEY_derive_set_peer',
);
final len = arena<Size>()..value = keyLength;
final out = secretBuffer(arena, keyLength);
checkOne(ssl.EVP_PKEY_derive(ctx, out, len), 'EVP_PKEY_derive');
return fromNative(out, len.value);
});