FakeHsmNonExtractableSecretKeySpec.java

package org.jose4j.keys;

import javax.crypto.spec.SecretKeySpec;

/**
*
*/
public class FakeHsmNonExtractableSecretKeySpec extends SecretKeySpec
{
    public FakeHsmNonExtractableSecretKeySpec(byte[] data, String algorithm)
    {
        super(data, algorithm);
    }

    @Override
    public byte[] getEncoded()
    {
        return nullIt() ?  null : super.getEncoded();
    }

    @Override
    public String getFormat()
    {
        return nullIt() ? null : super.getFormat();
    }

    private boolean nullIt()
    {
        // to simulate a PKCS#11 situation where the key is non extractable and unavailable to the application layer
        StackTraceElement[] stackTrace = new Exception().getStackTrace();
        StackTraceElement stackTraceElement = stackTrace[2];
        return stackTraceElement.getClassName().startsWith("org.jose4j");
    }
}