sendDIDAuthInitMessageToReceiver function

Future<String> sendDIDAuthInitMessageToReceiver(
  1. DIDAuthInitMessage message,
  2. String mnemonic,
  3. String receiverDID,
  4. InfraDIDCommAgent agent,
)

Implementation

Future<String> sendDIDAuthInitMessageToReceiver(
  DIDAuthInitMessage message,
  String mnemonic,
  String receiverDID,
  InfraDIDCommAgent agent,
) async {
  Map<String, dynamic> jsonMessage = message.toJson();
  String stringMessage = json.encode(jsonMessage);

  List<int> extendedPrivatekey = await extendedPrivateKeyFromUri(mnemonic);

  String receiverAddress = receiverDID.split(":").last;
  List<int> receiverPublicKey = publicKeyFromAddress(receiverAddress);
  agent.peerInfo = {"did": message.from, "socketId": message.peerSocketId};
  String jws = signJWS(stringMessage, hex.encode(extendedPrivatekey));

  final ephemeralKeyPair = await generateX25519EphemeralKeyPair();
  List<int> ephemeralPrivateKey = ephemeralKeyPair.$1;
  List<int> ephemeralPublicKey = ephemeralKeyPair.$2;

  Map<String, dynamic> x25519JwkPublicKey =
      x25519JwkFromEd25519PublicKey(receiverPublicKey);

  List<int> sharedKey = await makeSharedKey(
    ephemeralPrivateKey,
    publicKeyfromX25519Jwk(x25519JwkPublicKey),
  );

  String jwe = encryptJWE(
    jws,
    jwkFromSharedKey(sharedKey),
    epk: x25519JwkFromX25519PublicKey(ephemeralPublicKey),
  );

  return jwe;
}