code: func (x *XC) encryptForRecipient(ctx context.Context, sender *keyring.PrivateKey, sk []byte, recipient string) ([]byte, error) {
  	recp := x.pubring.Get(recipient)
  	if recp == nil {
  		return nil, fmt.Errorf("recipient public key not available for %s", recipient)
  	}
  
  	var recipientPublicKey [32]byte
  	copy(recipientPublicKey[:], recp.PublicKey[:])
  
  	// unlock sender key
  	if err := x.decryptPrivateKey(ctx, sender); err != nil {
  		return nil, err
  	}
  
  	// we need to copy the byte silces to byte arrays for box
  	var senderPrivateKey [32]byte
  	pk := sender.PrivateKey()
  	copy(senderPrivateKey[:], pk[:])
  
  	var nonce [24]byte
  	if _, err := io.ReadFull(crypto_rand.Reader, nonce[:]); err != nil {
  		return nil, err
  	}
  
  	return box.Seal(nonce[:], sk, &nonce, &recipientPublicKey, &senderPrivateKey), nil
  }
docs: // encryptForRecipients encrypts the given session key for the given recipient