1e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompackage org.bouncycastle.cert.selector;
2e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
3e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport java.io.IOException;
4e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
5e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Encoding;
6e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
7e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.crypto.Digest;
8e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.crypto.digests.SHA1Digest;
9e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
10e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromclass MSOutlookKeyIdCalculator
11e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{
12e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    static byte[] calculateKeyId(SubjectPublicKeyInfo info)
13e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
14e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        Digest dig = new SHA1Digest();    // TODO: include definition of SHA-1 here
15e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        byte[] hash = new byte[dig.getDigestSize()];
16e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        byte[] spkiEnc = new byte[0];
17e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        try
18e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
19e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            spkiEnc = info.getEncoded(ASN1Encoding.DER);
20e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
21e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        catch (IOException e)
22e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
23e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new byte[0];
24e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
25e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
26e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        // try the outlook 2010 calculation
27e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        dig.update(spkiEnc, 0, spkiEnc.length);
28e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
29e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        dig.doFinal(hash, 0);
30e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
31e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return hash;
32e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
33e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom}
34