docs: public Idemix.Signature toProto() {
          Idemix.Signature.Builder builder = Idemix.Signature.newBuilder()
                  .setAPrime(IdemixUtils.transformToProto(aPrime))
                  .setABar(IdemixUtils.transformToProto(aBar))
                  .setBPrime(IdemixUtils.transformToProto(bPrime))
                  .setNym(IdemixUtils.transformToProto(nym))
                  .setProofC(ByteString.copyFrom(IdemixUtils.bigToBytes(proofC)))
                  .setProofSSk(ByteString.copyFrom(IdemixUtils.bigToBytes(proofSSk)))
                  .setProofSE(ByteString.copyFrom(IdemixUtils.bigToBytes(proofSE)))
                  .setProofSR2(ByteString.copyFrom(IdemixUtils.bigToBytes(proofSR2)))
                  .setProofSR3(ByteString.copyFrom(IdemixUtils.bigToBytes(proofSR3)))
                  .setProofSRNym(ByteString.copyFrom(IdemixUtils.bigToBytes(proofSRNym)))
                  .setProofSSPrime(ByteString.copyFrom(IdemixUtils.bigToBytes(proofSSPrime)))
                  .setNonce(ByteString.copyFrom(IdemixUtils.bigToBytes(nonce)))
                  .setRevocationEpochPk(revocationPk)
                  .setRevocationPkSig(ByteString.copyFrom(revocationPKSig))
                  .setEpoch(epoch)
                  .setNonRevocationProof(nonRevocationProof);
  
          for (BIG attr : proofSAttrs) {
              builder.addProofSAttrs(ByteString.copyFrom(IdemixUtils.bigToBytes(attr)));
          }
  
          return builder.build();
      }