code: func (x *XC) Encrypt(ctx context.Context, plaintext []byte, recipients []string) ([]byte, error) {
  	privKeyIDs := x.secring.KeyIDs()
  	if len(privKeyIDs) < 1 {
  		return nil, fmt.Errorf("no signing keys available on our keyring")
  	}
  	privKey := x.secring.Get(privKeyIDs[0])
  
  	var compressed bool
  	plaintext, compressed = compress(plaintext)
  
  	// encrypt body (also generates a random session key)
  	sk, chunks, err := encryptBody(plaintext)
  	if err != nil {
  		return nil, errors.Wrapf(err, "failed to encrypt body: %s", err)
  	}
  
  	// encrypt the session key per recipient
  	header, err := x.encryptHeader(ctx, privKey, sk, recipients)
  	if err != nil {
  		return nil, errors.Wrapf(err, "failed to encrypt header: %s", err)
  	}
  
  	msg := &xcpb.Message{
  		Version:    OnDiskVersion,
  		Header:     header,
  		Chunks:     chunks,
  		Compressed: compressed,
  	}
  
  	return proto.Marshal(msg)
  }
docs: // Encrypt encrypts the given plaintext for all the given recipients and returns the
  // ciphertext