Example usage for java.security MessageDigest isEqual

List of usage examples for java.security MessageDigest isEqual

Introduction

In this page you can find the example usage for java.security MessageDigest isEqual.

Prototype

public static boolean isEqual(byte[] digesta, byte[] digestb) 

Source Link

Document

Compares two digests for equality.

Usage

From source file:org.xdi.oxauth.model.util.JwtUtil.java

public static boolean verifySignatureRS256(byte[] signingInput, byte[] sigBytes, RSAPublicKey rsaPublicKey)
        throws IllegalBlockSizeException, IOException, InvalidKeyException, NoSuchProviderException,
        InvalidKeySpecException, NoSuchAlgorithmException, NoSuchPaddingException, BadPaddingException {
    RSAPublicKeySpec rsaPublicKeySpec = new RSAPublicKeySpec(rsaPublicKey.getModulus(),
            rsaPublicKey.getPublicExponent());

    KeyFactory keyFactory = KeyFactory.getInstance("RSA", "BC");
    PublicKey publicKey = keyFactory.generatePublic(rsaPublicKeySpec);

    Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding", "BC");
    cipher.init(Cipher.DECRYPT_MODE, publicKey);

    byte[] decSig = cipher.doFinal(sigBytes);
    ASN1InputStream aIn = new ASN1InputStream(decSig);
    try {/* www. j  av  a2s.  c o m*/
        ASN1Sequence seq = (ASN1Sequence) aIn.readObject();

        MessageDigest hash = MessageDigest.getInstance("SHA-256", "BC");
        hash.update(signingInput);

        ASN1OctetString sigHash = (ASN1OctetString) seq.getObjectAt(1);
        return MessageDigest.isEqual(hash.digest(), sigHash.getOctets());
    } finally {
        IOUtils.closeQuietly(aIn);
    }
}

From source file:android.framework.util.jar.JarVerifier.java

private boolean verify(Attributes attributes, String entry, byte[] data, int start, int end,
        boolean ignoreSecondEndline, boolean ignorable) {
    String algorithms = attributes.getValue("Digest-Algorithms");
    if (algorithms == null) {
        algorithms = "SHA SHA1";
    }/*from  ww  w  .  jav  a 2  s  .c  om*/
    StringTokenizer tokens = new StringTokenizer(algorithms);
    while (tokens.hasMoreTokens()) {
        String algorithm = tokens.nextToken();
        String hash = attributes.getValue(algorithm + entry);
        if (hash == null) {
            continue;
        }

        MessageDigest md;
        try {
            md = MessageDigest.getInstance(algorithm);
        } catch (NoSuchAlgorithmException e) {
            continue;
        }
        if (ignoreSecondEndline && data[end - 1] == '\n' && data[end - 2] == '\n') {
            md.update(data, start, end - 1 - start);
        } else {
            md.update(data, start, end - start);
        }
        byte[] b = md.digest();
        byte[] hashBytes = hash.getBytes(Charsets.ISO_8859_1);
        return MessageDigest.isEqual(b, Base64.decode(hashBytes, Base64.DEFAULT));
    }
    return ignorable;
}

From source file:com.eucalyptus.crypto.DefaultCryptoProvider.java

@Override
public boolean verifyLinuxSaltedPassword(String clear, String hashed) {
    return MessageDigest.isEqual( // constant time comparison
            hashed.getBytes(StandardCharsets.UTF_8),
            Crypt.crypt(clear.getBytes(StandardCharsets.UTF_8), hashed).getBytes(StandardCharsets.UTF_8));
}

From source file:org.xdi.oxauth.model.util.JwtUtil.java

public static boolean verifySignatureRS256(byte[] signingInput, byte[] sigBytes, X509Certificate cert)
        throws NoSuchProviderException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException,
        IllegalBlockSizeException, BadPaddingException, IOException {
    PublicKey publicKey = cert.getPublicKey();

    Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding", "BC");
    cipher.init(Cipher.DECRYPT_MODE, publicKey);

    byte[] decSig = cipher.doFinal(sigBytes);
    ASN1InputStream aIn = new ASN1InputStream(decSig);
    try {/*from   w w w . j a  v  a 2 s .  c o  m*/
        ASN1Sequence seq = (ASN1Sequence) aIn.readObject();

        MessageDigest hash = MessageDigest.getInstance("SHA-256", "BC");
        hash.update(signingInput);

        ASN1OctetString sigHash = (ASN1OctetString) seq.getObjectAt(1);
        return MessageDigest.isEqual(hash.digest(), sigHash.getOctets());
    } finally {
        IOUtils.closeQuietly(aIn);
    }
}

From source file:org.xdi.oxauth.model.util.JwtUtil.java

public static boolean verifySignatureRS384(byte[] signingInput, byte[] sigBytes, RSAPublicKey rsaPublicKey)
        throws IllegalBlockSizeException, IOException, InvalidKeyException, NoSuchProviderException,
        InvalidKeySpecException, NoSuchAlgorithmException, NoSuchPaddingException, BadPaddingException {
    RSAPublicKeySpec rsaPublicKeySpec = new RSAPublicKeySpec(rsaPublicKey.getModulus(),
            rsaPublicKey.getPublicExponent());

    KeyFactory keyFactory = KeyFactory.getInstance("RSA", "BC");
    PublicKey publicKey = keyFactory.generatePublic(rsaPublicKeySpec);

    Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding", "BC");
    cipher.init(Cipher.DECRYPT_MODE, publicKey);

    byte[] decSig = cipher.doFinal(sigBytes);
    ASN1InputStream aIn = new ASN1InputStream(decSig);
    try {//ww  w  . j  a  v a  2s  .  c  om
        ASN1Sequence seq = (ASN1Sequence) aIn.readObject();

        MessageDigest hash = MessageDigest.getInstance("SHA-384", "BC");
        hash.update(signingInput);

        ASN1OctetString sigHash = (ASN1OctetString) seq.getObjectAt(1);
        return MessageDigest.isEqual(hash.digest(), sigHash.getOctets());
    } finally {
        IOUtils.closeQuietly(aIn);
    }
}

From source file:org.xdi.oxauth.model.util.JwtUtil.java

public static boolean verifySignatureRS384(byte[] signingInput, byte[] sigBytes, X509Certificate cert)
        throws NoSuchProviderException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException,
        IllegalBlockSizeException, BadPaddingException, IOException {
    PublicKey publicKey = cert.getPublicKey();

    Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding", "BC");
    cipher.init(Cipher.DECRYPT_MODE, publicKey);

    byte[] decSig = cipher.doFinal(sigBytes);
    ASN1InputStream aIn = new ASN1InputStream(decSig);
    try {// w w w.  j  a  v a2  s .co m
        ASN1Sequence seq = (ASN1Sequence) aIn.readObject();

        MessageDigest hash = MessageDigest.getInstance("SHA-384", "BC");
        hash.update(signingInput);

        ASN1OctetString sigHash = (ASN1OctetString) seq.getObjectAt(1);
        return MessageDigest.isEqual(hash.digest(), sigHash.getOctets());
    } finally {
        IOUtils.closeQuietly(aIn);
    }
}

From source file:org.apache.xml.security.stax.impl.processor.input.AbstractSignatureReferenceVerifyInputProcessor.java

protected void compareDigest(byte[] calculatedDigest, ReferenceType referenceType) throws XMLSecurityException {
    if (log.isDebugEnabled()) {
        log.debug("Calculated Digest: " + new String(Base64.encodeBase64(calculatedDigest)));
        log.debug("Stored Digest: " + new String(Base64.encodeBase64(referenceType.getDigestValue())));
    }//  ww w  .  jav  a 2  s.co m

    if (!MessageDigest.isEqual(referenceType.getDigestValue(), calculatedDigest)) {
        throw new XMLSecurityException("signature.Verification.InvalidDigestOrReference",
                new Object[] { referenceType.getURI() });
    }
}

From source file:org.xdi.oxauth.model.util.JwtUtil.java

public static boolean verifySignatureRS512(byte[] signingInput, byte[] sigBytes, RSAPublicKey rsaPublicKey)
        throws IllegalBlockSizeException, IOException, InvalidKeyException, NoSuchProviderException,
        InvalidKeySpecException, NoSuchAlgorithmException, NoSuchPaddingException, BadPaddingException {
    RSAPublicKeySpec rsaPublicKeySpec = new RSAPublicKeySpec(rsaPublicKey.getModulus(),
            rsaPublicKey.getPublicExponent());

    KeyFactory keyFactory = KeyFactory.getInstance("RSA", "BC");
    PublicKey publicKey = keyFactory.generatePublic(rsaPublicKeySpec);

    Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding", "BC");
    cipher.init(Cipher.DECRYPT_MODE, publicKey);

    byte[] decSig = cipher.doFinal(sigBytes);
    ASN1InputStream aIn = new ASN1InputStream(decSig);
    try {/*  w ww.j a v  a2  s  .c o  m*/
        ASN1Sequence seq = (ASN1Sequence) aIn.readObject();

        MessageDigest hash = MessageDigest.getInstance("SHA-512", "BC");
        hash.update(signingInput);

        ASN1OctetString sigHash = (ASN1OctetString) seq.getObjectAt(1);
        return MessageDigest.isEqual(hash.digest(), sigHash.getOctets());
    } finally {
        IOUtils.closeQuietly(aIn);
    }
}

From source file:org.cryptomator.crypto.aes256.Aes256Cryptor.java

@Override
public boolean authenticateContent(SeekableByteChannel encryptedFile) throws IOException {
    // init mac:/*  ww w. j av  a 2s  .  c  o  m*/
    final Mac calculatedMac = this.hmacSha256(hMacMasterKey);

    // read stored mac:
    encryptedFile.position(16);
    final ByteBuffer storedMac = ByteBuffer.allocate(calculatedMac.getMacLength());
    final int numMacBytesRead = encryptedFile.read(storedMac);

    // check validity of header:
    if (numMacBytesRead != calculatedMac.getMacLength()) {
        throw new IOException("Failed to read file header.");
    }

    // read all encrypted data and calculate mac:
    encryptedFile.position(64);
    final InputStream in = new SeekableByteChannelInputStream(encryptedFile);
    final InputStream macIn = new MacInputStream(in, calculatedMac);
    IOUtils.copyLarge(macIn, new NullOutputStream());

    // compare (in constant time):
    return MessageDigest.isEqual(storedMac.array(), calculatedMac.doFinal());
}