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