Search in sources :

Example 1 with Mac

use of org.bouncycastle.crypto.Mac in project robovm by robovm.

the class CCMBlockCipher method calculateMac.

private int calculateMac(byte[] data, int dataOff, int dataLen, byte[] macBlock) {
    Mac cMac = new CBCBlockCipherMac(cipher, macSize * 8);
    cMac.init(keyParam);
    //
    // build b0
    //
    byte[] b0 = new byte[16];
    if (hasAssociatedText()) {
        b0[0] |= 0x40;
    }
    b0[0] |= (((cMac.getMacSize() - 2) / 2) & 0x7) << 3;
    b0[0] |= ((15 - nonce.length) - 1) & 0x7;
    System.arraycopy(nonce, 0, b0, 1, nonce.length);
    int q = dataLen;
    int count = 1;
    while (q > 0) {
        b0[b0.length - count] = (byte) (q & 0xff);
        q >>>= 8;
        count++;
    }
    cMac.update(b0, 0, b0.length);
    //
    if (hasAssociatedText()) {
        int extra;
        int textLength = getAssociatedTextLength();
        if (textLength < ((1 << 16) - (1 << 8))) {
            cMac.update((byte) (textLength >> 8));
            cMac.update((byte) textLength);
            extra = 2;
        } else // can't go any higher than 2^32
        {
            cMac.update((byte) 0xff);
            cMac.update((byte) 0xfe);
            cMac.update((byte) (textLength >> 24));
            cMac.update((byte) (textLength >> 16));
            cMac.update((byte) (textLength >> 8));
            cMac.update((byte) textLength);
            extra = 6;
        }
        if (initialAssociatedText != null) {
            cMac.update(initialAssociatedText, 0, initialAssociatedText.length);
        }
        if (associatedText.size() > 0) {
            byte[] tmp = associatedText.toByteArray();
            cMac.update(tmp, 0, tmp.length);
        }
        extra = (extra + textLength) % 16;
        if (extra != 0) {
            for (int i = extra; i != 16; i++) {
                cMac.update((byte) 0x00);
            }
        }
    }
    //
    // add the text
    //
    cMac.update(data, dataOff, dataLen);
    return cMac.doFinal(macBlock, 0);
}
Also used : CBCBlockCipherMac(org.bouncycastle.crypto.macs.CBCBlockCipherMac) CBCBlockCipherMac(org.bouncycastle.crypto.macs.CBCBlockCipherMac) Mac(org.bouncycastle.crypto.Mac)

Example 2 with Mac

use of org.bouncycastle.crypto.Mac in project google-authenticator by google.

the class AuthenticatorScreen method computePin.

/**
   * Computes the one-time PIN given the secret key.
   * 
   * @param secret
   *          the secret key
   * @return the PIN
   * @throws GeneralSecurityException
   * @throws DecodingException
   *           If the key string is improperly encoded.
   */
public static String computePin(String secret, Long counter) {
    try {
        final byte[] keyBytes = Base32String.decode(secret);
        Mac mac = new HMac(new SHA1Digest());
        mac.init(new KeyParameter(keyBytes));
        PasscodeGenerator pcg = new PasscodeGenerator(mac);
        if (counter == null) {
            // time-based totp
            return pcg.generateTimeoutCode();
        } else {
            // counter-based hotp
            return pcg.generateResponseCode(counter.longValue());
        }
    } catch (RuntimeException e) {
        return "General security exception";
    } catch (DecodingException e) {
        return "Decoding exception";
    }
}
Also used : HMac(org.bouncycastle.crypto.macs.HMac) SHA1Digest(org.bouncycastle.crypto.digests.SHA1Digest) KeyParameter(org.bouncycastle.crypto.params.KeyParameter) DecodingException(com.google.authenticator.blackberry.Base32String.DecodingException) HMac(org.bouncycastle.crypto.macs.HMac) Mac(org.bouncycastle.crypto.Mac)

Example 3 with Mac

use of org.bouncycastle.crypto.Mac in project XobotOS by xamarin.

the class CCMBlockCipher method calculateMac.

private int calculateMac(byte[] data, int dataOff, int dataLen, byte[] macBlock) {
    Mac cMac = new CBCBlockCipherMac(cipher, macSize * 8);
    cMac.init(keyParam);
    //
    // build b0
    //
    byte[] b0 = new byte[16];
    if (hasAssociatedText()) {
        b0[0] |= 0x40;
    }
    b0[0] |= (((cMac.getMacSize() - 2) / 2) & 0x7) << 3;
    b0[0] |= ((15 - nonce.length) - 1) & 0x7;
    System.arraycopy(nonce, 0, b0, 1, nonce.length);
    int q = dataLen;
    int count = 1;
    while (q > 0) {
        b0[b0.length - count] = (byte) (q & 0xff);
        q >>>= 8;
        count++;
    }
    cMac.update(b0, 0, b0.length);
    //
    if (hasAssociatedText()) {
        int extra;
        if (associatedText.length < ((1 << 16) - (1 << 8))) {
            cMac.update((byte) (associatedText.length >> 8));
            cMac.update((byte) associatedText.length);
            extra = 2;
        } else // can't go any higher than 2^32
        {
            cMac.update((byte) 0xff);
            cMac.update((byte) 0xfe);
            cMac.update((byte) (associatedText.length >> 24));
            cMac.update((byte) (associatedText.length >> 16));
            cMac.update((byte) (associatedText.length >> 8));
            cMac.update((byte) associatedText.length);
            extra = 6;
        }
        cMac.update(associatedText, 0, associatedText.length);
        extra = (extra + associatedText.length) % 16;
        if (extra != 0) {
            for (int i = 0; i != 16 - extra; i++) {
                cMac.update((byte) 0x00);
            }
        }
    }
    //
    // add the text
    //
    cMac.update(data, dataOff, dataLen);
    return cMac.doFinal(macBlock, 0);
}
Also used : CBCBlockCipherMac(org.bouncycastle.crypto.macs.CBCBlockCipherMac) CBCBlockCipherMac(org.bouncycastle.crypto.macs.CBCBlockCipherMac) Mac(org.bouncycastle.crypto.Mac)

Example 4 with Mac

use of org.bouncycastle.crypto.Mac in project google-authenticator by google.

the class CheckCodeScreen method getCheckCode.

static String getCheckCode(String secret) throws Base32String.DecodingException {
    final byte[] keyBytes = Base32String.decode(secret);
    Mac mac = new HMac(new SHA1Digest());
    mac.init(new KeyParameter(keyBytes));
    PasscodeGenerator pcg = new PasscodeGenerator(mac);
    return pcg.generateResponseCode(0L);
}
Also used : HMac(org.bouncycastle.crypto.macs.HMac) SHA1Digest(org.bouncycastle.crypto.digests.SHA1Digest) KeyParameter(org.bouncycastle.crypto.params.KeyParameter) HMac(org.bouncycastle.crypto.macs.HMac) Mac(org.bouncycastle.crypto.Mac)

Aggregations

Mac (org.bouncycastle.crypto.Mac)4 SHA1Digest (org.bouncycastle.crypto.digests.SHA1Digest)2 CBCBlockCipherMac (org.bouncycastle.crypto.macs.CBCBlockCipherMac)2 HMac (org.bouncycastle.crypto.macs.HMac)2 KeyParameter (org.bouncycastle.crypto.params.KeyParameter)2 DecodingException (com.google.authenticator.blackberry.Base32String.DecodingException)1