@Override
    public void print(MetadataNodePrinter printer) {
        StringBuilder bld = new StringBuilder();
        bld.append("ScramCredentialData");
        bld.append("(salt=");
        if (printer.redactionCriteria().shouldRedactScram()) {
            bld.append("[redacted]");
        } else {
            arrayToHex(data.salt(), bld);
        }
        bld.append(", storedKey=");
        if (printer.redactionCriteria().shouldRedactScram()) {
            bld.append("[redacted]");
        } else {
            arrayToHex(data.storedKey(), bld);
        }
        bld.append(", serverKey=");
        if (printer.redactionCriteria().shouldRedactScram()) {
            bld.append("[redacted]");
        } else {
            arrayToHex(data.serverKey(), bld);
        }
        bld.append(", iterations=");
        if (printer.redactionCriteria().shouldRedactScram()) {
            bld.append("[redacted]");
        } else {
            bld.append(data.iterations());
        }
        bld.append(")");
        printer.output(bld.toString());
    }
@Test
    public void testPrintUnredacted() {
        NodeStringifier stringifier = new NodeStringifier(Disabled.INSTANCE);
        new ScramCredentialDataNode(DATA).print(stringifier);
        assertEquals("ScramCredentialData(" +
            "salt=4f1d6ea31e58c5ad3aaeb3266f55cce6, " +
            "storedKey=3cfa1c3421b512d1d1dfc3355138b4ad, " +
            "serverKey=2d9781209073e8d03aee3cbc63a1d4ca, " +
            "iterations=16)", stringifier.toString());
    }