package org.bouncycastle.pqc.crypto.xmss;

/**
 * WOTS+ private key.
 *
 */
public final class WOTSPlusPrivateKeyParameters {

	private final byte[][] privateKey;

	protected WOTSPlusPrivateKeyParameters(WOTSPlusParameters params, byte[][] privateKey) {
		super();
		if (params == null) {
			throw new NullPointerException("params == null");
		}
		if (privateKey == null) {
			throw new NullPointerException("privateKey == null");
		}
		if (XMSSUtil.hasNullPointer(privateKey)) {
			throw new NullPointerException("privateKey byte array == null");
		}
		if (privateKey.length != params.getLen()) {
			throw new IllegalArgumentException("wrong privateKey format");
		}
		for (int i = 0; i < privateKey.length; i++) {
			if (privateKey[i].length != params.getDigestSize()) {
				throw new IllegalArgumentException("wrong privateKey format");
			}
		}
		this.privateKey = XMSSUtil.cloneArray(privateKey);
	}

	protected byte[][] toByteArray() {
		return XMSSUtil.cloneArray(privateKey);
	}
}
