java.security.spec.PSSParameterSpec#getDigestAlgorithm()源码实例Demo

下面列出了java.security.spec.PSSParameterSpec#getDigestAlgorithm() 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: openjdk-jdk8u   文件: RSAPSSSignature.java
/**
 * Utility method for checking the key PSS parameters against signature
 * PSS parameters.
 * Returns false if any of the digest/MGF algorithms and trailerField
 * values does not match or if the salt length in key parameters is
 * larger than the value in signature parameters.
 */
private static boolean isCompatible(AlgorithmParameterSpec keyParams,
        PSSParameterSpec sigParams) {
    if (keyParams == null) {
        // key with null PSS parameters means no restriction
        return true;
    }
    if (!(keyParams instanceof PSSParameterSpec)) {
        return false;
    }
    // nothing to compare yet, defer the check to when sigParams is set
    if (sigParams == null) {
        return true;
    }
    PSSParameterSpec pssKeyParams = (PSSParameterSpec) keyParams;
    // first check the salt length requirement
    if (pssKeyParams.getSaltLength() > sigParams.getSaltLength()) {
        return false;
    }

    // compare equality of the rest of fields based on DER encoding
    PSSParameterSpec keyParams2 =
        new PSSParameterSpec(pssKeyParams.getDigestAlgorithm(),
                pssKeyParams.getMGFAlgorithm(),
                pssKeyParams.getMGFParameters(),
                sigParams.getSaltLength(),
                pssKeyParams.getTrailerField());
    PSSParameters ap = new PSSParameters();
    // skip the JCA overhead
    try {
        ap.engineInit(keyParams2);
        byte[] encoded = ap.engineGetEncoded();
        ap.engineInit(sigParams);
        byte[] encoded2 = ap.engineGetEncoded();
        return Arrays.equals(encoded, encoded2);
    } catch (Exception e) {
        if (DEBUG) {
            e.printStackTrace();
        }
        return false;
    }
}
 
源代码2 项目: openjdk-jdk8u   文件: RSAPSSSignature.java
/**
 * Validate the specified Signature PSS parameters.
 */
private PSSParameterSpec validateSigParams(AlgorithmParameterSpec p)
        throws InvalidAlgorithmParameterException {
    if (p == null) {
        throw new InvalidAlgorithmParameterException
            ("Parameters cannot be null");
    }
    if (!(p instanceof PSSParameterSpec)) {
        throw new InvalidAlgorithmParameterException
            ("parameters must be type PSSParameterSpec");
    }
    // no need to validate again if same as current signature parameters
    PSSParameterSpec params = (PSSParameterSpec) p;
    if (params == this.sigParams) return params;

    RSAKey key = (this.privKey == null? this.pubKey : this.privKey);
    // check against keyParams if set
    if (key != null) {
        if (!isCompatible(key.getParams(), params)) {
            throw new InvalidAlgorithmParameterException
                ("Signature parameters does not match key parameters");
        }
    }
    // now sanity check the parameter values
    if (!(params.getMGFAlgorithm().equalsIgnoreCase("MGF1"))) {
        throw new InvalidAlgorithmParameterException("Only supports MGF1");

    }
    if (params.getTrailerField() != PSSParameterSpec.TRAILER_FIELD_BC) {
        throw new InvalidAlgorithmParameterException
            ("Only supports TrailerFieldBC(1)");

    }
    String digestAlgo = params.getDigestAlgorithm();
    // check key length again
    if (key != null) {
        try {
            int hLen = DIGEST_LENGTHS.get(digestAlgo);
            checkKeyLength(key, hLen, params.getSaltLength());
        } catch (SignatureException e) {
            throw new InvalidAlgorithmParameterException(e);
        }
    }
    return params;
}
 
源代码3 项目: openjdk-jdk8u   文件: PSSParameters.java
/**
 * Returns the encoding of a {@link PSSParameterSpec} object. This method
 * is used in this class and {@link AlgorithmId}.
 *
 * @param spec a {@code PSSParameterSpec} object
 * @return its DER encoding
 * @throws IOException if the name of a MessageDigest or MaskGenAlgorithm
 *          is unsupported
 */
public static byte[] getEncoded(PSSParameterSpec spec) throws IOException {

    AlgorithmParameterSpec mgfSpec = spec.getMGFParameters();
    if (!(mgfSpec instanceof MGF1ParameterSpec)) {
        throw new IOException("Cannot encode " + mgfSpec);
    }

    MGF1ParameterSpec mgf1Spec = (MGF1ParameterSpec)mgfSpec;

    DerOutputStream tmp = new DerOutputStream();
    DerOutputStream tmp2, tmp3;

    // MD
    AlgorithmId mdAlgId;
    try {
        mdAlgId = AlgorithmId.get(spec.getDigestAlgorithm());
    } catch (NoSuchAlgorithmException nsae) {
        throw new IOException("AlgorithmId " + spec.getDigestAlgorithm() +
                " impl not found");
    }
    if (!mdAlgId.getOID().equals(AlgorithmId.SHA_oid)) {
        tmp2 = new DerOutputStream();
        mdAlgId.derEncode(tmp2);
        tmp.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0),
                tmp2);
    }

    // MGF
    AlgorithmId mgfDigestId;
    try {
        mgfDigestId = AlgorithmId.get(mgf1Spec.getDigestAlgorithm());
    } catch (NoSuchAlgorithmException nase) {
        throw new IOException("AlgorithmId " +
                mgf1Spec.getDigestAlgorithm() + " impl not found");
    }

    if (!mgfDigestId.getOID().equals(AlgorithmId.SHA_oid)) {
        tmp2 = new DerOutputStream();
        tmp2.putOID(AlgorithmId.mgf1_oid);
        mgfDigestId.encode(tmp2);
        tmp3 = new DerOutputStream();
        tmp3.write(DerValue.tag_Sequence, tmp2);
        tmp.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 1),
                tmp3);
    }

    // SaltLength
    if (spec.getSaltLength() != 20) {
        tmp2 = new DerOutputStream();
        tmp2.putInteger(spec.getSaltLength());
        tmp.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 2),
                tmp2);
    }

    // TrailerField
    if (spec.getTrailerField() != PSSParameterSpec.TRAILER_FIELD_BC) {
        tmp2 = new DerOutputStream();
        tmp2.putInteger(spec.getTrailerField());
        tmp.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 3),
                tmp2);
    }

    // Put all together under a SEQUENCE tag
    DerOutputStream out = new DerOutputStream();
    out.write(DerValue.tag_Sequence, tmp);
    return out.toByteArray();
}
 
源代码4 项目: Bytecoder   文件: RSAPSSSignature.java
/**
 * Utility method for checking the key PSS parameters against signature
 * PSS parameters.
 * Returns false if any of the digest/MGF algorithms and trailerField
 * values does not match or if the salt length in key parameters is
 * larger than the value in signature parameters.
 */
private static boolean isCompatible(AlgorithmParameterSpec keyParams,
        PSSParameterSpec sigParams) {
    if (keyParams == null) {
        // key with null PSS parameters means no restriction
        return true;
    }
    if (!(keyParams instanceof PSSParameterSpec)) {
        return false;
    }
    // nothing to compare yet, defer the check to when sigParams is set
    if (sigParams == null) {
        return true;
    }
    PSSParameterSpec pssKeyParams = (PSSParameterSpec) keyParams;
    // first check the salt length requirement
    if (pssKeyParams.getSaltLength() > sigParams.getSaltLength()) {
        return false;
    }

    // compare equality of the rest of fields based on DER encoding
    PSSParameterSpec keyParams2 =
        new PSSParameterSpec(pssKeyParams.getDigestAlgorithm(),
                pssKeyParams.getMGFAlgorithm(),
                pssKeyParams.getMGFParameters(),
                sigParams.getSaltLength(),
                pssKeyParams.getTrailerField());
    PSSParameters ap = new PSSParameters();
    // skip the JCA overhead
    try {
        ap.engineInit(keyParams2);
        byte[] encoded = ap.engineGetEncoded();
        ap.engineInit(sigParams);
        byte[] encoded2 = ap.engineGetEncoded();
        return Arrays.equals(encoded, encoded2);
    } catch (Exception e) {
        if (DEBUG) {
            e.printStackTrace();
        }
        return false;
    }
}
 
源代码5 项目: Bytecoder   文件: RSAPSSSignature.java
/**
 * Validate the specified Signature PSS parameters.
 */
private PSSParameterSpec validateSigParams(AlgorithmParameterSpec p)
        throws InvalidAlgorithmParameterException {
    if (p == null) {
        throw new InvalidAlgorithmParameterException
            ("Parameters cannot be null");
    }
    if (!(p instanceof PSSParameterSpec)) {
        throw new InvalidAlgorithmParameterException
            ("parameters must be type PSSParameterSpec");
    }
    // no need to validate again if same as current signature parameters
    PSSParameterSpec params = (PSSParameterSpec) p;
    if (params == this.sigParams) return params;

    RSAKey key = (this.privKey == null? this.pubKey : this.privKey);
    // check against keyParams if set
    if (key != null) {
        if (!isCompatible(key.getParams(), params)) {
            throw new InvalidAlgorithmParameterException
                ("Signature parameters does not match key parameters");
        }
    }
    // now sanity check the parameter values
    if (!(params.getMGFAlgorithm().equalsIgnoreCase("MGF1"))) {
        throw new InvalidAlgorithmParameterException("Only supports MGF1");

    }
    if (params.getTrailerField() != PSSParameterSpec.TRAILER_FIELD_BC) {
        throw new InvalidAlgorithmParameterException
            ("Only supports TrailerFieldBC(1)");

    }
    String digestAlgo = params.getDigestAlgorithm();
    // check key length again
    if (key != null) {
        try {
            int hLen = DIGEST_LENGTHS.get(digestAlgo);
            checkKeyLength(key, hLen, params.getSaltLength());
        } catch (SignatureException e) {
            throw new InvalidAlgorithmParameterException(e);
        }
    }
    return params;
}
 
源代码6 项目: Bytecoder   文件: PSSParameters.java
/**
 * Returns the encoding of a {@link PSSParameterSpec} object. This method
 * is used in this class and {@link AlgorithmId}.
 *
 * @param spec a {@code PSSParameterSpec} object
 * @return its DER encoding
 * @throws IOException if the name of a MessageDigest or MaskGenAlgorithm
 *          is unsupported
 */
public static byte[] getEncoded(PSSParameterSpec spec) throws IOException {

    AlgorithmParameterSpec mgfSpec = spec.getMGFParameters();
    if (!(mgfSpec instanceof MGF1ParameterSpec)) {
        throw new IOException("Cannot encode " + mgfSpec);
    }

    MGF1ParameterSpec mgf1Spec = (MGF1ParameterSpec)mgfSpec;

    DerOutputStream tmp = new DerOutputStream();
    DerOutputStream tmp2, tmp3;

    // MD
    AlgorithmId mdAlgId;
    try {
        mdAlgId = AlgorithmId.get(spec.getDigestAlgorithm());
    } catch (NoSuchAlgorithmException nsae) {
        throw new IOException("AlgorithmId " + spec.getDigestAlgorithm() +
                " impl not found");
    }
    if (!mdAlgId.getOID().equals(AlgorithmId.SHA_oid)) {
        tmp2 = new DerOutputStream();
        mdAlgId.derEncode(tmp2);
        tmp.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0),
                tmp2);
    }

    // MGF
    AlgorithmId mgfDigestId;
    try {
        mgfDigestId = AlgorithmId.get(mgf1Spec.getDigestAlgorithm());
    } catch (NoSuchAlgorithmException nase) {
        throw new IOException("AlgorithmId " +
                mgf1Spec.getDigestAlgorithm() + " impl not found");
    }

    if (!mgfDigestId.getOID().equals(AlgorithmId.SHA_oid)) {
        tmp2 = new DerOutputStream();
        tmp2.putOID(AlgorithmId.mgf1_oid);
        mgfDigestId.encode(tmp2);
        tmp3 = new DerOutputStream();
        tmp3.write(DerValue.tag_Sequence, tmp2);
        tmp.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 1),
                tmp3);
    }

    // SaltLength
    if (spec.getSaltLength() != 20) {
        tmp2 = new DerOutputStream();
        tmp2.putInteger(spec.getSaltLength());
        tmp.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 2),
                tmp2);
    }

    // TrailerField
    if (spec.getTrailerField() != PSSParameterSpec.TRAILER_FIELD_BC) {
        tmp2 = new DerOutputStream();
        tmp2.putInteger(spec.getTrailerField());
        tmp.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 3),
                tmp2);
    }

    // Put all together under a SEQUENCE tag
    DerOutputStream out = new DerOutputStream();
    out.write(DerValue.tag_Sequence, tmp);
    return out.toByteArray();
}
 
源代码7 项目: jdk8u_jdk   文件: RSAPSSSignature.java
/**
 * Utility method for checking the key PSS parameters against signature
 * PSS parameters.
 * Returns false if any of the digest/MGF algorithms and trailerField
 * values does not match or if the salt length in key parameters is
 * larger than the value in signature parameters.
 */
private static boolean isCompatible(AlgorithmParameterSpec keyParams,
        PSSParameterSpec sigParams) {
    if (keyParams == null) {
        // key with null PSS parameters means no restriction
        return true;
    }
    if (!(keyParams instanceof PSSParameterSpec)) {
        return false;
    }
    // nothing to compare yet, defer the check to when sigParams is set
    if (sigParams == null) {
        return true;
    }
    PSSParameterSpec pssKeyParams = (PSSParameterSpec) keyParams;
    // first check the salt length requirement
    if (pssKeyParams.getSaltLength() > sigParams.getSaltLength()) {
        return false;
    }

    // compare equality of the rest of fields based on DER encoding
    PSSParameterSpec keyParams2 =
        new PSSParameterSpec(pssKeyParams.getDigestAlgorithm(),
                pssKeyParams.getMGFAlgorithm(),
                pssKeyParams.getMGFParameters(),
                sigParams.getSaltLength(),
                pssKeyParams.getTrailerField());
    PSSParameters ap = new PSSParameters();
    // skip the JCA overhead
    try {
        ap.engineInit(keyParams2);
        byte[] encoded = ap.engineGetEncoded();
        ap.engineInit(sigParams);
        byte[] encoded2 = ap.engineGetEncoded();
        return Arrays.equals(encoded, encoded2);
    } catch (Exception e) {
        if (DEBUG) {
            e.printStackTrace();
        }
        return false;
    }
}
 
源代码8 项目: jdk8u_jdk   文件: RSAPSSSignature.java
/**
 * Validate the specified Signature PSS parameters.
 */
private PSSParameterSpec validateSigParams(AlgorithmParameterSpec p)
        throws InvalidAlgorithmParameterException {
    if (p == null) {
        throw new InvalidAlgorithmParameterException
            ("Parameters cannot be null");
    }
    if (!(p instanceof PSSParameterSpec)) {
        throw new InvalidAlgorithmParameterException
            ("parameters must be type PSSParameterSpec");
    }
    // no need to validate again if same as current signature parameters
    PSSParameterSpec params = (PSSParameterSpec) p;
    if (params == this.sigParams) return params;

    RSAKey key = (this.privKey == null? this.pubKey : this.privKey);
    // check against keyParams if set
    if (key != null) {
        if (!isCompatible(key.getParams(), params)) {
            throw new InvalidAlgorithmParameterException
                ("Signature parameters does not match key parameters");
        }
    }
    // now sanity check the parameter values
    if (!(params.getMGFAlgorithm().equalsIgnoreCase("MGF1"))) {
        throw new InvalidAlgorithmParameterException("Only supports MGF1");

    }
    if (params.getTrailerField() != PSSParameterSpec.TRAILER_FIELD_BC) {
        throw new InvalidAlgorithmParameterException
            ("Only supports TrailerFieldBC(1)");

    }
    String digestAlgo = params.getDigestAlgorithm();
    // check key length again
    if (key != null) {
        try {
            int hLen = DIGEST_LENGTHS.get(digestAlgo);
            checkKeyLength(key, hLen, params.getSaltLength());
        } catch (SignatureException e) {
            throw new InvalidAlgorithmParameterException(e);
        }
    }
    return params;
}
 
源代码9 项目: jdk8u_jdk   文件: PSSParameters.java
/**
 * Returns the encoding of a {@link PSSParameterSpec} object. This method
 * is used in this class and {@link AlgorithmId}.
 *
 * @param spec a {@code PSSParameterSpec} object
 * @return its DER encoding
 * @throws IOException if the name of a MessageDigest or MaskGenAlgorithm
 *          is unsupported
 */
public static byte[] getEncoded(PSSParameterSpec spec) throws IOException {

    AlgorithmParameterSpec mgfSpec = spec.getMGFParameters();
    if (!(mgfSpec instanceof MGF1ParameterSpec)) {
        throw new IOException("Cannot encode " + mgfSpec);
    }

    MGF1ParameterSpec mgf1Spec = (MGF1ParameterSpec)mgfSpec;

    DerOutputStream tmp = new DerOutputStream();
    DerOutputStream tmp2, tmp3;

    // MD
    AlgorithmId mdAlgId;
    try {
        mdAlgId = AlgorithmId.get(spec.getDigestAlgorithm());
    } catch (NoSuchAlgorithmException nsae) {
        throw new IOException("AlgorithmId " + spec.getDigestAlgorithm() +
                " impl not found");
    }
    if (!mdAlgId.getOID().equals(AlgorithmId.SHA_oid)) {
        tmp2 = new DerOutputStream();
        mdAlgId.derEncode(tmp2);
        tmp.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0),
                tmp2);
    }

    // MGF
    AlgorithmId mgfDigestId;
    try {
        mgfDigestId = AlgorithmId.get(mgf1Spec.getDigestAlgorithm());
    } catch (NoSuchAlgorithmException nase) {
        throw new IOException("AlgorithmId " +
                mgf1Spec.getDigestAlgorithm() + " impl not found");
    }

    if (!mgfDigestId.getOID().equals(AlgorithmId.SHA_oid)) {
        tmp2 = new DerOutputStream();
        tmp2.putOID(AlgorithmId.mgf1_oid);
        mgfDigestId.encode(tmp2);
        tmp3 = new DerOutputStream();
        tmp3.write(DerValue.tag_Sequence, tmp2);
        tmp.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 1),
                tmp3);
    }

    // SaltLength
    if (spec.getSaltLength() != 20) {
        tmp2 = new DerOutputStream();
        tmp2.putInteger(spec.getSaltLength());
        tmp.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 2),
                tmp2);
    }

    // TrailerField
    if (spec.getTrailerField() != PSSParameterSpec.TRAILER_FIELD_BC) {
        tmp2 = new DerOutputStream();
        tmp2.putInteger(spec.getTrailerField());
        tmp.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 3),
                tmp2);
    }

    // Put all together under a SEQUENCE tag
    DerOutputStream out = new DerOutputStream();
    out.write(DerValue.tag_Sequence, tmp);
    return out.toByteArray();
}